@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
package/lib/loaders.mjs CHANGED
@@ -15,7 +15,7 @@ import { Legislature } from "./types/legislatures.mjs";
15
15
  import { Convert as ScrutinsConvert } from "./types/scrutins.mjs";
16
16
  import { Convert as QuestionsConvert } from "./types/questions.mjs";
17
17
  import { Convert as ComptesRendusConvert } from "./types/debats.mjs";
18
- const documentUidRegex = /^(ACIN|ALCN|AVCE|AVIS|DECL|ETDI|LETT|MESS|PION|PNRE|PRJL|RAPP|RINF|RION)(AN|SN)(R\d+)[LS](\d+)(B|BTA|BTC|TAP)(\d+)(-.*)?$/;
18
+ const documentUidRegex = /^(ACIN|ALCN|AVCE|AVIS|DECL|ETDI|LETT|MESS|MION|PION|PNRE|PRJL|RAPP|RINF|RION)(AN|SN)(R\d+)[LS](\d+)(B|BTA|BTC|TAP)(\d+)(-.*)?$/;
19
19
  const dossierUidRegex = /^DL(R\d+)(L\d+)N(\d+)$/;
20
20
  const reunionUidRegex = /^RU(AN|CG|SN)(R\d+)(L\d+)([AS]\d{4})(IDC|IDFL?|IDS)(\d+)$/;
21
21
  const scrutinUidRegex = /^VTAN(R\d+)(L\d+)V(\d+)$/;
@@ -943,13 +943,13 @@ export function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislat
943
943
  }
944
944
 
945
945
  /**
946
- * Read a document or a division of a document from file system
946
+ * Read infos of a document or a division of a document from file system
947
947
  *
948
948
  * @param dataDir
949
949
  * @param uid UID of a document or a division
950
950
  * @param formats requested formats of the document in decreasing preference order
951
951
  */
952
- export function loadAssembleeDocumentFileInfos(dataDir, uid, formats) {
952
+ export function loadAssembleeDocumentFile(dataDir, uid, formats) {
953
953
  const documentsDir = path.join(dataDir, "Documents");
954
954
  const documentDir = pathFromDocumentUid(documentsDir, uid);
955
955
  const indexPath = path.join(documentDir, "index.json");
@@ -958,13 +958,17 @@ export function loadAssembleeDocumentFileInfos(dataDir, uid, formats) {
958
958
  }
959
959
  const index = fs.readJsonSync(indexPath);
960
960
  for (const format of formats) {
961
- for (const documentFileInfos of index[format] ?? []) {
962
- if (documentFileInfos.filename === undefined) {
961
+ for (const {
962
+ filename,
963
+ url
964
+ } of index[format] ?? []) {
965
+ if (filename === undefined) {
963
966
  continue;
964
967
  }
965
968
  return {
966
- ...documentFileInfos,
967
- format
969
+ format,
970
+ path: path.join(documentDir, filename),
971
+ url
968
972
  };
969
973
  }
970
974
  }
@@ -1060,4 +1064,4 @@ export function pathFromUid(dataDir, uid, dataRegexp) {
1060
1064
  fs.ensureDirSync(numeroMilliersDir);
1061
1065
  return path.join(numeroMilliersDir, uid);
1062
1066
  }
1063
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzIiwiZGF0YURpciIsImxlZ2lzbGF0dXJlIiwibG9nIiwiYWN0ZXVyc1VpZCIsIlNldCIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwidG9BY3RldXIiLCJoYXMiLCJ1aWQiLCJhZGQiLCJkYXRhc2V0TGVnaXNsYXR1cmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHNVaWQiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnQiLCJ0b0FtZW5kZW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsImRvY3VtZW50c1VpZCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJ0b0RvY3VtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMiLCJvcmdhbmVzVWlkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsIml0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMiLCJyZXVuaW9uc1VpZCIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyIsInNjcnV0aW5zVWlkIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwidG9TY3J1dGluIiwiaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMiLCJxdWVzdGlvbnNVaWQiLCJxdWVzdGlvbnMiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbkZpbGVQYXRoIiwicXVlc3Rpb25Kc29uIiwicXVlc3Rpb24iLCJ0b1F1ZXN0aW9uIiwiaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzIiwiY29tcHRlc1JlbmR1c1VpZCIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlUmVuZHVTcGxpdFBhdGgiLCJjb21wdGVSZW5kdUZpbGVuYW1lIiwiY29tcHRlUmVuZHVGaWxlUGF0aCIsImNvbXB0ZVJlbmR1SnNvbiIsImNvbXB0ZVJlbmR1IiwidG9Db21wdGVSZW5kdSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJ1bmRlZmluZWQiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludE9kaiIsInBvaW50c09kaiIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llclNwbGl0UGF0aCIsImRvc3NpZXJGaWxlbmFtZSIsImRvc3NpZXJGaWxlUGF0aCIsImRvc3NpZXJKc29uIiwiZG9zc2llciIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiU2VpemUiLCJleGlzdHNTeW5jIiwianNvbiIsIk9iamVjdCIsImFzc2lnbiIsIkpTT04iLCJwYXJzZSIsInNjcnV0aW5CeVVpZCIsIlNjcnV0aW5zIiwicXVlc3Rpb25CeVVpZCIsIlF1ZXN0aW9ucyIsImNvbXB0ZVJlbmR1QnlVaWQiLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1UGF0aCIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwidG9RdWVzdGlvbnMiLCJjb21wdGVzUmVuZHVzIiwidG9Db21wdGVzUmVuZHVzIiwibG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZUluZm9zIiwiZm9ybWF0cyIsImRvY3VtZW50c0RpciIsImRvY3VtZW50RGlyIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsImluZGV4UGF0aCIsInBhdGhFeGlzdHNTeW5jIiwiaW5kZXgiLCJyZWFkSnNvblN5bmMiLCJmb3JtYXQiLCJkb2N1bWVudEZpbGVJbmZvcyIsImxvYWRBc3NlbWJsZWVQaG90b3NEZXB1dGVzIiwibG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyIsIm1hdGNoIiwiZXhlYyIsIm5vdFN0cmljdEVxdWFsIiwiZG9jdW1lbnRUeXBlIiwiY2hhbWJyZURpciIsInJlcHVibGlxdWVEaXIiLCJsZWdpc2xhdHVyZURpciIsImV0YXREaXIiLCJudW1lcm8iLCJzdWJzdHIiLCJudW1lcm9NaWxsaWVyc0RpciIsImVuc3VyZURpclN5bmMiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwiZG9zc2llcnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJyZXVuaW9uc0RpciIsInNlc3Npb25EaXIiLCJpZERpciIsIm51bWVyb01pbGxpb25zRGlyIiwicGF0aEZyb21TY3J1dGluVWlkIiwic2NydXRpbnNEaXIiLCJwYXRoRnJvbVVpZCIsImRhdGFSZWdleHAiXSwic291cmNlcyI6WyIuLi9zcmMvbG9hZGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gTG9hZCBkYXRhIGZyb20gZmlsZXNcblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgeyBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBkYXRhc2V0cywgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4vZGF0YXNldHNcIlxuaW1wb3J0IHR5cGUgeyBEb2N1bWVudEZpbGVJbmZvcyB9IGZyb20gXCIuL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c0NvbnZlcnQsIENvbXB0ZVJlbmR1IH0gZnJvbSBcIi4vdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7IERvY3VtZW50VXJsRm9ybWF0IH0gZnJvbSBcIi4vdXJsc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxuICByZWFkb25seSBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH1cbiAgcmVhZG9ubHkgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9XG59XG5cbmNvbnN0IGRvY3VtZW50VWlkUmVnZXggPVxuICAvXihBQ0lOfEFMQ058QVZDRXxBVklTfERFQ0x8RVRESXxMRVRUfE1FU1N8UElPTnxQTlJFfFBSSkx8UkFQUHxSSU5GfFJJT04pKEFOfFNOKShSXFxkKylbTFNdKFxcZCspKEJ8QlRBfEJUQ3xUQVApKFxcZCspKC0uKik/JC9cbmNvbnN0IGRvc3NpZXJVaWRSZWdleCA9IC9eREwoUlxcZCspKExcXGQrKU4oXFxkKykkL1xuY29uc3QgcmV1bmlvblVpZFJlZ2V4ID1cbiAgL15SVShBTnxDR3xTTikoUlxcZCspKExcXGQrKShbQVNdXFxkezR9KShJREN8SURGTD98SURTKShcXGQrKSQvXG5jb25zdCBzY3J1dGluVWlkUmVnZXggPSAvXlZUQU4oUlxcZCspKExcXGQrKVYoXFxkKykkL1xuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlQWN0ZXVycyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGFjdGV1cjogQWN0ZXVyOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBhY3RldXJzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthY3RldXJGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1ckZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBhY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgIGlmIChhY3RldXJzVWlkLmhhcyhhY3RldXIudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgYWN0ZXVyc1VpZC5hZGQoYWN0ZXVyLnVpZClcbiAgICAgIHlpZWxkIHsgYWN0ZXVyLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlQW1lbmRlbWVudHMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBhbWVuZGVtZW50OiBBbWVuZGVtZW50OyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBhbWVuZGVtZW50c1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYW1lbmRlbWVudFNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYW1lbmRlbWVudEZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBhbWVuZGVtZW50ID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgIGlmIChhbWVuZGVtZW50c1VpZC5oYXMoYW1lbmRlbWVudC51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhbWVuZGVtZW50c1VpZC5hZGQoYW1lbmRlbWVudC51aWQpXG4gICAgICB5aWVsZCB7IGFtZW5kZW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVEb2N1bWVudHMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBkb2N1bWVudDogRG9jdW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGRvY3VtZW50c1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkb2N1bWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvY3VtZW50U3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvY3VtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGRvY3VtZW50ID0gRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudEpzb24pXG4gICAgICBpZiAoZG9jdW1lbnRzVWlkLmhhcyhkb2N1bWVudC51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBkb2N1bWVudHNVaWQuYWRkKGRvY3VtZW50LnVpZClcbiAgICAgIHlpZWxkIHsgZG9jdW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHtcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlXG4gIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcbiAgICAgIFwiZG9zc2llcnNcIixcbiAgICBdKSkge1xuICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSA9XG4gICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoW2Rvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YXNldERpcixcbiAgICAgICAgLi4uZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgsXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGgsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVKc29uLFxuICAgICAgICApXG4gICAgICBpZiAoZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZC5oYXMoZG9zc2llclBhcmxlbWVudGFpcmUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZC5hZGQoZG9zc2llclBhcmxlbWVudGFpcmUudWlkKVxuICAgICAgeWllbGQgeyBkb3NzaWVyUGFybGVtZW50YWlyZSwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBvcmdhbmU6IE9yZ2FuZTsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3Qgb3JnYW5lc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wib3JnYW5lc1wiXSkpIHtcbiAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBvcmdhbmVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZ2FuZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhvcmdhbmVGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3Qgb3JnYW5lID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUob3JnYW5lSnNvbilcbiAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICBpZiAob3JnYW5lc1VpZC5oYXMob3JnYW5lLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIG9yZ2FuZXNVaWQuYWRkKG9yZ2FuZS51aWQpXG4gICAgICB5aWVsZCB7IG9yZ2FuZSwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZVJldW5pb25zKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgcmV1bmlvbjogUmV1bmlvbjsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgcmV1bmlvbnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyZXVuaW9uRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgaWYgKHJldW5pb25zVWlkLmhhcyhyZXVuaW9uLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHJldW5pb25zVWlkLmFkZChyZXVuaW9uLnVpZClcbiAgICAgIHlpZWxkIHsgcmV1bmlvbiwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZVNjcnV0aW5zKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgc2NydXRpbjogU2NydXRpbjsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3Qgc2NydXRpbnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9IHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7c2NydXRpbkZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3Qgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICBpZiAoc2NydXRpbnNVaWQuaGFzKHNjcnV0aW4udWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgc2NydXRpbnNVaWQuYWRkKHNjcnV0aW4udWlkKVxuICAgICAgeWllbGQgeyBzY3J1dGluLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlUXVlc3Rpb25zKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgcXVlc3Rpb246IFF1ZXN0aW9uOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBxdWVzdGlvbnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9IHF1ZXN0aW9uU3BsaXRQYXRoW3F1ZXN0aW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgcXVlc3Rpb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5xdWVzdGlvblNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtxdWVzdGlvbkZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBxdWVzdGlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhxdWVzdGlvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBxdWVzdGlvbiA9IFF1ZXN0aW9uc0NvbnZlcnQudG9RdWVzdGlvbihxdWVzdGlvbkpzb24pXG4gICAgICBpZiAocXVlc3Rpb25zVWlkLmhhcyhxdWVzdGlvbi51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBxdWVzdGlvbnNVaWQuYWRkKHF1ZXN0aW9uLnVpZClcbiAgICAgIHlpZWxkIHsgcXVlc3Rpb24sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgY29tcHRlUmVuZHU6IENvbXB0ZVJlbmR1OyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBjb21wdGVzUmVuZHVzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlbmFtZSA9XG4gICAgICAgIGNvbXB0ZVJlbmR1U3BsaXRQYXRoW2NvbXB0ZVJlbmR1U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWNvbXB0ZVJlbmR1RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5jb21wdGVSZW5kdVNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtjb21wdGVSZW5kdUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBjb21wdGVSZW5kdUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjb21wdGVSZW5kdUZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBjb21wdGVSZW5kdSA9IENvbXB0ZXNSZW5kdXNDb252ZXJ0LnRvQ29tcHRlUmVuZHUoY29tcHRlUmVuZHVKc29uKVxuICAgICAgaWYgKGNvbXB0ZXNSZW5kdXNVaWQuaGFzKGNvbXB0ZVJlbmR1LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbXB0ZXNSZW5kdXNVaWQuYWRkKGNvbXB0ZVJlbmR1LnVpZClcbiAgICAgIHlpZWxkIHsgY29tcHRlUmVuZHUsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBMb2FkIGRhdGEgZnJvbSBzcGxpdCBmaWxlcy5cbi8vLyBEZXByZWNhdGVkOiBVc2UgaXRlckxvYWQuLi4gaXRlcmF0b3JzIGluc3RlYWQuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGEoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthY3RldXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXIoYWN0ZXVySnNvbilcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ub3JnYW5lU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhvcmdhbmVGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgb3JnYW5lID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUob3JnYW5lSnNvbilcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyZXVuaW9uRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uSnNvbilcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYW1lbmRlbWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb2N1bWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9jdW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvY3VtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudEpzb24pXG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9zc2llcnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlbmFtZSA9IGRvc3NpZXJTcGxpdFBhdGhbZG9zc2llclNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvc3NpZXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9zc2llclNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9zc2llckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb3NzaWVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvc3NpZXIgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llckpzb24pXG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9IHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7c2NydXRpbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzY3J1dGluRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHNjcnV0aW4gPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGluKHNjcnV0aW5Kc29uKVxuICAgICAgICBpZiAoc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9IHNjcnV0aW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHF1ZXN0aW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUXVlc3Rpb24gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUXVlc3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnF1ZXN0aW9ucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9IHF1ZXN0aW9uU3BsaXRQYXRoW3F1ZXN0aW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcXVlc3Rpb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnF1ZXN0aW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtxdWVzdGlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlc3Rpb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocXVlc3Rpb25GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBRdWVzdGlvbnNDb252ZXJ0LnRvUXVlc3Rpb24ocXVlc3Rpb25Kc29uKVxuICAgICAgICBpZiAocXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPSBxdWVzdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Db21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1RmlsZW5hbWUgPSBjb21wdGVSZW5kdVBhdGhbY29tcHRlUmVuZHVQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghY29tcHRlUmVuZHVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmNvbXB0ZVJlbmR1UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7Y29tcHRlUmVuZHVGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNvbXB0ZVJlbmR1RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1ID0gQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVSZW5kdShjb21wdGVSZW5kdUpzb24pXG4gICAgICAgIGlmIChjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9IGNvbXB0ZVJlbmR1XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgICBxdWVzdGlvbkJ5VWlkLFxuICAgIGNvbXB0ZVJlbmR1QnlVaWQsXG4gIH1cbn1cblxuLy8vIExvYWQgZGF0YSBmcm9tIGJpZyBtb25vbHl0aWMgZmlsZXMuXG4vLy8gRGVwcmVjYXRlZDogQXNzZW1ibMOpZSBuYXRpb25hbGUgb3BlbiBkYXRhIG5vIG1vcmUgdXNlcyBtb25vbHl0aWMgZmlsZXMuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lcyA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBhY3RldXIgb2YgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2YgYWN0ZXVyc0V0T3JnYW5lcy5vcmdhbmVzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhZ2VuZGFzID0gQWdlbmRhc0NvbnZlcnQudG9BZ2VuZGFzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudHMoanNvbilcbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyIG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcnNQYXJsZW1lbnRhaXJlcykge1xuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIGNvbnN0IHBob3RvQnlVaWQgPSB7fVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBzY3J1dGlucyA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW5zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygc2NydXRpbnMuc2NydXRpbnMpIHtcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBxdWVzdGlvbnMgPSBRdWVzdGlvbnNDb252ZXJ0LnRvUXVlc3Rpb25zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHF1ZXN0aW9ucy5xdWVzdGlvbnMpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID0gcXVlc3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBjb21wdGVzUmVuZHVzID0gQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVzUmVuZHVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1IG9mIGNvbXB0ZXNSZW5kdXMuY29tcHRlc1JlbmR1cykge1xuICAgICAgICBpZiAoY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPSBjb21wdGVSZW5kdVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gICAgcXVlc3Rpb25CeVVpZCxcbiAgICBjb21wdGVSZW5kdUJ5VWlkLFxuICB9XG59XG5cbi8qKlxuICogUmVhZCBhIGRvY3VtZW50IG9yIGEgZGl2aXNpb24gb2YgYSBkb2N1bWVudCBmcm9tIGZpbGUgc3lzdGVtXG4gKlxuICogQHBhcmFtIGRhdGFEaXJcbiAqIEBwYXJhbSB1aWQgVUlEIG9mIGEgZG9jdW1lbnQgb3IgYSBkaXZpc2lvblxuICogQHBhcmFtIGZvcm1hdHMgcmVxdWVzdGVkIGZvcm1hdHMgb2YgdGhlIGRvY3VtZW50IGluIGRlY3JlYXNpbmcgcHJlZmVyZW5jZSBvcmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZUluZm9zKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuICBmb3JtYXRzOiBEb2N1bWVudFVybEZvcm1hdFtdLFxuKTogKERvY3VtZW50RmlsZUluZm9zICYgeyBmb3JtYXQ6IERvY3VtZW50VXJsRm9ybWF0IH0pIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIFwiRG9jdW1lbnRzXCIpXG4gIGNvbnN0IGRvY3VtZW50RGlyID0gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXIsIHVpZClcbiAgY29uc3QgaW5kZXhQYXRoID0gcGF0aC5qb2luKGRvY3VtZW50RGlyLCBcImluZGV4Lmpzb25cIilcbiAgaWYgKCFmcy5wYXRoRXhpc3RzU3luYyhpbmRleFBhdGgpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IGluZGV4ID0gZnMucmVhZEpzb25TeW5jKGluZGV4UGF0aClcbiAgZm9yIChjb25zdCBmb3JtYXQgb2YgZm9ybWF0cykge1xuICAgIGZvciAoY29uc3QgZG9jdW1lbnRGaWxlSW5mb3Mgb2YgaW5kZXhbZm9ybWF0XSA/PyBbXSkge1xuICAgICAgaWYgKGRvY3VtZW50RmlsZUluZm9zLmZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IC4uLmRvY3VtZW50RmlsZUluZm9zLCBmb3JtYXQgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlUGhvdG9zRGVwdXRlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9IHtcbiAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgZGF0YURpcixcbiAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgIH1gLFxuICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gIClcbiAgaWYgKGxvZykge1xuICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gIH1cbiAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikgYXMgeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlUGhvdG9zU2VuYXRldXJzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9IHtcbiAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgZGF0YURpcixcbiAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gIClcbiAgaWYgKGxvZykge1xuICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gIH1cbiAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikgYXMgeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZG9jdW1lbnRVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb2N1bWVudCBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgZG9jdW1lbnRUeXBlID0gcGF0aC5qb2luKGRvY3VtZW50c0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBjaGFtYnJlRGlyID0gcGF0aC5qb2luKGRvY3VtZW50VHlwZSwgbWF0Y2ghWzJdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBldGF0RGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGV0YXREaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb3NzaWVyVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9zc2llciBwYXJsZW1lbnRhaXJlIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGRvc3NpZXJzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gcmV1bmlvblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHJldW5pb24gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4ocmV1bmlvbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbMl0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3Qgc2Vzc2lvbkRpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBpZERpciA9IHBhdGguam9pbihzZXNzaW9uRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDkpXG4gIGNvbnN0IG51bWVyb01pbGxpb25zRGlyID0gcGF0aC5qb2luKGlkRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihudW1lcm9NaWxsaW9uc0RpciwgbnVtZXJvLnN1YnN0cigzLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBzY3J1dGluVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3Igc2NydXRpbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihzY3J1dGluc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbi8vIEdldCBzdGFuZGFyZCBwYXRoIGZvciBvYmplY3Qgd2l0aCB1aWQgOiByZXB1YmxpcXVlID4gbGVnaXNsYXR1cmUgPiBncm91cCBvYmplY3RzIGJ5IHRob3VzYW5kc1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tVWlkKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuICBkYXRhUmVnZXhwOiBSZWdFeHAsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRhdGFSZWdleHAuZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3Igb2JqZWN0IHdpdGggVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE9BQU9BLE1BQU0sTUFBTSxRQUFRO0FBQzNCLE9BQU9DLEVBQUUsTUFBTSxVQUFVO0FBQ3pCLE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQUEsU0FFZEMsZUFBZTtBQUFBLFNBQ2ZDLFFBQVEsRUFBRUQsZUFBZTtBQUFBLFNBRXpCRSxPQUFPO0FBQUEsU0FDUEEsT0FBTztBQUFBLFNBR2RDLE9BQU8sSUFBSUMsdUJBQXVCO0FBQUEsU0FJM0JELE9BQU8sSUFBSUUsY0FBYztBQUFBLFNBQ2JGLE9BQU8s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
1067
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzIiwiZGF0YURpciIsImxlZ2lzbGF0dXJlIiwibG9nIiwiYWN0ZXVyc1VpZCIsIlNldCIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwidG9BY3RldXIiLCJoYXMiLCJ1aWQiLCJhZGQiLCJkYXRhc2V0TGVnaXNsYXR1cmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHNVaWQiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnQiLCJ0b0FtZW5kZW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsImRvY3VtZW50c1VpZCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJ0b0RvY3VtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMiLCJvcmdhbmVzVWlkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsIml0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMiLCJyZXVuaW9uc1VpZCIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyIsInNjcnV0aW5zVWlkIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwidG9TY3J1dGluIiwiaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMiLCJxdWVzdGlvbnNVaWQiLCJxdWVzdGlvbnMiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbkZpbGVQYXRoIiwicXVlc3Rpb25Kc29uIiwicXVlc3Rpb24iLCJ0b1F1ZXN0aW9uIiwiaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzIiwiY29tcHRlc1JlbmR1c1VpZCIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlUmVuZHVTcGxpdFBhdGgiLCJjb21wdGVSZW5kdUZpbGVuYW1lIiwiY29tcHRlUmVuZHVGaWxlUGF0aCIsImNvbXB0ZVJlbmR1SnNvbiIsImNvbXB0ZVJlbmR1IiwidG9Db21wdGVSZW5kdSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJ1bmRlZmluZWQiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludE9kaiIsInBvaW50c09kaiIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llclNwbGl0UGF0aCIsImRvc3NpZXJGaWxlbmFtZSIsImRvc3NpZXJGaWxlUGF0aCIsImRvc3NpZXJKc29uIiwiZG9zc2llciIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiU2VpemUiLCJleGlzdHNTeW5jIiwianNvbiIsIk9iamVjdCIsImFzc2lnbiIsIkpTT04iLCJwYXJzZSIsInNjcnV0aW5CeVVpZCIsIlNjcnV0aW5zIiwicXVlc3Rpb25CeVVpZCIsIlF1ZXN0aW9ucyIsImNvbXB0ZVJlbmR1QnlVaWQiLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1UGF0aCIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwidG9RdWVzdGlvbnMiLCJjb21wdGVzUmVuZHVzIiwidG9Db21wdGVzUmVuZHVzIiwibG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZSIsImZvcm1hdHMiLCJkb2N1bWVudHNEaXIiLCJkb2N1bWVudERpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJpbmRleFBhdGgiLCJwYXRoRXhpc3RzU3luYyIsImluZGV4IiwicmVhZEpzb25TeW5jIiwiZm9ybWF0IiwidXJsIiwibG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMiLCJsb2FkQXNzZW1ibGVlUGhvdG9zU2VuYXRldXJzIiwibWF0Y2giLCJleGVjIiwibm90U3RyaWN0RXF1YWwiLCJkb2N1bWVudFR5cGUiLCJjaGFtYnJlRGlyIiwicmVwdWJsaXF1ZURpciIsImxlZ2lzbGF0dXJlRGlyIiwiZXRhdERpciIsIm51bWVybyIsInN1YnN0ciIsIm51bWVyb01pbGxpZXJzRGlyIiwiZW5zdXJlRGlyU3luYyIsInBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQiLCJkb3NzaWVyc0RpciIsInBhdGhGcm9tUmV1bmlvblVpZCIsInJldW5pb25zRGlyIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tVWlkIiwiZGF0YVJlZ2V4cCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RmlsZXNJbmRleCB9IGZyb20gXCIuL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c0NvbnZlcnQsIENvbXB0ZVJlbmR1IH0gZnJvbSBcIi4vdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7IERvY3VtZW50VXJsRm9ybWF0IH0gZnJvbSBcIi4vdXJsc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxuICByZWFkb25seSBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH1cbiAgcmVhZG9ubHkgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9XG59XG5cbmNvbnN0IGRvY3VtZW50VWlkUmVnZXggPVxuICAvXihBQ0lOfEFMQ058QVZDRXxBVklTfERFQ0x8RVRESXxMRVRUfE1FU1N8TUlPTnxQSU9OfFBOUkV8UFJKTHxSQVBQfFJJTkZ8UklPTikoQU58U04pKFJcXGQrKVtMU10oXFxkKykoQnxCVEF8QlRDfFRBUCkoXFxkKykoLS4qKT8kL1xuY29uc3QgZG9zc2llclVpZFJlZ2V4ID0gL15ETChSXFxkKykoTFxcZCspTihcXGQrKSQvXG5jb25zdCByZXVuaW9uVWlkUmVnZXggPVxuICAvXlJVKEFOfENHfFNOKShSXFxkKykoTFxcZCspKFtBU11cXGR7NH0pKElEQ3xJREZMP3xJRFMpKFxcZCspJC9cbmNvbnN0IHNjcnV0aW5VaWRSZWdleCA9IC9eVlRBTihSXFxkKykoTFxcZCspVihcXGQrKSQvXG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgYWN0ZXVyOiBBY3RldXI7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFjdGV1cnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgaWYgKGFjdGV1cnNVaWQuaGFzKGFjdGV1ci51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhY3RldXJzVWlkLmFkZChhY3RldXIudWlkKVxuICAgICAgeWllbGQgeyBhY3RldXIsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBbWVuZGVtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFtZW5kZW1lbnRzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgaWYgKGFtZW5kZW1lbnRzVWlkLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGFtZW5kZW1lbnRzVWlkLmFkZChhbWVuZGVtZW50LnVpZClcbiAgICAgIHlpZWxkIHsgYW1lbmRlbWVudCwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGRvY3VtZW50OiBEb2N1bWVudDsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgZG9jdW1lbnRzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9jdW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgIGlmIChkb2N1bWVudHNVaWQuaGFzKGRvY3VtZW50LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50c1VpZC5hZGQoZG9jdW1lbnQudWlkKVxuICAgICAgeWllbGQgeyBkb2N1bWVudCwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvc3NpZXJzUGFybGVtZW50YWlyZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAge1xuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmVcbiAgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGRvc3NpZXJzUGFybGVtZW50YWlyZXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1xuICAgICAgXCJkb3NzaWVyc1wiLFxuICAgIF0pKSB7XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhc2V0RGlyLFxuICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUpzb24sXG4gICAgICAgIClcbiAgICAgIGlmIChkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkLmhhcyhkb3NzaWVyUGFybGVtZW50YWlyZS51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkLmFkZChkb3NzaWVyUGFybGVtZW50YWlyZS51aWQpXG4gICAgICB5aWVsZCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlT3JnYW5lcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IG9yZ2FuZTogT3JnYW5lOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBvcmdhbmVzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgIGlmIChvcmdhbmVzVWlkLmhhcyhvcmdhbmUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgb3JnYW5lc1VpZC5hZGQob3JnYW5lLnVpZClcbiAgICAgIHlpZWxkIHsgb3JnYW5lLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyByZXVuaW9uOiBSZXVuaW9uOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCByZXVuaW9uc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldW5pb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICBpZiAocmV1bmlvbnNVaWQuaGFzKHJldW5pb24udWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV1bmlvbnNVaWQuYWRkKHJldW5pb24udWlkKVxuICAgICAgeWllbGQgeyByZXVuaW9uLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlU2NydXRpbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBzY3J1dGluOiBTY3J1dGluOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBzY3J1dGluc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBzY3J1dGluRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgIGlmIChzY3J1dGluc1VpZC5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBzY3J1dGluc1VpZC5hZGQoc2NydXRpbi51aWQpXG4gICAgICB5aWVsZCB7IHNjcnV0aW4sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBxdWVzdGlvbjogUXVlc3Rpb247IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IHF1ZXN0aW9uc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID0gcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghcXVlc3Rpb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBxdWVzdGlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnF1ZXN0aW9uU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3F1ZXN0aW9uRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uKHF1ZXN0aW9uSnNvbilcbiAgICAgIGlmIChxdWVzdGlvbnNVaWQuaGFzKHF1ZXN0aW9uLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHF1ZXN0aW9uc1VpZC5hZGQocXVlc3Rpb24udWlkKVxuICAgICAgeWllbGQgeyBxdWVzdGlvbiwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUNvbXB0ZXNSZW5kdXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBjb21wdGVSZW5kdTogQ29tcHRlUmVuZHU7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGNvbXB0ZXNSZW5kdXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBjb21wdGVSZW5kdVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVuYW1lID1cbiAgICAgICAgY29tcHRlUmVuZHVTcGxpdFBhdGhbY29tcHRlUmVuZHVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghY29tcHRlUmVuZHVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmNvbXB0ZVJlbmR1U3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2NvbXB0ZVJlbmR1RmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNvbXB0ZVJlbmR1RmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1ID0gQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVSZW5kdShjb21wdGVSZW5kdUpzb24pXG4gICAgICBpZiAoY29tcHRlc1JlbmR1c1VpZC5oYXMoY29tcHRlUmVuZHUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29tcHRlc1JlbmR1c1VpZC5hZGQoY29tcHRlUmVuZHUudWlkKVxuICAgICAgeWllbGQgeyBjb21wdGVSZW5kdSwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IFVzZSBpdGVyTG9hZC4uLiBpdGVyYXRvcnMgaW5zdGVhZC5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YShcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hY3RldXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1ckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke29yZ2FuZUZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnJldW5pb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYW1lbmRlbWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YW1lbmRlbWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvY3VtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb2N1bWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcXVlc3Rpb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBRdWVzdGlvbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID0gcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucXVlc3Rpb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3F1ZXN0aW9uRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVzdGlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhxdWVzdGlvbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBxdWVzdGlvbiA9IFF1ZXN0aW9uc0NvbnZlcnQudG9RdWVzdGlvbihxdWVzdGlvbkpzb24pXG4gICAgICAgIGlmIChxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9IHF1ZXN0aW9uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjb21wdGVSZW5kdUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IENvbXB0ZVJlbmR1IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlbmFtZSA9IGNvbXB0ZVJlbmR1UGF0aFtjb21wdGVSZW5kdVBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFjb21wdGVSZW5kdUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uY29tcHRlUmVuZHVQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtjb21wdGVSZW5kdUZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY29tcHRlUmVuZHVGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHUgPSBDb21wdGVzUmVuZHVzQ29udmVydC50b0NvbXB0ZVJlbmR1KGNvbXB0ZVJlbmR1SnNvbilcbiAgICAgICAgaWYgKGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID0gY29tcHRlUmVuZHVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICAgIHF1ZXN0aW9uQnlVaWQsXG4gICAgY29tcHRlUmVuZHVCeVVpZCxcbiAgfVxufVxuXG4vLy8gTG9hZCBkYXRhIGZyb20gYmlnIG1vbm9seXRpYyBmaWxlcy5cbi8vLyBEZXByZWNhdGVkOiBBc3NlbWJsw6llIG5hdGlvbmFsZSBvcGVuIGRhdGEgbm8gbW9yZSB1c2VzIG1vbm9seXRpYyBmaWxlcy5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBhY3RldXJzRXRPcmdhbmVzLmFjdGV1cnMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBhY3RldXJzRXRPcmdhbmVzLm9yZ2FuZXMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFnZW5kYXMgPSBBZ2VuZGFzQ29udmVydC50b0FnZW5kYXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBhZ2VuZGFzLnJldW5pb25zKSB7XG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYW1lbmRlbWVudHMgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50cyhqc29uKVxuICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2YgYW1lbmRlbWVudHMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnMgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoanNvbilcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXIgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzKSB7XG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAgY29uc3QgcGhvdG9CeVVpZCA9IHt9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IHNjcnV0aW5zID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbnMoanNvbilcbiAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBzY3J1dGlucy5zY3J1dGlucykge1xuICAgICAgICBpZiAoc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9IHNjcnV0aW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHF1ZXN0aW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUXVlc3Rpb24gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUXVlc3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnF1ZXN0aW9ucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IHF1ZXN0aW9ucyA9IFF1ZXN0aW9uc0NvbnZlcnQudG9RdWVzdGlvbnMoanNvbilcbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2YgcXVlc3Rpb25zLnF1ZXN0aW9ucykge1xuICAgICAgICBpZiAocXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPSBxdWVzdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Db21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGNvbXB0ZXNSZW5kdXMgPSBDb21wdGVzUmVuZHVzQ29udmVydC50b0NvbXB0ZXNSZW5kdXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHUgb2YgY29tcHRlc1JlbmR1cy5jb21wdGVzUmVuZHVzKSB7XG4gICAgICAgIGlmIChjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9IGNvbXB0ZVJlbmR1XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgICBxdWVzdGlvbkJ5VWlkLFxuICAgIGNvbXB0ZVJlbmR1QnlVaWQsXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkIGluZm9zIG9mIGEgZG9jdW1lbnQgb3IgYSBkaXZpc2lvbiBvZiBhIGRvY3VtZW50IGZyb20gZmlsZSBzeXN0ZW1cbiAqXG4gKiBAcGFyYW0gZGF0YURpclxuICogQHBhcmFtIHVpZCBVSUQgb2YgYSBkb2N1bWVudCBvciBhIGRpdmlzaW9uXG4gKiBAcGFyYW0gZm9ybWF0cyByZXF1ZXN0ZWQgZm9ybWF0cyBvZiB0aGUgZG9jdW1lbnQgaW4gZGVjcmVhc2luZyBwcmVmZXJlbmNlIG9yZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRG9jdW1lbnRGaWxlKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuICBmb3JtYXRzOiBEb2N1bWVudFVybEZvcm1hdFtdLFxuKTpcbiAgfCB7XG4gICAgICBmb3JtYXQ6IERvY3VtZW50VXJsRm9ybWF0XG4gICAgICBwYXRoOiBzdHJpbmdcbiAgICAgIHVybDogc3RyaW5nXG4gICAgfVxuICB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBcIkRvY3VtZW50c1wiKVxuICBjb25zdCBkb2N1bWVudERpciA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCB1aWQpXG4gIGNvbnN0IGluZGV4UGF0aCA9IHBhdGguam9pbihkb2N1bWVudERpciwgXCJpbmRleC5qc29uXCIpXG4gIGlmICghZnMucGF0aEV4aXN0c1N5bmMoaW5kZXhQYXRoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICBjb25zdCBpbmRleCA9IGZzLnJlYWRKc29uU3luYyhpbmRleFBhdGgpIGFzIERvY3VtZW50RmlsZXNJbmRleFxuICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmb3JtYXRzKSB7XG4gICAgZm9yIChjb25zdCB7IGZpbGVuYW1lLCB1cmwgfSBvZiBpbmRleFtmb3JtYXRdID8/IFtdKSB7XG4gICAgICBpZiAoZmlsZW5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZm9ybWF0LCBwYXRoOiBwYXRoLmpvaW4oZG9jdW1lbnREaXIsIGZpbGVuYW1lKSwgdXJsIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSB7XG4gIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICB9YCxcbiAgICBcImRlcHV0ZXMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSB7XG4gIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvY3VtZW50VWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9jdW1lbnQgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGRvY3VtZW50VHlwZSA9IHBhdGguam9pbihkb2N1bWVudHNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihkb2N1bWVudFR5cGUsIG1hdGNoIVsyXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbM10pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVs0XSlcbiAgY29uc3QgZXRhdERpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzVdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVs2XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihldGF0RGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICB1aWQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZG9zc2llclVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvc3NpZXIgcGFybGVtZW50YWlyZSBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihkb3NzaWVyc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHJldW5pb25VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciByZXVuaW9uIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBjaGFtYnJlRGlyID0gcGF0aC5qb2luKHJldW5pb25zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzJdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbM10pXG4gIGNvbnN0IHNlc3Npb25EaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs0XSlcbiAgY29uc3QgaWREaXIgPSBwYXRoLmpvaW4oc2Vzc2lvbkRpciwgbWF0Y2ghWzVdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDAwMDBcIiArIG1hdGNoIVs2XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA5KVxuICBjb25zdCBudW1lcm9NaWxsaW9uc0RpciA9IHBhdGguam9pbihpZERpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obnVtZXJvTWlsbGlvbnNEaXIsIG51bWVyby5zdWJzdHIoMywgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gc2NydXRpblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHNjcnV0aW4gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oc2NydXRpbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG4vLyBHZXQgc3RhbmRhcmQgcGF0aCBmb3Igb2JqZWN0IHdpdGggdWlkIDogcmVwdWJsaXF1ZSA+IGxlZ2lzbGF0dXJlID4gZ3JvdXAgb2JqZWN0cyBieSB0aG91c2FuZHNcbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVVpZChcbiAgZGF0YURpcjogc3RyaW5nLFxuICB1aWQ6IHN0cmluZyxcbiAgZGF0YVJlZ2V4cDogUmVnRXhwLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkYXRhUmVnZXhwLmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIG9iamVjdCB3aXRoIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBRWRDLGVBQWU7QUFBQSxTQUNmQyxRQUFRLEVBQUVELGVBQWU7QUFBQSxTQUV6QkUsT0FBTztBQUFBLFNBQ1BBLE9BQU87QUFBQSxTQUdkQyxPQUFPLElB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