@tricoteuses/assemblee 1.3.1 → 1.5.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.
Files changed (41) hide show
  1. package/lib/datasets.d.ts +1 -0
  2. package/lib/datasets.js +28 -2
  3. package/lib/datasets.mjs +14 -2
  4. package/lib/dossiers_legislatifs.js +1 -1
  5. package/lib/dossiers_legislatifs.mjs +1 -1
  6. package/lib/file_systems.js +30 -24
  7. package/lib/file_systems.mjs +4 -1
  8. package/lib/index.d.ts +1 -1
  9. package/lib/index.js +1 -1
  10. package/lib/index.mjs +1 -1
  11. package/lib/loaders.d.ts +5 -4
  12. package/lib/loaders.js +14 -22
  13. package/lib/loaders.mjs +12 -8
  14. package/lib/raw_types/debats.d.ts +5 -4
  15. package/lib/raw_types/debats.js +9 -5
  16. package/lib/raw_types/debats.mjs +9 -5
  17. package/lib/raw_types/dossiers_legislatifs.d.ts +2 -0
  18. package/lib/raw_types/dossiers_legislatifs.js +5 -3
  19. package/lib/raw_types/dossiers_legislatifs.mjs +5 -3
  20. package/lib/raw_types/questions.d.ts +1 -1
  21. package/lib/raw_types/questions.js +2 -2
  22. package/lib/raw_types/questions.mjs +2 -2
  23. package/lib/scripts/clean_reorganized_data.js +13 -42
  24. package/lib/scripts/clean_reorganized_data.mjs +8 -18
  25. package/lib/scripts/reorganize_data.js +17 -46
  26. package/lib/scripts/reorganize_data.mjs +8 -18
  27. package/lib/scripts/retrieve_open_data.js +5 -5
  28. package/lib/scripts/retrieve_open_data.mjs +4 -4
  29. package/lib/shared_types/codes_actes.d.ts +129 -342
  30. package/lib/shared_types/codes_actes.js +212 -243
  31. package/lib/shared_types/codes_actes.mjs +211 -224
  32. package/lib/types/debats.d.ts +5 -4
  33. package/lib/types/debats.js +9 -5
  34. package/lib/types/debats.mjs +9 -5
  35. package/lib/types/dossiers_legislatifs.d.ts +2 -0
  36. package/lib/types/dossiers_legislatifs.js +7 -8
  37. package/lib/types/dossiers_legislatifs.mjs +8 -9
  38. package/lib/types/questions.d.ts +1 -1
  39. package/lib/types/questions.js +2 -2
  40. package/lib/types/questions.mjs +2 -2
  41. package/package.json +2 -2
@@ -3,7 +3,7 @@ import { execSync } from "child_process";
3
3
  import commandLineArgs from "command-line-args";
4
4
  import fs from "fs-extra";
5
5
  import path from "path";
6
- import { datasets, DatasetStructure, EnabledDatasets } from "../datasets.mjs";
6
+ import { datasets, DatasetStructure, EnabledDatasets, filterByLegislature } from "../datasets.mjs";
7
7
  import { existingDateToJson, patchedDateToJson } from "../dates.mjs";
8
8
  import * as git from "../git.mjs";
9
9
  import { walkDir } from "../file_systems.mjs";
@@ -15,7 +15,6 @@ import { Convert as DossiersLegislatifsRawConvert } from "../raw_types/dossiers_
15
15
  import { Convert as ScrutinsRawConvert } from "../raw_types/scrutins.mjs";
16
16
  import { Convert as QuestionsRawConvert } from "../raw_types/questions.mjs";
17
17
  import { Convert as ComptesRendusRawConvert } from "../raw_types/debats.mjs";
18
- import { Legislature } from "../types/legislatures.mjs";
19
18
  const optionsDefinitions = [{
20
19
  alias: "C",
21
20
  help: "clone repositories from given group (or organization) git URL",
@@ -79,18 +78,9 @@ function reorganizeData(options) {
79
78
  const validateRawData = !options["no-validate-raw"];
80
79
  options.categories.map(datasetName => assert.notStrictEqual(EnabledDatasets[datasetName], undefined, `Unknown name of dataset: ${datasetName}`));
81
80
  const enabledDatasets = options.categories.reduce((enabledDatasets, datasetName) => enabledDatasets | EnabledDatasets[datasetName], EnabledDatasets.None);
82
- let choosenDatasets = datasets;
83
- // When a given legislature is 0, it is the same as giving no legislature:
84
- // It means "every legislatures".
85
- const legislatures = options.legislature?.some(legislature => legislature === 0) ? undefined : options.legislature;
86
- if (legislatures !== undefined) {
87
- const enabledLegislatures = legislatures.map(legislature => legislature.toString());
88
- for (let [key, value] of Object.entries(choosenDatasets)) {
89
- choosenDatasets[key] = value.filter(dataset => dataset.legislature === Legislature.All || enabledLegislatures.includes(dataset.legislature));
90
- }
91
- }
81
+ let chosenDatasets = filterByLegislature(datasets, options.legislature);
92
82
  if (enabledDatasets & EnabledDatasets.ActeursEtOrganes) {
93
- for (const dataset of choosenDatasets.acteursEtOrganes) {
83
+ for (const dataset of chosenDatasets.acteursEtOrganes) {
94
84
  const originalJsonDirectoryOrFilePath = path.join(dataDir, dataset.filename);
95
85
  if (!options.silent) {
96
86
  console.log(`Reorganizing ${originalJsonDirectoryOrFilePath}`);
@@ -270,7 +260,7 @@ function reorganizeData(options) {
270
260
  }
271
261
  }
272
262
  if (enabledDatasets & EnabledDatasets.Agendas) {
273
- for (const dataset of choosenDatasets.agendas) {
263
+ for (const dataset of chosenDatasets.agendas) {
274
264
  const originalJsonDirectoryOrFilePath = path.join(dataDir, dataset.filename);
275
265
  if (!options.silent) {
276
266
  console.log(`Reorganizing ${originalJsonDirectoryOrFilePath}`);
@@ -334,7 +324,7 @@ function reorganizeData(options) {
334
324
  }
335
325
  }
336
326
  if (enabledDatasets & EnabledDatasets.Amendements) {
337
- for (const dataset of choosenDatasets.amendements) {
327
+ for (const dataset of chosenDatasets.amendements) {
338
328
  const originalJsonDirectoryOrFilePath = path.join(dataDir, dataset.filename);
339
329
  if (!options.silent) {
340
330
  console.log(`Reorganizing ${originalJsonDirectoryOrFilePath}`);
@@ -400,7 +390,7 @@ function reorganizeData(options) {
400
390
  }
401
391
  }
402
392
  if (enabledDatasets & EnabledDatasets.DossiersLegislatifs) {
403
- for (const dataset of choosenDatasets.dossiersLegislatifs) {
393
+ for (const dataset of chosenDatasets.dossiersLegislatifs) {
404
394
  const originalJsonDirectoryOrFilePath = path.join(dataDir, dataset.filename);
405
395
  if (!options.silent) {
406
396
  console.log(`Reorganizing ${originalJsonDirectoryOrFilePath}`);
@@ -489,7 +479,7 @@ function reorganizeData(options) {
489
479
  }
490
480
  }
491
481
  if (enabledDatasets & EnabledDatasets.Scrutins) {
492
- for (let dataset of choosenDatasets.scrutins) {
482
+ for (let dataset of chosenDatasets.scrutins) {
493
483
  const originalJsonDirectoryOrFilePath = path.join(dataDir, dataset.filename);
494
484
  if (!options.silent) {
495
485
  console.log(`Reorganizing ${originalJsonDirectoryOrFilePath}`);
@@ -717,4 +707,4 @@ if (process.argv[1].endsWith("reorganize_data.ts")) {
717
707
  const options = commandLineArgs(optionsDefinitions);
718
708
  process.exit(reorganizeData(options));
719
709
  }
720
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImRhdGFzZXRzIiwiRGF0YXNldFN0cnVjdHVyZSIsIkVuYWJsZWREYXRhc2V0cyIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInBhdGNoZWREYXRlVG9Kc29uIiwiZ2l0Iiwid2Fsa0RpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicGF0aEZyb21SZXVuaW9uVWlkIiwicGF0aEZyb21TY3J1dGluVWlkIiwicGF0aEZyb21VaWQiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQiLCJBZ2VuZGFzUmF3Q29udmVydCIsIkFtZW5kZW1lbnRzUmF3Q29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwiU2NydXRpbnNSYXdDb252ZXJ0IiwiUXVlc3Rpb25zUmF3Q29udmVydCIsIkNvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsIk51bWJlciIsImRlZmF1bHRPcHRpb24iLCJyZW9yZ2FuaXplRGF0YSIsIm9wdGlvbnMiLCJkYXRhRGlyIiwiRGF0ZSIsInByb3RvdHlwZSIsInRvSlNPTiIsImV4aXRDb2RlIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwidmFsaWRhdGVSYXdEYXRhIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwibm90U3RyaWN0RXF1YWwiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiY2hvb3NlbkRhdGFzZXRzIiwibGVnaXNsYXR1cmVzIiwibGVnaXNsYXR1cmUiLCJzb21lIiwiZW5hYmxlZExlZ2lzbGF0dXJlcyIsInRvU3RyaW5nIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmlsdGVyIiwiZGF0YXNldCIsIkFsbCIsImluY2x1ZGVzIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnNFdE9yZ2FuZXMiLCJvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoIiwiam9pbiIsImZpbGVuYW1lIiwic2lsZW50IiwiY29uc29sZSIsImxvZyIsImJhc2VuYW1lIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJkYXRhc2V0UmVvcmdhbml6ZWREaXIiLCJwdWxsIiwiZW5zdXJlRGlyU3luYyIsInJlYWRkaXJTeW5jIiwicmVtb3ZlU3luYyIsImFjdGV1cnNSZW9yZ2FuaXplZERpciIsIm1rZGlyU3luYyIsIm9yZ2FuZXNSZW9yZ2FuaXplZERpciIsInN0cnVjdHVyZSIsIlNpbmdsZUZpbGUiLCJvcmlnaW5hbEpzb24iLCJyZWFkRmlsZVN5bmMiLCJvcmlnaW5hbERhdGEiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJKU09OIiwicGFyc2UiLCJhY3RldXIiLCJleHBvcnQiLCJhY3RldXJzIiwicmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJ1aWQiLCJ3cml0ZUZpbGVTeW5jIiwic3RyaW5naWZ5Iiwib3JnYW5lIiwib3JnYW5lcyIsIlNlZ21lbnRlZEZpbGVzIiwiZGVwb3J0c0J5QWN0ZXVyVWlkIiwiZXhpc3RzU3luYyIsImRlcG9ydFNwbGl0UGF0aCIsImRlcG9ydEZpbGVuYW1lIiwibGVuZ3RoIiwiZW5kc1dpdGgiLCJkZXBvcnRPcmlnaW5hbEZpbGVQYXRoIiwidmVyYm9zZSIsImRlcG9ydE9yaWdpbmFsSnNvbiIsImRlcG9ydE9yaWdpbmFsIiwidG9EZXBvcnQiLCJkZXBvcnQiLCJkZXBvcnRzIiwiYWN0ZXVyUmVmIiwicHVzaCIsInZhbHVlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJtYW5kYXRzQnlBY3RldXJVaWQiLCJtYW5kYXRTcGxpdFBhdGgiLCJtYW5kYXRGaWxlbmFtZSIsIm1hbmRhdE9yaWdpbmFsRmlsZVBhdGgiLCJtYW5kYXRPcmlnaW5hbEpzb24iLCJtYW5kYXRPcmlnaW5hbCIsInRvTWFuZGF0V3JhcHBlciIsIm1hbmRhdCIsIm1hbmRhdHMiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImFjdGV1ck9yaWdpbmFsRmlsZVBhdGgiLCJhY3RldXJPcmlnaW5hbEpzb24iLCJhY3RldXJPcmlnaW5hbCIsInRvQWN0ZXVyIiwiYWN0ZXVyVWlkIiwic3RyaWN0RXF1YWwiLCJhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lT3JpZ2luYWxGaWxlUGF0aCIsIm9yZ2FuZU9yaWdpbmFsSnNvbiIsIm9yZ2FuZU9yaWdpbmFsIiwidG9PcmdhbmUiLCJvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsImNvbW1pdCIsImVycm9yQ29kZSIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsInRvQWdlbmRhcyIsInJldW5pb24iLCJyZXVuaW9ucyIsIndyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbiIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCIsInJldW5pb25PcmlnaW5hbEpzb24iLCJyZXVuaW9uT3JpZ2luYWwiLCJ0b1JldW5pb24iLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzIiwidG9BbWVuZGVtZW50cyIsInRleHRlTGVnaXNsYXRpZiIsInRleHRlc0V0QW1lbmRlbWVudHMiLCJ0ZXh0ZWxlZyIsImFtZW5kZW1lbnQiLCJ3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24iLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgiLCJhbWVuZGVtZW50T3JpZ2luYWxKc29uIiwiYW1lbmRlbWVudE9yaWdpbmFsIiwidG9BbWVuZGVtZW50V3JhcHBlciIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnRzRGlyIiwiZG9zc2llcnNEaXIiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudCIsInRleHRlc0xlZ2lzbGF0aWZzIiwid3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llciIsIndyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24iLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgiLCJkb2N1bWVudE9yaWdpbmFsSnNvbiIsImRvY3VtZW50T3JpZ2luYWwiLCJ0b0RvY3VtZW50IiwiZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJ0b1NjcnV0aW5zIiwic2NydXRpbiIsIndyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbiIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCIsInNjcnV0aW5PcmlnaW5hbEpzb24iLCJzY3J1dGluT3JpZ2luYWwiLCJ0b1NjcnV0aW5XcmFwcGVyIiwiUXVlc3Rpb25zIiwicXVlc3Rpb25zIiwicXVlc3Rpb25TcGxpdFBhdGgiLCJxdWVzdGlvbkZpbGVuYW1lIiwicXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoIiwicXVlc3Rpb25PcmlnaW5hbEpzb24iLCJxdWVzdGlvbk9yaWdpbmFsIiwidG9RdWVzdGlvbldyYXBwZXIiLCJxdWVzdGlvbiIsIndyaXRlUXVlc3Rpb25zUmVvcmdhbml6ZWRKc29uIiwiQ29tcHRlc1JlbmR1c1NlYW5jZXMiLCJjb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoIiwiY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uIiwiY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbCIsInRvQ29tcHRlUmVuZHVXcmFwcGVyIiwiY29tcHRlUmVuZHVTZWFuY2UiLCJjb21wdGVSZW5kdSIsIndyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbiIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsInRleHRlTGVnaXNsYXRpZkRpciIsInJldW5pb25zRGlyIiwic2NydXRpbnNEaXIiLCJxdWVzdGlvbnNEaXIiLCJxdWVzdGlvblVpZFJlZ2V4IiwiY29tcHRlc1JlbmR1c0RpciIsImNvbXB0ZVJlbmR1VWlkUmVnZXgiLCJhcmd2IiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3Jlb3JnYW5pemVfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgZGF0YXNldHMsIERhdGFzZXRTdHJ1Y3R1cmUsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7XG4gIHBhdGhGcm9tRG9jdW1lbnRVaWQsXG4gIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQsXG4gIHBhdGhGcm9tUmV1bmlvblVpZCxcbiAgcGF0aEZyb21TY3J1dGluVWlkLFxuICBwYXRoRnJvbVVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3F1ZXN0aW9uc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kZWJhdHNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgaGVscDogXCJsZWdpc2xhdHVyZXMgb2YgY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZXRyaWV2ZTsgbGVhdmUgZW1wdHkgb3IgdXNlIDAgZm9yIGFsbFwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBOdW1iZXIsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJwXCIsXG4gICAgaGVscDogXCJwdWxsIHJlcG9zaXRvcmllcyBiZWZvcmUgcHJvY2VlZGluZ1wiLFxuICAgIG5hbWU6IFwicHVsbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcIlZcIixcbiAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgbmFtZTogXCJuby12YWxpZGF0ZS1yYXdcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogbnVtYmVyIHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBleGl0Q29kZSA9IDEwIC8vIE5vdGhpbmcgdG8gY29tbWl0XG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHZhbGlkYXRlUmF3RGF0YSA9ICFvcHRpb25zW1wibm8tdmFsaWRhdGUtcmF3XCJdXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvb3NlbkRhdGFzZXRzID0gZGF0YXNldHNcbiAgLy8gV2hlbiBhIGdpdmVuIGxlZ2lzbGF0dXJlIGlzIDAsIGl0IGlzIHRoZSBzYW1lIGFzIGdpdmluZyBubyBsZWdpc2xhdHVyZTpcbiAgLy8gSXQgbWVhbnMgXCJldmVyeSBsZWdpc2xhdHVyZXNcIi5cbiAgY29uc3QgbGVnaXNsYXR1cmVzID0gb3B0aW9ucy5sZWdpc2xhdHVyZT8uc29tZShcbiAgICAobGVnaXNsYXR1cmU6IG51bWJlcikgPT4gbGVnaXNsYXR1cmUgPT09IDAsXG4gIClcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogb3B0aW9ucy5sZWdpc2xhdHVyZVxuICBpZiAobGVnaXNsYXR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlbmFibGVkTGVnaXNsYXR1cmVzID0gbGVnaXNsYXR1cmVzLm1hcCgobGVnaXNsYXR1cmU6IG51bWJlcikgPT5cbiAgICAgIGxlZ2lzbGF0dXJlLnRvU3RyaW5nKCksXG4gICAgKVxuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjaG9vc2VuRGF0YXNldHMpKSB7XG4gICAgICBjaG9vc2VuRGF0YXNldHNba2V5IGFzIGtleW9mIHR5cGVvZiBjaG9vc2VuRGF0YXNldHNdID0gdmFsdWUuZmlsdGVyKFxuICAgICAgICAoZGF0YXNldDogeyBsZWdpc2xhdHVyZTogYW55IH0pID0+XG4gICAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsIHx8XG4gICAgICAgICAgZW5hYmxlZExlZ2lzbGF0dXJlcy5pbmNsdWRlcyhkYXRhc2V0LmxlZ2lzbGF0dXJlKSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgaWYgKG9wdGlvbnMucHVsbCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyYCwge1xuICAgICAgICAgIGN3ZDogZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdWxsIC0tcmViYXNlYCwge1xuICAgICAgICAgIGN3ZDogZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImFjdGV1cnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhhY3RldXJzUmVvcmdhbml6ZWREaXIpXG4gICAgICBjb25zdCBvcmdhbmVzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcIm9yZ2FuZXNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhvcmdhbmVzUmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQuYWN0ZXVycy5hY3RldXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBkZXBvcnRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcImRlcG9ydFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJkZXBvcnRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBkZXBvcnRTcGxpdFBhdGhbZGVwb3J0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFkZXBvcnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLmRlcG9ydFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJkZXBvcnRcIiBmaWxlOiAke2RlcG9ydE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvRGVwb3J0KGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0ID0gZGVwb3J0T3JpZ2luYWwuZGVwb3J0XG4gICAgICAgICAgICAgICAgbGV0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAoZGVwb3J0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5wdXNoKGRlcG9ydClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0cyBvZiBPYmplY3QudmFsdWVzKGRlcG9ydHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXBvcnRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYW5kYXRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJtYW5kYXRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBtYW5kYXRTcGxpdFBhdGhbbWFuZGF0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFtYW5kYXRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLm1hbmRhdFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJtYW5kYXRcIiBmaWxlOiAke21hbmRhdE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvTWFuZGF0V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShtYW5kYXRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0ID0gbWFuZGF0T3JpZ2luYWwubWFuZGF0XG4gICAgICAgICAgICAgICAgbGV0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAobWFuZGF0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5wdXNoKG1hbmRhdClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0cyBvZiBPYmplY3QudmFsdWVzKG1hbmRhdHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBtYW5kYXRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJhY3RldXJcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYWN0ZXVyXCIgZmlsZTogJHthY3RldXJPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1ck9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXIoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGFjdGV1ck9yaWdpbmFsLmFjdGV1clxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJVaWQgPSBhY3RldXIudWlkW1wiI3RleHRcIl1cbiAgICAgICAgICAgICAgY29uc3QgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChkZXBvcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLmRlcG9ydHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIuZGVwb3J0cyA9IHsgZGVwb3J0OiBkZXBvcnRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIubWFuZGF0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5tYW5kYXRzID0geyBtYW5kYXQ6IG1hbmRhdHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1clVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wib3JnYW5lXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcIm9yZ2FuZVwiIGZpbGU6ICR7b3JnYW5lT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmUgPSBvcmdhbmVPcmlnaW5hbC5vcmdhbmVcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2Ygb3JpZ2luYWxEYXRhLnJldW5pb25zLnJldW5pb24pIHtcbiAgICAgICAgICAgICAgd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJyZXVuaW9uXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicmV1bmlvblwiIGZpbGU6ICR7cmV1bmlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJldW5pb25PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b1JldW5pb24ocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbiA9IHJldW5pb25PcmlnaW5hbC5yZXVuaW9uXG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9jdW1lbnRzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9jdW1lbnRzRGlyKVxuICAgICAgY29uc3QgZG9zc2llcnNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvc3NpZXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9zc2llcnNEaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC50ZXh0ZXNMZWdpc2xhdGlmc1xuICAgICAgICAgICAgICAuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgZG9zc2llclBhcmxlbWVudGFpcmUgfSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0XG4gICAgICAgICAgICAgIC5kb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXIpIHtcbiAgICAgICAgICAgICAgd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb2N1bWVudFwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImRvY3VtZW50XCIgZmlsZTogJHtkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0RvY3VtZW50KGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBkb2N1bWVudE9yaWdpbmFsLmRvY3VtZW50XG4gICAgICAgICAgICAgIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9zc2llclBhcmxlbWVudGFpcmVcIiBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwuZG9zc2llclBhcmxlbWVudGFpcmVcbiAgICAgICAgICAgICAgd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInNjcnV0aW5cIiBmaWxlOiAke3NjcnV0aW5PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbldyYXBwZXIoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbiA9IHNjcnV0aW5PcmlnaW5hbC5zY3J1dGluXG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBxdWVzdGlvblNwbGl0UGF0aFtxdWVzdGlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ucXVlc3Rpb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicXVlc3Rpb25cIiBmaWxlOiAke3F1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gUXVlc3Rpb25zUmF3Q29udmVydC50b1F1ZXN0aW9uV3JhcHBlcihxdWVzdGlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gcXVlc3Rpb25PcmlnaW5hbC5xdWVzdGlvblxuICAgICAgICAgICAgICB3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHF1ZXN0aW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Db21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCIueG1sXCIpXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5jb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJjb21wdGVSZW5kdVNlYW5jZVwiIGZpbGU6ICR7Y29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQ29tcHRlc1JlbmR1c1Jhd0NvbnZlcnQudG9Db21wdGVSZW5kdVdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZSA9IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWwuY29tcHRlUmVuZHVcbiAgICAgICAgICAgICAgd3JpdGVDb21wdGVzUmVuZHVzUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBleGl0Q29kZVxufVxuXG5mdW5jdGlvbiB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRhdGFzZXRSZW9yZ2FuaXplZERpcjogc3RyaW5nLFxuICBhbWVuZGVtZW50OiB7XG4gICAgdWlkOiBzdHJpbmdcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZSZWY6IHN0cmluZ1xuICB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHVpZFRleHRlTGVnaXNsYXRpZiA9IGFtZW5kZW1lbnQudGV4dGVMZWdpc2xhdGlmUmVmXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbCh1aWRUZXh0ZUxlZ2lzbGF0aWYsIHVuZGVmaW5lZClcbiAgY29uc3QgdGV4dGVMZWdpc2xhdGlmRGlyID0gcGF0aC5qb2luKFxuICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICB1aWRUZXh0ZUxlZ2lzbGF0aWYsXG4gIClcbiAgZnMuZW5zdXJlRGlyU3luYyh0ZXh0ZUxlZ2lzbGF0aWZEaXIpXG4gIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgIHRleHRlTGVnaXNsYXRpZkRpcixcbiAgICBhbWVuZGVtZW50LnVpZCArIFwiLmpzb25cIixcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgIEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRvY3VtZW50c0Rpcjogc3RyaW5nLFxuICBkb2N1bWVudDogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXIsIGRvY3VtZW50LnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KGRvY3VtZW50LCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgZG9zc2llclBhcmxlbWVudGFpcmU6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gICAgZG9zc2llcnNEaXIsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmUudWlkLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgYCR7YmFzZW5hbWV9Lmpzb25gLFxuICAgIEpTT04uc3RyaW5naWZ5KGRvc3NpZXJQYXJsZW1lbnRhaXJlLCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oXG4gIHJldW5pb25zRGlyOiBzdHJpbmcsXG4gIHJldW5pb246IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0RpciwgcmV1bmlvbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShyZXVuaW9uLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKFxuICBzY3J1dGluc0Rpcjogc3RyaW5nLFxuICBzY3J1dGluOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXIsIHNjcnV0aW4udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlUXVlc3Rpb25zUmVvcmdhbml6ZWRKc29uKFxuICBxdWVzdGlvbnNEaXI6IHN0cmluZyxcbiAgcXVlc3Rpb246IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBxdWVzdGlvblVpZFJlZ2V4OiBSZWdFeHAgPSAvXlFBTihSXFxkKykoTFxcZCspUShFfEd8T1NEKShcXGQrKSQvXG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21VaWQocXVlc3Rpb25zRGlyLCBxdWVzdGlvbi51aWQsIHF1ZXN0aW9uVWlkUmVnZXgpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShxdWVzdGlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbihcbiAgY29tcHRlc1JlbmR1c0Rpcjogc3RyaW5nLFxuICBjb21wdGVSZW5kdTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbXB0ZVJlbmR1VWlkUmVnZXg6IFJlZ0V4cCA9XG4gICAgL15DUlNBTihSXFxkKykoTFxcZCspKFNcXGQrKShPfEUpKFxcZCspKE5cXGQrKSQvXG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21VaWQoXG4gICAgY29tcHRlc1JlbmR1c0RpcixcbiAgICBjb21wdGVSZW5kdS51aWQsXG4gICAgY29tcHRlUmVuZHVVaWRSZWdleCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoY29tcHRlUmVuZHUsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZW9yZ2FuaXplX2RhdGEudHNcIikpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbiAgcHJvY2Vzcy5leGl0KHJlb3JnYW5pemVEYXRhKG9wdGlvbnMpKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixTQUFTQyxRQUFRLFFBQVEsZUFBZTtBQUN4QyxPQUFPQyxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLEVBQUUsTUFBTSxVQUFVO0FBQ3pCLE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQUEsU0FFZEMsUUFBUSxFQUFFQyxnQkFBZ0IsRUFBRUMsZUFBZTtBQUFBLFNBQzNDQyxrQkFBa0IsRUFBRUMsaUJBQWlCO0FBQUEsT0FDdkMsS0FBS0MsR0FBRztBQUFBLFNBQ05DLE9BQU87QUFBQSxTQUVkQyxtQkFBbUIsRUFDbkJDLCtCQUErQixFQUMvQkMsa0JBQWtCLEVBQ2xCQyxrQkFBa0IsRUFDbEJDLFdBQVc7QUFBQSxTQUVKQyxPQUFPLElBQUlDLDBCQUEwQjtBQUFBLFNBQ3JDRCxPQUFPLElBQUlFLGlCQUFpQjtBQUFBLFNBQzVCRixPQUFPLElBQUlHLHFCQUFxQjtBQUFBLFNBQ2hDSCxPQUFPLElBQUlJLDZCQUE2QjtBQUFBLFNBQ3hDSixPQUFPLElBQUlLLGtCQUFrQjtBQUFBLFNBQzdCTCxPQUFPLElBQUlNLG1CQUFtQjtBQUFBLFNBQzlCTixPQUFPLElBQUlPLHVCQUF1QjtBQUFBLFNBQ2xDQyxXQUFXO0FBRXBCLE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSwrREFBK0Q7RUFDckVDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRUM7QUFDUixDQUFDLEVBQ0Q7RUFDRUosS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQkMsSUFBSSxFQUFFLFFBQVE7RUFDZEMsSUFBSSxFQUFFRTtBQUNSLENBQUMsRUFDRDtF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
710
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImRhdGFzZXRzIiwiRGF0YXNldFN0cnVjdHVyZSIsIkVuYWJsZWREYXRhc2V0cyIsImZpbHRlckJ5TGVnaXNsYXR1cmUiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImdpdCIsIndhbGtEaXIiLCJwYXRoRnJvbURvY3VtZW50VWlkIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsInBhdGhGcm9tUmV1bmlvblVpZCIsInBhdGhGcm9tU2NydXRpblVpZCIsInBhdGhGcm9tVWlkIiwiQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwiQWdlbmRhc1Jhd0NvbnZlcnQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsIlNjcnV0aW5zUmF3Q29udmVydCIsIlF1ZXN0aW9uc1Jhd0NvbnZlcnQiLCJDb21wdGVzUmVuZHVzUmF3Q29udmVydCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiTnVtYmVyIiwiZGVmYXVsdE9wdGlvbiIsInJlb3JnYW5pemVEYXRhIiwib3B0aW9ucyIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiZXhpdENvZGUiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJub3RTdHJpY3RFcXVhbCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJjaG9zZW5EYXRhc2V0cyIsImxlZ2lzbGF0dXJlIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwib3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJiYXNlbmFtZSIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwicHVsbCIsImVuc3VyZURpclN5bmMiLCJyZWFkZGlyU3luYyIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJTaW5nbGVGaWxlIiwib3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwib3JpZ2luYWxEYXRhIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVyIiwiZXhwb3J0IiwiYWN0ZXVycyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIm9yZ2FuZSIsIm9yZ2FuZXMiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsInZlcmJvc2UiLCJkZXBvcnRPcmlnaW5hbEpzb24iLCJkZXBvcnRPcmlnaW5hbCIsInRvRGVwb3J0IiwiZGVwb3J0IiwiZGVwb3J0cyIsImFjdGV1clJlZiIsInB1c2giLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFuZGF0c0J5QWN0ZXVyVWlkIiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJtYW5kYXRPcmlnaW5hbEZpbGVQYXRoIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdFdyYXBwZXIiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJjb21taXQiLCJlcnJvckNvZGUiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9uIiwicmV1bmlvbnMiLCJ3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24iLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgiLCJyZXVuaW9uT3JpZ2luYWxKc29uIiwicmV1bmlvbk9yaWdpbmFsIiwidG9SZXVuaW9uIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJhbWVuZGVtZW50Iiwid3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiYW1lbmRlbWVudE9yaWdpbmFsSnNvbiIsImFtZW5kZW1lbnRPcmlnaW5hbCIsInRvQW1lbmRlbWVudFdyYXBwZXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50c0RpciIsImRvc3NpZXJzRGlyIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXIiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwidG9TY3J1dGlucyIsInNjcnV0aW4iLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsIlF1ZXN0aW9ucyIsInF1ZXN0aW9ucyIsInF1ZXN0aW9uU3BsaXRQYXRoIiwicXVlc3Rpb25GaWxlbmFtZSIsInF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCIsInF1ZXN0aW9uT3JpZ2luYWxKc29uIiwicXVlc3Rpb25PcmlnaW5hbCIsInRvUXVlc3Rpb25XcmFwcGVyIiwicXVlc3Rpb24iLCJ3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbiIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlc1JlbmR1c1NlYW5jZXMiLCJjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbiIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWwiLCJ0b0NvbXB0ZVJlbmR1V3JhcHBlciIsImNvbXB0ZVJlbmR1U2VhbmNlIiwiY29tcHRlUmVuZHUiLCJ3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24iLCJ1aWRUZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZSZWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZEaXIiLCJyZXVuaW9uc0RpciIsInNjcnV0aW5zRGlyIiwicXVlc3Rpb25zRGlyIiwicXVlc3Rpb25VaWRSZWdleCIsImNvbXB0ZXNSZW5kdXNEaXIiLCJjb21wdGVSZW5kdVVpZFJlZ2V4IiwiYXJndiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZW9yZ2FuaXplX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlLCBFbmFibGVkRGF0YXNldHMsIGZpbHRlckJ5TGVnaXNsYXR1cmUgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgKiBhcyBnaXQgZnJvbSBcIi4uL2dpdFwiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbiAgcGF0aEZyb21VaWQsXG59IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQW1lbmRlbWVudHNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBRdWVzdGlvbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9xdWVzdGlvbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBDb21wdGVzUmVuZHVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvZGViYXRzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgaGVscDogXCJsZWdpc2xhdHVyZXMgb2YgY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZXRyaWV2ZTsgbGVhdmUgZW1wdHkgb3IgdXNlIDAgZm9yIGFsbFwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBOdW1iZXIsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJwXCIsXG4gICAgaGVscDogXCJwdWxsIHJlcG9zaXRvcmllcyBiZWZvcmUgcHJvY2VlZGluZ1wiLFxuICAgIG5hbWU6IFwicHVsbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcIlZcIixcbiAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgbmFtZTogXCJuby12YWxpZGF0ZS1yYXdcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogbnVtYmVyIHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBleGl0Q29kZSA9IDEwIC8vIE5vdGhpbmcgdG8gY29tbWl0XG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHZhbGlkYXRlUmF3RGF0YSA9ICFvcHRpb25zW1wibm8tdmFsaWRhdGUtcmF3XCJdXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvc2VuRGF0YXNldHMgPSBmaWx0ZXJCeUxlZ2lzbGF0dXJlKGRhdGFzZXRzLCBvcHRpb25zLmxlZ2lzbGF0dXJlKTtcblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgICBleGVjU3luYyhgZ2l0IHB1bGwgLS1yZWJhc2VgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG1hbmRhdE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXQgPSBtYW5kYXRPcmlnaW5hbC5tYW5kYXRcbiAgICAgICAgICAgICAgICBsZXQgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChtYW5kYXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYW5kYXRzLnB1c2gobWFuZGF0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRzIG9mIE9iamVjdC52YWx1ZXMobWFuZGF0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIG1hbmRhdHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImFjdGV1clwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhY3RldXJcIiBmaWxlOiAke2FjdGV1ck9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cihhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyID0gYWN0ZXVyT3JpZ2luYWwuYWN0ZXVyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clVpZCA9IGFjdGV1ci51aWRbXCIjdGV4dFwiXVxuICAgICAgICAgICAgICBjb25zdCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIuZGVwb3J0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5kZXBvcnRzID0geyBkZXBvcnQ6IGRlcG9ydHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb2N1bWVudHNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb2N1bWVudHNEaXIpXG4gICAgICBjb25zdCBkb3NzaWVyc0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9zc2llcnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb3NzaWVyc0RpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBvcmlnaW5hbERhdGEuc2NydXRpbnMuc2NydXRpbikge1xuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJzY3J1dGluXCIgZmlsZTogJHtzY3J1dGluT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5XcmFwcGVyKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW4gPSBzY3J1dGluT3JpZ2luYWwuc2NydXRpblxuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXN0aW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInF1ZXN0aW9uXCIgZmlsZTogJHtxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFF1ZXN0aW9uc1Jhd0NvbnZlcnQudG9RdWVzdGlvbldyYXBwZXIocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHF1ZXN0aW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHF1ZXN0aW9uT3JpZ2luYWwucXVlc3Rpb25cbiAgICAgICAgICAgICAgd3JpdGVRdWVzdGlvbnNSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBxdWVzdGlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiLnhtbFwiKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiY29tcHRlUmVuZHVTZWFuY2VcIiBmaWxlOiAke2NvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0LnRvQ29tcHRlUmVuZHVXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2UgPSBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsLmNvbXB0ZVJlbmR1XG4gICAgICAgICAgICAgIHdyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2UsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXhpdENvZGVcbn1cblxuZnVuY3Rpb24gd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZyxcbiAgYW1lbmRlbWVudDoge1xuICAgIHVpZDogc3RyaW5nXG4gICAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCB1aWRUZXh0ZUxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnRleHRlTGVnaXNsYXRpZlJlZlxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodWlkVGV4dGVMZWdpc2xhdGlmLCB1bmRlZmluZWQpXG4gIGNvbnN0IHRleHRlTGVnaXNsYXRpZkRpciA9IHBhdGguam9pbihcbiAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgdWlkVGV4dGVMZWdpc2xhdGlmLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVMZWdpc2xhdGlmRGlyKVxuICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZEaXIsXG4gICAgYW1lbmRlbWVudC51aWQgKyBcIi5qc29uXCIsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkb2N1bWVudHNEaXI6IHN0cmluZyxcbiAgZG9jdW1lbnQ6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCBkb2N1bWVudC51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICAgIGRvc3NpZXJzRGlyLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIGAke2Jhc2VuYW1lfS5qc29uYCxcbiAgICBKU09OLnN0cmluZ2lmeShkb3NzaWVyUGFybGVtZW50YWlyZSwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKFxuICByZXVuaW9uc0Rpcjogc3RyaW5nLFxuICByZXVuaW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXIsIHJldW5pb24udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihcbiAgc2NydXRpbnNEaXI6IHN0cmluZyxcbiAgc2NydXRpbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyLCBzY3J1dGluLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbihcbiAgcXVlc3Rpb25zRGlyOiBzdHJpbmcsXG4gIHF1ZXN0aW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgcXVlc3Rpb25VaWRSZWdleDogUmVnRXhwID0gL15RQU4oUlxcZCspKExcXGQrKVEoRXxHfE9TRCkoXFxkKykkL1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKHF1ZXN0aW9uc0RpciwgcXVlc3Rpb24udWlkLCBxdWVzdGlvblVpZFJlZ2V4KVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocXVlc3Rpb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24oXG4gIGNvbXB0ZXNSZW5kdXNEaXI6IHN0cmluZyxcbiAgY29tcHRlUmVuZHU6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBjb21wdGVSZW5kdVVpZFJlZ2V4OiBSZWdFeHAgPVxuICAgIC9eQ1JTQU4oUlxcZCspKExcXGQrKShTXFxkKykoT3xFKShcXGQrKShOXFxkKykkL1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKFxuICAgIGNvbXB0ZXNSZW5kdXNEaXIsXG4gICAgY29tcHRlUmVuZHUudWlkLFxuICAgIGNvbXB0ZVJlbmR1VWlkUmVnZXgsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KGNvbXB0ZVJlbmR1LCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVvcmdhbml6ZV9kYXRhLnRzXCIpKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG4gIHByb2Nlc3MuZXhpdChyZW9yZ2FuaXplRGF0YShvcHRpb25zKSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsUUFBUSxRQUFRLGVBQWU7QUFDeEMsT0FBT0MsZUFBZSxNQUFNLG1CQUFtQjtBQUMvQyxPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBRWRDLFFBQVEsRUFBRUMsZ0JBQWdCLEVBQUVDLGVBQWUsRUFBRUMsbUJBQW1CO0FBQUEsU0FDaEVDLGtCQUFrQixFQUFFQyxpQkFBaUI7QUFBQSxPQUN2QyxLQUFLQyxHQUFHO0FBQUEsU0FDTkMsT0FBTztBQUFBLFNBRWRDLG1CQUFtQixFQUNuQkMsK0JBQStCLEVBQy9CQyxrQkFBa0IsRUFDbEJDLGtCQUFrQixFQUNsQkMsV0FBVztBQUFBLFNBRUpDLE9BQU8sSUFBSUMsMEJBQTBCO0FBQUEsU0FDckNELE9BQU8sSUFBSUUsaUJBQWlCO0FBQUEsU0FDNUJGLE9BQU8sSUFBSUcscUJBQXFCO0FBQUEsU0FDaENILE9BQU8sSUFBSUksNkJBQTZCO0FBQUEsU0FDeENKLE9BQU8sSUFBSUssa0JBQWtCO0FBQUEsU0FDN0JMLE9BQU8sSUFBSU0sbUJBQW1CO0FBQUEsU0FDOUJOLE9BQU8sSUFBSU8sdUJBQXVCO0FBRTNDLE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSwrREFBK0Q7RUFDckVDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRUM7QUFDUixDQUFDLEVBQ0Q7RUFDRUosS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFF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