gitlab-ci-local 4.35.0 → 4.36.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/package.json CHANGED
@@ -3,8 +3,9 @@
3
3
  "description": "Tired of pushing to test your .gitlab-ci.yml?",
4
4
  "main": "src/index.js",
5
5
  "bin": "src/index.js",
6
- "version": "4.35.0",
6
+ "version": "4.36.0",
7
7
  "scripts": {
8
+ "prepublishOnly": "npm run check-all && chmod +x src/index.js",
8
9
  "pkg-linux": "pkg src/index.js --public -t node18-linux-x64 -o bin/linux/gitlab-ci-local && chmod +x bin/linux/gitlab-ci-local && gzip -c bin/linux/gitlab-ci-local > bin/linux.gz",
9
10
  "pkg-macos": "pkg src/index.js --public -t node18-macos-x64 -o bin/macos/gitlab-ci-local && gzip -c bin/macos/gitlab-ci-local > bin/macos.gz",
10
11
  "pkg-win": "pkg src/index.js --public -t node18-win-x64 -o bin/win/gitlab-ci-local && gzip -c bin/win/gitlab-ci-local.exe > bin/win.gz",
@@ -40,25 +41,25 @@
40
41
  "@types/base64url": "2.0.3",
41
42
  "@types/camelcase": "5.2.0",
42
43
  "@types/checksum": "0.1.33",
43
- "@types/deep-extend": "0.4.32",
44
+ "@types/deep-extend": "0.6.0",
44
45
  "@types/fs-extra": "9.0.13",
45
- "@types/jest": "29.2.2",
46
+ "@types/jest": "29.2.3",
46
47
  "@types/jest-when": "3.5.2",
47
48
  "@types/js-yaml": "4.0.5",
48
49
  "@types/pretty-hrtime": "1.0.1",
49
50
  "@types/source-map-support": "0.5.6",
50
- "@types/yargs": "17.0.13",
51
- "@typescript-eslint/eslint-plugin": "5.42.0",
52
- "@typescript-eslint/parser": "5.42.0",
51
+ "@types/yargs": "17.0.14",
52
+ "@typescript-eslint/eslint-plugin": "5.44.0",
53
+ "@typescript-eslint/parser": "5.44.0",
53
54
  "axios-mock-adapter": "1.21.2",
54
55
  "depcheck": "1.4.3",
55
- "eslint": "8.26.0",
56
- "jest": "29.2.2",
56
+ "eslint": "8.28.0",
57
+ "jest": "29.3.1",
57
58
  "jest-when": "3.5.2",
58
59
  "pkg": "5.8.0",
59
60
  "ts-jest": "29.0.3",
60
61
  "ts-node": "10.9.1",
61
- "typescript": "4.8.4"
62
+ "typescript": "4.9.3"
62
63
  },
63
64
  "engines": {
64
65
  "node": ">=16.10.0"
package/src/executor.js CHANGED
@@ -30,6 +30,9 @@ class Executor {
30
30
  if (job.when === "on_success" && Executor.isPastFailed(jobsToWaitFor)) {
31
31
  continue;
32
32
  }
33
+ if (job.when === "manual" && Executor.isPastFailed(jobsToWaitFor)) {
34
+ continue;
35
+ }
33
36
  if (job.when === "on_failure" && !Executor.isPastFailed(jobsToWaitFor)) {
34
37
  continue;
35
38
  }
@@ -104,4 +107,4 @@ class Executor {
104
107
  }
105
108
  }
106
109
  exports.Executor = Executor;
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFFMUIsdUNBQWlDO0FBRWpDLDZDQUF1QztBQUV2QyxNQUFhLFFBQVE7SUFFakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUUsSUFBVSxFQUFFLElBQXdCLEVBQUUsTUFBeUIsRUFBRSxpQkFBd0I7UUFDM0csSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUV6QixHQUFHO1lBQ0MsZUFBZSxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDL0MsV0FBVyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsTUFBTSxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEYsUUFBUSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUNyQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFFLElBQXdCLEVBQUUsTUFBeUIsRUFBRSxpQkFBaUMsRUFBRSxPQUFpQjtRQUNoSSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFFM0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQU0saUJBQWlCLENBQUMsQ0FB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bXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge0pvYn0gZnJvbSBcIi4vam9iXCI7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSBcIi4vYXNzZXJ0c1wiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2XCI7XG5pbXBvcnQge0V4aXRFcnJvcn0gZnJvbSBcIi4vZXhpdC1lcnJvclwiO1xuXG5leHBvcnQgY2xhc3MgRXhlY3V0b3Ige1xuXG4gICAgc3RhdGljIGFzeW5jIHJ1bkxvb3AgKGFyZ3Y6IEFyZ3YsIGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPiwgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXSwgcG90ZW50aWFsU3RhcnRlcnM6IEpvYltdKSB7XG4gICAgICAgIGxldCBydW5uaW5nSm9icyA9IFtdO1xuICAgICAgICBsZXQgc3RhcnRDYW5kaWRhdGVzID0gW107XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgc3RhcnRDYW5kaWRhdGVzID0gRXhlY3V0b3IuZ2V0U3RhcnRDYW5kaWRhdGVzKGpvYnMsIHN0YWdlcywgcG90ZW50aWFsU3RhcnRlcnMsIGFyZ3YubWFudWFsKTtcbiAgICAgICAgICAgIHN0YXJ0Q2FuZGlkYXRlcy5mb3JFYWNoKGogPT4gai5zdGFydCgpLnRoZW4oKSk7XG4gICAgICAgICAgICBydW5uaW5nSm9icyA9IEV4ZWN1dG9yLmdldFJ1bm5pbmcoam9icyk7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4geyBzZXRUaW1lb3V0KCgpID0+IHsgcmVzb2x2ZSgpOyB9LCA1KTsgfSk7XG4gICAgICAgIH0gd2hpbGUgKHJ1bm5pbmdKb2JzLmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRTdGFydENhbmRpZGF0ZXMgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPiwgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXSwgcG90ZW50aWFsU3RhcnRlcnM6IHJlYWRvbmx5IEpvYltdLCBtYW51YWxzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBzdGFydENhbmRpZGF0ZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBbLi4ubmV3IFNldDxKb2I+KHBvdGVudGlhbFN0YXJ0ZXJzKV0pIHtcbiAgICAgICAgICAgIGlmIChqb2Iuc3RhcnRlZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGpvYnNUb1dhaXRGb3IgPSBFeGVjdXRvci5nZXRQYXN0VG9XYWl0Rm9yKGpvYnMsIHN0YWdlcywgam9iLCBtYW51YWxzKTtcbiAgICAgICAgICAgIGlmIChFeGVjdXRvci5pc05vdEZpbmlzaGVkKGpvYnNUb1dhaXRGb3IpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoam9iLndoZW4gPT09IFwib25fc3VjY2Vzc1wiICYmIEV4ZWN1dG9yLmlzUGFzdEZhaWxlZChqb2JzVG9XYWl0Rm9yKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGpvYi53aGVuID09PSBcIm9uX2ZhaWx1cmVcIiAmJiAhRXhlY3V0b3IuaXNQYXN0RmFpbGVkKGpvYnNUb1dhaXRGb3IpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0Q2FuZGlkYXRlcy5wdXNoKGpvYik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXJ0Q2FuZGlkYXRlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNQYXN0RmFpbGVkIChqb2JzVG9XYWl0Rm9yOiBSZWFkb25seUFycmF5PEpvYj4pIHtcbiAgICAgICAgY29uc3QgZmFpbEpvYnMgPSBqb2JzVG9XYWl0Rm9yLmZpbHRlcihqID0+IHtcbiAgICAgICAgICAgIGlmIChqLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoai5wcmVTY3JpcHRzRXhpdENvZGUgPyBqLnByZVNjcmlwdHNFeGl0Q29kZSA6IDApID4gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWlsSm9icy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc05vdEZpbmlzaGVkIChqb2JzVG9XYWl0Rm9yOiBSZWFkb25seUFycmF5PEpvYj4pIHtcbiAgICAgICAgY29uc3Qgbm90RmluaXNoZWRKb2JzID0gam9ic1RvV2FpdEZvci5maWx0ZXIoaiA9PiAhai5maW5pc2hlZCk7XG4gICAgICAgIHJldHVybiBub3RGaW5pc2hlZEpvYnMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UnVubmluZyAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+KSB7XG4gICAgICAgIHJldHVybiBqb2JzLmZpbHRlcihqID0+IGoucnVubmluZyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEZhaWxlZCAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+KSB7XG4gICAgICAgIHJldHVybiBqb2JzLmZpbHRlcihqID0+IGouZmluaXNoZWQgJiYgIWouYWxsb3dGYWlsdXJlICYmIChqLnByZVNjcmlwdHNFeGl0Q29kZSA/PyAwKSA+IDApO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQYXN0VG9XYWl0Rm9yIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10sIGpvYjogSm9iLCBtYW51YWxzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBqb2JzVG9XYWl0Rm9yU2V0ID0gbmV3IFNldDxKb2I+KCk7XG4gICAgICAgIGxldCB3YWl0Rm9yTG9vcEFycmF5OiBKb2JbXSA9IFtqb2JdO1xuXG4gICAgICAgIHdoaWxlICh3YWl0Rm9yTG9vcEFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxvb3BKb2IgPSB3YWl0Rm9yTG9vcEFycmF5LnBvcCgpO1xuICAgICAgICAgICAgYXNzZXJ0KGxvb3BKb2IgIT0gbnVsbCwgXCJKb2Igbm90IGZvdW5kIGluIGdldFBhc3RUb1dhaXRGb3IsIHNob3VsZCBiZSBpbXBvc3NpYmxlIVwiKTtcbiAgICAgICAgICAgIGlmIChsb29wSm9iLm5lZWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVlZGVkVG9XYWl0Rm9yID0gdGhpcy5nZXROZWVkZWRUb1dhaXRGb3Ioam9icywgbWFudWFscywgbG9vcEpvYik7XG4gICAgICAgICAgICAgICAgd2FpdEZvckxvb3BBcnJheS5wdXNoKC4uLm5lZWRlZFRvV2FpdEZvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzVG9XYWl0Rm9yID0gdGhpcy5nZXRQcmV2aW91c1RvV2FpdEZvcihqb2JzLCBzdGFnZXMsIGxvb3BKb2IpO1xuICAgICAgICAgICAgICAgIHdhaXRGb3JMb29wQXJyYXkgPSB3YWl0Rm9yTG9vcEFycmF5LmNvbmNhdChwcmV2aW91c1RvV2FpdEZvcik7XG4gICAgICAgICAgICAgICAgd2FpdEZvckxvb3BBcnJheSA9IHdhaXRGb3JMb29wQXJyYXkuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm5ldmVyXCIpO1xuICAgICAgICAgICAgICAgIHdhaXRGb3JMb29wQXJyYXkgPSB3YWl0Rm9yTG9vcEFycmF5LmZpbHRlcihqID0+IGoud2hlbiAhPT0gXCJtYW51YWxcIiB8fCBtYW51YWxzLmluY2x1ZGVzKGoubmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2FpdEZvckxvb3BBcnJheS5mb3JFYWNoKGogPT4gam9ic1RvV2FpdEZvclNldC5hZGQoaikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uam9ic1RvV2FpdEZvclNldF07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE5lZWRlZFRvV2FpdEZvciAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBtYW51YWxzOiBzdHJpbmdbXSwgam9iOiBKb2IpIHtcbiAgICAgICAgY29uc3QgdG9XYWl0Rm9yID0gW107XG4gICAgICAgIGFzc2VydChqb2IubmVlZHMgIT0gbnVsbCwgY2hhbGtgJHtqb2IubmFtZX0ubmVlZHMgY2Fubm90IGJlIG51bGwgaW4gZ2V0TmVlZGVkVG9XYWl0Rm9yYCk7XG4gICAgICAgIGZvciAoY29uc3QgbmVlZCBvZiBqb2IubmVlZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VKb2JzID0gam9icy5maWx0ZXIoaiA9PiBqLmJhc2VOYW1lID09PSBuZWVkLmpvYik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGogb2YgYmFzZUpvYnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoai53aGVuID09PSBcIm5ldmVyXCIgJiYgIW5lZWQub3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4aXRFcnJvcihjaGFsa2B7Ymx1ZUJyaWdodCAke2oubmFtZX19IGlzIHdoZW46bmV2ZXIsIGJ1dCBpdHMgbmVlZGVkIGJ5IHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoai53aGVuID09PSBcIm1hbnVhbFwiICYmICFtYW51YWxzLmluY2x1ZGVzKGoubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4aXRFcnJvcihjaGFsa2B7Ymx1ZUJyaWdodCAke2oubmFtZX19IGlzIHdoZW46bWFudWFsLCBpdHMgbmVlZGVkIGJ5IHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fSwgYW5kIG5vdCBzcGVjaWZpZWQgaW4gLS1tYW51YWxgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG9XYWl0Rm9yLnB1c2goaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvV2FpdEZvcjtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UHJldmlvdXNUb1dhaXRGb3IgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPiwgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXSwgam9iOiBKb2IpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNUb1dhaXRGb3I6IEpvYltdID0gW107XG4gICAgICAgIGNvbnN0IHN0YWdlSW5kZXggPSBzdGFnZXMuaW5kZXhPZihqb2Iuc3RhZ2UpO1xuICAgICAgICBjb25zdCBwYXN0U3RhZ2VzID0gc3RhZ2VzLnNsaWNlKDAsIHN0YWdlSW5kZXgpO1xuICAgICAgICBwYXN0U3RhZ2VzLmZvckVhY2goKHBhc3RTdGFnZSkgPT4ge1xuICAgICAgICAgICAgcHJldmlvdXNUb1dhaXRGb3IucHVzaCguLi5bLi4uam9icy52YWx1ZXMoKV0uZmlsdGVyKGogPT4gai5zdGFnZSA9PT0gcGFzdFN0YWdlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHJldmlvdXNUb1dhaXRGb3I7XG4gICAgfVxufVxuIl19
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFFMUIsdUNBQWlDO0FBRWpDLDZDQUF1QztBQUV2QyxNQUFhLFFBQVE7SUFFakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUUsSUFBVSxFQUFFLElBQXdCLEVBQUUsTUFBeUIsRUFBRSxpQkFBd0I7UUFDM0csSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUV6QixHQUFHO1lBQ0MsZUFBZSxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDL0MsV0FBVyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsTUFBTSxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEYsUUFBUSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUNyQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFFLElBQXdCLEVBQUUsTUFBeUIsRUFBRSxpQkFBaUMsRUFBRSxPQUFpQjtRQUNoSSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFFM0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQU0saUJBQWlCLENBQUMsQ0FB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QUNyRixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8saUJBQWlCLENBQUM7SUFDN0IsQ0FBQztDQUNKO0FBOUdELDRCQThHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2JcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9hc3NlcnRzXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3ZcIjtcbmltcG9ydCB7RXhpdEVycm9yfSBmcm9tIFwiLi9leGl0LWVycm9yXCI7XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRvciB7XG5cbiAgICBzdGF0aWMgYXN5bmMgcnVuTG9vcCAoYXJndjogQXJndiwgam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBzdGFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBwb3RlbnRpYWxTdGFydGVyczogSm9iW10pIHtcbiAgICAgICAgbGV0IHJ1bm5pbmdKb2JzID0gW107XG4gICAgICAgIGxldCBzdGFydENhbmRpZGF0ZXMgPSBbXTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBzdGFydENhbmRpZGF0ZXMgPSBFeGVjdXRvci5nZXRTdGFydENhbmRpZGF0ZXMoam9icywgc3RhZ2VzLCBwb3RlbnRpYWxTdGFydGVycywgYXJndi5tYW51YWwpO1xuICAgICAgICAgICAgc3RhcnRDYW5kaWRhdGVzLmZvckVhY2goaiA9PiBqLnN0YXJ0KCkudGhlbigpKTtcbiAgICAgICAgICAgIHJ1bm5pbmdKb2JzID0gRXhlY3V0b3IuZ2V0UnVubmluZyhqb2JzKTtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7IHNldFRpbWVvdXQoKCkgPT4geyByZXNvbHZlKCk7IH0sIDUpOyB9KTtcbiAgICAgICAgfSB3aGlsZSAocnVubmluZ0pvYnMubGVuZ3RoID4gMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFN0YXJ0Q2FuZGlkYXRlcyAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBzdGFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBwb3RlbnRpYWxTdGFydGVyczogcmVhZG9ubHkgSm9iW10sIG1hbnVhbHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2FuZGlkYXRlcyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIFsuLi5uZXcgU2V0PEpvYj4ocG90ZW50aWFsU3RhcnRlcnMpXSkge1xuICAgICAgICAgICAgaWYgKGpvYi5zdGFydGVkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3Qgam9ic1RvV2FpdEZvciA9IEV4ZWN1dG9yLmdldFBhc3RUb1dhaXRGb3Ioam9icywgc3RhZ2VzLCBqb2IsIG1hbnVhbHMpO1xuICAgICAgICAgICAgaWYgKEV4ZWN1dG9yLmlzTm90RmluaXNoZWQoam9ic1RvV2FpdEZvcikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqb2Iud2hlbiA9PT0gXCJvbl9zdWNjZXNzXCIgJiYgRXhlY3V0b3IuaXNQYXN0RmFpbGVkKGpvYnNUb1dhaXRGb3IpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoam9iLndoZW4gPT09IFwibWFudWFsXCIgJiYgRXhlY3V0b3IuaXNQYXN0RmFpbGVkKGpvYnNUb1dhaXRGb3IpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoam9iLndoZW4gPT09IFwib25fZmFpbHVyZVwiICYmICFFeGVjdXRvci5pc1Bhc3RGYWlsZWQoam9ic1RvV2FpdEZvcikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhcnRDYW5kaWRhdGVzLnB1c2goam9iKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhcnRDYW5kaWRhdGVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc1Bhc3RGYWlsZWQgKGpvYnNUb1dhaXRGb3I6IFJlYWRvbmx5QXJyYXk8Sm9iPikge1xuICAgICAgICBjb25zdCBmYWlsSm9icyA9IGpvYnNUb1dhaXRGb3IuZmlsdGVyKGogPT4ge1xuICAgICAgICAgICAgaWYgKGouYWxsb3dGYWlsdXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChqLnByZVNjcmlwdHNFeGl0Q29kZSA/IGoucHJlU2NyaXB0c0V4aXRDb2RlIDogMCkgPiAwO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhaWxKb2JzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzTm90RmluaXNoZWQgKGpvYnNUb1dhaXRGb3I6IFJlYWRvbmx5QXJyYXk8Sm9iPikge1xuICAgICAgICBjb25zdCBub3RGaW5pc2hlZEpvYnMgPSBqb2JzVG9XYWl0Rm9yLmZpbHRlcihqID0+ICFqLmZpbmlzaGVkKTtcbiAgICAgICAgcmV0dXJuIG5vdEZpbmlzaGVkSm9icy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSdW5uaW5nIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4pIHtcbiAgICAgICAgcmV0dXJuIGpvYnMuZmlsdGVyKGogPT4gai5ydW5uaW5nKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RmFpbGVkIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4pIHtcbiAgICAgICAgcmV0dXJuIGpvYnMuZmlsdGVyKGogPT4gai5maW5pc2hlZCAmJiAhai5hbGxvd0ZhaWx1cmUgJiYgKGoucHJlU2NyaXB0c0V4aXRDb2RlID8/IDApID4gMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhc3RUb1dhaXRGb3IgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPiwgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXSwgam9iOiBKb2IsIG1hbnVhbHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IGpvYnNUb1dhaXRGb3JTZXQgPSBuZXcgU2V0PEpvYj4oKTtcbiAgICAgICAgbGV0IHdhaXRGb3JMb29wQXJyYXk6IEpvYltdID0gW2pvYl07XG5cbiAgICAgICAgd2hpbGUgKHdhaXRGb3JMb29wQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbG9vcEpvYiA9IHdhaXRGb3JMb29wQXJyYXkucG9wKCk7XG4gICAgICAgICAgICBhc3NlcnQobG9vcEpvYiAhPSBudWxsLCBcIkpvYiBub3QgZm91bmQgaW4gZ2V0UGFzdFRvV2FpdEZvciwgc2hvdWxkIGJlIGltcG9zc2libGUhXCIpO1xuICAgICAgICAgICAgaWYgKGxvb3BKb2IubmVlZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZWVkZWRUb1dhaXRGb3IgPSB0aGlzLmdldE5lZWRlZFRvV2FpdEZvcihqb2JzLCBtYW51YWxzLCBsb29wSm9iKTtcbiAgICAgICAgICAgICAgICB3YWl0Rm9yTG9vcEFycmF5LnB1c2goLi4ubmVlZGVkVG9XYWl0Rm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNUb1dhaXRGb3IgPSB0aGlzLmdldFByZXZpb3VzVG9XYWl0Rm9yKGpvYnMsIHN0YWdlcywgbG9vcEpvYik7XG4gICAgICAgICAgICAgICAgd2FpdEZvckxvb3BBcnJheSA9IHdhaXRGb3JMb29wQXJyYXkuY29uY2F0KHByZXZpb3VzVG9XYWl0Rm9yKTtcbiAgICAgICAgICAgICAgICB3YWl0Rm9yTG9vcEFycmF5ID0gd2FpdEZvckxvb3BBcnJheS5maWx0ZXIoaiA9PiBqLndoZW4gIT09IFwibmV2ZXJcIik7XG4gICAgICAgICAgICAgICAgd2FpdEZvckxvb3BBcnJheSA9IHdhaXRGb3JMb29wQXJyYXkuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm1hbnVhbFwiIHx8IG1hbnVhbHMuaW5jbHVkZXMoai5uYW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YWl0Rm9yTG9vcEFycmF5LmZvckVhY2goaiA9PiBqb2JzVG9XYWl0Rm9yU2V0LmFkZChqKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5qb2JzVG9XYWl0Rm9yU2V0XTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmVlZGVkVG9XYWl0Rm9yIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIG1hbnVhbHM6IHN0cmluZ1tdLCBqb2I6IEpvYikge1xuICAgICAgICBjb25zdCB0b1dhaXRGb3IgPSBbXTtcbiAgICAgICAgYXNzZXJ0KGpvYi5uZWVkcyAhPSBudWxsLCBjaGFsa2Ake2pvYi5uYW1lfS5uZWVkcyBjYW5ub3QgYmUgbnVsbCBpbiBnZXROZWVkZWRUb1dhaXRGb3JgKTtcbiAgICAgICAgZm9yIChjb25zdCBuZWVkIG9mIGpvYi5uZWVkcykge1xuICAgICAgICAgICAgY29uc3QgYmFzZUpvYnMgPSBqb2JzLmZpbHRlcihqID0+IGouYmFzZU5hbWUgPT09IG5lZWQuam9iKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaiBvZiBiYXNlSm9icykge1xuICAgICAgICAgICAgICAgIGlmIChqLndoZW4gPT09IFwibmV2ZXJcIiAmJiAhbmVlZC5vcHRpb25hbCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGNoYWxrYHtibHVlQnJpZ2h0ICR7ai5uYW1lfX0gaXMgd2hlbjpuZXZlciwgYnV0IGl0cyBuZWVkZWQgYnkge2JsdWVCcmlnaHQgJHtqb2IubmFtZX19YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChqLndoZW4gPT09IFwibWFudWFsXCIgJiYgIW1hbnVhbHMuaW5jbHVkZXMoai5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGNoYWxrYHtibHVlQnJpZ2h0ICR7ai5uYW1lfX0gaXMgd2hlbjptYW51YWwsIGl0cyBuZWVkZWQgYnkge2JsdWVCcmlnaHQgJHtqb2IubmFtZX19LCBhbmQgbm90IHNwZWNpZmllZCBpbiAtLW1hbnVhbGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b1dhaXRGb3IucHVzaChqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9XYWl0Rm9yO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQcmV2aW91c1RvV2FpdEZvciAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBzdGFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBqb2I6IEpvYikge1xuICAgICAgICBjb25zdCBwcmV2aW91c1RvV2FpdEZvcjogSm9iW10gPSBbXTtcbiAgICAgICAgY29uc3Qgc3RhZ2VJbmRleCA9IHN0YWdlcy5pbmRleE9mKGpvYi5zdGFnZSk7XG4gICAgICAgIGNvbnN0IHBhc3RTdGFnZXMgPSBzdGFnZXMuc2xpY2UoMCwgc3RhZ2VJbmRleCk7XG4gICAgICAgIHBhc3RTdGFnZXMuZm9yRWFjaCgocGFzdFN0YWdlKSA9PiB7XG4gICAgICAgICAgICBwcmV2aW91c1RvV2FpdEZvci5wdXNoKC4uLlsuLi5qb2JzLnZhbHVlcygpXS5maWx0ZXIoaiA9PiBqLnN0YWdlID09PSBwYXN0U3RhZ2UpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcmV2aW91c1RvV2FpdEZvcjtcbiAgICB9XG59XG4iXX0=
package/src/index.js CHANGED
File without changes
package/src/job.js CHANGED
@@ -112,12 +112,13 @@ class Job {
112
112
  predefinedVariables["CI_PIPELINE_ID"] = `${this.pipelineIid + 1000}`;
113
113
  predefinedVariables["CI_PIPELINE_IID"] = `${this.pipelineIid}`;
114
114
  predefinedVariables["CI_JOB_NAME"] = `${this.name}`;
115
+ predefinedVariables["CI_JOB_NAME_SLUG"] = `${this.name.replace(/[^a-z\d]+/ig, "-").replace(/^-/, "").slice(0, 63).replace(/-$/, "").toLowerCase()}`;
115
116
  predefinedVariables["CI_JOB_STAGE"] = `${this.stage}`;
116
117
  predefinedVariables["CI_PROJECT_DIR"] = ciProjectDir;
117
118
  predefinedVariables["CI_JOB_URL"] = `https://${gitData.remote.host}/${gitData.remote.group}/${gitData.remote.project}/-/jobs/${this.jobId}`; // Changes on rerun.
118
119
  predefinedVariables["CI_PIPELINE_URL"] = `https://${gitData.remote.host}/${gitData.remote.group}/${gitData.remote.project}/pipelines/${this.pipelineIid}`;
119
120
  predefinedVariables["CI_ENVIRONMENT_NAME"] = this.environment?.name ?? "";
120
- predefinedVariables["CI_ENVIRONMENT_SLUG"] = this.environment?.name?.replace(/\/|\s/g, "-").toLowerCase() ?? "";
121
+ predefinedVariables["CI_ENVIRONMENT_SLUG"] = this.environment?.name?.replace(/[^a-z\d]+/ig, "-").replace(/^-/, "").slice(0, 23).replace(/-$/, "").toLowerCase() ?? "";
121
122
  predefinedVariables["CI_ENVIRONMENT_URL"] = this.environment?.url ?? "";
122
123
  predefinedVariables["CI_NODE_INDEX"] = `${opt.nodeIndex}`;
123
124
  predefinedVariables["CI_NODE_TOTAL"] = `${opt.nodesTotal}`;
@@ -287,12 +288,29 @@ class Job {
287
288
  if (this.imageName) {
288
289
  const buildVolumeName = this.buildVolumeName;
289
290
  const tmpVolumeName = this.tmpVolumeName;
291
+ const fileVariablesDir = this.fileVariablesDir;
290
292
  const volumePromises = [];
291
293
  volumePromises.push(utils_1.Utils.spawn(["docker", "volume", "create", `${buildVolumeName}`], argv.cwd));
292
294
  volumePromises.push(utils_1.Utils.spawn(["docker", "volume", "create", `${tmpVolumeName}`], argv.cwd));
293
295
  this._containerVolumeNames.push(buildVolumeName);
294
296
  this._containerVolumeNames.push(tmpVolumeName);
295
297
  await Promise.all(volumePromises);
298
+ const time = process.hrtime();
299
+ this.refreshLongRunningSilentTimeout(writeStreams);
300
+ const { stdout: containerId } = await utils_1.Utils.spawn([
301
+ "docker", "create", `--volume=${buildVolumeName}:/gcl-builds`, `--volume=${tmpVolumeName}:${this.fileVariablesDir}`, "docker.io/firecow/gitlab-ci-local-util",
302
+ "bash", "-c", "chown 0:0 -R /gcl-builds/ && chmod a+rw -R /gcl-builds/ && chmod a+rw -R /tmp/",
303
+ ], argv.cwd);
304
+ this._containersToClean.push(containerId);
305
+ if (await fs.pathExists(fileVariablesDir)) {
306
+ await utils_1.Utils.spawn(["docker", "cp", `${fileVariablesDir}/.`, `${containerId}:${fileVariablesDir}`], argv.cwd);
307
+ this.refreshLongRunningSilentTimeout(writeStreams);
308
+ }
309
+ await utils_1.Utils.spawn(["docker", "cp", `${argv.stateDir}/builds/.docker/.`, `${containerId}:/gcl-builds`], argv.cwd);
310
+ await utils_1.Utils.spawn(["docker", "start", containerId], argv.cwd);
311
+ await utils_1.Utils.spawn(["docker", "rm", containerId], argv.cwd);
312
+ const endTime = process.hrtime(time);
313
+ writeStreams.stdout((0, chalk_1.default) `${this.chalkJobName} {magentaBright copied to docker volumes} in {magenta ${(0, pretty_hrtime_1.default)(endTime)}}\n`);
296
314
  }
297
315
  if (this.services?.length) {
298
316
  await this.createDockerNetwork(`gitlab-ci-local-${this.jobId}`);
@@ -424,8 +442,6 @@ class Job {
424
442
  const buildVolumeName = this.buildVolumeName;
425
443
  const tmpVolumeName = this.tmpVolumeName;
426
444
  const writeStreams = this.writeStreams;
427
- let time;
428
- let endTime;
429
445
  if (scripts.length === 0 || scripts[0] == null) {
430
446
  return 0;
431
447
  }
@@ -460,7 +476,7 @@ class Job {
460
476
  dockerCmd += `--network gitlab-ci-local-${this.jobId} `;
461
477
  }
462
478
  dockerCmd += `--volume ${buildVolumeName}:/gcl-builds `;
463
- dockerCmd += `--volume ${tmpVolumeName}:/tmp/ `;
479
+ dockerCmd += `--volume ${tmpVolumeName}:${this.fileVariablesDir} `;
464
480
  dockerCmd += "--workdir /gcl-builds ";
465
481
  for (const volume of this.argv.volume) {
466
482
  dockerCmd += `--volume ${volume} `;
@@ -507,28 +523,9 @@ class Job {
507
523
  const { stdout: containerId } = await utils_1.Utils.bash(dockerCmd, cwd, this.expandedVariables);
508
524
  this._containerId = containerId;
509
525
  this._containersToClean.push(this._containerId);
510
- time = process.hrtime();
511
- // Copy source files into container.
512
- await utils_1.Utils.spawn(["docker", "cp", `${stateDir}/builds/.docker/.`, `${this._containerId}:/gcl-builds`], cwd);
513
- this.refreshLongRunningSilentTimeout(writeStreams);
514
- // Copy file variables into container.
515
- const fileVariablesDir = this.fileVariablesDir;
516
- if (await fs.pathExists(fileVariablesDir)) {
517
- await utils_1.Utils.spawn(["docker", "cp", `${fileVariablesDir}`, `${this._containerId}:${fileVariablesDir}/`], cwd);
518
- this.refreshLongRunningSilentTimeout(writeStreams);
519
- }
520
- endTime = process.hrtime(time);
521
- writeStreams.stdout((0, chalk_1.default) `${this.chalkJobName} {magentaBright copied to container} in {magenta ${(0, pretty_hrtime_1.default)(endTime)}}\n`);
522
526
  }
523
527
  await this.copyCacheIn(writeStreams);
524
528
  await this.copyArtifactsIn(writeStreams);
525
- if (this.imageName) {
526
- // Files in docker-executor build folder must be root owned.
527
- await utils_1.Utils.spawn([
528
- "docker", "run", "--rm", "-v", `${tmpVolumeName}:/tmp/`, "-v", `${buildVolumeName}:/app/`, "firecow/gitlab-ci-local-util",
529
- "bash", "-c", "chown 0:0 -R /app/ && chmod a+rw -R /app/ && chmod a+rw -R /tmp/",
530
- ]);
531
- }
532
529
  let cmd = "set -eo pipefail\n";
533
530
  cmd += "exec 0< /dev/null\n";
534
531
  if (!this.imageName && this.argv.shellIsolation) {
@@ -577,6 +574,8 @@ class Job {
577
574
  });
578
575
  if (exitCode == 0) {
579
576
  await this.copyCacheOut(writeStreams);
577
+ }
578
+ if (exitCode == 0 || this.artifacts?.when === "always") {
580
579
  await this.copyArtifactsOut(writeStreams);
581
580
  }
582
581
  return exitCode;
@@ -587,7 +586,7 @@ class Job {
587
586
  await utils_1.Utils.spawn(["docker", "image", "inspect", imageToPull]);
588
587
  }
589
588
  catch (e) {
590
- if (e.stderr?.includes(`No such image: ${imageToPull}`)) {
589
+ if (e.stderr?.includes("No such image") || e.stderr?.includes("failed to find image")) {
591
590
  await utils_1.Utils.spawn(["docker", "pull", imageToPull]);
592
591
  const endTime = process.hrtime(time);
593
592
  writeStreams.stdout((0, chalk_1.default) `${this.chalkJobName} {magentaBright pulled} ${imageToPull} in {magenta ${(0, pretty_hrtime_1.default)(endTime)}}\n`);
@@ -768,7 +767,7 @@ class Job {
768
767
  const cwd = this.argv.cwd;
769
768
  await fs.mkdirp(`${cwd}/${stateDir}/${type}`);
770
769
  if (this.imageName) {
771
- const { stdout: containerId } = await utils_1.Utils.bash(`docker create -i ${dockerCmdExtras.join(" ")} -v ${buildVolumeName}:/gcl-builds/ -w /gcl-builds firecow/gitlab-ci-local-util bash -c "${cmd}"`, cwd);
770
+ const { stdout: containerId } = await utils_1.Utils.bash(`docker create -i ${dockerCmdExtras.join(" ")} -v ${buildVolumeName}:/gcl-builds/ -w /gcl-builds docker.io/firecow/gitlab-ci-local-util bash -c "${cmd}"`, cwd);
772
771
  this._containersToClean.push(containerId);
773
772
  await utils_1.Utils.bash(`docker start ${containerId} --attach`);
774
773
  await utils_1.Utils.bash(`docker cp ${containerId}:/${type}/. ${stateDir}/${type}/.`, cwd);
@@ -844,7 +843,8 @@ class Job {
844
843
  dockerCmd += "--entrypoint '/gcl-entry' ";
845
844
  }
846
845
  }
847
- dockerCmd += `--volume ${this.tmpVolumeName}:/tmp/ `;
846
+ dockerCmd += `--volume ${this.buildVolumeName}:/gcl-builds `;
847
+ dockerCmd += `--volume ${this.tmpVolumeName}:${this.fileVariablesDir} `;
848
848
  dockerCmd += `${serviceName} `;
849
849
  (service.getCommand() ?? []).forEach((e) => dockerCmd += `"${e}" `);
850
850
  const time = process.hrtime();
@@ -854,12 +854,6 @@ class Job {
854
854
  if (serviceEntrypoint && serviceEntrypoint[0] != "") {
855
855
  await utils_1.Utils.spawn(["docker", "cp", serviceEntrypointFile, `${containerId}:/gcl-entry`]);
856
856
  }
857
- // Copy file variables into service container.
858
- const fileVariablesDir = this.fileVariablesDir;
859
- if (await fs.pathExists(fileVariablesDir)) {
860
- await utils_1.Utils.spawn(["docker", "cp", `${fileVariablesDir}`, `${containerId}:${fileVariablesDir}/`], cwd);
861
- this.refreshLongRunningSilentTimeout(writeStreams);
862
- }
863
857
  await utils_1.Utils.spawn(["docker", "start", `${containerId}`]);
864
858
  const endTime = process.hrtime(time);
865
859
  writeStreams.stdout((0, chalk_1.default) `${this.chalkJobName} {magentaBright started service image: ${serviceName} with aliases: ${Array.from(aliases).join(", ")}} in {magenta ${(0, pretty_hrtime_1.default)(endTime)}}\n`);
@@ -898,4 +892,4 @@ class Job {
898
892
  }
899
893
  }
900
894
  exports.Job = Job;
901
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0VBQXlDO0FBQ3pDLDZDQUF1QztBQUN2QyxtQ0FBOEI7QUFJOUIsdUNBQWlDO0FBRWpDLG1DQUE4QjtBQUU5QixrREFBMEI7QUFtQjFCLE1BQWEsR0FBRztJQUVaLE1BQU0sQ0FBVSxlQUFlLEdBQUc7UUFDOUIsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxVQUFVO1FBQ3JELFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVM7UUFDN0MsY0FBYyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVTtLQUNuRCxDQUFDO0lBRU8sSUFBSSxDQUFPO0lBQ1gsSUFBSSxDQUFTO0lBQ2IsUUFBUSxDQUFTO0lBQ2pCLFlBQVksQ0FBa0I7SUFDOUIsV0FBVyxDQUFzQztJQUNqRCxLQUFLLENBQVM7SUFDZCxLQUFLLENBTVY7SUFFSyxZQUFZLENBQVU7SUFDdEIsSUFBSSxDQUFTO0lBQ2IsTUFBTSxDQUFXO0lBQ2pCLFdBQVcsQ0FBUztJQUNwQixPQUFPLENBQVU7SUFFbEIsa0JBQWtCLEdBQTRCLEVBQUUsQ0FBQztJQUNqRCxtQkFBbUIsR0FBa0IsSUFBSSxDQUFDO0lBQzFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztJQUMxQixnQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO0lBQ3ZDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsaUJBQWlCLEdBQWtCLElBQUksQ0FBQztJQUN4QyxxQkFBcUIsR0FBYSxFQUFFLENBQUM7SUFDckMseUJBQXlCLEdBQW1CLENBQUMsQ0FBUSxDQUFDO0lBQ3RELFVBQVUsR0FBbUQsSUFBSSxDQUFDO0lBQ2xFLFdBQVcsR0FB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LE1BQU0sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekosVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQzdDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsWUFBWSw4QkFBOEIsV0FBVyx3QkFBd0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUM7Z0JBQzFJLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsWUFBWSxvQkFBb0Isc0JBQXNCLE1BQU0sQ0FBQyxDQUFDO1lBQ25HLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDUDtRQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsWUFBWSxnQ0FBZ0MsV0FBVyxpQ0FBaUMsSUFBQSx1QkFBWSxFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxSixDQUFDOztBQXArQkwsa0JBcStCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCAqIGFzIGRvdGVudiBmcm9tIFwiZG90ZW52XCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBwcmV0dHlIcnRpbWUgZnJvbSBcInByZXR0eS1ocnRpbWVcIjtcbmltcG9ydCB7RXhpdEVycm9yfSBmcm9tIFwiLi9leGl0LWVycm9yXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7U2VydmljZX0gZnJvbSBcIi4vc2VydmljZVwiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gXCIuL2Fzc2VydHNcIjtcbmltcG9ydCB7Q2FjaGVFbnRyeX0gZnJvbSBcIi4vY2FjaGUtZW50cnlcIjtcbmltcG9ydCB7TXV0ZXh9IGZyb20gXCIuL211dGV4XCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3ZcIjtcbmltcG9ydCBleGVjYSBmcm9tIFwiZXhlY2FcIjtcbmltcG9ydCB7Q0lDRFZhcmlhYmxlfSBmcm9tIFwiLi92YXJpYWJsZXMtZnJvbS1maWxlc1wiO1xuXG5pbnRlcmZhY2UgSm9iT3B0aW9ucyB7XG4gICAgYXJndjogQXJndjtcbiAgICB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICBkYXRhOiBhbnk7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGJhc2VOYW1lOiBzdHJpbmc7XG4gICAgcGlwZWxpbmVJaWQ6IG51bWJlcjtcbiAgICBnaXREYXRhOiBHaXREYXRhO1xuICAgIGdsb2JhbFZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIHZhcmlhYmxlc0Zyb21GaWxlczoge1tuYW1lOiBzdHJpbmddOiBDSUNEVmFyaWFibGV9O1xuICAgIHByZWRlZmluZWRWYXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogYW55fTtcbiAgICBtYXRyaXhWYXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHwgbnVsbDtcbiAgICBub2RlSW5kZXg6IG51bWJlciB8IG51bGw7XG4gICAgbm9kZXNUb3RhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgSm9iIHtcblxuICAgIHN0YXRpYyByZWFkb25seSBpbGxlZ2FsSm9iTmFtZXMgPSBbXG4gICAgICAgIFwiaW5jbHVkZVwiLCBcImxvY2FsX2NvbmZpZ3VyYXRpb25cIiwgXCJpbWFnZVwiLCBcInNlcnZpY2VzXCIsXG4gICAgICAgIFwic3RhZ2VzXCIsIFwidHlwZXNcIiwgXCJiZWZvcmVfc2NyaXB0XCIsIFwiZGVmYXVsdFwiLFxuICAgICAgICBcImFmdGVyX3NjcmlwdFwiLCBcInZhcmlhYmxlc1wiLCBcImNhY2hlXCIsIFwid29ya2Zsb3dcIixcbiAgICBdO1xuXG4gICAgcmVhZG9ubHkgYXJndjogQXJndjtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmFzZU5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBkZXBlbmRlbmNpZXM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgICByZWFkb25seSBlbnZpcm9ubWVudD86IHtuYW1lOiBzdHJpbmc7IHVybDogc3RyaW5nIHwgbnVsbH07XG4gICAgcmVhZG9ubHkgam9iSWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBydWxlcz86IHtcbiAgICAgICAgaWY6IHN0cmluZztcbiAgICAgICAgd2hlbjogc3RyaW5nO1xuICAgICAgICBleGlzdHM6IHN0cmluZ1tdO1xuICAgICAgICBhbGxvd19mYWlsdXJlOiBib29sZWFuO1xuICAgICAgICB2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIH1bXTtcblxuICAgIHJlYWRvbmx5IGFsbG93RmFpbHVyZTogYm9vbGVhbjtcbiAgICByZWFkb25seSB3aGVuOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZXhpc3RzOiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGdpdERhdGE6IEdpdERhdGE7XG5cbiAgICBwcml2YXRlIF9leHBhbmRlZFZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICBwcml2YXRlIF9wcmVzY3JpcHRzRXhpdENvZGU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2FmdGVyU2NyaXB0c0V4aXRDb2RlID0gMDtcbiAgICBwcml2YXRlIF9jb3ZlcmFnZVBlcmNlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX3J1bm5pbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9jb250YWluZXJJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfc2VydmljZU5ldHdvcmtJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfY29udGFpbmVyVm9sdW1lTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCA9IC0xIGFzIGFueTtcbiAgICBwcml2YXRlIF9wcm9kdWNlcnM6IHtuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbH1bXSB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2pvYk5hbWVQYWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBfY29udGFpbmVyc1RvQ2xlYW46IHN0cmluZ1tdID0gW107XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGpvYkRhdGE6IGFueTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zO1xuXG4gICAgY29uc3RydWN0b3IgKG9wdDogSm9iT3B0aW9ucykge1xuICAgICAgICBjb25zdCBqb2JEYXRhID0gb3B0LmRhdGE7XG4gICAgICAgIGNvbnN0IGdpdERhdGEgPSBvcHQuZ2l0RGF0YTtcbiAgICAgICAgY29uc3QgZ2xvYmFsVmFyaWFibGVzID0gb3B0Lmdsb2JhbFZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRnJvbUZpbGVzID0gb3B0LnZhcmlhYmxlc0Zyb21GaWxlcztcbiAgICAgICAgY29uc3QgYXJndiA9IG9wdC5hcmd2O1xuICAgICAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBhcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBhcmd2VmFyaWFibGVzID0gYXJndi52YXJpYWJsZTtcbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IG9wdC5wcmVkZWZpbmVkVmFyaWFibGVzO1xuXG4gICAgICAgIHRoaXMuYXJndiA9IGFyZ3Y7XG4gICAgICAgIHRoaXMud3JpdGVTdHJlYW1zID0gb3B0LndyaXRlU3RyZWFtcztcbiAgICAgICAgdGhpcy5naXREYXRhID0gb3B0LmdpdERhdGE7XG4gICAgICAgIHRoaXMubmFtZSA9IG9wdC5uYW1lO1xuICAgICAgICB0aGlzLmJhc2VOYW1lID0gb3B0LmJhc2VOYW1lO1xuICAgICAgICB0aGlzLmpvYklkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XG4gICAgICAgIHRoaXMuam9iRGF0YSA9IG9wdC5kYXRhO1xuICAgICAgICB0aGlzLnBpcGVsaW5lSWlkID0gb3B0LnBpcGVsaW5lSWlkO1xuXG4gICAgICAgIHRoaXMud2hlbiA9IGpvYkRhdGEud2hlbiB8fCBcIm9uX3N1Y2Nlc3NcIjtcbiAgICAgICAgdGhpcy5leGlzdHMgPSBqb2JEYXRhLmV4aXN0cyB8fCBbXTtcbiAgICAgICAgdGhpcy5hbGxvd0ZhaWx1cmUgPSBqb2JEYXRhLmFsbG93X2ZhaWx1cmUgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gam9iRGF0YS5kZXBlbmRlbmNpZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5ydWxlcyA9IGpvYkRhdGEucnVsZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHR5cGVvZiBqb2JEYXRhLmVudmlyb25tZW50ID09PSBcInN0cmluZ1wiID8ge25hbWU6IGpvYkRhdGEuZW52aXJvbm1lbnR9IDogam9iRGF0YS5lbnZpcm9ubWVudDtcblxuICAgICAgICBjb25zdCBtYXRyaXhWYXJpYWJsZXMgPSBvcHQubWF0cml4VmFyaWFibGVzID8/IHt9O1xuICAgICAgICAvLyBNZXJnZSBhbmQgZXhwYW5kIHZhcmlhYmxlcyByZWN1cnNpdmVcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRWYXJpYWJsZXMgPSBVdGlscy5leHBhbmRSZWN1cnNpdmUoey4uLmdsb2JhbFZhcmlhYmxlcyB8fCB7fSwgLi4uam9iRGF0YS52YXJpYWJsZXMgfHwge30sIC4uLm1hdHJpeFZhcmlhYmxlcywgLi4ucHJlZGVmaW5lZFZhcmlhYmxlcywgLi4uYXJndlZhcmlhYmxlc30pO1xuXG4gICAgICAgIC8vIEV4cGFuZCBlbnZpcm9ubWVudFxuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC5uYW1lID0gVXRpbHMuZXhwYW5kVGV4dCh0aGlzLmVudmlyb25tZW50Lm5hbWUsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC51cmwgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuZW52aXJvbm1lbnQudXJsLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBqb2Igc3BlY2lmaWMgcHJlZGVmaW5lZCB2YXJpYWJsZXNcbiAgICAgICAgbGV0IGNpUHJvamVjdERpciA9IGAke2N3ZH1gO1xuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGNpUHJvamVjdERpciA9IFwiL2djbC1idWlsZHNcIjtcbiAgICAgICAgfSBlbHNlIGlmIChhcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBjaVByb2plY3REaXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2J1aWxkcy8ke3RoaXMuc2FmZUpvYk5hbWV9YDtcbiAgICAgICAgfVxuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX0lEXCJdID0gYCR7dGhpcy5qb2JJZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUElQRUxJTkVfSURcIl0gPSBgJHt0aGlzLnBpcGVsaW5lSWlkICsgMTAwMH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUElQRUxJTkVfSUlEXCJdID0gYCR7dGhpcy5waXBlbGluZUlpZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX05BTUVcIl0gPSBgJHt0aGlzLm5hbWV9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9TVEFHRVwiXSA9IGAke3RoaXMuc3RhZ2V9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfRElSXCJdID0gY2lQcm9qZWN0RGlyO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX1VSTFwiXSA9IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fS8tL2pvYnMvJHt0aGlzLmpvYklkfWA7IC8vIENoYW5nZXMgb24gcmVydW4uXG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9QSVBFTElORV9VUkxcIl0gPSBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vcGlwZWxpbmVzLyR7dGhpcy5waXBlbGluZUlpZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfRU5WSVJPTk1FTlRfTkFNRVwiXSA9IHRoaXMuZW52aXJvbm1lbnQ/Lm5hbWUgPz8gXCJcIjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0VOVklST05NRU5UX1NMVUdcIl0gPSB0aGlzLmVudmlyb25tZW50Py5uYW1lPy5yZXBsYWNlKC9cXC98XFxzL2csIFwiLVwiKS50b0xvd2VyQ2FzZSgpID8/IFwiXCI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9FTlZJUk9OTUVOVF9VUkxcIl0gPSB0aGlzLmVudmlyb25tZW50Py51cmwgPz8gXCJcIjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX05PREVfSU5ERVhcIl0gPSBgJHtvcHQubm9kZUluZGV4fWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9OT0RFX1RPVEFMXCJdID0gYCR7b3B0Lm5vZGVzVG90YWx9YDtcblxuICAgICAgICAvLyBGaW5kIGVudmlyb25tZW50IG1hdGNoZWQgdmFyaWFibGVzXG4gICAgICAgIGNvbnN0IGVudk1hdGNoZWRWYXJpYWJsZXMgPSBVdGlscy5maW5kRW52TWF0Y2hlZFZhcmlhYmxlcyh2YXJpYWJsZXNGcm9tRmlsZXMsIHRoaXMuZmlsZVZhcmlhYmxlc0RpciwgdGhpcy5lbnZpcm9ubWVudCk7XG5cbiAgICAgICAgLy8gTWVyZ2UgYW5kIGV4cGFuZCBhZnRlciBmaW5kaW5nIGVudiBtYXRjaGVkIHZhcmlhYmxlc1xuICAgICAgICB0aGlzLl9leHBhbmRlZFZhcmlhYmxlcyA9IFV0aWxzLmV4cGFuZFJlY3Vyc2l2ZSh7Li4uZ2xvYmFsVmFyaWFibGVzIHx8IHt9LCAuLi5qb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSwgLi4ubWF0cml4VmFyaWFibGVzLCAuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5lbnZNYXRjaGVkVmFyaWFibGVzLCAuLi5hcmd2VmFyaWFibGVzfSk7XG5cbiAgICAgICAgLy8gU2V0IHt3aGVuLCBhbGxvd0ZhaWx1cmV9IGJhc2VkIG9uIHJ1bGVzIHJlc3VsdFxuICAgICAgICBpZiAodGhpcy5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgcnVsZVJlc3VsdCA9IFV0aWxzLmdldFJ1bGVzUmVzdWx0KHtjd2QsIHJ1bGVzOiB0aGlzLnJ1bGVzLCB2YXJpYWJsZXM6IHRoaXMuZXhwYW5kZWRWYXJpYWJsZXN9KTtcbiAgICAgICAgICAgIHRoaXMud2hlbiA9IHJ1bGVSZXN1bHQud2hlbjtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dGYWlsdXJlID0gcnVsZVJlc3VsdC5hbGxvd0ZhaWx1cmU7XG4gICAgICAgICAgICB0aGlzLl9leHBhbmRlZFZhcmlhYmxlcyA9IFV0aWxzLmV4cGFuZFJlY3Vyc2l2ZSh7Li4uZ2xvYmFsVmFyaWFibGVzIHx8IHt9LCAuLi5qb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSwgLi4ucnVsZVJlc3VsdC52YXJpYWJsZXMsIC4uLm1hdHJpeFZhcmlhYmxlcywgLi4ucHJlZGVmaW5lZFZhcmlhYmxlcywgLi4uZW52TWF0Y2hlZFZhcmlhYmxlcywgLi4uYXJndlZhcmlhYmxlc30pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IENJX1JFR0lTVFJZIHZhcmlhYmxlc1xuICAgICAgICB0aGlzLl9leHBhbmRlZFZhcmlhYmxlc1tcIkNJX1JFR0lTVFJZXCJdID0gdGhpcy5fZXhwYW5kZWRWYXJpYWJsZXNbXCJDSV9SRUdJU1RSWVwiXSA/PyBgbG9jYWwtcmVnaXN0cnkuJHt0aGlzLmdpdERhdGEucmVtb3RlLmhvc3R9YDtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRWYXJpYWJsZXNbXCJDSV9SRUdJU1RSWV9JTUFHRVwiXSA9IGAke3RoaXMuX2V4cGFuZGVkVmFyaWFibGVzW1wiQ0lfUkVHSVNUUllcIl19LyR7dGhpcy5fZXhwYW5kZWRWYXJpYWJsZXNbXCJDSV9QUk9KRUNUX1BBVEhcIl19YDtcblxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGl2ZSAmJiAodGhpcy53aGVuICE9PSBcIm1hbnVhbFwiIHx8IHRoaXMuaW1hZ2VOYW1lICE9PSBudWxsKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4aXRFcnJvcihgJHt0aGlzLmNoYWxrSm9iTmFtZX0gQEludGVyYWN0aXZlIGRlY29yYXRvciBjYW5ub3QgaGF2ZSBpbWFnZTogYW5kIG11c3QgYmUgd2hlbjptYW51YWxgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluamVjdFNTSEFnZW50ICYmIHRoaXMuaW1hZ2VOYW1lID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGAke3RoaXMuY2hhbGtKb2JOYW1lfSBASW5qZWN0U1NIQWdlbnQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGltYWdlOmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lICYmIGFyZ3YubW91bnRDYWNoZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICBjLnBhdGhzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFV0aWxzLmV4cGFuZFRleHQocCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiKlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4aXRFcnJvcihgJHt0aGlzLm5hbWV9IGNhbm5vdCBoYXZlICogaW4gY2FjaGUgcGF0aHMsIHdoZW4gLS1tb3VudC1jYWNoZSBpcyBlbmFibGVkYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBleHBhbmRlZFZhcmlhYmxlcyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRlZFZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBnZXQgYXJ0aWZhY3RzVG9Tb3VyY2UgKCkge1xuICAgICAgICBpZiAodGhpcy5qb2JEYXRhW1wiYXJ0aWZhY3RzVG9Tb3VyY2VcIl0gIT0gbnVsbCkgcmV0dXJuIHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1RvU291cmNlXCJdO1xuICAgICAgICByZXR1cm4gdGhpcy5hcmd2LmFydGlmYWN0c1RvU291cmNlO1xuICAgIH1cblxuICAgIGdldCBjaGFsa0pvYk5hbWUgKCkge1xuICAgICAgICByZXR1cm4gY2hhbGtge2JsdWVCcmlnaHQgJHt0aGlzLm5hbWUucGFkRW5kKHRoaXMuam9iTmFtZVBhZCl9fWA7XG4gICAgfVxuXG4gICAgZ2V0IHNhZmVKb2JOYW1lICgpIHtcbiAgICAgICAgcmV0dXJuIFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcodGhpcy5uYW1lKTtcbiAgICB9XG5cbiAgICBnZXQgbmVlZHMgKCk6IHtqb2I6IHN0cmluZzsgYXJ0aWZhY3RzOiBib29sZWFuOyBvcHRpb25hbDogYm9vbGVhbn1bXSB8IG51bGwge1xuICAgICAgICBjb25zdCBuZWVkcyA9IHRoaXMuam9iRGF0YVtcIm5lZWRzXCJdO1xuICAgICAgICBpZiAoIW5lZWRzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbGlzdDoge2pvYjogc3RyaW5nOyBhcnRpZmFjdHM6IGJvb2xlYW47IG9wdGlvbmFsOiBib29sZWFufVtdID0gW107XG4gICAgICAgIG5lZWRzLmZvckVhY2goKG5lZWQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBqb2I6IHR5cGVvZiBuZWVkID09PSBcInN0cmluZ1wiID8gbmVlZCA6IG5lZWQuam9iLFxuICAgICAgICAgICAgICAgIGFydGlmYWN0czogdHlwZW9mIG5lZWQgPT09IFwic3RyaW5nXCIgPyB0cnVlIDogbmVlZC5hcnRpZmFjdHMsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHR5cGVvZiBuZWVkID09PSBcInN0cmluZ1wiID8gZmFsc2UgOiBuZWVkLm9wdGlvbmFsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBnZXQgYnVpbGRWb2x1bWVOYW1lICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGdjbC0ke3RoaXMuc2FmZUpvYk5hbWV9LSR7dGhpcy5qb2JJZH0tYnVpbGRgO1xuICAgIH1cblxuICAgIGdldCB0bXBWb2x1bWVOYW1lICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGdjbC0ke3RoaXMuc2FmZUpvYk5hbWV9LSR7dGhpcy5qb2JJZH0tdG1wYDtcbiAgICB9XG5cbiAgICBnZXQgaW1hZ2VOYW1lICgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmpvYkRhdGFbXCJpbWFnZVwiXTtcbiAgICAgICAgaWYgKCFpbWFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbWFnZU5hbWUgPSBVdGlscy5leHBhbmRUZXh0KGltYWdlLm5hbWUsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICByZXR1cm4gaW1hZ2VOYW1lLmluY2x1ZGVzKFwiOlwiKSA/IGltYWdlTmFtZSA6IGAke2ltYWdlTmFtZX06bGF0ZXN0YDtcbiAgICB9XG5cbiAgICBnZXQgaW1hZ2VFbnRyeXBvaW50ICgpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuXG4gICAgICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLmVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGltYWdlLmVudHJ5cG9pbnQpLCBcImltYWdlOmVudHJ5cG9pbnQgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgcmV0dXJuIGltYWdlLmVudHJ5cG9pbnQ7XG4gICAgfVxuXG4gICAgZ2V0IHNlcnZpY2VzICgpOiBTZXJ2aWNlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wic2VydmljZXNcIl07XG4gICAgfVxuXG4gICAgc2V0IGpvYk5hbWVQYWQgKGpvYk5hbWVQYWQ6IG51bWJlcikge1xuICAgICAgICBhc3NlcnQodGhpcy5fam9iTmFtZVBhZCA9PSBudWxsLCBcInRoaXMuX2pvYk5hbWVQYWQgY2FuIG9ubHkgYmUgc2V0IG9uY2VcIik7XG4gICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSBqb2JOYW1lUGFkO1xuICAgIH1cblxuICAgIGdldCBqb2JOYW1lUGFkICgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fam9iTmFtZVBhZCA/PyAwO1xuICAgIH1cblxuICAgIGdldCBwcm9kdWNlcnMgKCk6IHtuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbH1bXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZHVjZXJzO1xuICAgIH1cblxuICAgIHNldCBwcm9kdWNlcnMgKHByb2R1Y2Vyczoge25hbWU6IHN0cmluZzsgZG90ZW52OiBzdHJpbmcgfCBudWxsfVtdIHwgbnVsbCkge1xuICAgICAgICBhc3NlcnQodGhpcy5fcHJvZHVjZXJzID09IG51bGwsIFwidGhpcy5fcHJvZHVjZXJzIGNhbiBvbmx5IGJlIHNldCBvbmNlXCIpO1xuICAgICAgICB0aGlzLl9wcm9kdWNlcnMgPSBwcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgZ2V0IHN0YWdlICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wic3RhZ2VcIl0gfHwgXCJ0ZXN0XCI7XG4gICAgfVxuXG4gICAgZ2V0IGludGVyYWN0aXZlICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImludGVyYWN0aXZlXCJdIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBpbmplY3RTU0hBZ2VudCAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbmplY3RTU0hBZ2VudFwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24gKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJkZXNjcmlwdGlvblwiXSA/PyBcIlwiO1xuICAgIH1cblxuICAgIGdldCBhcnRpZmFjdHMgKCk6IHtwYXRocz86IHN0cmluZ1tdOyBleGNsdWRlPzogc3RyaW5nW107IHJlcG9ydHM/OiB7ZG90ZW52Pzogc3RyaW5nfX0gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1wiXTtcbiAgICB9XG5cbiAgICBnZXQgY2FjaGUgKCk6IENhY2hlRW50cnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJjYWNoZVwiXSB8fCBbXTtcbiAgICB9XG5cbiAgICBnZXQgYmVmb3JlU2NyaXB0cyAoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYmVmb3JlX3NjcmlwdFwiXSB8fCBbXTtcbiAgICB9XG5cbiAgICBnZXQgYWZ0ZXJTY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJhZnRlcl9zY3JpcHRcIl0gfHwgW107XG4gICAgfVxuXG4gICAgZ2V0IHNjcmlwdHMgKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcInNjcmlwdFwiXTtcbiAgICB9XG5cbiAgICBnZXQgdHJpZ2dlciAoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcInRyaWdnZXJcIl07XG4gICAgfVxuXG4gICAgZ2V0IHByZVNjcmlwdHNFeGl0Q29kZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGU7XG4gICAgfVxuXG4gICAgZ2V0IGFmdGVyU2NyaXB0c0V4aXRDb2RlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBydW5uaW5nICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bm5pbmc7XG4gICAgfVxuXG4gICAgZ2V0IHN0YXJ0ZWQgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVubmluZyB8fCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgIT09IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGZpbmlzaGVkICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9ydW5uaW5nICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY292ZXJhZ2VQZXJjZW50ICgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvdmVyYWdlUGVyY2VudDtcbiAgICB9XG5cbiAgICBnZXQgZmlsZVZhcmlhYmxlc0RpciAoKSB7XG4gICAgICAgIHJldHVybiBgL3RtcC9naXRsYWItY2ktbG9jYWwtZmlsZS12YXJpYWJsZXMtJHt0aGlzLl9leHBhbmRlZFZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfUEFUSF9TTFVHXCJdfS0ke3RoaXMuam9iSWR9YDtcbiAgICB9XG5cbiAgICBhc3luYyBzdGFydCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGFyZ3YgPSB0aGlzLmFyZ3Y7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCByZXBvcnRzRG90ZW52VmFyaWFibGVzID0gYXdhaXQgdGhpcy5pbml0UHJvZHVjZXJSZXBvcnRzRG90ZW52VmFyaWFibGVzKHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JuYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRWYXJpYWJsZXMgPSB7Li4udGhpcy5leHBhbmRlZFZhcmlhYmxlcywgLi4ucmVwb3J0c0RvdGVudlZhcmlhYmxlc307XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0TG9nRmlsZVBhdGggPSBgJHthcmd2LmN3ZH0vJHthcmd2LnN0YXRlRGlyfS9vdXRwdXQvJHtzYWZlSm9ibmFtZX0ubG9nYDtcbiAgICAgICAgYXdhaXQgZnMuZW5zdXJlRmlsZShvdXRwdXRMb2dGaWxlUGF0aCk7XG4gICAgICAgIGF3YWl0IGZzLnRydW5jYXRlKG91dHB1dExvZ0ZpbGVQYXRoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgc3RhcnRpbmd9ICR7dGhpcy5pbWFnZU5hbWUgPz8gXCJzaGVsbFwifSAoe3llbGxvdyAke3RoaXMuc3RhZ2V9fSlcXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgYnVpbGRWb2x1bWVOYW1lID0gdGhpcy5idWlsZFZvbHVtZU5hbWU7XG4gICAgICAgICAgICBjb25zdCB0bXBWb2x1bWVOYW1lID0gdGhpcy50bXBWb2x1bWVOYW1lO1xuICAgICAgICAgICAgY29uc3Qgdm9sdW1lUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwidm9sdW1lXCIsIFwiY3JlYXRlXCIsIGAke2J1aWxkVm9sdW1lTmFtZX1gXSwgYXJndi5jd2QpKTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwidm9sdW1lXCIsIFwiY3JlYXRlXCIsIGAke3RtcFZvbHVtZU5hbWV9YF0sIGFyZ3YuY3dkKSk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5wdXNoKGJ1aWxkVm9sdW1lTmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5wdXNoKHRtcFZvbHVtZU5hbWUpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodm9sdW1lUHJvbWlzZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VydmljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVEb2NrZXJOZXR3b3JrKGBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfWApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIHRoaXMuc2VydmljZXMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnB1bGxJbWFnZSh3cml0ZVN0cmVhbXMsIHNlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvbnRhaW5lcklkID0gYXdhaXQgdGhpcy5zdGFydFNlcnZpY2Uod3JpdGVTdHJlYW1zLCBzZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlQ29udGFuZXJMb2dGaWxlID0gYCR7YXJndi5jd2R9LyR7YXJndi5zdGF0ZURpcn0vc2VydmljZXMtb3V0cHV0LyR7dGhpcy5zYWZlSm9iTmFtZX0vJHtzZXJ2aWNlLmdldE5hbWUodGhpcy5fZXhwYW5kZWRWYXJpYWJsZXMpfS0ke3NlcnZpY2UuaW5kZXh9LmxvZ2A7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlSGVhbHRoQ2hlY2sod3JpdGVTdHJlYW1zLCBzZXJ2aWNlLCBzZXJ2aWNlQ29udGFuZXJMb2dGaWxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7YWxsfSA9IGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImxvZ3NcIiwgc2VydmljZUNvbnRhaW5lcklkXSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMuZW5zdXJlRmlsZShzZXJ2aWNlQ29udGFuZXJMb2dGaWxlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoc2VydmljZUNvbnRhbmVyTG9nRmlsZSwgYWxsID8/IFwiU2VydmljZSBjb250YWluZXIgaGFkIG5vIG91dHB1dFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZXNjcmlwdHMgPSB0aGlzLmJlZm9yZVNjcmlwdHMuY29uY2F0KHRoaXMuc2NyaXB0cyk7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkVmFyaWFibGVzW1wiQ0lfSk9CX1NUQVRVU1wiXSA9IFwicnVubmluZ1wiO1xuICAgICAgICB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPSBhd2FpdCB0aGlzLmV4ZWNTY3JpcHRzKHByZXNjcmlwdHMpO1xuICAgICAgICBpZiAodGhpcy5hZnRlclNjcmlwdHMubGVuZ3RoID09PSAwICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA+IDAgJiYgIXRoaXMuYWxsb3dGYWlsdXJlKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGAke3RoaXMuZ2V0RXhpdGVkU3RyaW5nKHN0YXJ0VGltZSwgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlLCBmYWxzZSl9XFxuYCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBSZXNvdXJjZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFmdGVyU2NyaXB0cy5sZW5ndGggPT09IDAgJiYgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiB0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgdHJ1ZSl9XFxuYCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBSZXNvdXJjZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPiAwICYmIHRoaXMuYWxsb3dGYWlsdXJlKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGAke3RoaXMuZ2V0RXhpdGVkU3RyaW5nKHN0YXJ0VGltZSwgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlLCB0cnVlKX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPiAwICYmICF0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgZmFsc2UpfVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJTY3JpcHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkVmFyaWFibGVzW1wiQ0lfSk9CX1NUQVRVU1wiXSA9IHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA9PT0gMCA/IFwic3VjY2Vzc1wiIDogXCJmYWlsZWRcIjtcbiAgICAgICAgICAgIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjU2NyaXB0cyh0aGlzLmFmdGVyU2NyaXB0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGUgPiAwKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGAke3RoaXMuZ2V0RXhpdGVkU3RyaW5nKHN0YXJ0VGltZSwgdGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGUsIHRydWUsIFwiIGFmdGVyX3NjcmlwdFwiKX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoYCR7dGhpcy5nZXRGaW5pc2hlZFN0cmluZyhzdGFydFRpbWUpfVxcbmApO1xuXG4gICAgICAgIGlmICh0aGlzLmpvYkRhdGFbXCJjb3ZlcmFnZVwiXSkge1xuICAgICAgICAgICAgdGhpcy5fY292ZXJhZ2VQZXJjZW50ID0gYXdhaXQgVXRpbHMuZ2V0Q292ZXJhZ2VQZXJjZW50KGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyLCB0aGlzLmpvYkRhdGFbXCJjb3ZlcmFnZVwiXSwgc2FmZUpvYm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBSZXNvdXJjZXMoKTtcbiAgICB9XG5cbiAgICBhc3luYyBjbGVhbnVwUmVzb3VyY2VzICgpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFyZ3YuY2xlYW51cCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwicm1cIiwgXCItZlwiLCBgJHtpZH1gXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NlcnZpY2VOZXR3b3JrSWQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwibmV0d29ya1wiLCBcInJtXCIsIGAke3RoaXMuX3NlcnZpY2VOZXR3b3JrSWR9YF0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29udGFpbmVyVm9sdW1lIG9mIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInZvbHVtZVwiLCBcInJtXCIsIGAke2NvbnRhaW5lclZvbHVtZX1gXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVWYXJpYWJsZXNEaXIgPSB0aGlzLmZpbGVWYXJpYWJsZXNEaXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5ybShmaWxlVmFyaWFibGVzRGlyLCB7cmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZX0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlSW5qZWN0U1NIQWdlbnRPcHRpb25zICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIiB8fCAocHJvY2Vzcy5lbnYuT1NUWVBFPy5tYXRjaCgvXmRhcndpbi8pID8/IG51bGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCItLWVudiBTU0hfQVVUSF9TT0NLPS9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrIC12IC9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrOi9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAtLWVudiBTU0hfQVVUSF9TT0NLPSR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS30gLXYgJHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfToke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlU2NyaXB0Q29tbWFuZHMgKHNjcmlwdHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBjbWQgPSBcIlwiO1xuICAgICAgICBzY3JpcHRzLmZvckVhY2goKHNjcmlwdCkgPT4ge1xuICAgICAgICAgICAgLy8gUHJpbnQgY29tbWFuZCBlY2hvJ2VkIGluIGNvbG9yXG4gICAgICAgICAgICBjb25zdCBzcGxpdCA9IHNjcmlwdC5zcGxpdCgvXFxyP1xcbi8pO1xuICAgICAgICAgICAgY29uc3QgbXVsdGlsaW5lVGV4dCA9IHNwbGl0Lmxlbmd0aCA+IDEgPyBcIiAjIGNvbGxhcHNlZCBtdWx0aS1saW5lIGNvbW1hbmRcIiA6IFwiXCI7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gc3BsaXRbMF0/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cIi9nLCBcIlxcXFxcXFwiXCIpLnJlcGxhY2UoL1skXS9nLCBcIlxcXFwkXCIpO1xuICAgICAgICAgICAgY21kICs9IGNoYWxrYGVjaG8gXCJ7Z3JlZW4gJCAke3RleHR9JHttdWx0aWxpbmVUZXh0fX1cIlxcbmA7XG5cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgYWN0dWFsIHNjcmlwdFxuICAgICAgICAgICAgY21kICs9IGAke3NjcmlwdH1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG1vdW50Q2FjaGVDbWQgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSAmJiAhdGhpcy5hcmd2Lm1vdW50Q2FjaGUpIHJldHVybiBcIlwiO1xuXG4gICAgICAgIGxldCBjbWQgPSBcIlwiO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2FjaGVOYW1lID0gYXdhaXQgYy5nZXRVbmlxdWVDYWNoZU5hbWUodGhpcy5hcmd2LmN3ZCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBjLnBhdGhzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVXRpbHMuZXhwYW5kVGV4dChwLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IG1vdW50aW5nIGNhY2hlfSBmb3IgcGF0aCAke3BhdGh9XFxuYCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGVNb3VudCA9IFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcoYGdjbC0ke3RoaXMuZXhwYW5kZWRWYXJpYWJsZXMuQ0lfUFJPSkVDVF9QQVRIX1NMVUd9LSR7dW5pcXVlQ2FjaGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIGNtZCArPSBgLXYgJHtjYWNoZU1vdW50fTovZ2NsLWJ1aWxkcy8ke3BhdGh9IGA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY21kO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZXhlY1NjcmlwdHMgKHNjcmlwdHM6IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgY29uc3Qgb3V0cHV0RmlsZXNQYXRoID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9vdXRwdXQvJHtzYWZlSm9iTmFtZX0ubG9nYDtcbiAgICAgICAgY29uc3QgYnVpbGRWb2x1bWVOYW1lID0gdGhpcy5idWlsZFZvbHVtZU5hbWU7XG4gICAgICAgIGNvbnN0IHRtcFZvbHVtZU5hbWUgPSB0aGlzLnRtcFZvbHVtZU5hbWU7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBsZXQgdGltZTtcbiAgICAgICAgbGV0IGVuZFRpbWU7XG5cbiAgICAgICAgaWYgKHNjcmlwdHMubGVuZ3RoID09PSAwIHx8IHNjcmlwdHNbMF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb3B5IGdpdCB0cmFja2VkIGZpbGVzIHRvIGJ1aWxkIGZvbGRlciBpZiBzaGVsbCBpc29sYXRpb24gZW5hYmxlZC5cbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTmFtZSAmJiB0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnJzeW5jVHJhY2tlZEZpbGVzKGN3ZCwgc3RhdGVEaXIsIGAke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlDbWQgPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUNwID0gZXhlY2EoaUNtZCwge1xuICAgICAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICAgICAgICAgICAgICBlbnY6IHsuLi50aGlzLmV4cGFuZGVkVmFyaWFibGVzLCAuLi5wcm9jZXNzLmVudn0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZUNwLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDApKTtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZUNwLm9uKFwiZXJyb3JcIiwgKGVycikgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHVsbEltYWdlKHdyaXRlU3RyZWFtcywgdGhpcy5pbWFnZU5hbWUpO1xuXG4gICAgICAgICAgICBsZXQgZG9ja2VyQ21kID0gXCJcIjtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgZG9ja2VyIGNyZWF0ZSAtLXByaXZpbGVnZWQgLXUgMDowIC1pICR7dGhpcy5nZW5lcmF0ZUluamVjdFNTSEFnZW50T3B0aW9ucygpfSBgO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYGRvY2tlciBjcmVhdGUgLXUgMDowIC1pICR7dGhpcy5nZW5lcmF0ZUluamVjdFNTSEFnZW50T3B0aW9ucygpfSBgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2VydmljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrIGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHtidWlsZFZvbHVtZU5hbWV9Oi9nY2wtYnVpbGRzIGA7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dG1wVm9sdW1lTmFtZX06L3RtcC8gYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0td29ya2RpciAvZ2NsLWJ1aWxkcyBcIjtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB2b2x1bWUgb2YgdGhpcy5hcmd2LnZvbHVtZSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFIb3N0IG9mIHRoaXMuYXJndi5leHRyYUhvc3QpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tYWRkLWhvc3Q9JHtleHRyYUhvc3R9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5cG9pbnRGaWxlID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9zY3JpcHRzL2ltYWdlX2VudHJ5LyR7c2FmZUpvYk5hbWV9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludFswXSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tZW50cnlwb2ludCAnJyBcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKGVudHJ5cG9pbnRGaWxlLCBcIiMhL2Jpbi9zaFxcblwiKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZShlbnRyeXBvaW50RmlsZSwgYCR7dGhpcy5pbWFnZUVudHJ5cG9pbnQuam9pbihcIiBcIil9YCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmNobW9kKGVudHJ5cG9pbnRGaWxlLCBcIjA3NTVcIik7XG4gICAgICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tZW50cnlwb2ludCAnL2djbC1lbnRyeScgXCI7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoZW50cnlwb2ludEZpbGUsIFwiIFxcXCIkQFxcXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLWUgJHtrZXl9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBhd2FpdCB0aGlzLm1vdW50Q2FjaGVDbWQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAke3RoaXMuaW1hZ2VOYW1lfSBzaCAtYyBcIlxcbmA7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJpZiBbIC14IC91c3IvbG9jYWwvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2xvY2FsL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vYmFzaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvdXNyL2xvY2FsL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvbG9jYWwvYmluL3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2J1c3lib3gvc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvYnVzeWJveC9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsc2VcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGVjaG8gc2hlbGwgbm90IGZvdW5kXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGl0IDFcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImZpXFxuXFxcIlwiO1xuXG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGRvY2tlckNtZCwgY3dkLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcklkID0gY29udGFpbmVySWQ7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJzVG9DbGVhbi5wdXNoKHRoaXMuX2NvbnRhaW5lcklkKTtcblxuICAgICAgICAgICAgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICAvLyBDb3B5IHNvdXJjZSBmaWxlcyBpbnRvIGNvbnRhaW5lci5cbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImNwXCIsIGAke3N0YXRlRGlyfS9idWlsZHMvLmRvY2tlci8uYCAsIGAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLWJ1aWxkc2BdLCBjd2QpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgICAgIC8vIENvcHkgZmlsZSB2YXJpYWJsZXMgaW50byBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRGlyID0gdGhpcy5maWxlVmFyaWFibGVzRGlyO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZVZhcmlhYmxlc0RpcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHtmaWxlVmFyaWFibGVzRGlyfWAsIGAke3RoaXMuX2NvbnRhaW5lcklkfToke2ZpbGVWYXJpYWJsZXNEaXJ9L2BdLCBjd2QpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGNvcGllZCB0byBjb250YWluZXJ9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY29weUNhY2hlSW4od3JpdGVTdHJlYW1zKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5QXJ0aWZhY3RzSW4od3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIC8vIEZpbGVzIGluIGRvY2tlci1leGVjdXRvciBidWlsZCBmb2xkZXIgbXVzdCBiZSByb290IG93bmVkLlxuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1xuICAgICAgICAgICAgICAgIFwiZG9ja2VyXCIsIFwicnVuXCIsIFwiLS1ybVwiLCBcIi12XCIsIGAke3RtcFZvbHVtZU5hbWV9Oi90bXAvYCwgXCItdlwiLCBgJHtidWlsZFZvbHVtZU5hbWV9Oi9hcHAvYCwgXCJmaXJlY293L2dpdGxhYi1jaS1sb2NhbC11dGlsXCIsXG4gICAgICAgICAgICAgICAgXCJiYXNoXCIsIFwiLWNcIiwgXCJjaG93biAwOjAgLVIgL2FwcC8gJiYgY2htb2QgYStydyAtUiAvYXBwLyAmJiBjaG1vZCBhK3J3IC1SIC90bXAvXCIsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjbWQgPSBcInNldCAtZW8gcGlwZWZhaWxcXG5cIjtcbiAgICAgICAgY21kICs9IFwiZXhlYyAwPCAvZGV2L251bGxcXG5cIjtcblxuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY21kICs9IGBjZCAke3N0YXRlRGlyfS9idWlsZHMvJHtzYWZlSm9iTmFtZX0vXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBjbWQgKz0gdGhpcy5nZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHMpO1xuXG4gICAgICAgIGNtZCArPSBcImV4aXQgMFxcblwiO1xuXG4gICAgICAgIGF3YWl0IGZzLm91dHB1dEZpbGUoYCR7Y3dkfS8ke3N0YXRlRGlyfS9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgY21kLCBcInV0Zi04XCIpO1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChgJHtjd2R9LyR7c3RhdGVEaXJ9L3NjcmlwdHMvJHtzYWZlSm9iTmFtZX1gLCBcIjA3NTVcIik7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfWAsIGAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLWNtZGBdLCBjd2QpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludCAmJiB0aGlzLmltYWdlRW50cnlwb2ludFswXSAhPSBcIlwiKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHtzdGF0ZURpcn0vc2NyaXB0cy9pbWFnZV9lbnRyeS8ke3NhZmVKb2JOYW1lfWAsIGAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLWVudHJ5YF0sIGN3ZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjcCA9IGV4ZWNhKHRoaXMuX2NvbnRhaW5lcklkID8gYGRvY2tlciBzdGFydCAtLWF0dGFjaCAtaSAke3RoaXMuX2NvbnRhaW5lcklkfWAgOiBcImJhc2hcIiwge1xuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgc2hlbGw6IFwiYmFzaFwiLFxuICAgICAgICAgICAgZW52OiB0aGlzLmV4cGFuZGVkVmFyaWFibGVzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBvdXRGdW5jID0gKGU6IGFueSwgc3RyZWFtOiAodHh0OiBzdHJpbmcpID0+IHZvaWQsIGNvbG9yaXplOiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYCR7ZX1gLnNwbGl0KC9cXHI/XFxuLykpIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RyZWFtKGAke3RoaXMuY2hhbGtKb2JOYW1lfSBgKTtcbiAgICAgICAgICAgICAgICBpZiAoIWxpbmUuc3RhcnRzV2l0aChcIlxcdTAwMWJbMzJtJFwiKSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0oYCR7Y29sb3JpemUoXCI+XCIpfSBgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyZWFtKGAke2xpbmV9XFxuYCk7XG4gICAgICAgICAgICAgICAgZnMuYXBwZW5kRmlsZVN5bmMob3V0cHV0RmlsZXNQYXRoLCBgJHtsaW5lfVxcbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjcC5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCAoZSkgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3Rkb3V0LmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtncmVlbkJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgIGNwLnN0ZGVycj8ub24oXCJkYXRhXCIsIChlKSA9PiBvdXRGdW5jKGUsIHdyaXRlU3RyZWFtcy5zdGRlcnIuYmluZCh3cml0ZVN0cmVhbXMpLCAocykgPT4gY2hhbGtge3JlZEJyaWdodCAke3N9fWApKTtcblxuICAgICAgICAgICAgY3Aub24oXCJleGl0XCIsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMCkpO1xuICAgICAgICAgICAgY3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiByZWplY3QoZXJyKSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNwLnN0ZGluPy5lbmQoXCIvZ2NsLWNtZFwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3Auc3RkaW4/LmVuZChgLi8ke3N0YXRlRGlyfS9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChleGl0Q29kZSA9PSAwKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlDYWNoZU91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5QXJ0aWZhY3RzT3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwdWxsSW1hZ2UgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBpbWFnZVRvUHVsbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwiaW1hZ2VcIiwgXCJpbnNwZWN0XCIsIGltYWdlVG9QdWxsXSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKGUuc3RkZXJyPy5pbmNsdWRlcyhgTm8gc3VjaCBpbWFnZTogJHtpbWFnZVRvUHVsbH1gKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInB1bGxcIiwgaW1hZ2VUb1B1bGxdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBwdWxsZWR9ICR7aW1hZ2VUb1B1bGx9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbml0UHJvZHVjZXJSZXBvcnRzRG90ZW52VmFyaWFibGVzICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgcHJvZHVjZXJzID0gdGhpcy5wcm9kdWNlcnM7XG4gICAgICAgIGxldCBwcm9kdWNlclJlcG9ydHNFbnZzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWNlckRvdGVudiA9IFV0aWxzLmV4cGFuZFRleHQocHJvZHVjZXIuZG90ZW52LCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgICAgIGlmIChwcm9kdWNlckRvdGVudiA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHNhZmVQcm9kdWNlck5hbWUgPSBVdGlscy5zYWZlRG9ja2VyU3RyaW5nKHByb2R1Y2VyLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgZG90ZW52Rm9sZGVyID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlUHJvZHVjZXJOYW1lfS8uZ2l0bGFiLWNpLXJlcG9ydHMvZG90ZW52L2A7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhkb3RlbnZGb2xkZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG90ZW52RmlsZXMgPSAoYXdhaXQgVXRpbHMuc3Bhd24oW1wiZmluZFwiLCBcIi5cIiwgXCItdHlwZVwiLCBcImZcIl0sIGRvdGVudkZvbGRlcikpLnN0ZG91dC5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRvdGVudkZpbGUgb2YgZG90ZW52RmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvdGVudkZpbGUgPT0gXCJcIikgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VyUmVwb3J0RW52ID0gZG90ZW52LnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGAke2RvdGVudkZvbGRlcn0vJHtkb3RlbnZGaWxlfWApKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXJSZXBvcnRzRW52cyA9IHsuLi5wcm9kdWNlclJlcG9ydHNFbnZzLCAuLi5wcm9kdWNlclJlcG9ydEVudn07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgcmVwb3J0cy5kb3RlbnYgcHJvZHVjZWQgYnkgJyR7cHJvZHVjZXIubmFtZX0nIGNvdWxkIG5vdCBiZSBmb3VuZH1cXG5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9kdWNlclJlcG9ydHNFbnZzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlSW4gKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICh0aGlzLmFyZ3YubW91bnRDYWNoZSAmJiB0aGlzLmltYWdlTmFtZSkgcmV0dXJuO1xuICAgICAgICBpZiAoKCF0aGlzLmltYWdlTmFtZSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuXG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIVtcInB1bGxcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVOYW1lID0gYXdhaXQgYy5nZXRVbmlxdWVDYWNoZU5hbWUoY3dkLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlRm9sZGVyID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9jYWNoZS8ke2NhY2hlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGNhY2hlRm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5SW4oY2FjaGVGb2xkZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGltcG9ydGVkIGNhY2hlICcke2NhY2hlTmFtZX0nfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlBcnRpZmFjdHNJbiAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgaWYgKCghdGhpcy5pbWFnZU5hbWUgJiYgIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikgfHwgKHRoaXMucHJvZHVjZXJzID8/IFtdKS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgdGhpcy5wcm9kdWNlcnMgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VyU2FmZU5hbWUgPSBVdGlscy5zYWZlRG9ja2VyU3RyaW5nKHByb2R1Y2VyLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RGb2xkZXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3Byb2R1Y2VyU2FmZU5hbWV9YDtcbiAgICAgICAgICAgIGlmICghYXdhaXQgZnMucGF0aEV4aXN0cyhhcnRpZmFjdEZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYXJ0aWZhY3RGb2xkZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihhcnRpZmFjdEZvbGRlcik7XG4gICAgICAgICAgICBpZiAocmVhZGRpci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3RzIGZyb20ge2JsdWVCcmlnaHQgJHtwcm9kdWNlclNhZmVOYW1lfX0gd2FzIGVtcHR5fVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuY29weUluKGFydGlmYWN0Rm9sZGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgaW1wb3J0ZWQgYXJ0aWZhY3RzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgfVxuXG4gICAgY29weUluIChzb3VyY2U6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuYmFzaChgcnN5bmMgLWEgJHtzb3VyY2V9Ly4gJHt0aGlzLmFyZ3YuY3dkfS8ke3RoaXMuYXJndi5zdGF0ZURpcn0vYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFV0aWxzLmJhc2goYGRvY2tlciBjcCAke3NvdXJjZX0vLiAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLWJ1aWxkc2ApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlT3V0ICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBpZiAodGhpcy5hcmd2Lm1vdW50Q2FjaGUgJiYgdGhpcy5pbWFnZU5hbWUpIHJldHVybjtcbiAgICAgICAgaWYgKCghdGhpcy5pbWFnZU5hbWUgJiYgIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikgfHwgdGhpcy5jYWNoZS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcblxuICAgICAgICBsZXQgdGltZSwgZW5kVGltZTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIGlmICghW1wicHVzaFwiLCBcInB1bGwtcHVzaFwiXS5pbmNsdWRlcyhjLnBvbGljeSkpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlTmFtZSA9IGF3YWl0IGMuZ2V0VW5pcXVlQ2FjaGVOYW1lKGN3ZCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgYy5wYXRocykge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQocGF0aCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNtZCA9IFwic2hvcHQgLXMgZ2xvYnN0YXIgbnVsbGdsb2IgZG90Z2xvYlxcblwiO1xuICAgICAgICAgICAgICAgIGNtZCArPSBgbWtkaXIgLXAgLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9XFxuYDtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYHJzeW5jIC1SYSAke2V4cGFuZGVkUGF0aH0gLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9Ly4gfHwgdHJ1ZVxcbmA7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weU91dChjbWQsIHN0YXRlRGlyLCBcImNhY2hlXCIsIFtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihgJHt0aGlzLmFyZ3YuY3dkfS8ke3N0YXRlRGlyfS9jYWNoZS8ke2NhY2hlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBpZiAocmVhZGRpci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7eWVsbG93ICEhIG5vIGNhY2hlIHdhcyBjb3BpZWQgZm9yICR7cGF0aH0gISF9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBleHBvcnRlZCBjYWNoZSAke2V4cGFuZGVkUGF0aH0gJyR7Y2FjaGVOYW1lfSd9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlBcnRpZmFjdHNPdXQgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IGFydGlmYWN0c1BhdGggPSAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uICYmICF0aGlzLmltYWdlTmFtZSA/IGAke3N0YXRlRGlyfS9hcnRpZmFjdHNgIDogXCIuLi8uLi9hcnRpZmFjdHNcIjtcblxuICAgICAgICBpZiAoIXRoaXMuYXJ0aWZhY3RzKSByZXR1cm47XG4gICAgICAgIGlmICgodGhpcy5hcnRpZmFjdHMucGF0aHM/Lmxlbmd0aCA/PyAwKSA9PT0gMCAmJiB0aGlzLmFydGlmYWN0cy5yZXBvcnRzPy5kb3RlbnYgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBsZXQgY3BDbWQgPSBcInNob3B0IC1zIGdsb2JzdGFyIG51bGxnbG9iIGRvdGdsb2JcXG5cIjtcbiAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX1cXG5gO1xuICAgICAgICBjcENtZCArPSBcInJzeW5jIC0tZXhjbHVkZSAnLmdpdGxhYi1jaS1sb2NhbC8qKicgLVJhIFwiO1xuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0RXhjbHVkZVBhdGggb2YgdGhpcy5hcnRpZmFjdHM/LmV4Y2x1ZGUgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoYXJ0aWZhY3RFeGNsdWRlUGF0aCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBjcENtZCArPSBgLS1leGNsdWRlICcke2V4cGFuZGVkUGF0aH0nIGA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBhcnRpZmFjdFBhdGggb2YgdGhpcy5hcnRpZmFjdHM/LnBhdGhzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZFBhdGggPSBVdGlscy5leHBhbmRUZXh0KGFydGlmYWN0UGF0aCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBjcENtZCArPSBgJHtleHBhbmRlZFBhdGh9IGA7XG4gICAgICAgIH1cbiAgICAgICAgY3BDbWQgKz0gYCR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLiB8fCB0cnVlXFxuYDtcbiAgICAgICAgY29uc3QgcmVwb3J0RG90ZW52ID0gVXRpbHMuZXhwYW5kVGV4dCh0aGlzLmFydGlmYWN0cy5yZXBvcnRzPy5kb3RlbnYgPz8gbnVsbCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgIGlmIChyZXBvcnREb3RlbnYgIT0gbnVsbCkge1xuICAgICAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudlxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBgaWYgWyAtZiAke3JlcG9ydERvdGVudn0gXTsgdGhlblxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBgICByc3luYyAtUmEgJHtyZXBvcnREb3RlbnZ9ICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uXFxuYDtcbiAgICAgICAgICAgIGNwQ21kICs9IFwiZmlcXG5cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjb25zdCBkb2NrZXJDbWRFeHRyYXMgPSB0aGlzLmFyZ3YubW91bnRDYWNoZSA/IFthd2FpdCB0aGlzLm1vdW50Q2FjaGVDbWQod3JpdGVTdHJlYW1zKV0gOiBbXTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5T3V0KGNwQ21kLCBzdGF0ZURpciwgXCJhcnRpZmFjdHNcIiwgZG9ja2VyQ21kRXh0cmFzKTtcbiAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuXG4gICAgICAgIGlmIChyZXBvcnREb3RlbnYgIT0gbnVsbCAmJiAhYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uZ2l0bGFiLWNpLXJlcG9ydHMvZG90ZW52LyR7cmVwb3J0RG90ZW52fWApKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3QgcmVwb3J0cyBkb3RlbnYgJyR7cmVwb3J0RG90ZW52fScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVhZGRpciA9IGF3YWl0IGZzLnJlYWRkaXIoYCR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgaWYgKHJlYWRkaXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgISEgbm8gYXJ0aWZhY3RzIHdhcyBjb3BpZWQgISF9XFxuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGV4cG9ydGVkIGFydGlmYWN0c30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJ0aWZhY3RzVG9Tb3VyY2UgJiYgKHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbiB8fCB0aGlzLmltYWdlTmFtZSkpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgcnN5bmMgLS1leGNsdWRlPS8uZ2l0bGFiLWNpLXJlcG9ydHMvIC1hICR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLiAke2N3ZH1gKTtcbiAgICAgICAgICAgIGlmIChyZXBvcnREb3RlbnYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYHJzeW5jIC1hICR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uICR7Y3dkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBjb3BpZWQgYXJ0aWZhY3RzIHRvIGN3ZH0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5T3V0IChjbWQ6IHN0cmluZywgc3RhdGVEaXI6IHN0cmluZywgdHlwZTogXCJhcnRpZmFjdHNcIiB8IFwiY2FjaGVcIiwgZG9ja2VyQ21kRXh0cmFzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGNvbnN0IGJ1aWxkVm9sdW1lTmFtZSA9IHRoaXMuYnVpbGRWb2x1bWVOYW1lO1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuXG4gICAgICAgIGF3YWl0IGZzLm1rZGlycChgJHtjd2R9LyR7c3RhdGVEaXJ9LyR7dHlwZX1gKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLmJhc2goYGRvY2tlciBjcmVhdGUgLWkgJHtkb2NrZXJDbWRFeHRyYXMuam9pbihcIiBcIil9IC12ICR7YnVpbGRWb2x1bWVOYW1lfTovZ2NsLWJ1aWxkcy8gLXcgL2djbC1idWlsZHMgZmlyZWNvdy9naXRsYWItY2ktbG9jYWwtdXRpbCBiYXNoIC1jIFwiJHtjbWR9XCJgLCBjd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5iYXNoKGBkb2NrZXIgc3RhcnQgJHtjb250YWluZXJJZH0gLS1hdHRhY2hgKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYGRvY2tlciBjcCAke2NvbnRhaW5lcklkfTovJHt0eXBlfS8uICR7c3RhdGVEaXJ9LyR7dHlwZX0vLmAsIGN3ZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5iYXNoKGBiYXNoIC1lbyBwaXBlZmFpbCAtYyBcIiR7Y21kfVwiYCwgYCR7Y3dkfS8ke3N0YXRlRGlyfS9idWlsZHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5iYXNoKGBiYXNoIC1lbyBwaXBlZmFpbCAtYyBcIiR7Y21kfVwiYCwgYCR7Y3dkfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0ICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5fbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHtncmV5ID4gc3RpbGwgcnVubmluZy4uLn1cXG5gKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICB9LCAxMDAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeGl0ZWRTdHJpbmcgKHN0YXJ0VGltZTogW251bWJlciwgbnVtYmVyXSwgY29kZTogbnVtYmVyLCB3YXJuaW5nID0gZmFsc2UsIHByZXBlbmRTdHJpbmcgPSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkU3RyID0gdGhpcy5nZXRGaW5pc2hlZFN0cmluZyhzdGFydFRpbWUpO1xuICAgICAgICBpZiAod2FybmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiAke2NvZGUudG9TdHJpbmcoKX0gfSR7cHJlcGVuZFN0cmluZ31gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1JlZCAgRkFJTCAke2NvZGUudG9TdHJpbmcoKX0gfSAke3ByZXBlbmRTdHJpbmd9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbmlzaGVkU3RyaW5nIChzdGFydFRpbWU6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHN0YXJ0VGltZSk7XG4gICAgICAgIGNvbnN0IHRpbWVTdHIgPSBwcmV0dHlIcnRpbWUoZW5kVGltZSk7XG4gICAgICAgIHJldHVybiBjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBmaW5pc2hlZH0gaW4ge21hZ2VudGEgJHt0aW1lU3RyfX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlRG9ja2VyTmV0d29yayAobmV0d29ya05hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCB7c3Rkb3V0OiBuZXR3b3JrSWR9ID0gYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwibmV0d29ya1wiLCBcImNyZWF0ZVwiLCBgJHtuZXR3b3JrTmFtZX1gXSk7XG4gICAgICAgIHRoaXMuX3NlcnZpY2VOZXR3b3JrSWQgPSBuZXR3b3JrSWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydFNlcnZpY2UgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBzZXJ2aWNlOiBTZXJ2aWNlKSB7XG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGxldCBkb2NrZXJDbWQgPSBgZG9ja2VyIGNyZWF0ZSAtdSAwOjAgLWkgLS1uZXR3b3JrIGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9IGA7XG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1wcml2aWxlZ2VkIFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB2b2x1bWUgb2YgdGhpcy5hcmd2LnZvbHVtZSkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3ZvbHVtZX0gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcnZpY2VBbGlhcyA9IHNlcnZpY2UuZ2V0QWxpYXModGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gc2VydmljZS5nZXROYW1lKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uID0gc2VydmljZU5hbWUucmVwbGFjZSgvKC4qKSg6LiopLywgXCIkMVwiKTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2UoXCIvXCIsIFwiLVwiKSk7XG4gICAgICAgIGFsaWFzZXMuYWRkKHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZShcIi9cIiwgXCJfX1wiKSk7XG4gICAgICAgIGlmIChzZXJ2aWNlQWxpYXMpIHtcbiAgICAgICAgICAgIGFsaWFzZXMuYWRkKHNlcnZpY2VBbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IoY29uc3QgYWxpYXMgb2YgYWxpYXNlcykge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW5ldHdvcmstYWxpYXM9JHthbGlhc30gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC1lICR7a2V5fSBgO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VydmljZUVudHJ5cG9pbnQgPSBzZXJ2aWNlLmdldEVudHJ5cG9pbnQoKTtcbiAgICAgICAgY29uc3Qgc2VydmljZUVudHJ5cG9pbnRGaWxlID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9zY3JpcHRzL3NlcnZpY2VzX2VudHJ5LyR7c2FmZUpvYk5hbWV9XyR7c2VydmljZU5hbWVXaXRob3V0VmVyc2lvbn1fJHtzZXJ2aWNlLmluZGV4fWA7XG4gICAgICAgIGlmIChzZXJ2aWNlRW50cnlwb2ludCkge1xuICAgICAgICAgICAgaWYgKHNlcnZpY2VFbnRyeXBvaW50WzBdID09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLWVudHJ5cG9pbnQgJycgXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm91dHB1dEZpbGUoc2VydmljZUVudHJ5cG9pbnRGaWxlLCBcIiMhL2Jpbi9zaFxcblwiKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKHNlcnZpY2VFbnRyeXBvaW50RmlsZSwgYCR7c2VydmljZUVudHJ5cG9pbnQuam9pbihcIiBcIil9YCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZShzZXJ2aWNlRW50cnlwb2ludEZpbGUsIFwiIFxcXCIkQFxcXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMuY2htb2Qoc2VydmljZUVudHJ5cG9pbnRGaWxlLCBcIjA3NTVcIik7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1lbnRyeXBvaW50ICcvZ2NsLWVudHJ5JyBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dGhpcy50bXBWb2x1bWVOYW1lfTovdG1wLyBgO1xuICAgICAgICBkb2NrZXJDbWQgKz0gYCR7c2VydmljZU5hbWV9IGA7XG5cbiAgICAgICAgKHNlcnZpY2UuZ2V0Q29tbWFuZCgpID8/IFtdKS5mb3JFYWNoKChlKSA9PiBkb2NrZXJDbWQgKz0gYFwiJHtlfVwiIGApO1xuXG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGRvY2tlckNtZCwgY3dkLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG5cbiAgICAgICAgLy8gQ29weSBkb2NrZXIgZW50cnlwb2ludCBpZiBzcGVjaWZpZWQgZm9yIHNlcnZpY2VcbiAgICAgICAgaWYgKHNlcnZpY2VFbnRyeXBvaW50ICYmIHNlcnZpY2VFbnRyeXBvaW50WzBdICE9IFwiXCIpIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImNwXCIsIHNlcnZpY2VFbnRyeXBvaW50RmlsZSwgYCR7Y29udGFpbmVySWR9Oi9nY2wtZW50cnlgXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb3B5IGZpbGUgdmFyaWFibGVzIGludG8gc2VydmljZSBjb250YWluZXIuXG4gICAgICAgIGNvbnN0IGZpbGVWYXJpYWJsZXNEaXIgPSB0aGlzLmZpbGVWYXJpYWJsZXNEaXI7XG4gICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGZpbGVWYXJpYWJsZXNEaXIpKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHtmaWxlVmFyaWFibGVzRGlyfWAsIGAke2NvbnRhaW5lcklkfToke2ZpbGVWYXJpYWJsZXNEaXJ9L2BdLCBjd2QpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJzdGFydFwiLCBgJHtjb250YWluZXJJZH1gXSk7XG5cbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHN0YXJ0ZWQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gd2l0aCBhbGlhc2VzOiAke0FycmF5LmZyb20oYWxpYXNlcykuam9pbihcIiwgXCIpfX0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuXG4gICAgICAgIHJldHVybiBjb250YWluZXJJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNlcnZpY2VIZWFsdGhDaGVjayAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIHNlcnZpY2VDb250YW5lckxvZ0ZpbGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImltYWdlXCIsIFwiaW5zcGVjdFwiLCBzZXJ2aWNlLmdldE5hbWUodGhpcy5leHBhbmRlZFZhcmlhYmxlcyldKTtcbiAgICAgICAgY29uc3QgaW1hZ2VJbnNwZWN0ID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuXG4gICAgICAgIC8vIENvcGllZCBmcm9tIHRoZSBzdGFydFNlcnZpY2UgYmxvY2suIEltcG9ydGFudCB0aGluZyBpcyB0aGF0IHRoZSBhbGlhc2VzIG1hdGNoXG4gICAgICAgIGNvbnN0IHNlcnZpY2VBbGlhcyA9IHNlcnZpY2UuZ2V0QWxpYXModGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gc2VydmljZS5nZXROYW1lKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uID0gc2VydmljZU5hbWUucmVwbGFjZSgvKC4qKSg6LiopLywgXCIkMVwiKTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IFtzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2UoXCIvXCIsIFwiLVwiKSwgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlKFwiL1wiLCBcIl9fXCIpXTtcbiAgICAgICAgaWYgKHNlcnZpY2VBbGlhcykge1xuICAgICAgICAgICAgYWxpYXNlcy5wdXNoKHNlcnZpY2VBbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGltYWdlSW5zcGVjdFswXT8uQ29uZmlnPy5FeHBvc2VkUG9ydHMgPz8gbnVsbCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgQ291bGQgbm90IGZpbmQgZXhwb3NlZCB0Y3AgcG9ydHMgJHtzZXJ2aWNlLmdldE5hbWUodGhpcy5leHBhbmRlZFZhcmlhYmxlcyl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcG9ydCBkZWZpbmVkIGluIHRoZSBpbWFnZSwgYW5kIHRyeSB0byBjb25uZWN0IHRvIHRoZSBhbGlhc1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3QgaGNQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBvcnQgb2YgT2JqZWN0LmtleXMoaW1hZ2VJbnNwZWN0WzBdLkNvbmZpZy5FeHBvc2VkUG9ydHMpKSB7XG4gICAgICAgICAgICBpZiAoIXBvcnQuZW5kc1dpdGgoXCIvdGNwXCIpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHBvcnROdW0gPSBwYXJzZUludChwb3J0LnJlcGxhY2UoXCIvdGNwXCIsIFwiXCIpKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYXduQ21kID0gW1wiZG9ja2VyXCIsIFwicnVuXCIsIFwiLS1ybVwiLCBcIi0tbmV0d29ya1wiLCBgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH1gLCBcIndpbGx3aWxsL3dhaXQtZm9yLWl0XCIsIGAke2FsaWFzZXNbMF19OiR7cG9ydE51bX1gLCBcIi10XCIsIFwiMzBcIl07XG4gICAgICAgICAgICBoY1Byb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oc3Bhd25DbWQpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHtyZWRCcmlnaHQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gaGVhbHRoY2hlY2sgZmFpbGVkOiAke2FsaWFzZXNbMF19OiR7cG9ydE51bX19XFxuYCk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7cmVkQnJpZ2h0IHNlZSAoJHtzZXJ2aWNlQ29udGFuZXJMb2dGaWxlfSl9XFxuYCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbnkoaGNQcm9taXNlcyk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7Z3JlZW5CcmlnaHQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gaGVhbHRoY2hlY2sgcGFzc2VkIGluIHtncmVlbiAke3ByZXR0eUhydGltZShlbmRUaW1lKX19fVxcbmApO1xuICAgIH1cbn1cbiJdfQ==
895
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0VBQXlDO0FBQ3pDLDZDQUF1QztBQUN2QyxtQ0FBOEI7QUFJOUIsdUNBQWlDO0FBRWpDLG1DQUE4QjtBQUU5QixrREFBMEI7QUFtQjFCLE1BQWEsR0FBRztJQUVaLE1BQU0sQ0FBVSxlQUFlLEdBQUc7UUFDOUIsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxVQUFVO1FBQ3JELFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVM7UUFDN0MsY0FBYyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVTtLQUNuRCxDQUFDO0lBRU8sSUFBSSxDQUFPO0lBQ1gsSUFBSSxDQUFTO0lBQ2IsUUFBUSxDQUFTO0lBQ2pCLFlBQVksQ0FBa0I7SUFDOUIsV0FBVyxDQUFzQztJQUNqRCxLQUFLLENBQVM7SUFDZCxLQUFLLENBTVY7SUFFSyxZQUFZLENBQVU7SUFDdEIsSUFBSSxDQUFTO0lBQ2IsTUFBTSxDQUFXO0lBQ2pCLFdBQVcsQ0FBUztJQUNwQixPQUFPLENBQVU7SUFFbEIsa0JBQWtCLEdBQTRCLEVBQUUsQ0FBQztJQUNqRCxtQkFBbUIsR0FBa0IsSUFBSSxDQUFDO0lBQzFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztJQUMxQixnQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO0lBQ3ZDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsaUJBQWlCLEdBQWtCLElBQUksQ0FBQztJQUN4QyxxQkFBcUIsR0FBYSxFQUFFLENBQUM7SUFDckMseUJBQXlCLEdBQW1CLENBQUMsQ0FBUSxDQUFDO0lBQ3RELFVBQVUsR0FBbUQsSUFBSSxDQUFDO0lBQ2xFLFdBQVcsR0FB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QUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsWUFBWSxnQ0FBZ0MsV0FBVyxpQ0FBaUMsSUFBQSx1QkFBWSxFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxSixDQUFDOztBQTc5Qkwsa0JBODlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCAqIGFzIGRvdGVudiBmcm9tIFwiZG90ZW52XCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBwcmV0dHlIcnRpbWUgZnJvbSBcInByZXR0eS1ocnRpbWVcIjtcbmltcG9ydCB7RXhpdEVycm9yfSBmcm9tIFwiLi9leGl0LWVycm9yXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7U2VydmljZX0gZnJvbSBcIi4vc2VydmljZVwiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gXCIuL2Fzc2VydHNcIjtcbmltcG9ydCB7Q2FjaGVFbnRyeX0gZnJvbSBcIi4vY2FjaGUtZW50cnlcIjtcbmltcG9ydCB7TXV0ZXh9IGZyb20gXCIuL211dGV4XCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3ZcIjtcbmltcG9ydCBleGVjYSBmcm9tIFwiZXhlY2FcIjtcbmltcG9ydCB7Q0lDRFZhcmlhYmxlfSBmcm9tIFwiLi92YXJpYWJsZXMtZnJvbS1maWxlc1wiO1xuXG5pbnRlcmZhY2UgSm9iT3B0aW9ucyB7XG4gICAgYXJndjogQXJndjtcbiAgICB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICBkYXRhOiBhbnk7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGJhc2VOYW1lOiBzdHJpbmc7XG4gICAgcGlwZWxpbmVJaWQ6IG51bWJlcjtcbiAgICBnaXREYXRhOiBHaXREYXRhO1xuICAgIGdsb2JhbFZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIHZhcmlhYmxlc0Zyb21GaWxlczoge1tuYW1lOiBzdHJpbmddOiBDSUNEVmFyaWFibGV9O1xuICAgIHByZWRlZmluZWRWYXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogYW55fTtcbiAgICBtYXRyaXhWYXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHwgbnVsbDtcbiAgICBub2RlSW5kZXg6IG51bWJlciB8IG51bGw7XG4gICAgbm9kZXNUb3RhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgSm9iIHtcblxuICAgIHN0YXRpYyByZWFkb25seSBpbGxlZ2FsSm9iTmFtZXMgPSBbXG4gICAgICAgIFwiaW5jbHVkZVwiLCBcImxvY2FsX2NvbmZpZ3VyYXRpb25cIiwgXCJpbWFnZVwiLCBcInNlcnZpY2VzXCIsXG4gICAgICAgIFwic3RhZ2VzXCIsIFwidHlwZXNcIiwgXCJiZWZvcmVfc2NyaXB0XCIsIFwiZGVmYXVsdFwiLFxuICAgICAgICBcImFmdGVyX3NjcmlwdFwiLCBcInZhcmlhYmxlc1wiLCBcImNhY2hlXCIsIFwid29ya2Zsb3dcIixcbiAgICBdO1xuXG4gICAgcmVhZG9ubHkgYXJndjogQXJndjtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmFzZU5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBkZXBlbmRlbmNpZXM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgICByZWFkb25seSBlbnZpcm9ubWVudD86IHtuYW1lOiBzdHJpbmc7IHVybDogc3RyaW5nIHwgbnVsbH07XG4gICAgcmVhZG9ubHkgam9iSWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBydWxlcz86IHtcbiAgICAgICAgaWY6IHN0cmluZztcbiAgICAgICAgd2hlbjogc3RyaW5nO1xuICAgICAgICBleGlzdHM6IHN0cmluZ1tdO1xuICAgICAgICBhbGxvd19mYWlsdXJlOiBib29sZWFuO1xuICAgICAgICB2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIH1bXTtcblxuICAgIHJlYWRvbmx5IGFsbG93RmFpbHVyZTogYm9vbGVhbjtcbiAgICByZWFkb25seSB3aGVuOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZXhpc3RzOiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGdpdERhdGE6IEdpdERhdGE7XG5cbiAgICBwcml2YXRlIF9leHBhbmRlZFZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICBwcml2YXRlIF9wcmVzY3JpcHRzRXhpdENvZGU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2FmdGVyU2NyaXB0c0V4aXRDb2RlID0gMDtcbiAgICBwcml2YXRlIF9jb3ZlcmFnZVBlcmNlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX3J1bm5pbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9jb250YWluZXJJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfc2VydmljZU5ldHdvcmtJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfY29udGFpbmVyVm9sdW1lTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCA9IC0xIGFzIGFueTtcbiAgICBwcml2YXRlIF9wcm9kdWNlcnM6IHtuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbH1bXSB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2pvYk5hbWVQYWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBfY29udGFpbmVyc1RvQ2xlYW46IHN0cmluZ1tdID0gW107XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGpvYkRhdGE6IGFueTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zO1xuXG4gICAgY29uc3RydWN0b3IgKG9wdDogSm9iT3B0aW9ucykge1xuICAgICAgICBjb25zdCBqb2JEYXRhID0gb3B0LmRhdGE7XG4gICAgICAgIGNvbnN0IGdpdERhdGEgPSBvcHQuZ2l0RGF0YTtcbiAgICAgICAgY29uc3QgZ2xvYmFsVmFyaWFibGVzID0gb3B0Lmdsb2JhbFZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRnJvbUZpbGVzID0gb3B0LnZhcmlhYmxlc0Zyb21GaWxlcztcbiAgICAgICAgY29uc3QgYXJndiA9IG9wdC5hcmd2O1xuICAgICAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBhcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBhcmd2VmFyaWFibGVzID0gYXJndi52YXJpYWJsZTtcbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IG9wdC5wcmVkZWZpbmVkVmFyaWFibGVzO1xuXG4gICAgICAgIHRoaXMuYXJndiA9IGFyZ3Y7XG4gICAgICAgIHRoaXMud3JpdGVTdHJlYW1zID0gb3B0LndyaXRlU3RyZWFtcztcbiAgICAgICAgdGhpcy5naXREYXRhID0gb3B0LmdpdERhdGE7XG4gICAgICAgIHRoaXMubmFtZSA9IG9wdC5uYW1lO1xuICAgICAgICB0aGlzLmJhc2VOYW1lID0gb3B0LmJhc2VOYW1lO1xuICAgICAgICB0aGlzLmpvYklkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XG4gICAgICAgIHRoaXMuam9iRGF0YSA9IG9wdC5kYXRhO1xuICAgICAgICB0aGlzLnBpcGVsaW5lSWlkID0gb3B0LnBpcGVsaW5lSWlkO1xuXG4gICAgICAgIHRoaXMud2hlbiA9IGpvYkRhdGEud2hlbiB8fCBcIm9uX3N1Y2Nlc3NcIjtcbiAgICAgICAgdGhpcy5leGlzdHMgPSBqb2JEYXRhLmV4aXN0cyB8fCBbXTtcbiAgICAgICAgdGhpcy5hbGxvd0ZhaWx1cmUgPSBqb2JEYXRhLmFsbG93X2ZhaWx1cmUgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gam9iRGF0YS5kZXBlbmRlbmNpZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5ydWxlcyA9IGpvYkRhdGEucnVsZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHR5cGVvZiBqb2JEYXRhLmVudmlyb25tZW50ID09PSBcInN0cmluZ1wiID8ge25hbWU6IGpvYkRhdGEuZW52aXJvbm1lbnR9IDogam9iRGF0YS5lbnZpcm9ubWVudDtcblxuICAgICAgICBjb25zdCBtYXRyaXhWYXJpYWJsZXMgPSBvcHQubWF0cml4VmFyaWFibGVzID8/IHt9O1xuICAgICAgICAvLyBNZXJnZSBhbmQgZXhwYW5kIHZhcmlhYmxlcyByZWN1cnNpdmVcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRWYXJpYWJsZXMgPSBVdGlscy5leHBhbmRSZWN1cnNpdmUoey4uLmdsb2JhbFZhcmlhYmxlcyB8fCB7fSwgLi4uam9iRGF0YS52YXJpYWJsZXMgfHwge30sIC4uLm1hdHJpeFZhcmlhYmxlcywgLi4ucHJlZGVmaW5lZFZhcmlhYmxlcywgLi4uYXJndlZhcmlhYmxlc30pO1xuXG4gICAgICAgIC8vIEV4cGFuZCBlbnZpcm9ubWVudFxuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC5uYW1lID0gVXRpbHMuZXhwYW5kVGV4dCh0aGlzLmVudmlyb25tZW50Lm5hbWUsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC51cmwgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuZW52aXJvbm1lbnQudXJsLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBqb2Igc3BlY2lmaWMgcHJlZGVmaW5lZCB2YXJpYWJsZXNcbiAgICAgICAgbGV0IGNpUHJvamVjdERpciA9IGAke2N3ZH1gO1xuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGNpUHJvamVjdERpciA9IFwiL2djbC1idWlsZHNcIjtcbiAgICAgICAgfSBlbHNlIGlmIChhcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBjaVByb2plY3REaXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2J1aWxkcy8ke3RoaXMuc2FmZUpvYk5hbWV9YDtcbiAgICAgICAgfVxuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX0lEXCJdID0gYCR7dGhpcy5qb2JJZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUElQRUxJTkVfSURcIl0gPSBgJHt0aGlzLnBpcGVsaW5lSWlkICsgMTAwMH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUElQRUxJTkVfSUlEXCJdID0gYCR7dGhpcy5waXBlbGluZUlpZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX05BTUVcIl0gPSBgJHt0aGlzLm5hbWV9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9OQU1FX1NMVUdcIl0gPSBgJHt0aGlzLm5hbWUucmVwbGFjZSgvW15hLXpcXGRdKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikuc2xpY2UoMCwgNjMpLnJlcGxhY2UoLy0kLywgXCJcIikudG9Mb3dlckNhc2UoKX1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX1NUQUdFXCJdID0gYCR7dGhpcy5zdGFnZX1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUFJPSkVDVF9ESVJcIl0gPSBjaVByb2plY3REaXI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfVVJMXCJdID0gYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9Ly0vam9icy8ke3RoaXMuam9iSWR9YDsgLy8gQ2hhbmdlcyBvbiByZXJ1bi5cbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BJUEVMSU5FX1VSTFwiXSA9IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fS9waXBlbGluZXMvJHt0aGlzLnBpcGVsaW5lSWlkfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9FTlZJUk9OTUVOVF9OQU1FXCJdID0gdGhpcy5lbnZpcm9ubWVudD8ubmFtZSA/PyBcIlwiO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfRU5WSVJPTk1FTlRfU0xVR1wiXSA9IHRoaXMuZW52aXJvbm1lbnQ/Lm5hbWU/LnJlcGxhY2UoL1teYS16XFxkXSsvaWcsIFwiLVwiKS5yZXBsYWNlKC9eLS8sIFwiXCIpLnNsaWNlKDAsIDIzKS5yZXBsYWNlKC8tJC8sIFwiXCIpLnRvTG93ZXJDYXNlKCkgPz8gXCJcIjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0VOVklST05NRU5UX1VSTFwiXSA9IHRoaXMuZW52aXJvbm1lbnQ/LnVybCA/PyBcIlwiO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfTk9ERV9JTkRFWFwiXSA9IGAke29wdC5ub2RlSW5kZXh9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX05PREVfVE9UQUxcIl0gPSBgJHtvcHQubm9kZXNUb3RhbH1gO1xuXG4gICAgICAgIC8vIEZpbmQgZW52aXJvbm1lbnQgbWF0Y2hlZCB2YXJpYWJsZXNcbiAgICAgICAgY29uc3QgZW52TWF0Y2hlZFZhcmlhYmxlcyA9IFV0aWxzLmZpbmRFbnZNYXRjaGVkVmFyaWFibGVzKHZhcmlhYmxlc0Zyb21GaWxlcywgdGhpcy5maWxlVmFyaWFibGVzRGlyLCB0aGlzLmVudmlyb25tZW50KTtcblxuICAgICAgICAvLyBNZXJnZSBhbmQgZXhwYW5kIGFmdGVyIGZpbmRpbmcgZW52IG1hdGNoZWQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuX2V4cGFuZGVkVmFyaWFibGVzID0gVXRpbHMuZXhwYW5kUmVjdXJzaXZlKHsuLi5nbG9iYWxWYXJpYWJsZXMgfHwge30sIC4uLmpvYkRhdGEudmFyaWFibGVzIHx8IHt9LCAuLi5tYXRyaXhWYXJpYWJsZXMsIC4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmVudk1hdGNoZWRWYXJpYWJsZXMsIC4uLmFyZ3ZWYXJpYWJsZXN9KTtcblxuICAgICAgICAvLyBTZXQge3doZW4sIGFsbG93RmFpbHVyZX0gYmFzZWQgb24gcnVsZXMgcmVzdWx0XG4gICAgICAgIGlmICh0aGlzLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlUmVzdWx0ID0gVXRpbHMuZ2V0UnVsZXNSZXN1bHQoe2N3ZCwgcnVsZXM6IHRoaXMucnVsZXMsIHZhcmlhYmxlczogdGhpcy5leHBhbmRlZFZhcmlhYmxlc30pO1xuICAgICAgICAgICAgdGhpcy53aGVuID0gcnVsZVJlc3VsdC53aGVuO1xuICAgICAgICAgICAgdGhpcy5hbGxvd0ZhaWx1cmUgPSBydWxlUmVzdWx0LmFsbG93RmFpbHVyZTtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkVmFyaWFibGVzID0gVXRpbHMuZXhwYW5kUmVjdXJzaXZlKHsuLi5nbG9iYWxWYXJpYWJsZXMgfHwge30sIC4uLmpvYkRhdGEudmFyaWFibGVzIHx8IHt9LCAuLi5ydWxlUmVzdWx0LnZhcmlhYmxlcywgLi4ubWF0cml4VmFyaWFibGVzLCAuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5lbnZNYXRjaGVkVmFyaWFibGVzLCAuLi5hcmd2VmFyaWFibGVzfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgQ0lfUkVHSVNUUlkgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuX2V4cGFuZGVkVmFyaWFibGVzW1wiQ0lfUkVHSVNUUllcIl0gPSB0aGlzLl9leHBhbmRlZFZhcmlhYmxlc1tcIkNJX1JFR0lTVFJZXCJdID8/IGBsb2NhbC1yZWdpc3RyeS4ke3RoaXMuZ2l0RGF0YS5yZW1vdGUuaG9zdH1gO1xuICAgICAgICB0aGlzLl9leHBhbmRlZFZhcmlhYmxlc1tcIkNJX1JFR0lTVFJZX0lNQUdFXCJdID0gYCR7dGhpcy5fZXhwYW5kZWRWYXJpYWJsZXNbXCJDSV9SRUdJU1RSWVwiXX0vJHt0aGlzLl9leHBhbmRlZFZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfUEFUSFwiXX1gO1xuXG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aXZlICYmICh0aGlzLndoZW4gIT09IFwibWFudWFsXCIgfHwgdGhpcy5pbWFnZU5hbWUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGAke3RoaXMuY2hhbGtKb2JOYW1lfSBASW50ZXJhY3RpdmUgZGVjb3JhdG9yIGNhbm5vdCBoYXZlIGltYWdlOiBhbmQgbXVzdCBiZSB3aGVuOm1hbnVhbGApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5qZWN0U1NIQWdlbnQgJiYgdGhpcy5pbWFnZU5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYCR7dGhpcy5jaGFsa0pvYk5hbWV9IEBJbmplY3RTU0hBZ2VudCBjYW4gb25seSBiZSB1c2VkIHdpdGggaW1hZ2U6YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUgJiYgYXJndi5tb3VudENhY2hlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgICAgIGMucGF0aHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVXRpbHMuZXhwYW5kVGV4dChwLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGguaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGAke3RoaXMubmFtZX0gY2Fubm90IGhhdmUgKiBpbiBjYWNoZSBwYXRocywgd2hlbiAtLW1vdW50LWNhY2hlIGlzIGVuYWJsZWRgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGV4cGFuZGVkVmFyaWFibGVzICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGdldCBhcnRpZmFjdHNUb1NvdXJjZSAoKSB7XG4gICAgICAgIGlmICh0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNUb1NvdXJjZVwiXSAhPSBudWxsKSByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYXJ0aWZhY3RzVG9Tb3VyY2VcIl07XG4gICAgICAgIHJldHVybiB0aGlzLmFyZ3YuYXJ0aWZhY3RzVG9Tb3VyY2U7XG4gICAgfVxuXG4gICAgZ2V0IGNoYWxrSm9iTmFtZSAoKSB7XG4gICAgICAgIHJldHVybiBjaGFsa2B7Ymx1ZUJyaWdodCAke3RoaXMubmFtZS5wYWRFbmQodGhpcy5qb2JOYW1lUGFkKX19YDtcbiAgICB9XG5cbiAgICBnZXQgc2FmZUpvYk5hbWUgKCkge1xuICAgICAgICByZXR1cm4gVXRpbHMuc2FmZURvY2tlclN0cmluZyh0aGlzLm5hbWUpO1xuICAgIH1cblxuICAgIGdldCBuZWVkcyAoKToge2pvYjogc3RyaW5nOyBhcnRpZmFjdHM6IGJvb2xlYW47IG9wdGlvbmFsOiBib29sZWFufVtdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG5lZWRzID0gdGhpcy5qb2JEYXRhW1wibmVlZHNcIl07XG4gICAgICAgIGlmICghbmVlZHMpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBsaXN0OiB7am9iOiBzdHJpbmc7IGFydGlmYWN0czogYm9vbGVhbjsgb3B0aW9uYWw6IGJvb2xlYW59W10gPSBbXTtcbiAgICAgICAgbmVlZHMuZm9yRWFjaCgobmVlZDogYW55KSA9PiB7XG4gICAgICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIGpvYjogdHlwZW9mIG5lZWQgPT09IFwic3RyaW5nXCIgPyBuZWVkIDogbmVlZC5qb2IsXG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RzOiB0eXBlb2YgbmVlZCA9PT0gXCJzdHJpbmdcIiA/IHRydWUgOiBuZWVkLmFydGlmYWN0cyxcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHlwZW9mIG5lZWQgPT09IFwic3RyaW5nXCIgPyBmYWxzZSA6IG5lZWQub3B0aW9uYWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGdldCBidWlsZFZvbHVtZU5hbWUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgZ2NsLSR7dGhpcy5zYWZlSm9iTmFtZX0tJHt0aGlzLmpvYklkfS1idWlsZGA7XG4gICAgfVxuXG4gICAgZ2V0IHRtcFZvbHVtZU5hbWUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgZ2NsLSR7dGhpcy5zYWZlSm9iTmFtZX0tJHt0aGlzLmpvYklkfS10bXBgO1xuICAgIH1cblxuICAgIGdldCBpbWFnZU5hbWUgKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuICAgICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltYWdlTmFtZSA9IFV0aWxzLmV4cGFuZFRleHQoaW1hZ2UubmFtZSwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgIHJldHVybiBpbWFnZU5hbWUuaW5jbHVkZXMoXCI6XCIpID8gaW1hZ2VOYW1lIDogYCR7aW1hZ2VOYW1lfTpsYXRlc3RgO1xuICAgIH1cblxuICAgIGdldCBpbWFnZUVudHJ5cG9pbnQgKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG5cbiAgICAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UuZW50cnlwb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoaW1hZ2UuZW50cnlwb2ludCksIFwiaW1hZ2U6ZW50cnlwb2ludCBtdXN0IGJlIGFuIGFycmF5XCIpO1xuICAgICAgICByZXR1cm4gaW1hZ2UuZW50cnlwb2ludDtcbiAgICB9XG5cbiAgICBnZXQgc2VydmljZXMgKCk6IFNlcnZpY2VbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzZXJ2aWNlc1wiXTtcbiAgICB9XG5cbiAgICBzZXQgam9iTmFtZVBhZCAoam9iTmFtZVBhZDogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLl9qb2JOYW1lUGFkID09IG51bGwsIFwidGhpcy5fam9iTmFtZVBhZCBjYW4gb25seSBiZSBzZXQgb25jZVwiKTtcbiAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IGpvYk5hbWVQYWQ7XG4gICAgfVxuXG4gICAgZ2V0IGpvYk5hbWVQYWQgKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qb2JOYW1lUGFkID8/IDA7XG4gICAgfVxuXG4gICAgZ2V0IHByb2R1Y2VycyAoKToge25hbWU6IHN0cmluZzsgZG90ZW52OiBzdHJpbmcgfCBudWxsfVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgc2V0IHByb2R1Y2VycyAocHJvZHVjZXJzOiB7bmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGx9W10gfCBudWxsKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLl9wcm9kdWNlcnMgPT0gbnVsbCwgXCJ0aGlzLl9wcm9kdWNlcnMgY2FuIG9ubHkgYmUgc2V0IG9uY2VcIik7XG4gICAgICAgIHRoaXMuX3Byb2R1Y2VycyA9IHByb2R1Y2VycztcbiAgICB9XG5cbiAgICBnZXQgc3RhZ2UgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzdGFnZVwiXSB8fCBcInRlc3RcIjtcbiAgICB9XG5cbiAgICBnZXQgaW50ZXJhY3RpdmUgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiaW50ZXJhY3RpdmVcIl0gfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGluamVjdFNTSEFnZW50ICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImluamVjdFNTSEFnZW50XCJdIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBkZXNjcmlwdGlvbiAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImRlc2NyaXB0aW9uXCJdID8/IFwiXCI7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0cyAoKToge3BhdGhzPzogc3RyaW5nW107IGV4Y2x1ZGU/OiBzdHJpbmdbXTsgcmVwb3J0cz86IHtkb3RlbnY/OiBzdHJpbmd9OyB3aGVuPzogc3RyaW5nfSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYXJ0aWZhY3RzXCJdO1xuICAgIH1cblxuICAgIGdldCBjYWNoZSAoKTogQ2FjaGVFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImNhY2hlXCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBiZWZvcmVTY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJiZWZvcmVfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHMgKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImFmdGVyX3NjcmlwdFwiXSB8fCBbXTtcbiAgICB9XG5cbiAgICBnZXQgc2NyaXB0cyAoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wic2NyaXB0XCJdO1xuICAgIH1cblxuICAgIGdldCB0cmlnZ2VyICgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1widHJpZ2dlclwiXTtcbiAgICB9XG5cbiAgICBnZXQgcHJlU2NyaXB0c0V4aXRDb2RlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZTtcbiAgICB9XG5cbiAgICBnZXQgYWZ0ZXJTY3JpcHRzRXhpdENvZGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGU7XG4gICAgfVxuXG4gICAgZ2V0IHJ1bm5pbmcgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVubmluZztcbiAgICB9XG5cbiAgICBnZXQgc3RhcnRlZCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5uaW5nIHx8IHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgZmluaXNoZWQgKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX3J1bm5pbmcgJiYgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlICE9PSBudWxsO1xuICAgIH1cblxuICAgIGdldCBjb3ZlcmFnZVBlcmNlbnQgKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY292ZXJhZ2VQZXJjZW50O1xuICAgIH1cblxuICAgIGdldCBmaWxlVmFyaWFibGVzRGlyICgpIHtcbiAgICAgICAgcmV0dXJuIGAvdG1wL2dpdGxhYi1jaS1sb2NhbC1maWxlLXZhcmlhYmxlcy0ke3RoaXMuX2V4cGFuZGVkVmFyaWFibGVzW1wiQ0lfUFJPSkVDVF9QQVRIX1NMVUdcIl19LSR7dGhpcy5qb2JJZH1gO1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fcnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgYXJndiA9IHRoaXMuYXJndjtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IHJlcG9ydHNEb3RlbnZWYXJpYWJsZXMgPSBhd2FpdCB0aGlzLmluaXRQcm9kdWNlclJlcG9ydHNEb3RlbnZWYXJpYWJsZXMod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgY29uc3Qgc2FmZUpvYm5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICB0aGlzLl9leHBhbmRlZFZhcmlhYmxlcyA9IHsuLi50aGlzLmV4cGFuZGVkVmFyaWFibGVzLCAuLi5yZXBvcnRzRG90ZW52VmFyaWFibGVzfTtcblxuICAgICAgICBjb25zdCBvdXRwdXRMb2dGaWxlUGF0aCA9IGAke2FyZ3YuY3dkfS8ke2FyZ3Yuc3RhdGVEaXJ9L291dHB1dC8ke3NhZmVKb2JuYW1lfS5sb2dgO1xuICAgICAgICBhd2FpdCBmcy5lbnN1cmVGaWxlKG91dHB1dExvZ0ZpbGVQYXRoKTtcbiAgICAgICAgYXdhaXQgZnMudHJ1bmNhdGUob3V0cHV0TG9nRmlsZVBhdGgpO1xuXG4gICAgICAgIGlmICghdGhpcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBzdGFydGluZ30gJHt0aGlzLmltYWdlTmFtZSA/PyBcInNoZWxsXCJ9ICh7eWVsbG93ICR7dGhpcy5zdGFnZX19KVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHRtcFZvbHVtZU5hbWUgPSB0aGlzLnRtcFZvbHVtZU5hbWU7XG4gICAgICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRGlyID0gdGhpcy5maWxlVmFyaWFibGVzRGlyO1xuXG4gICAgICAgICAgICBjb25zdCB2b2x1bWVQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgdm9sdW1lUHJvbWlzZXMucHVzaChVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJ2b2x1bWVcIiwgXCJjcmVhdGVcIiwgYCR7YnVpbGRWb2x1bWVOYW1lfWBdLCBhcmd2LmN3ZCkpO1xuICAgICAgICAgICAgdm9sdW1lUHJvbWlzZXMucHVzaChVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJ2b2x1bWVcIiwgXCJjcmVhdGVcIiwgYCR7dG1wVm9sdW1lTmFtZX1gXSwgYXJndi5jd2QpKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLnB1c2goYnVpbGRWb2x1bWVOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLnB1c2godG1wVm9sdW1lTmFtZSk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh2b2x1bWVQcm9taXNlcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5zcGF3bihbXG4gICAgICAgICAgICAgICAgXCJkb2NrZXJcIiwgXCJjcmVhdGVcIiwgYC0tdm9sdW1lPSR7YnVpbGRWb2x1bWVOYW1lfTovZ2NsLWJ1aWxkc2AsIGAtLXZvbHVtZT0ke3RtcFZvbHVtZU5hbWV9OiR7dGhpcy5maWxlVmFyaWFibGVzRGlyfWAsIFwiZG9ja2VyLmlvL2ZpcmVjb3cvZ2l0bGFiLWNpLWxvY2FsLXV0aWxcIixcbiAgICAgICAgICAgICAgICBcImJhc2hcIiwgXCItY1wiLCBcImNob3duIDA6MCAtUiAvZ2NsLWJ1aWxkcy8gJiYgY2htb2QgYStydyAtUiAvZ2NsLWJ1aWxkcy8gJiYgY2htb2QgYStydyAtUiAvdG1wL1wiLFxuICAgICAgICAgICAgXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhmaWxlVmFyaWFibGVzRGlyKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImNwXCIsIGAke2ZpbGVWYXJpYWJsZXNEaXJ9Ly5gLCBgJHtjb250YWluZXJJZH06JHtmaWxlVmFyaWFibGVzRGlyfWBdLCBhcmd2LmN3ZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHthcmd2LnN0YXRlRGlyfS9idWlsZHMvLmRvY2tlci8uYCAsIGAke2NvbnRhaW5lcklkfTovZ2NsLWJ1aWxkc2BdLCBhcmd2LmN3ZCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJzdGFydFwiLCBjb250YWluZXJJZF0sIGFyZ3YuY3dkKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInJtXCIsIGNvbnRhaW5lcklkXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBjb3BpZWQgdG8gZG9ja2VyIHZvbHVtZXN9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlcnZpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRG9ja2VyTmV0d29yayhgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH1gKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiB0aGlzLnNlcnZpY2VzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCBzZXJ2aWNlLmdldE5hbWUodGhpcy5leHBhbmRlZFZhcmlhYmxlcykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VDb250YWluZXJJZCA9IGF3YWl0IHRoaXMuc3RhcnRTZXJ2aWNlKHdyaXRlU3RyZWFtcywgc2VydmljZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvbnRhbmVyTG9nRmlsZSA9IGAke2FyZ3YuY3dkfS8ke2FyZ3Yuc3RhdGVEaXJ9L3NlcnZpY2VzLW91dHB1dC8ke3RoaXMuc2FmZUpvYk5hbWV9LyR7c2VydmljZS5nZXROYW1lKHRoaXMuX2V4cGFuZGVkVmFyaWFibGVzKX0tJHtzZXJ2aWNlLmluZGV4fS5sb2dgO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmljZUhlYWx0aENoZWNrKHdyaXRlU3RyZWFtcywgc2VydmljZSwgc2VydmljZUNvbnRhbmVyTG9nRmlsZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qge2FsbH0gPSBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJsb2dzXCIsIHNlcnZpY2VDb250YWluZXJJZF0pO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmVuc3VyZUZpbGUoc2VydmljZUNvbnRhbmVyTG9nRmlsZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKHNlcnZpY2VDb250YW5lckxvZ0ZpbGUsIGFsbCA/PyBcIlNlcnZpY2UgY29udGFpbmVyIGhhZCBubyBvdXRwdXRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmVzY3JpcHRzID0gdGhpcy5iZWZvcmVTY3JpcHRzLmNvbmNhdCh0aGlzLnNjcmlwdHMpO1xuICAgICAgICB0aGlzLl9leHBhbmRlZFZhcmlhYmxlc1tcIkNJX0pPQl9TVEFUVVNcIl0gPSBcInJ1bm5pbmdcIjtcbiAgICAgICAgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjU2NyaXB0cyhwcmVzY3JpcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJTY3JpcHRzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPiAwICYmICF0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgZmFsc2UpfVxcbmApO1xuICAgICAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hZnRlclNjcmlwdHMubGVuZ3RoID09PSAwICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA+IDAgJiYgdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lLCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIHRydWUpfVxcbmApO1xuICAgICAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiB0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgdHJ1ZSl9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiAhdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lLCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIGZhbHNlKX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFmdGVyU2NyaXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9leHBhbmRlZFZhcmlhYmxlc1tcIkNJX0pPQl9TVEFUVVNcIl0gPSB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPT09IDAgPyBcInN1Y2Nlc3NcIiA6IFwiZmFpbGVkXCI7XG4gICAgICAgICAgICB0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZSA9IGF3YWl0IHRoaXMuZXhlY1NjcmlwdHModGhpcy5hZnRlclNjcmlwdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlID4gMCkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlLCB0cnVlLCBcIiBhZnRlcl9zY3JpcHRcIil9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAke3RoaXMuZ2V0RmluaXNoZWRTdHJpbmcoc3RhcnRUaW1lKX1cXG5gKTtcblxuICAgICAgICBpZiAodGhpcy5qb2JEYXRhW1wiY292ZXJhZ2VcIl0pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvdmVyYWdlUGVyY2VudCA9IGF3YWl0IFV0aWxzLmdldENvdmVyYWdlUGVyY2VudChhcmd2LmN3ZCwgYXJndi5zdGF0ZURpciwgdGhpcy5qb2JEYXRhW1wiY292ZXJhZ2VcIl0sIHNhZmVKb2JuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2xlYW51cFJlc291cmNlcyAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQpO1xuXG4gICAgICAgIGlmICghdGhpcy5hcmd2LmNsZWFudXApIHJldHVybjtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInJtXCIsIFwiLWZcIiwgYCR7aWR9YF0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlTmV0d29ya0lkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcIm5ldHdvcmtcIiwgXCJybVwiLCBgJHt0aGlzLl9zZXJ2aWNlTmV0d29ya0lkfWBdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lclZvbHVtZSBvZiB0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJ2b2x1bWVcIiwgXCJybVwiLCBgJHtjb250YWluZXJWb2x1bWV9YF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRGlyID0gdGhpcy5maWxlVmFyaWFibGVzRGlyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMucm0oZmlsZVZhcmlhYmxlc0Rpciwge3JlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWV9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUluamVjdFNTSEFnZW50T3B0aW9ucyAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbmplY3RTU0hBZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIgfHwgKHByb2Nlc3MuZW52Lk9TVFlQRT8ubWF0Y2goL15kYXJ3aW4vKSA/PyBudWxsKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiLS1lbnYgU1NIX0FVVEhfU09DSz0vcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29jayAtdiAvcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29jazovcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29ja1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgLS1lbnYgU1NIX0FVVEhfU09DSz0ke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9IC12ICR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS306JHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVNjcmlwdENvbW1hbmRzIChzY3JpcHRzOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgY21kID0gXCJcIjtcbiAgICAgICAgc2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpID0+IHtcbiAgICAgICAgICAgIC8vIFByaW50IGNvbW1hbmQgZWNobydlZCBpbiBjb2xvclxuICAgICAgICAgICAgY29uc3Qgc3BsaXQgPSBzY3JpcHQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICAgICAgICAgIGNvbnN0IG11bHRpbGluZVRleHQgPSBzcGxpdC5sZW5ndGggPiAxID8gXCIgIyBjb2xsYXBzZWQgbXVsdGktbGluZSBjb21tYW5kXCIgOiBcIlwiO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IHNwbGl0WzBdPy5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIikucmVwbGFjZSgvXCIvZywgXCJcXFxcXFxcIlwiKS5yZXBsYWNlKC9bJF0vZywgXCJcXFxcJFwiKTtcbiAgICAgICAgICAgIGNtZCArPSBjaGFsa2BlY2hvIFwie2dyZWVuICQgJHt0ZXh0fSR7bXVsdGlsaW5lVGV4dH19XCJcXG5gO1xuXG4gICAgICAgICAgICAvLyBFeGVjdXRlIGFjdHVhbCBzY3JpcHRcbiAgICAgICAgICAgIGNtZCArPSBgJHtzY3JpcHR9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtb3VudENhY2hlQ21kICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUgJiYgIXRoaXMuYXJndi5tb3VudENhY2hlKSByZXR1cm4gXCJcIjtcblxuICAgICAgICBsZXQgY21kID0gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUNhY2hlTmFtZSA9IGF3YWl0IGMuZ2V0VW5pcXVlQ2FjaGVOYW1lKHRoaXMuYXJndi5jd2QsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgYy5wYXRocy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFV0aWxzLmV4cGFuZFRleHQocCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBtb3VudGluZyBjYWNoZX0gZm9yIHBhdGggJHtwYXRofVxcbmApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlTW91bnQgPSBVdGlscy5zYWZlRG9ja2VyU3RyaW5nKGBnY2wtJHt0aGlzLmV4cGFuZGVkVmFyaWFibGVzLkNJX1BST0pFQ1RfUEFUSF9TTFVHfS0ke3VuaXF1ZUNhY2hlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYC12ICR7Y2FjaGVNb3VudH06L2djbC1idWlsZHMvJHtwYXRofSBgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGV4ZWNTY3JpcHRzIChzY3JpcHRzOiBzdHJpbmdbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGNvbnN0IG91dHB1dEZpbGVzUGF0aCA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vb3V0cHV0LyR7c2FmZUpvYk5hbWV9LmxvZ2A7XG4gICAgICAgIGNvbnN0IGJ1aWxkVm9sdW1lTmFtZSA9IHRoaXMuYnVpbGRWb2x1bWVOYW1lO1xuICAgICAgICBjb25zdCB0bXBWb2x1bWVOYW1lID0gdGhpcy50bXBWb2x1bWVOYW1lO1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcblxuICAgICAgICBpZiAoc2NyaXB0cy5sZW5ndGggPT09IDAgfHwgc2NyaXB0c1swXSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvcHkgZ2l0IHRyYWNrZWQgZmlsZXMgdG8gYnVpbGQgZm9sZGVyIGlmIHNoZWxsIGlzb2xhdGlvbiBlbmFibGVkLlxuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMucnN5bmNUcmFja2VkRmlsZXMoY3dkLCBzdGF0ZURpciwgYCR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgY29uc3QgaUNtZCA9IHRoaXMuZ2VuZXJhdGVTY3JpcHRDb21tYW5kcyhzY3JpcHRzKTtcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlQ3AgPSBleGVjYShpQ21kLCB7XG4gICAgICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgICAgIHNoZWxsOiBcImJhc2hcIixcbiAgICAgICAgICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCBcImluaGVyaXRcIiwgXCJpbmhlcml0XCJdLFxuICAgICAgICAgICAgICAgIGVudjogey4uLnRoaXMuZXhwYW5kZWRWYXJpYWJsZXMsIC4uLnByb2Nlc3MuZW52fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlQ3Aub24oXCJleGl0XCIsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMCkpO1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlQ3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCB0aGlzLmltYWdlTmFtZSk7XG5cbiAgICAgICAgICAgIGxldCBkb2NrZXJDbWQgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5wcml2aWxlZ2VkKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGBkb2NrZXIgY3JlYXRlIC0tcHJpdmlsZWdlZCAtdSAwOjAgLWkgJHt0aGlzLmdlbmVyYXRlSW5qZWN0U1NIQWdlbnRPcHRpb25zKCl9IGA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgZG9ja2VyIGNyZWF0ZSAtdSAwOjAgLWkgJHt0aGlzLmdlbmVyYXRlSW5qZWN0U1NIQWdlbnRPcHRpb25zKCl9IGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW5ldHdvcmsgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH0gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke2J1aWxkVm9sdW1lTmFtZX06L2djbC1idWlsZHMgYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt0bXBWb2x1bWVOYW1lfToke3RoaXMuZmlsZVZhcmlhYmxlc0Rpcn0gYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0td29ya2RpciAvZ2NsLWJ1aWxkcyBcIjtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB2b2x1bWUgb2YgdGhpcy5hcmd2LnZvbHVtZSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFIb3N0IG9mIHRoaXMuYXJndi5leHRyYUhvc3QpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tYWRkLWhvc3Q9JHtleHRyYUhvc3R9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5cG9pbnRGaWxlID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9zY3JpcHRzL2ltYWdlX2VudHJ5LyR7c2FmZUpvYk5hbWV9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludFswXSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tZW50cnlwb2ludCAnJyBcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKGVudHJ5cG9pbnRGaWxlLCBcIiMhL2Jpbi9zaFxcblwiKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZShlbnRyeXBvaW50RmlsZSwgYCR7dGhpcy5pbWFnZUVudHJ5cG9pbnQuam9pbihcIiBcIil9YCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmNobW9kKGVudHJ5cG9pbnRGaWxlLCBcIjA3NTVcIik7XG4gICAgICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tZW50cnlwb2ludCAnL2djbC1lbnRyeScgXCI7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoZW50cnlwb2ludEZpbGUsIFwiIFxcXCIkQFxcXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLWUgJHtrZXl9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBhd2FpdCB0aGlzLm1vdW50Q2FjaGVDbWQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAke3RoaXMuaW1hZ2VOYW1lfSBzaCAtYyBcIlxcbmA7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJpZiBbIC14IC91c3IvbG9jYWwvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2xvY2FsL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vYmFzaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvdXNyL2xvY2FsL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvbG9jYWwvYmluL3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2J1c3lib3gvc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvYnVzeWJveC9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsc2VcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGVjaG8gc2hlbGwgbm90IGZvdW5kXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGl0IDFcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImZpXFxuXFxcIlwiO1xuXG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGRvY2tlckNtZCwgY3dkLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcklkID0gY29udGFpbmVySWQ7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJzVG9DbGVhbi5wdXNoKHRoaXMuX2NvbnRhaW5lcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY29weUNhY2hlSW4od3JpdGVTdHJlYW1zKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5QXJ0aWZhY3RzSW4od3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBsZXQgY21kID0gXCJzZXQgLWVvIHBpcGVmYWlsXFxuXCI7XG4gICAgICAgIGNtZCArPSBcImV4ZWMgMDwgL2Rldi9udWxsXFxuXCI7XG5cbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTmFtZSAmJiB0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGNtZCArPSBgY2QgJHtzdGF0ZURpcn0vYnVpbGRzLyR7c2FmZUpvYk5hbWV9L1xcbmA7XG4gICAgICAgIH1cbiAgICAgICAgY21kICs9IHRoaXMuZ2VuZXJhdGVTY3JpcHRDb21tYW5kcyhzY3JpcHRzKTtcblxuICAgICAgICBjbWQgKz0gXCJleGl0IDBcXG5cIjtcblxuICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKGAke2N3ZH0vJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfWAsIGNtZCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgYXdhaXQgZnMuY2htb2QoYCR7Y3dkfS8ke3N0YXRlRGlyfS9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgXCIwNzU1XCIpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwiY3BcIiwgYCR7c3RhdGVEaXJ9L3NjcmlwdHMvJHtzYWZlSm9iTmFtZX1gLCBgJHt0aGlzLl9jb250YWluZXJJZH06L2djbC1jbWRgXSwgY3dkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbWFnZUVudHJ5cG9pbnQgJiYgdGhpcy5pbWFnZUVudHJ5cG9pbnRbMF0gIT0gXCJcIikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwiY3BcIiwgYCR7c3RhdGVEaXJ9L3NjcmlwdHMvaW1hZ2VfZW50cnkvJHtzYWZlSm9iTmFtZX1gLCBgJHt0aGlzLl9jb250YWluZXJJZH06L2djbC1lbnRyeWBdLCBjd2QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3AgPSBleGVjYSh0aGlzLl9jb250YWluZXJJZCA/IGBkb2NrZXIgc3RhcnQgLS1hdHRhY2ggLWkgJHt0aGlzLl9jb250YWluZXJJZH1gIDogXCJiYXNoXCIsIHtcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgIHNoZWxsOiBcImJhc2hcIixcbiAgICAgICAgICAgIGVudjogdGhpcy5leHBhbmRlZFZhcmlhYmxlcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0RnVuYyA9IChlOiBhbnksIHN0cmVhbTogKHR4dDogc3RyaW5nKSA9PiB2b2lkLCBjb2xvcml6ZTogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGAke2V9YC5zcGxpdCgvXFxyP1xcbi8pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0cmVhbShgJHt0aGlzLmNoYWxrSm9iTmFtZX0gYCk7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoXCJcXHUwMDFiWzMybSRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtKGAke2NvbG9yaXplKFwiPlwiKX0gYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmVhbShgJHtsaW5lfVxcbmApO1xuICAgICAgICAgICAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKG91dHB1dEZpbGVzUGF0aCwgYCR7bGluZX1cXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleGl0Q29kZSA9IGF3YWl0IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY3Auc3Rkb3V0Py5vbihcImRhdGFcIiwgKGUpID0+IG91dEZ1bmMoZSwgd3JpdGVTdHJlYW1zLnN0ZG91dC5iaW5kKHdyaXRlU3RyZWFtcyksIChzKSA9PiBjaGFsa2B7Z3JlZW5CcmlnaHQgJHtzfX1gKSk7XG4gICAgICAgICAgICBjcC5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoZSkgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3RkZXJyLmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtyZWRCcmlnaHQgJHtzfX1gKSk7XG5cbiAgICAgICAgICAgIGNwLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDApKTtcbiAgICAgICAgICAgIGNwLm9uKFwiZXJyb3JcIiwgKGVycikgPT4gcmVqZWN0KGVycikpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbj8uZW5kKFwiL2djbC1jbWRcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNwLnN0ZGluPy5lbmQoYC4vJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZXhpdENvZGUgPT0gMCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5Q2FjaGVPdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGl0Q29kZSA9PSAwIHx8IHRoaXMuYXJ0aWZhY3RzPy53aGVuID09PSBcImFsd2F5c1wiKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlBcnRpZmFjdHNPdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGl0Q29kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHB1bGxJbWFnZSAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGltYWdlVG9QdWxsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJpbWFnZVwiLCBcImluc3BlY3RcIiwgaW1hZ2VUb1B1bGxdKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBpZiAoZS5zdGRlcnI/LmluY2x1ZGVzKFwiTm8gc3VjaCBpbWFnZVwiKSB8fCBlLnN0ZGVycj8uaW5jbHVkZXMoXCJmYWlsZWQgdG8gZmluZCBpbWFnZVwiKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInB1bGxcIiwgaW1hZ2VUb1B1bGxdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBwdWxsZWR9ICR7aW1hZ2VUb1B1bGx9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbml0UHJvZHVjZXJSZXBvcnRzRG90ZW52VmFyaWFibGVzICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgcHJvZHVjZXJzID0gdGhpcy5wcm9kdWNlcnM7XG4gICAgICAgIGxldCBwcm9kdWNlclJlcG9ydHNFbnZzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWNlckRvdGVudiA9IFV0aWxzLmV4cGFuZFRleHQocHJvZHVjZXIuZG90ZW52LCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgICAgIGlmIChwcm9kdWNlckRvdGVudiA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHNhZmVQcm9kdWNlck5hbWUgPSBVdGlscy5zYWZlRG9ja2VyU3RyaW5nKHByb2R1Y2VyLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgZG90ZW52Rm9sZGVyID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlUHJvZHVjZXJOYW1lfS8uZ2l0bGFiLWNpLXJlcG9ydHMvZG90ZW52L2A7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhkb3RlbnZGb2xkZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG90ZW52RmlsZXMgPSAoYXdhaXQgVXRpbHMuc3Bhd24oW1wiZmluZFwiLCBcIi5cIiwgXCItdHlwZVwiLCBcImZcIl0sIGRvdGVudkZvbGRlcikpLnN0ZG91dC5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRvdGVudkZpbGUgb2YgZG90ZW52RmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvdGVudkZpbGUgPT0gXCJcIikgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VyUmVwb3J0RW52ID0gZG90ZW52LnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGAke2RvdGVudkZvbGRlcn0vJHtkb3RlbnZGaWxlfWApKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXJSZXBvcnRzRW52cyA9IHsuLi5wcm9kdWNlclJlcG9ydHNFbnZzLCAuLi5wcm9kdWNlclJlcG9ydEVudn07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgcmVwb3J0cy5kb3RlbnYgcHJvZHVjZWQgYnkgJyR7cHJvZHVjZXIubmFtZX0nIGNvdWxkIG5vdCBiZSBmb3VuZH1cXG5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9kdWNlclJlcG9ydHNFbnZzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlSW4gKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICh0aGlzLmFyZ3YubW91bnRDYWNoZSAmJiB0aGlzLmltYWdlTmFtZSkgcmV0dXJuO1xuICAgICAgICBpZiAoKCF0aGlzLmltYWdlTmFtZSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuXG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIVtcInB1bGxcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVOYW1lID0gYXdhaXQgYy5nZXRVbmlxdWVDYWNoZU5hbWUoY3dkLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlRm9sZGVyID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9jYWNoZS8ke2NhY2hlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGNhY2hlRm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5SW4oY2FjaGVGb2xkZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGltcG9ydGVkIGNhY2hlICcke2NhY2hlTmFtZX0nfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlBcnRpZmFjdHNJbiAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgaWYgKCghdGhpcy5pbWFnZU5hbWUgJiYgIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikgfHwgKHRoaXMucHJvZHVjZXJzID8/IFtdKS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgdGhpcy5wcm9kdWNlcnMgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VyU2FmZU5hbWUgPSBVdGlscy5zYWZlRG9ja2VyU3RyaW5nKHByb2R1Y2VyLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RGb2xkZXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3Byb2R1Y2VyU2FmZU5hbWV9YDtcbiAgICAgICAgICAgIGlmICghYXdhaXQgZnMucGF0aEV4aXN0cyhhcnRpZmFjdEZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYXJ0aWZhY3RGb2xkZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihhcnRpZmFjdEZvbGRlcik7XG4gICAgICAgICAgICBpZiAocmVhZGRpci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3RzIGZyb20ge2JsdWVCcmlnaHQgJHtwcm9kdWNlclNhZmVOYW1lfX0gd2FzIGVtcHR5fVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuY29weUluKGFydGlmYWN0Rm9sZGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgaW1wb3J0ZWQgYXJ0aWZhY3RzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgfVxuXG4gICAgY29weUluIChzb3VyY2U6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuYmFzaChgcnN5bmMgLWEgJHtzb3VyY2V9Ly4gJHt0aGlzLmFyZ3YuY3dkfS8ke3RoaXMuYXJndi5zdGF0ZURpcn0vYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFV0aWxzLmJhc2goYGRvY2tlciBjcCAke3NvdXJjZX0vLiAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLWJ1aWxkc2ApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlT3V0ICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBpZiAodGhpcy5hcmd2Lm1vdW50Q2FjaGUgJiYgdGhpcy5pbWFnZU5hbWUpIHJldHVybjtcbiAgICAgICAgaWYgKCghdGhpcy5pbWFnZU5hbWUgJiYgIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikgfHwgdGhpcy5jYWNoZS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcblxuICAgICAgICBsZXQgdGltZSwgZW5kVGltZTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIGlmICghW1wicHVzaFwiLCBcInB1bGwtcHVzaFwiXS5pbmNsdWRlcyhjLnBvbGljeSkpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlTmFtZSA9IGF3YWl0IGMuZ2V0VW5pcXVlQ2FjaGVOYW1lKGN3ZCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgYy5wYXRocykge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQocGF0aCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNtZCA9IFwic2hvcHQgLXMgZ2xvYnN0YXIgbnVsbGdsb2IgZG90Z2xvYlxcblwiO1xuICAgICAgICAgICAgICAgIGNtZCArPSBgbWtkaXIgLXAgLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9XFxuYDtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYHJzeW5jIC1SYSAke2V4cGFuZGVkUGF0aH0gLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9Ly4gfHwgdHJ1ZVxcbmA7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weU91dChjbWQsIHN0YXRlRGlyLCBcImNhY2hlXCIsIFtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihgJHt0aGlzLmFyZ3YuY3dkfS8ke3N0YXRlRGlyfS9jYWNoZS8ke2NhY2hlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBpZiAocmVhZGRpci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7eWVsbG93ICEhIG5vIGNhY2hlIHdhcyBjb3BpZWQgZm9yICR7cGF0aH0gISF9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBleHBvcnRlZCBjYWNoZSAke2V4cGFuZGVkUGF0aH0gJyR7Y2FjaGVOYW1lfSd9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlBcnRpZmFjdHNPdXQgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IGFydGlmYWN0c1BhdGggPSAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uICYmICF0aGlzLmltYWdlTmFtZSA/IGAke3N0YXRlRGlyfS9hcnRpZmFjdHNgIDogXCIuLi8uLi9hcnRpZmFjdHNcIjtcblxuICAgICAgICBpZiAoIXRoaXMuYXJ0aWZhY3RzKSByZXR1cm47XG4gICAgICAgIGlmICgodGhpcy5hcnRpZmFjdHMucGF0aHM/Lmxlbmd0aCA/PyAwKSA9PT0gMCAmJiB0aGlzLmFydGlmYWN0cy5yZXBvcnRzPy5kb3RlbnYgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBsZXQgY3BDbWQgPSBcInNob3B0IC1zIGdsb2JzdGFyIG51bGxnbG9iIGRvdGdsb2JcXG5cIjtcbiAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX1cXG5gO1xuICAgICAgICBjcENtZCArPSBcInJzeW5jIC0tZXhjbHVkZSAnLmdpdGxhYi1jaS1sb2NhbC8qKicgLVJhIFwiO1xuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0RXhjbHVkZVBhdGggb2YgdGhpcy5hcnRpZmFjdHM/LmV4Y2x1ZGUgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoYXJ0aWZhY3RFeGNsdWRlUGF0aCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBjcENtZCArPSBgLS1leGNsdWRlICcke2V4cGFuZGVkUGF0aH0nIGA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBhcnRpZmFjdFBhdGggb2YgdGhpcy5hcnRpZmFjdHM/LnBhdGhzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZFBhdGggPSBVdGlscy5leHBhbmRUZXh0KGFydGlmYWN0UGF0aCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBjcENtZCArPSBgJHtleHBhbmRlZFBhdGh9IGA7XG4gICAgICAgIH1cbiAgICAgICAgY3BDbWQgKz0gYCR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLiB8fCB0cnVlXFxuYDtcbiAgICAgICAgY29uc3QgcmVwb3J0RG90ZW52ID0gVXRpbHMuZXhwYW5kVGV4dCh0aGlzLmFydGlmYWN0cy5yZXBvcnRzPy5kb3RlbnYgPz8gbnVsbCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgIGlmIChyZXBvcnREb3RlbnYgIT0gbnVsbCkge1xuICAgICAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudlxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBgaWYgWyAtZiAke3JlcG9ydERvdGVudn0gXTsgdGhlblxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBgICByc3luYyAtUmEgJHtyZXBvcnREb3RlbnZ9ICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uXFxuYDtcbiAgICAgICAgICAgIGNwQ21kICs9IFwiZmlcXG5cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjb25zdCBkb2NrZXJDbWRFeHRyYXMgPSB0aGlzLmFyZ3YubW91bnRDYWNoZSA/IFthd2FpdCB0aGlzLm1vdW50Q2FjaGVDbWQod3JpdGVTdHJlYW1zKV0gOiBbXTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5T3V0KGNwQ21kLCBzdGF0ZURpciwgXCJhcnRpZmFjdHNcIiwgZG9ja2VyQ21kRXh0cmFzKTtcbiAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuXG4gICAgICAgIGlmIChyZXBvcnREb3RlbnYgIT0gbnVsbCAmJiAhYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uZ2l0bGFiLWNpLXJlcG9ydHMvZG90ZW52LyR7cmVwb3J0RG90ZW52fWApKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3QgcmVwb3J0cyBkb3RlbnYgJyR7cmVwb3J0RG90ZW52fScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVhZGRpciA9IGF3YWl0IGZzLnJlYWRkaXIoYCR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgaWYgKHJlYWRkaXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgISEgbm8gYXJ0aWZhY3RzIHdhcyBjb3BpZWQgISF9XFxuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGV4cG9ydGVkIGFydGlmYWN0c30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJ0aWZhY3RzVG9Tb3VyY2UgJiYgKHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbiB8fCB0aGlzLmltYWdlTmFtZSkpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgcnN5bmMgLS1leGNsdWRlPS8uZ2l0bGFiLWNpLXJlcG9ydHMvIC1hICR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLiAke2N3ZH1gKTtcbiAgICAgICAgICAgIGlmIChyZXBvcnREb3RlbnYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYHJzeW5jIC1hICR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uICR7Y3dkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBjb3BpZWQgYXJ0aWZhY3RzIHRvIGN3ZH0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5T3V0IChjbWQ6IHN0cmluZywgc3RhdGVEaXI6IHN0cmluZywgdHlwZTogXCJhcnRpZmFjdHNcIiB8IFwiY2FjaGVcIiwgZG9ja2VyQ21kRXh0cmFzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGNvbnN0IGJ1aWxkVm9sdW1lTmFtZSA9IHRoaXMuYnVpbGRWb2x1bWVOYW1lO1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuXG4gICAgICAgIGF3YWl0IGZzLm1rZGlycChgJHtjd2R9LyR7c3RhdGVEaXJ9LyR7dHlwZX1gKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLmJhc2goYGRvY2tlciBjcmVhdGUgLWkgJHtkb2NrZXJDbWRFeHRyYXMuam9pbihcIiBcIil9IC12ICR7YnVpbGRWb2x1bWVOYW1lfTovZ2NsLWJ1aWxkcy8gLXcgL2djbC1idWlsZHMgZG9ja2VyLmlvL2ZpcmVjb3cvZ2l0bGFiLWNpLWxvY2FsLXV0aWwgYmFzaCAtYyBcIiR7Y21kfVwiYCwgY3dkKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2goY29udGFpbmVySWQpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgZG9ja2VyIHN0YXJ0ICR7Y29udGFpbmVySWR9IC0tYXR0YWNoYCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5iYXNoKGBkb2NrZXIgY3AgJHtjb250YWluZXJJZH06LyR7dHlwZX0vLiAke3N0YXRlRGlyfS8ke3R5cGV9Ly5gLCBjd2QpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgYmFzaCAtZW8gcGlwZWZhaWwgLWMgXCIke2NtZH1cImAsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgYmFzaCAtZW8gcGlwZWZhaWwgLWMgXCIke2NtZH1cImAsIGAke2N3ZH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgIHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7Z3JleSA+IHN0aWxsIHJ1bm5pbmcuLi59XFxuYCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgfSwgMTAwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhpdGVkU3RyaW5nIChzdGFydFRpbWU6IFtudW1iZXIsIG51bWJlcl0sIGNvZGU6IG51bWJlciwgd2FybmluZyA9IGZhbHNlLCBwcmVwZW5kU3RyaW5nID0gXCJcIikge1xuICAgICAgICBjb25zdCBmaW5pc2hlZFN0ciA9IHRoaXMuZ2V0RmluaXNoZWRTdHJpbmcoc3RhcnRUaW1lKTtcbiAgICAgICAgaWYgKHdhcm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFsa2Ake2ZpbmlzaGVkU3RyfSB7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gJHtjb2RlLnRvU3RyaW5nKCl9IH0ke3ByZXBlbmRTdHJpbmd9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGFsa2Ake2ZpbmlzaGVkU3RyfSB7YmxhY2suYmdSZWQgIEZBSUwgJHtjb2RlLnRvU3RyaW5nKCl9IH0gJHtwcmVwZW5kU3RyaW5nfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaW5pc2hlZFN0cmluZyAoc3RhcnRUaW1lOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZShzdGFydFRpbWUpO1xuICAgICAgICBjb25zdCB0aW1lU3RyID0gcHJldHR5SHJ0aW1lKGVuZFRpbWUpO1xuICAgICAgICByZXR1cm4gY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZmluaXNoZWR9IGluIHttYWdlbnRhICR7dGltZVN0cn19YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZURvY2tlck5ldHdvcmsgKG5ldHdvcmtOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qge3N0ZG91dDogbmV0d29ya0lkfSA9IGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcIm5ldHdvcmtcIiwgXCJjcmVhdGVcIiwgYCR7bmV0d29ya05hbWV9YF0pO1xuICAgICAgICB0aGlzLl9zZXJ2aWNlTmV0d29ya0lkID0gbmV0d29ya0lkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc3RhcnRTZXJ2aWNlICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgc2VydmljZTogU2VydmljZSkge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBsZXQgZG9ja2VyQ21kID0gYGRvY2tlciBjcmVhdGUgLXUgMDowIC1pIC0tbmV0d29yayBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfSBgO1xuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAodGhpcy5hcmd2LnByaXZpbGVnZWQpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tcHJpdmlsZWdlZCBcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgdm9sdW1lIG9mIHRoaXMuYXJndi52b2x1bWUpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmdldEFsaWFzKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbiA9IHNlcnZpY2VOYW1lLnJlcGxhY2UoLyguKikoOi4qKS8sIFwiJDFcIik7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlKFwiL1wiLCBcIi1cIikpO1xuICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2UoXCIvXCIsIFwiX19cIikpO1xuICAgICAgICBpZiAoc2VydmljZUFsaWFzKSB7XG4gICAgICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlQWxpYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrLWFsaWFzPSR7YWxpYXN9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX0gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcnZpY2VFbnRyeXBvaW50ID0gc2VydmljZS5nZXRFbnRyeXBvaW50KCk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VFbnRyeXBvaW50RmlsZSA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vc2NyaXB0cy9zZXJ2aWNlc19lbnRyeS8ke3NhZmVKb2JOYW1lfV8ke3NlcnZpY2VOYW1lV2l0aG91dFZlcnNpb259XyR7c2VydmljZS5pbmRleH1gO1xuICAgICAgICBpZiAoc2VydmljZUVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlRW50cnlwb2ludFswXSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1lbnRyeXBvaW50ICcnIFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKHNlcnZpY2VFbnRyeXBvaW50RmlsZSwgXCIjIS9iaW4vc2hcXG5cIik7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZShzZXJ2aWNlRW50cnlwb2ludEZpbGUsIGAke3NlcnZpY2VFbnRyeXBvaW50LmpvaW4oXCIgXCIpfWApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoc2VydmljZUVudHJ5cG9pbnRGaWxlLCBcIiBcXFwiJEBcXFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmNobW9kKHNlcnZpY2VFbnRyeXBvaW50RmlsZSwgXCIwNzU1XCIpO1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tZW50cnlwb2ludCAnL2djbC1lbnRyeScgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3RoaXMuYnVpbGRWb2x1bWVOYW1lfTovZ2NsLWJ1aWxkcyBgO1xuICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dGhpcy50bXBWb2x1bWVOYW1lfToke3RoaXMuZmlsZVZhcmlhYmxlc0Rpcn0gYDtcbiAgICAgICAgZG9ja2VyQ21kICs9IGAke3NlcnZpY2VOYW1lfSBgO1xuXG4gICAgICAgIChzZXJ2aWNlLmdldENvbW1hbmQoKSA/PyBbXSkuZm9yRWFjaCgoZSkgPT4gZG9ja2VyQ21kICs9IGBcIiR7ZX1cIiBgKTtcblxuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcblxuICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGRvY2tlckNtZCwgY3dkLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG5cbiAgICAgICAgLy8gQ29weSBkb2NrZXIgZW50cnlwb2ludCBpZiBzcGVjaWZpZWQgZm9yIHNlcnZpY2VcbiAgICAgICAgaWYgKHNlcnZpY2VFbnRyeXBvaW50ICYmIHNlcnZpY2VFbnRyeXBvaW50WzBdICE9IFwiXCIpIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImNwXCIsIHNlcnZpY2VFbnRyeXBvaW50RmlsZSwgYCR7Y29udGFpbmVySWR9Oi9nY2wtZW50cnlgXSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJzdGFydFwiLCBgJHtjb250YWluZXJJZH1gXSk7XG5cbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHN0YXJ0ZWQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gd2l0aCBhbGlhc2VzOiAke0FycmF5LmZyb20oYWxpYXNlcykuam9pbihcIiwgXCIpfX0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuXG4gICAgICAgIHJldHVybiBjb250YWluZXJJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNlcnZpY2VIZWFsdGhDaGVjayAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIHNlcnZpY2VDb250YW5lckxvZ0ZpbGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImltYWdlXCIsIFwiaW5zcGVjdFwiLCBzZXJ2aWNlLmdldE5hbWUodGhpcy5leHBhbmRlZFZhcmlhYmxlcyldKTtcbiAgICAgICAgY29uc3QgaW1hZ2VJbnNwZWN0ID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuXG4gICAgICAgIC8vIENvcGllZCBmcm9tIHRoZSBzdGFydFNlcnZpY2UgYmxvY2suIEltcG9ydGFudCB0aGluZyBpcyB0aGF0IHRoZSBhbGlhc2VzIG1hdGNoXG4gICAgICAgIGNvbnN0IHNlcnZpY2VBbGlhcyA9IHNlcnZpY2UuZ2V0QWxpYXModGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gc2VydmljZS5nZXROYW1lKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uID0gc2VydmljZU5hbWUucmVwbGFjZSgvKC4qKSg6LiopLywgXCIkMVwiKTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IFtzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2UoXCIvXCIsIFwiLVwiKSwgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlKFwiL1wiLCBcIl9fXCIpXTtcbiAgICAgICAgaWYgKHNlcnZpY2VBbGlhcykge1xuICAgICAgICAgICAgYWxpYXNlcy5wdXNoKHNlcnZpY2VBbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGltYWdlSW5zcGVjdFswXT8uQ29uZmlnPy5FeHBvc2VkUG9ydHMgPz8gbnVsbCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgQ291bGQgbm90IGZpbmQgZXhwb3NlZCB0Y3AgcG9ydHMgJHtzZXJ2aWNlLmdldE5hbWUodGhpcy5leHBhbmRlZFZhcmlhYmxlcyl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcG9ydCBkZWZpbmVkIGluIHRoZSBpbWFnZSwgYW5kIHRyeSB0byBjb25uZWN0IHRvIHRoZSBhbGlhc1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3QgaGNQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBvcnQgb2YgT2JqZWN0LmtleXMoaW1hZ2VJbnNwZWN0WzBdLkNvbmZpZy5FeHBvc2VkUG9ydHMpKSB7XG4gICAgICAgICAgICBpZiAoIXBvcnQuZW5kc1dpdGgoXCIvdGNwXCIpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHBvcnROdW0gPSBwYXJzZUludChwb3J0LnJlcGxhY2UoXCIvdGNwXCIsIFwiXCIpKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYXduQ21kID0gW1wiZG9ja2VyXCIsIFwicnVuXCIsIFwiLS1ybVwiLCBcIi0tbmV0d29ya1wiLCBgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH1gLCBcIndpbGx3aWxsL3dhaXQtZm9yLWl0XCIsIGAke2FsaWFzZXNbMF19OiR7cG9ydE51bX1gLCBcIi10XCIsIFwiMzBcIl07XG4gICAgICAgICAgICBoY1Byb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oc3Bhd25DbWQpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHtyZWRCcmlnaHQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gaGVhbHRoY2hlY2sgZmFpbGVkOiAke2FsaWFzZXNbMF19OiR7cG9ydE51bX19XFxuYCk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7cmVkQnJpZ2h0IHNlZSAoJHtzZXJ2aWNlQ29udGFuZXJMb2dGaWxlfSl9XFxuYCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbnkoaGNQcm9taXNlcyk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7Z3JlZW5CcmlnaHQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gaGVhbHRoY2hlY2sgcGFzc2VkIGluIHtncmVlbiAke3ByZXR0eUhydGltZShlbmRUaW1lKX19fVxcbmApO1xuICAgIH1cbn1cbiJdfQ==
@@ -23,7 +23,7 @@ function init({ gitData }) {
23
23
  CI_COMMIT_REF_PROTECTED: "false",
24
24
  CI_COMMIT_BRANCH: gitData.commit.REF_NAME,
25
25
  CI_COMMIT_REF_NAME: gitData.commit.REF_NAME,
26
- CI_COMMIT_REF_SLUG: gitData.commit.REF_NAME.replace(/[^a-z\d]+/ig, "-").replace(/^-/, "").replace(/-$/, "").slice(0, 63).toLowerCase(),
26
+ CI_COMMIT_REF_SLUG: gitData.commit.REF_NAME.replace(/[^a-z\d]+/ig, "-").replace(/^-/, "").slice(0, 63).replace(/-$/, "").toLowerCase(),
27
27
  CI_COMMIT_TITLE: "Commit Title",
28
28
  CI_COMMIT_MESSAGE: "Commit Title\nMore commit text",
29
29
  CI_COMMIT_DESCRIPTION: "More commit text",
@@ -38,4 +38,4 @@ function init({ gitData }) {
38
38
  };
39
39
  }
40
40
  exports.init = init;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZGVmaW5lZC12YXJpYWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmVkZWZpbmVkLXZhcmlhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBa0M7QUFPbEMsU0FBZ0IsSUFBSSxDQUFFLEVBQUMsT0FBTyxFQUEwQjtJQUVwRCxPQUFPO1FBQ0gsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNwRCxpQkFBaUIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ3BELGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDbEQsY0FBYyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDOUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO1FBQzdDLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUc7UUFDakMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTztRQUN2QyxnQkFBZ0IsRUFBRSxHQUFHLElBQUEsbUJBQVMsRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3hELGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ3BFLG9CQUFvQixFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUM3RixvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQy9DLHFCQUFxQixFQUFFLFVBQVU7UUFDakMsYUFBYSxFQUFFLE1BQU07UUFDckIsdUJBQXVCLEVBQUUsT0FBTztRQUNoQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVE7UUFDekMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRO1FBQzNDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO1FBQ3RJLGVBQWUsRUFBRSxjQUFjO1FBQy9CLGlCQUFpQixFQUFFLGdDQUFnQztRQUNuRCxxQkFBcUIsRUFBRSxrQkFBa0I7UUFDekMsa0JBQWtCLEVBQUUsTUFBTTtRQUMxQixjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtRQUN4QyxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtRQUN4QyxhQUFhLEVBQUUsV0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTTtRQUNuRCxrQkFBa0IsRUFBRSxPQUFPO1FBQzNCLGFBQWEsRUFBRSxXQUFXLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTO1FBQ3RELGNBQWMsRUFBRSxXQUFXLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2xHLFNBQVMsRUFBRSxPQUFPO0tBQ3JCLENBQUM7QUFDTixDQUFDO0FBaENELG9CQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjYW1lbENhc2UgZnJvbSBcImNhbWVsY2FzZVwiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuXG50eXBlIFByZWRlZmluZWRWYXJpYWJsZXNPcHRzID0ge1xuICAgIGdpdERhdGE6IEdpdERhdGE7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCAoe2dpdERhdGF9OiBQcmVkZWZpbmVkVmFyaWFibGVzT3B0cyk6IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBHSVRMQUJfVVNFUl9MT0dJTjogZ2l0RGF0YS51c2VyW1wiR0lUTEFCX1VTRVJfTE9HSU5cIl0sXG4gICAgICAgIEdJVExBQl9VU0VSX0VNQUlMOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9FTUFJTFwiXSxcbiAgICAgICAgR0lUTEFCX1VTRVJfTkFNRTogZ2l0RGF0YS51c2VyW1wiR0lUTEFCX1VTRVJfTkFNRVwiXSxcbiAgICAgICAgR0lUTEFCX1VTRVJfSUQ6IGdpdERhdGEudXNlcltcIkdJVExBQl9VU0VSX0lEXCJdLFxuICAgICAgICBDSV9DT01NSVRfU0hPUlRfU0hBOiBnaXREYXRhLmNvbW1pdC5TSE9SVF9TSEEsIC8vIENoYW5nZXNcbiAgICAgICAgQ0lfQ09NTUlUX1NIQTogZ2l0RGF0YS5jb21taXQuU0hBLFxuICAgICAgICBDSV9QUk9KRUNUX05BTUU6IGdpdERhdGEucmVtb3RlLnByb2plY3QsXG4gICAgICAgIENJX1BST0pFQ1RfVElUTEU6IGAke2NhbWVsQ2FzZShnaXREYXRhLnJlbW90ZS5wcm9qZWN0KX1gLFxuICAgICAgICBDSV9QUk9KRUNUX1BBVEg6IGAke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9YCxcbiAgICAgICAgQ0lfUFJPSkVDVF9QQVRIX1NMVUc6IGAke2dpdERhdGEucmVtb3RlLmdyb3VwLnJlcGxhY2UoL1xcLy9nLCBcIi1cIil9LSR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH1gLFxuICAgICAgICBDSV9QUk9KRUNUX05BTUVTUEFDRTogYCR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9YCxcbiAgICAgICAgQ0lfUFJPSkVDVF9WSVNJQklMSVRZOiBcImludGVybmFsXCIsXG4gICAgICAgIENJX1BST0pFQ1RfSUQ6IFwiMTIxN1wiLFxuICAgICAgICBDSV9DT01NSVRfUkVGX1BST1RFQ1RFRDogXCJmYWxzZVwiLFxuICAgICAgICBDSV9DT01NSVRfQlJBTkNIOiBnaXREYXRhLmNvbW1pdC5SRUZfTkFNRSwgLy8gTm90IGF2YWlsYWJsZSBpbiBtZXJnZSByZXF1ZXN0IG9yIHRhZyBwaXBlbGluZXNcbiAgICAgICAgQ0lfQ09NTUlUX1JFRl9OQU1FOiBnaXREYXRhLmNvbW1pdC5SRUZfTkFNRSwgLy8gVGFnIG9yIGJyYW5jaCBuYW1lXG4gICAgICAgIENJX0NPTU1JVF9SRUZfU0xVRzogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUucmVwbGFjZSgvW15hLXpcXGRdKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikucmVwbGFjZSgvLSQvLCBcIlwiKS5zbGljZSgwLCA2MykudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgQ0lfQ09NTUlUX1RJVExFOiBcIkNvbW1pdCBUaXRsZVwiLCAvLyBGaXJzdCBsaW5lIG9mIGNvbW1pdCBtZXNzYWdlLlxuICAgICAgICBDSV9DT01NSVRfTUVTU0FHRTogXCJDb21taXQgVGl0bGVcXG5Nb3JlIGNvbW1pdCB0ZXh0XCIsIC8vIEZ1bGwgY29tbWl0IG1lc3NhZ2VcbiAgICAgICAgQ0lfQ09NTUlUX0RFU0NSSVBUSU9OOiBcIk1vcmUgY29tbWl0IHRleHRcIixcbiAgICAgICAgQ0lfUElQRUxJTkVfU09VUkNFOiBcInB1c2hcIixcbiAgICAgICAgQ0lfU0VSVkVSX0hPU1Q6IGAke2dpdERhdGEucmVtb3RlLmhvc3R9YCxcbiAgICAgICAgQ0lfU0VSVkVSX1BPUlQ6IGAke2dpdERhdGEucmVtb3RlLnBvcnR9YCxcbiAgICAgICAgQ0lfU0VSVkVSX1VSTDogYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fTo0NDNgLFxuICAgICAgICBDSV9TRVJWRVJfUFJPVE9DT0w6IFwiaHR0cHNcIixcbiAgICAgICAgQ0lfQVBJX1Y0X1VSTDogYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS9hcGkvdjRgLFxuICAgICAgICBDSV9QUk9KRUNUX1VSTDogYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9YCxcbiAgICAgICAgR0lUTEFCX0NJOiBcImZhbHNlXCIsXG4gICAgfTtcbn1cbiJdfQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZGVmaW5lZC12YXJpYWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmVkZWZpbmVkLXZhcmlhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBa0M7QUFPbEMsU0FBZ0IsSUFBSSxDQUFFLEVBQUMsT0FBTyxFQUEwQjtJQUVwRCxPQUFPO1FBQ0gsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNwRCxpQkFBaUIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ3BELGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDbEQsY0FBYyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDOUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO1FBQzdDLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUc7UUFDakMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTztRQUN2QyxnQkFBZ0IsRUFBRSxHQUFHLElBQUEsbUJBQVMsRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3hELGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ3BFLG9CQUFvQixFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUM3RixvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQy9DLHFCQUFxQixFQUFFLFVBQVU7UUFDakMsYUFBYSxFQUFFLE1BQU07UUFDckIsdUJBQXVCLEVBQUUsT0FBTztRQUNoQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVE7UUFDekMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRO1FBQzNDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO1FBQ3RJLGVBQWUsRUFBRSxjQUFjO1FBQy9CLGlCQUFpQixFQUFFLGdDQUFnQztRQUNuRCxxQkFBcUIsRUFBRSxrQkFBa0I7UUFDekMsa0JBQWtCLEVBQUUsTUFBTTtRQUMxQixjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtRQUN4QyxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtRQUN4QyxhQUFhLEVBQUUsV0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTTtRQUNuRCxrQkFBa0IsRUFBRSxPQUFPO1FBQzNCLGFBQWEsRUFBRSxXQUFXLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTO1FBQ3RELGNBQWMsRUFBRSxXQUFXLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2xHLFNBQVMsRUFBRSxPQUFPO0tBQ3JCLENBQUM7QUFDTixDQUFDO0FBaENELG9CQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjYW1lbENhc2UgZnJvbSBcImNhbWVsY2FzZVwiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuXG50eXBlIFByZWRlZmluZWRWYXJpYWJsZXNPcHRzID0ge1xuICAgIGdpdERhdGE6IEdpdERhdGE7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCAoe2dpdERhdGF9OiBQcmVkZWZpbmVkVmFyaWFibGVzT3B0cyk6IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBHSVRMQUJfVVNFUl9MT0dJTjogZ2l0RGF0YS51c2VyW1wiR0lUTEFCX1VTRVJfTE9HSU5cIl0sXG4gICAgICAgIEdJVExBQl9VU0VSX0VNQUlMOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9FTUFJTFwiXSxcbiAgICAgICAgR0lUTEFCX1VTRVJfTkFNRTogZ2l0RGF0YS51c2VyW1wiR0lUTEFCX1VTRVJfTkFNRVwiXSxcbiAgICAgICAgR0lUTEFCX1VTRVJfSUQ6IGdpdERhdGEudXNlcltcIkdJVExBQl9VU0VSX0lEXCJdLFxuICAgICAgICBDSV9DT01NSVRfU0hPUlRfU0hBOiBnaXREYXRhLmNvbW1pdC5TSE9SVF9TSEEsIC8vIENoYW5nZXNcbiAgICAgICAgQ0lfQ09NTUlUX1NIQTogZ2l0RGF0YS5jb21taXQuU0hBLFxuICAgICAgICBDSV9QUk9KRUNUX05BTUU6IGdpdERhdGEucmVtb3RlLnByb2plY3QsXG4gICAgICAgIENJX1BST0pFQ1RfVElUTEU6IGAke2NhbWVsQ2FzZShnaXREYXRhLnJlbW90ZS5wcm9qZWN0KX1gLFxuICAgICAgICBDSV9QUk9KRUNUX1BBVEg6IGAke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9YCxcbiAgICAgICAgQ0lfUFJPSkVDVF9QQVRIX1NMVUc6IGAke2dpdERhdGEucmVtb3RlLmdyb3VwLnJlcGxhY2UoL1xcLy9nLCBcIi1cIil9LSR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH1gLFxuICAgICAgICBDSV9QUk9KRUNUX05BTUVTUEFDRTogYCR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9YCxcbiAgICAgICAgQ0lfUFJPSkVDVF9WSVNJQklMSVRZOiBcImludGVybmFsXCIsXG4gICAgICAgIENJX1BST0pFQ1RfSUQ6IFwiMTIxN1wiLFxuICAgICAgICBDSV9DT01NSVRfUkVGX1BST1RFQ1RFRDogXCJmYWxzZVwiLFxuICAgICAgICBDSV9DT01NSVRfQlJBTkNIOiBnaXREYXRhLmNvbW1pdC5SRUZfTkFNRSwgLy8gTm90IGF2YWlsYWJsZSBpbiBtZXJnZSByZXF1ZXN0IG9yIHRhZyBwaXBlbGluZXNcbiAgICAgICAgQ0lfQ09NTUlUX1JFRl9OQU1FOiBnaXREYXRhLmNvbW1pdC5SRUZfTkFNRSwgLy8gVGFnIG9yIGJyYW5jaCBuYW1lXG4gICAgICAgIENJX0NPTU1JVF9SRUZfU0xVRzogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUucmVwbGFjZSgvW15hLXpcXGRdKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikuc2xpY2UoMCwgNjMpLnJlcGxhY2UoLy0kLywgXCJcIikudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgQ0lfQ09NTUlUX1RJVExFOiBcIkNvbW1pdCBUaXRsZVwiLCAvLyBGaXJzdCBsaW5lIG9mIGNvbW1pdCBtZXNzYWdlLlxuICAgICAgICBDSV9DT01NSVRfTUVTU0FHRTogXCJDb21taXQgVGl0bGVcXG5Nb3JlIGNvbW1pdCB0ZXh0XCIsIC8vIEZ1bGwgY29tbWl0IG1lc3NhZ2VcbiAgICAgICAgQ0lfQ09NTUlUX0RFU0NSSVBUSU9OOiBcIk1vcmUgY29tbWl0IHRleHRcIixcbiAgICAgICAgQ0lfUElQRUxJTkVfU09VUkNFOiBcInB1c2hcIixcbiAgICAgICAgQ0lfU0VSVkVSX0hPU1Q6IGAke2dpdERhdGEucmVtb3RlLmhvc3R9YCxcbiAgICAgICAgQ0lfU0VSVkVSX1BPUlQ6IGAke2dpdERhdGEucmVtb3RlLnBvcnR9YCxcbiAgICAgICAgQ0lfU0VSVkVSX1VSTDogYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fTo0NDNgLFxuICAgICAgICBDSV9TRVJWRVJfUFJPVE9DT0w6IFwiaHR0cHNcIixcbiAgICAgICAgQ0lfQVBJX1Y0X1VSTDogYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS9hcGkvdjRgLFxuICAgICAgICBDSV9QUk9KRUNUX1VSTDogYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9YCxcbiAgICAgICAgR0lUTEFCX0NJOiBcImZhbHNlXCIsXG4gICAgfTtcbn1cbiJdfQ==