@tricoteuses/assemblee 1.1.9 → 1.1.11

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 (129) hide show
  1. package/LICENSE.md +5 -1
  2. package/README.md +69 -178
  3. package/lib/bugs/acteur-00010/plugin.test.js +1 -1
  4. package/lib/bugs/agenda-00002/plugin.test.js +1 -1
  5. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -1
  6. package/lib/bugs/agenda-00002.js +3 -3
  7. package/lib/bugs/agenda-00002.mjs +2 -2
  8. package/lib/bugs/agenda-00008/plugin.test.js +1 -1
  9. package/lib/bugs/agenda-00011/plugin.test.js +1 -1
  10. package/lib/bugs/agenda-00011/plugin.test.mjs +1 -1
  11. package/lib/bugs/agenda-00011.js +1 -1
  12. package/lib/bugs/agenda-00011.mjs +1 -1
  13. package/lib/bugs.js +1 -1
  14. package/lib/bugs.mjs +1 -1
  15. package/lib/cleaners/acteurs.js +1 -1
  16. package/lib/cleaners/acteurs.mjs +1 -1
  17. package/lib/cleaners/amendements.js +1 -1
  18. package/lib/cleaners/amendements.mjs +1 -1
  19. package/lib/cleaners/debats.d.ts +1 -0
  20. package/lib/cleaners/debats.js +12 -0
  21. package/lib/cleaners/debats.mjs +5 -0
  22. package/lib/cleaners/index.d.ts +2 -0
  23. package/lib/cleaners/index.js +15 -1
  24. package/lib/cleaners/index.mjs +3 -1
  25. package/lib/cleaners/questions.d.ts +1 -0
  26. package/lib/cleaners/questions.js +12 -0
  27. package/lib/cleaners/questions.mjs +5 -0
  28. package/lib/cleaners/reunions.js +1 -1
  29. package/lib/cleaners/reunions.mjs +1 -1
  30. package/lib/cleaners/xml.js +12 -6
  31. package/lib/cleaners/xml.mjs +12 -6
  32. package/lib/datasets.d.ts +5 -1
  33. package/lib/datasets.js +62 -4
  34. package/lib/datasets.mjs +62 -4
  35. package/lib/dates.js +1 -1
  36. package/lib/dates.mjs +1 -1
  37. package/lib/dossiers_legislatifs.js +1 -1
  38. package/lib/dossiers_legislatifs.mjs +1 -1
  39. package/lib/file_systems.js +4 -4
  40. package/lib/file_systems.mjs +2 -2
  41. package/lib/git.js +1 -1
  42. package/lib/git.mjs +1 -1
  43. package/lib/loaders.d.ts +21 -0
  44. package/lib/loaders.js +608 -202
  45. package/lib/loaders.mjs +200 -3
  46. package/lib/organes.js +1 -1
  47. package/lib/organes.mjs +1 -1
  48. package/lib/parsers/documents.js +1 -1
  49. package/lib/parsers/documents.mjs +1 -1
  50. package/lib/parsers/recherche_amendements.js +3 -2
  51. package/lib/parsers/recherche_amendements.mjs +1 -1
  52. package/lib/raw_types/acteurs_et_organes.js +1 -1
  53. package/lib/raw_types/acteurs_et_organes.mjs +1 -1
  54. package/lib/raw_types/agendas.js +1 -1
  55. package/lib/raw_types/agendas.mjs +1 -1
  56. package/lib/raw_types/amendements.d.ts +2 -0
  57. package/lib/raw_types/amendements.js +5 -3
  58. package/lib/raw_types/amendements.mjs +5 -3
  59. package/lib/raw_types/debats.d.ts +190 -0
  60. package/lib/raw_types/debats.js +816 -0
  61. package/lib/raw_types/debats.mjs +758 -0
  62. package/lib/raw_types/dossiers_legislatifs.js +11 -2
  63. package/lib/raw_types/dossiers_legislatifs.mjs +1 -1
  64. package/lib/raw_types/questions.d.ts +129 -0
  65. package/lib/raw_types/questions.js +497 -0
  66. package/lib/raw_types/questions.mjs +439 -0
  67. package/lib/raw_types/scrutins.js +1 -1
  68. package/lib/raw_types/scrutins.mjs +1 -1
  69. package/lib/scripts/bugs_helper.js +1 -1
  70. package/lib/scripts/bugs_helper.mjs +1 -1
  71. package/lib/scripts/clean_reorganized_data.js +174 -24
  72. package/lib/scripts/clean_reorganized_data.mjs +127 -13
  73. package/lib/scripts/diff_amendements.js +1 -1
  74. package/lib/scripts/diff_amendements.mjs +1 -1
  75. package/lib/scripts/document_dossiers_legislatifs.js +1 -1
  76. package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
  77. package/lib/scripts/get_today_reunions.js +1 -1
  78. package/lib/scripts/get_today_reunions.mjs +1 -1
  79. package/lib/scripts/merge_scrutins.js +1 -1
  80. package/lib/scripts/merge_scrutins.mjs +1 -1
  81. package/lib/scripts/parse_textes_lois.js +4 -3
  82. package/lib/scripts/parse_textes_lois.mjs +1 -1
  83. package/lib/scripts/raw_types_from_amendements.js +1 -1
  84. package/lib/scripts/raw_types_from_amendements.mjs +1 -1
  85. package/lib/scripts/reorganize_data.js +189 -7
  86. package/lib/scripts/reorganize_data.mjs +136 -8
  87. package/lib/scripts/retrieve_deputes_photos.js +7 -1
  88. package/lib/scripts/retrieve_deputes_photos.mjs +7 -1
  89. package/lib/scripts/retrieve_documents.js +1 -1
  90. package/lib/scripts/retrieve_documents.mjs +1 -1
  91. package/lib/scripts/retrieve_open_data.js +105 -37
  92. package/lib/scripts/retrieve_open_data.mjs +34 -2
  93. package/lib/scripts/retrieve_pending_amendments.js +7 -1
  94. package/lib/scripts/retrieve_pending_amendments.mjs +7 -1
  95. package/lib/scripts/retrieve_senateurs_photos.js +10 -2
  96. package/lib/scripts/retrieve_senateurs_photos.mjs +7 -1
  97. package/lib/scripts/retrieve_textes_lois.js +1 -1
  98. package/lib/scripts/retrieve_textes_lois.mjs +1 -1
  99. package/lib/scripts/test_load.js +1 -1
  100. package/lib/scripts/test_load.mjs +1 -1
  101. package/lib/scripts/test_load_big_files.js +1 -1
  102. package/lib/scripts/test_load_big_files.mjs +1 -1
  103. package/lib/scripts/validate_json.js +1 -1
  104. package/lib/scripts/validate_json.mjs +1 -1
  105. package/lib/strings.js +1 -1
  106. package/lib/strings.mjs +1 -1
  107. package/lib/types/acteurs_et_organes.js +1 -1
  108. package/lib/types/acteurs_et_organes.mjs +1 -1
  109. package/lib/types/agendas.js +1 -1
  110. package/lib/types/agendas.mjs +1 -1
  111. package/lib/types/amendements.d.ts +2 -0
  112. package/lib/types/amendements.js +5 -3
  113. package/lib/types/amendements.mjs +5 -3
  114. package/lib/types/debats.d.ts +184 -0
  115. package/lib/types/debats.js +805 -0
  116. package/lib/types/debats.mjs +747 -0
  117. package/lib/types/dossiers_legislatifs.js +11 -2
  118. package/lib/types/dossiers_legislatifs.mjs +1 -1
  119. package/lib/types/questions.d.ts +122 -0
  120. package/lib/types/questions.js +482 -0
  121. package/lib/types/questions.mjs +424 -0
  122. package/lib/types/scrutins.js +1 -1
  123. package/lib/types/scrutins.mjs +1 -1
  124. package/lib/urls.js +1 -1
  125. package/lib/urls.mjs +1 -1
  126. package/package.json +14 -6
  127. package/lib/scripts/clean_data.d.ts +0 -1
  128. package/lib/scripts/clean_data.js +0 -309
  129. package/lib/scripts/clean_data.mjs +0 -171
@@ -49,6 +49,8 @@ var _agendas = require("../raw_types/agendas");
49
49
  var _amendements = require("../raw_types/amendements");
50
50
  var _dossiers_legislatifs = require("../raw_types/dossiers_legislatifs");
51
51
  var _scrutins = require("../raw_types/scrutins");
52
+ var _questions = require("../raw_types/questions");
53
+ var _debats = require("../raw_types/debats");
52
54
  var _legislatures = require("../types/legislatures");
53
55
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
54
56
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -123,7 +125,7 @@ function reorganizeData(options) {
123
125
  var _options$legislature;
124
126
  var dataDir = options.dataDir;
125
127
  Date.prototype.toJSON = _dates.patchedDateToJson;
126
- var exitCode = 0;
128
+ var exitCode = 10; // Nothing to commit
127
129
  var gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
128
130
  var validateRawData = !options["no-validate-raw"];
129
131
  options.categories.map(function (datasetName) {
@@ -172,6 +174,12 @@ function reorganizeData(options) {
172
174
  }
173
175
  var datasetReorganizedDir = _path["default"].join(dataDir, datasetName);
174
176
  if (options.pull) {
177
+ (0, _child_process.execSync)("git reset --hard origin/master", {
178
+ cwd: datasetReorganizedDir,
179
+ env: process.env,
180
+ encoding: "utf-8",
181
+ stdio: ["ignore", "ignore", "pipe"]
182
+ });
175
183
  (0, _child_process.execSync)("git pull --rebase", {
176
184
  cwd: datasetReorganizedDir,
177
185
  env: process.env,
@@ -392,7 +400,7 @@ function reorganizeData(options) {
392
400
  }
393
401
  if (options.commit) {
394
402
  var errorCode = git.commitAndPush(datasetReorganizedDir, "Nouvelle moisson", options.remote);
395
- if (errorCode !== 0 && exitCode === 0) {
403
+ if (exitCode === 10 && errorCode !== 10 || exitCode === 0 && errorCode !== 0 && errorCode !== 10) {
396
404
  exitCode = errorCode;
397
405
  }
398
406
  }
@@ -492,7 +500,7 @@ function reorganizeData(options) {
492
500
  }
493
501
  if (options.commit) {
494
502
  var _errorCode = git.commitAndPush(_datasetReorganizedDir, "Nouvelle moisson", options.remote);
495
- if (_errorCode !== 0 && exitCode === 0) {
503
+ if (exitCode === 10 && _errorCode !== 10 || exitCode === 0 && _errorCode !== 0 && _errorCode !== 10) {
496
504
  exitCode = _errorCode;
497
505
  }
498
506
  }
@@ -603,7 +611,7 @@ function reorganizeData(options) {
603
611
  }
604
612
  if (options.commit) {
605
613
  var _errorCode2 = git.commitAndPush(_datasetReorganizedDir2, "Nouvelle moisson", options.remote);
606
- if (_errorCode2 !== 0 && exitCode === 0) {
614
+ if (exitCode === 10 && _errorCode2 !== 10 || exitCode === 0 && _errorCode2 !== 0 && _errorCode2 !== 10) {
607
615
  exitCode = _errorCode2;
608
616
  }
609
617
  }
@@ -744,7 +752,7 @@ function reorganizeData(options) {
744
752
  }
745
753
  if (options.commit) {
746
754
  var _errorCode3 = git.commitAndPush(_datasetReorganizedDir3, "Nouvelle moisson", options.remote);
747
- if (_errorCode3 !== 0 && exitCode === 0) {
755
+ if (exitCode === 10 && _errorCode3 !== 10 || exitCode === 0 && _errorCode3 !== 0 && _errorCode3 !== 10) {
748
756
  exitCode = _errorCode3;
749
757
  }
750
758
  }
@@ -844,7 +852,7 @@ function reorganizeData(options) {
844
852
  }
845
853
  if (options.commit) {
846
854
  var _errorCode4 = git.commitAndPush(_datasetReorganizedDir4, "Nouvelle moisson", options.remote);
847
- if (_errorCode4 !== 0 && exitCode === 0) {
855
+ if (exitCode === 10 && _errorCode4 !== 10 || exitCode === 0 && _errorCode4 !== 0 && _errorCode4 !== 10) {
848
856
  exitCode = _errorCode4;
849
857
  }
850
858
  }
@@ -855,6 +863,166 @@ function reorganizeData(options) {
855
863
  _iterator24.f();
856
864
  }
857
865
  }
866
+ if (enabledDatasets & _datasets.EnabledDatasets.Questions) {
867
+ var _iterator28 = _createForOfIteratorHelper(_datasets.datasets.questions),
868
+ _step28;
869
+ try {
870
+ for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {
871
+ var _dataset5 = _step28.value;
872
+ var _originalJsonDirectoryOrFilePath5 = _path["default"].join(dataDir, _dataset5.filename);
873
+ if (!options.silent) {
874
+ console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath5));
875
+ }
876
+ var _datasetName5 = _path["default"].basename(_originalJsonDirectoryOrFilePath5, ".json");
877
+ if (gitGroupUrl !== undefined) {
878
+ (0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName5, ".git"), {
879
+ cwd: dataDir,
880
+ env: process.env,
881
+ encoding: "utf-8",
882
+ stdio: ["ignore", "ignore", "pipe"]
883
+ });
884
+ }
885
+ var _datasetReorganizedDir5 = _path["default"].join(dataDir, _datasetName5);
886
+ _fsExtra["default"].ensureDirSync(_datasetReorganizedDir5);
887
+ var _iterator29 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir5)),
888
+ _step29;
889
+ try {
890
+ for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {
891
+ var _filename5 = _step29.value;
892
+ if (_filename5[0] === ".") {
893
+ continue;
894
+ }
895
+ _fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir5, _filename5));
896
+ }
897
+ } catch (err) {
898
+ _iterator29.e(err);
899
+ } finally {
900
+ _iterator29.f();
901
+ }
902
+ switch (_dataset5.structure) {
903
+ case _datasets.DatasetStructure.SegmentedFiles:
904
+ {
905
+ var _iterator30 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath5)),
906
+ _step30;
907
+ try {
908
+ for (_iterator30.s(); !(_step30 = _iterator30.n()).done;) {
909
+ var questionSplitPath = _step30.value;
910
+ var questionFilename = questionSplitPath[questionSplitPath.length - 1];
911
+ if (!questionFilename.endsWith(".json")) {
912
+ continue;
913
+ }
914
+ var questionOriginalFilePath = _path["default"].join.apply(_path["default"], [_originalJsonDirectoryOrFilePath5].concat(_toConsumableArray(questionSplitPath)));
915
+ if (options.verbose) {
916
+ console.log(" Reorganizing \"question\" file: ".concat(questionOriginalFilePath, "\u2026"));
917
+ }
918
+ var questionOriginalJson = _fsExtra["default"].readFileSync(questionOriginalFilePath, {
919
+ encoding: "utf8"
920
+ });
921
+ var questionOriginal = validateRawData ? _questions.Convert.toQuestionWrapper(questionOriginalJson) : JSON.parse(questionOriginalJson);
922
+ var question = questionOriginal.question;
923
+ writeQuestionsReorganizedJson(_datasetReorganizedDir5, question);
924
+ }
925
+ } catch (err) {
926
+ _iterator30.e(err);
927
+ } finally {
928
+ _iterator30.f();
929
+ }
930
+ }
931
+ break;
932
+ }
933
+ if (options.commit) {
934
+ var _errorCode5 = git.commitAndPush(_datasetReorganizedDir5, "Nouvelle moisson", options.remote);
935
+ if (exitCode === 10 && _errorCode5 !== 10 || exitCode === 0 && _errorCode5 !== 0 && _errorCode5 !== 10) {
936
+ exitCode = _errorCode5;
937
+ }
938
+ }
939
+ }
940
+ } catch (err) {
941
+ _iterator28.e(err);
942
+ } finally {
943
+ _iterator28.f();
944
+ }
945
+ }
946
+ if (enabledDatasets & _datasets.EnabledDatasets.ComptesRendusSeances) {
947
+ var _iterator31 = _createForOfIteratorHelper(_datasets.datasets.comptesRendusSeances),
948
+ _step31;
949
+ try {
950
+ for (_iterator31.s(); !(_step31 = _iterator31.n()).done;) {
951
+ var _dataset6 = _step31.value;
952
+ var _originalJsonDirectoryOrFilePath6 = _path["default"].join(dataDir, _dataset6.filename);
953
+ if (!options.silent) {
954
+ console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath6));
955
+ }
956
+ var _datasetName6 = _path["default"].basename(_originalJsonDirectoryOrFilePath6, ".xml");
957
+ if (gitGroupUrl !== undefined) {
958
+ (0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName6, ".git"), {
959
+ cwd: dataDir,
960
+ env: process.env,
961
+ encoding: "utf-8",
962
+ stdio: ["ignore", "ignore", "pipe"]
963
+ });
964
+ }
965
+ var _datasetReorganizedDir6 = _path["default"].join(dataDir, _datasetName6);
966
+ _fsExtra["default"].ensureDirSync(_datasetReorganizedDir6);
967
+ var _iterator32 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir6)),
968
+ _step32;
969
+ try {
970
+ for (_iterator32.s(); !(_step32 = _iterator32.n()).done;) {
971
+ var _filename6 = _step32.value;
972
+ if (_filename6[0] === ".") {
973
+ continue;
974
+ }
975
+ _fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir6, _filename6));
976
+ }
977
+ } catch (err) {
978
+ _iterator32.e(err);
979
+ } finally {
980
+ _iterator32.f();
981
+ }
982
+ switch (_dataset6.structure) {
983
+ case _datasets.DatasetStructure.SegmentedFiles:
984
+ {
985
+ var _iterator33 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath6)),
986
+ _step33;
987
+ try {
988
+ for (_iterator33.s(); !(_step33 = _iterator33.n()).done;) {
989
+ var compteRenduSeanceSplitPath = _step33.value;
990
+ var compteRenduSeanceFilename = compteRenduSeanceSplitPath[compteRenduSeanceSplitPath.length - 1];
991
+ if (!compteRenduSeanceFilename.endsWith(".json")) {
992
+ continue;
993
+ }
994
+ var compteRenduSeanceOriginalFilePath = _path["default"].join.apply(_path["default"], [_originalJsonDirectoryOrFilePath6].concat(_toConsumableArray(compteRenduSeanceSplitPath)));
995
+ if (options.verbose) {
996
+ console.log(" Reorganizing \"compteRenduSeance\" file: ".concat(compteRenduSeanceOriginalFilePath, "\u2026"));
997
+ }
998
+ var compteRenduSeanceOriginalJson = _fsExtra["default"].readFileSync(compteRenduSeanceOriginalFilePath, {
999
+ encoding: "utf8"
1000
+ });
1001
+ var compteRenduSeanceOriginal = validateRawData ? _debats.Convert.toCompteRenduWrapper(compteRenduSeanceOriginalJson) : JSON.parse(compteRenduSeanceOriginalJson);
1002
+ var compteRenduSeance = compteRenduSeanceOriginal.compteRendu;
1003
+ writeComptesRendusReorganizedJson(_datasetReorganizedDir6, compteRenduSeance);
1004
+ }
1005
+ } catch (err) {
1006
+ _iterator33.e(err);
1007
+ } finally {
1008
+ _iterator33.f();
1009
+ }
1010
+ }
1011
+ break;
1012
+ }
1013
+ if (options.commit) {
1014
+ var _errorCode6 = git.commitAndPush(_datasetReorganizedDir6, "Nouvelle moisson", options.remote);
1015
+ if (exitCode === 10 && _errorCode6 !== 10 || exitCode === 0 && _errorCode6 !== 0 && _errorCode6 !== 10) {
1016
+ exitCode = _errorCode6;
1017
+ }
1018
+ }
1019
+ }
1020
+ } catch (err) {
1021
+ _iterator31.e(err);
1022
+ } finally {
1023
+ _iterator31.f();
1024
+ }
1025
+ }
858
1026
 
859
1027
  // Restore standard conversion of dates to JSON.
860
1028
  Date.prototype.toJSON = _dates.existingDateToJson;
@@ -894,10 +1062,24 @@ function writeScrutinReorganizedJson(scrutinsDir, scrutin) {
894
1062
  encoding: "utf8"
895
1063
  });
896
1064
  }
1065
+ function writeQuestionsReorganizedJson(questionsDir, question) {
1066
+ var questionUidRegex = /^QAN(R\d+)(L\d+)Q(E|G|OSD)(\d+)$/;
1067
+ var basename = (0, _loaders.pathFromUid)(questionsDir, question.uid, questionUidRegex);
1068
+ _fsExtra["default"].writeFileSync("".concat(basename, ".json"), JSON.stringify(question, null, 2), {
1069
+ encoding: "utf8"
1070
+ });
1071
+ }
1072
+ function writeComptesRendusReorganizedJson(comptesRendusDir, compteRendu) {
1073
+ var compteRenduUidRegex = /^CRSAN(R\d+)(L\d+)(S\d+)(O|E)(\d+)(N\d+)$/;
1074
+ var basename = (0, _loaders.pathFromUid)(comptesRendusDir, compteRendu.uid, compteRenduUidRegex);
1075
+ _fsExtra["default"].writeFileSync("".concat(basename, ".json"), JSON.stringify(compteRendu, null, 2), {
1076
+ encoding: "utf8"
1077
+ });
1078
+ }
897
1079
 
898
1080
  /* istanbul ignore if */
899
1081
  if (process.argv[1].endsWith("reorganize_data.ts")) {
900
1082
  var options = (0, _commandLineArgs["default"])(optionsDefinitions);
901
1083
  process.exit(reorganizeData(options));
902
1084
  }
903
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9jb21tYW5kTGluZUFyZ3MiLCJfZnNFeHRyYSIsIl9wYXRoIiwiX2RhdGFzZXRzIiwiX2RhdGVzIiwiZ2l0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfZmlsZV9zeXN0ZW1zIiwiX2xvYWRlcnMiLCJfYWN0ZXVyc19ldF9vcmdhbmVzIiwiX2FnZW5kYXMiLCJfYW1lbmRlbWVudHMiLCJfZG9zc2llcnNfbGVnaXNsYXRpZnMiLCJfc2NydXRpbnMiLCJfbGVnaXNsYXR1cmVzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIl90b0NvbnN1bWFibGVBcnJheSIsImFyciIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJpdGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm8iLCJhbGxvd0FycmF5TGlrZSIsIml0IiwibGVuZ3RoIiwiaSIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImUiLCJfZTIiLCJmIiwibm9ybWFsQ29tcGxldGlvbiIsImRpZEVyciIsImVyciIsInN0ZXAiLCJuZXh0IiwiX2UzIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwibWluTGVuIiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJsZW4iLCJhcnIyIiwiX2kiLCJfcyIsIl9lIiwiX3giLCJfciIsIl9hcnIiLCJfbiIsIl9kIiwicHVzaCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJOdW1iZXIiLCJkZWZhdWx0T3B0aW9uIiwicmVvcmdhbml6ZURhdGEiLCJvcHRpb25zIiwiX29wdGlvbnMkbGVnaXNsYXR1cmUiLCJkYXRhRGlyIiwiRGF0ZSIsInRvSlNPTiIsInBhdGNoZWREYXRlVG9Kc29uIiwiZXhpdENvZGUiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsIkVuYWJsZWREYXRhc2V0cyIsImNvbmNhdCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJjaG9vc2VuRGF0YXNldHMiLCJkYXRhc2V0cyIsImxlZ2lzbGF0dXJlcyIsImxlZ2lzbGF0dXJlIiwic29tZSIsImVuYWJsZWRMZWdpc2xhdHVyZXMiLCJfT2JqZWN0JGVudHJpZXMiLCJlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwiZmlsdGVyIiwiZGF0YXNldCIsIkxlZ2lzbGF0dXJlIiwiQWxsIiwiaW5jbHVkZXMiLCJBY3RldXJzRXRPcmdhbmVzIiwiX2l0ZXJhdG9yIiwiYWN0ZXVyc0V0T3JnYW5lcyIsIl9zdGVwIiwib3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCIsInBhdGgiLCJqb2luIiwiZmlsZW5hbWUiLCJzaWxlbnQiLCJjb25zb2xlIiwibG9nIiwiYmFzZW5hbWUiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwicHVsbCIsImZzIiwiZW5zdXJlRGlyU3luYyIsIl9pdGVyYXRvcjIiLCJyZWFkZGlyU3luYyIsIl9zdGVwMiIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJEYXRhc2V0U3RydWN0dXJlIiwiU2luZ2xlRmlsZSIsIm9yaWdpbmFsSnNvbiIsInJlYWRGaWxlU3luYyIsIm9yaWdpbmFsRGF0YSIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiX2l0ZXJhdG9yMyIsImFjdGV1cnMiLCJhY3RldXIiLCJfc3RlcDMiLCJyZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsInVpZCIsIndyaXRlRmlsZVN5bmMiLCJzdHJpbmdpZnkiLCJfaXRlcmF0b3I0Iiwib3JnYW5lcyIsIm9yZ2FuZSIsIl9zdGVwNCIsIlNlZ21lbnRlZEZpbGVzIiwiZGVwb3J0c0J5QWN0ZXVyVWlkIiwiZXhpc3RzU3luYyIsIl9pdGVyYXRvcjUiLCJ3YWxrRGlyIiwiX3N0ZXA1IiwiZGVwb3J0U3BsaXRQYXRoIiwiZGVwb3J0RmlsZW5hbWUiLCJlbmRzV2l0aCIsImRlcG9ydE9yaWdpbmFsRmlsZVBhdGgiLCJhcHBseSIsInZlcmJvc2UiLCJkZXBvcnRPcmlnaW5hbEpzb24iLCJkZXBvcnRPcmlnaW5hbCIsInRvRGVwb3J0IiwiZGVwb3J0IiwiZGVwb3J0cyIsImFjdGV1clJlZiIsIl9pMiIsIl9PYmplY3QkdmFsdWVzIiwidmFsdWVzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsIm1hbmRhdHNCeUFjdGV1clVpZCIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJtYW5kYXRTcGxpdFBhdGgiLCJtYW5kYXRGaWxlbmFtZSIsIm1hbmRhdE9yaWdpbmFsRmlsZVBhdGgiLCJtYW5kYXRPcmlnaW5hbEpzb24iLCJtYW5kYXRPcmlnaW5hbCIsInRvTWFuZGF0V3JhcHBlciIsIm1hbmRhdCIsIm1hbmRhdHMiLCJfaTMiLCJfT2JqZWN0JHZhbHVlczIiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJfaXRlcmF0b3I4IiwiX3N0ZXA4Iiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVPcmlnaW5hbEZpbGVQYXRoIiwib3JnYW5lT3JpZ2luYWxKc29uIiwib3JnYW5lT3JpZ2luYWwiLCJ0b09yZ2FuZSIsIm9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwiY29tbWl0IiwiZXJyb3JDb2RlIiwiY29tbWl0QW5kUHVzaCIsInJlbW90ZSIsIkFnZW5kYXMiLCJfaXRlcmF0b3I5IiwiYWdlbmRhcyIsIl9zdGVwOSIsIl9pdGVyYXRvcjEwIiwiX3N0ZXAxMCIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwiX2l0ZXJhdG9yMTEiLCJyZXVuaW9ucyIsInJldW5pb24iLCJfc3RlcDExIiwid3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMTIiLCJfc3RlcDEyIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25PcmlnaW5hbEZpbGVQYXRoIiwicmV1bmlvbk9yaWdpbmFsSnNvbiIsInJldW5pb25PcmlnaW5hbCIsInRvUmV1bmlvbiIsIkFtZW5kZW1lbnRzIiwiX2l0ZXJhdG9yMTMiLCJhbWVuZGVtZW50cyIsIl9zdGVwMTMiLCJfaXRlcmF0b3IxNCIsIl9zdGVwMTQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJ0b0FtZW5kZW1lbnRzIiwiX2l0ZXJhdG9yMTUiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJfc3RlcDE1IiwidGV4dGVMZWdpc2xhdGlmIiwiX2l0ZXJhdG9yMTYiLCJfc3RlcDE2IiwiYW1lbmRlbWVudCIsIndyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbiIsIl9pdGVyYXRvcjE3IiwiX3N0ZXAxNyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCIsImFtZW5kZW1lbnRPcmlnaW5hbEpzb24iLCJhbWVuZGVtZW50T3JpZ2luYWwiLCJ0b0FtZW5kZW1lbnRXcmFwcGVyIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsIl9pdGVyYXRvcjE4IiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsIl9zdGVwMTgiLCJfaXRlcmF0b3IxOSIsIl9zdGVwMTkiLCJkb2N1bWVudHNEaXIiLCJkb3NzaWVyc0RpciIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiX2l0ZXJhdG9yMjAiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsImRvY3VtZW50IiwiX3N0ZXAyMCIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJfaXRlcmF0b3IyMSIsImRvc3NpZXIiLCJfc3RlcDIxIiwiZG9zc2llclBhcmxlbWVudGFpcmUiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMjIiLCJfc3RlcDIyIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsIl9pdGVyYXRvcjIzIiwiX3N0ZXAyMyIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsIl9pdGVyYXRvcjI0Iiwic2NydXRpbnMiLCJfc3RlcDI0IiwiX2l0ZXJhdG9yMjUiLCJfc3RlcDI1IiwiU2NydXRpbnNSYXdDb252ZXJ0IiwidG9TY3J1dGlucyIsIl9pdGVyYXRvcjI2Iiwic2NydXRpbiIsIl9zdGVwMjYiLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJfaXRlcmF0b3IyNyIsIl9zdGVwMjciLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsInRleHRlTGVnaXNsYXRpZkRpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicmV1bmlvbnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tU2NydXRpblVpZCIsImFyZ3YiLCJjb21tYW5kTGluZUFyZ3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmVvcmdhbml6ZV9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQgeyBkYXRhc2V0cywgRGF0YXNldFN0cnVjdHVyZSwgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgcGF0aEZyb21Eb2N1bWVudFVpZCxcbiAgcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCxcbiAgcGF0aEZyb21SZXVuaW9uVWlkLFxuICBwYXRoRnJvbVNjcnV0aW5VaWQsXG59IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQW1lbmRlbWVudHNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgaGVscDogXCJsZWdpc2xhdHVyZXMgb2YgY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZXRyaWV2ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBOdW1iZXIsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJwXCIsXG4gICAgaGVscDogXCJwdWxsIHJlcG9zaXRvcmllcyBiZWZvcmUgcHJvY2VlZGluZ1wiLFxuICAgIG5hbWU6IFwicHVsbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcIlZcIixcbiAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgbmFtZTogXCJuby12YWxpZGF0ZS1yYXdcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogbnVtYmVyIHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBleGl0Q29kZSA9IDBcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgdmFsaWRhdGVSYXdEYXRhID0gIW9wdGlvbnNbXCJuby12YWxpZGF0ZS1yYXdcIl1cblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBgVW5rbm93biBuYW1lIG9mIGRhdGFzZXQ6ICR7ZGF0YXNldE5hbWV9YCxcbiAgICApLFxuICApXG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IG9wdGlvbnMuY2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgKGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLCBkYXRhc2V0TmFtZTogc3RyaW5nKTogRW5hYmxlZERhdGFzZXRzID0+XG4gICAgICBlbmFibGVkRGF0YXNldHMgfFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICBFbmFibGVkRGF0YXNldHMuTm9uZSxcbiAgKVxuXG4gIGxldCBjaG9vc2VuRGF0YXNldHMgPSBkYXRhc2V0c1xuICAvLyBXaGVuIGEgZ2l2ZW4gbGVnaXNsYXR1cmUgaXMgMCwgaXQgaXMgdGhlIHNhbWUgYXMgZ2l2aW5nIG5vIGxlZ2lzbGF0dXJlOlxuICAvLyBJdCBtZWFucyBcImV2ZXJ5IGxlZ2lzbGF0dXJlc1wiLlxuICBjb25zdCBsZWdpc2xhdHVyZXMgPSBvcHRpb25zLmxlZ2lzbGF0dXJlPy5zb21lKFxuICAgIChsZWdpc2xhdHVyZTogbnVtYmVyKSA9PiBsZWdpc2xhdHVyZSA9PT0gMCxcbiAgKVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiBvcHRpb25zLmxlZ2lzbGF0dXJlXG4gIGlmIChsZWdpc2xhdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGVuYWJsZWRMZWdpc2xhdHVyZXMgPSBsZWdpc2xhdHVyZXMubWFwKChsZWdpc2xhdHVyZTogbnVtYmVyKSA9PlxuICAgICAgbGVnaXNsYXR1cmUudG9TdHJpbmcoKSxcbiAgICApXG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNob29zZW5EYXRhc2V0cykpIHtcbiAgICAgIGNob29zZW5EYXRhc2V0c1trZXkgYXMga2V5b2YgdHlwZW9mIGNob29zZW5EYXRhc2V0c10gPSB2YWx1ZS5maWx0ZXIoXG4gICAgICAgIChkYXRhc2V0OiB7IGxlZ2lzbGF0dXJlOiBhbnkgfSkgPT5cbiAgICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgfHxcbiAgICAgICAgICBlbmFibGVkTGVnaXNsYXR1cmVzLmluY2x1ZGVzKGRhdGFzZXQubGVnaXNsYXR1cmUpLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcHVsbCAtLXJlYmFzZWAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJhY3RldXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoYWN0ZXVyc1Jlb3JnYW5pemVkRGlyKVxuICAgICAgY29uc3Qgb3JnYW5lc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJvcmdhbmVzXCIpXG4gICAgICBmcy5ta2RpclN5bmMob3JnYW5lc1Jlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LmFjdGV1cnMuYWN0ZXVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1ci51aWRbXCIjdGV4dFwiXSArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5vcmdhbmVzLm9yZ2FuZSkge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgZGVwb3J0c0J5QWN0ZXVyVWlkOiB7XG4gICAgICAgICAgICAgIFthY3RldXJVaWQ6IHN0cmluZ106IHsgdWlkOiBzdHJpbmcgfVtdXG4gICAgICAgICAgICB9ID0ge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4ob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCJkZXBvcnRcIiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcG9ydFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgW1wiZGVwb3J0XCJdLFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgICAgZGVwb3J0U3BsaXRQYXRoW2RlcG9ydFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIGlmICghZGVwb3J0RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAuLi5kZXBvcnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICBgICBMb2FkaW5nIFwiZGVwb3J0XCIgZmlsZTogJHtkZXBvcnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgICAgZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0RlcG9ydChkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydCA9IGRlcG9ydE9yaWdpbmFsLmRlcG9ydFxuICAgICAgICAgICAgICAgIGxldCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlcG9ydHMucHVzaChkZXBvcnQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcG9ydHMgb2YgT2JqZWN0LnZhbHVlcyhkZXBvcnRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWFuZGF0c0J5QWN0ZXVyVWlkOiB7XG4gICAgICAgICAgICAgIFthY3RldXJVaWQ6IHN0cmluZ106IHsgdWlkOiBzdHJpbmcgfVtdXG4gICAgICAgICAgICB9ID0ge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4ob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCJtYW5kYXRcIiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgW1wibWFuZGF0XCJdLFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgICAgbWFuZGF0U3BsaXRQYXRoW21hbmRhdFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIGlmICghbWFuZGF0RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAuLi5tYW5kYXRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICBgICBMb2FkaW5nIFwibWFuZGF0XCIgZmlsZTogJHttYW5kYXRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgICAgbWFuZGF0T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b01hbmRhdFdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgICAgbWFuZGF0T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdCA9IG1hbmRhdE9yaWdpbmFsLm1hbmRhdFxuICAgICAgICAgICAgICAgIGxldCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hbmRhdHMucHVzaChtYW5kYXQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdHMgb2YgT2JqZWN0LnZhbHVlcyhtYW5kYXRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiYWN0ZXVyXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFjdGV1clwiIGZpbGU6ICR7YWN0ZXVyT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXIgPSBhY3RldXJPcmlnaW5hbC5hY3RldXJcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyVWlkID0gYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdXG4gICAgICAgICAgICAgIGNvbnN0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAoZGVwb3J0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5kZXBvcnRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLmRlcG9ydHMgPSB7IGRlcG9ydDogZGVwb3J0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChtYW5kYXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLm1hbmRhdHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIubWFuZGF0cyA9IHsgbWFuZGF0OiBtYW5kYXRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXJVaWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcIm9yZ2FuZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLm9yZ2FuZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJvcmdhbmVcIiBmaWxlOiAke29yZ2FuZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b09yZ2FuZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lID0gb3JnYW5lT3JpZ2luYWwub3JnYW5lXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCAmJiBleGl0Q29kZSA9PT0gMCkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDAgJiYgZXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudHMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBvcmlnaW5hbERhdGEudGV4dGVzRXRBbWVuZGVtZW50c1xuICAgICAgICAgICAgICAudGV4dGVsZWcpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnQsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFtZW5kZW1lbnRcIiBmaWxlOiAke2FtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudFdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFtZW5kZW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBhbWVuZGVtZW50T3JpZ2luYWwuYW1lbmRlbWVudFxuICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBhbWVuZGVtZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDAgJiYgZXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvY3VtZW50c1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvY3VtZW50c0RpcilcbiAgICAgIGNvbnN0IGRvc3NpZXJzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb3NzaWVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvc3NpZXJzRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIG9yaWdpbmFsRGF0YS5leHBvcnQudGV4dGVzTGVnaXNsYXRpZnNcbiAgICAgICAgICAgICAgLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlIH0gb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydFxuICAgICAgICAgICAgICAuZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyKSB7XG4gICAgICAgICAgICAgIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9jdW1lbnRcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb2N1bWVudFwiIGZpbGU6ICR7ZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gZG9jdW1lbnRPcmlnaW5hbC5kb2N1bWVudFxuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9zc2llclBhcmxlbWVudGFpcmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoW1xuICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgaWYgKCFkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCIgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKFxuICAgICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsLmRvc3NpZXJQYXJsZW1lbnRhaXJlXG4gICAgICAgICAgICAgIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwICYmIGV4aXRDb2RlID09PSAwKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGxldCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBvcmlnaW5hbERhdGEuc2NydXRpbnMuc2NydXRpbikge1xuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJzY3J1dGluXCIgZmlsZTogJHtzY3J1dGluT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5XcmFwcGVyKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW4gPSBzY3J1dGluT3JpZ2luYWwuc2NydXRpblxuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDAgJiYgZXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBleGl0Q29kZVxufVxuXG5mdW5jdGlvbiB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRhdGFzZXRSZW9yZ2FuaXplZERpcjogc3RyaW5nLFxuICBhbWVuZGVtZW50OiB7XG4gICAgdWlkOiBzdHJpbmdcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZSZWY6IHN0cmluZ1xuICB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHVpZFRleHRlTGVnaXNsYXRpZiA9IGFtZW5kZW1lbnQudGV4dGVMZWdpc2xhdGlmUmVmXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbCh1aWRUZXh0ZUxlZ2lzbGF0aWYsIHVuZGVmaW5lZClcbiAgY29uc3QgdGV4dGVMZWdpc2xhdGlmRGlyID0gcGF0aC5qb2luKFxuICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICB1aWRUZXh0ZUxlZ2lzbGF0aWYsXG4gIClcbiAgZnMuZW5zdXJlRGlyU3luYyh0ZXh0ZUxlZ2lzbGF0aWZEaXIpXG4gIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgIHRleHRlTGVnaXNsYXRpZkRpcixcbiAgICBhbWVuZGVtZW50LnVpZCArIFwiLmpzb25cIixcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgIEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRvY3VtZW50c0Rpcjogc3RyaW5nLFxuICBkb2N1bWVudDogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXIsIGRvY3VtZW50LnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KGRvY3VtZW50LCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgZG9zc2llclBhcmxlbWVudGFpcmU6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gICAgZG9zc2llcnNEaXIsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmUudWlkLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgYCR7YmFzZW5hbWV9Lmpzb25gLFxuICAgIEpTT04uc3RyaW5naWZ5KGRvc3NpZXJQYXJsZW1lbnRhaXJlLCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oXG4gIHJldW5pb25zRGlyOiBzdHJpbmcsXG4gIHJldW5pb246IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0RpciwgcmV1bmlvbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShyZXVuaW9uLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKFxuICBzY3J1dGluc0Rpcjogc3RyaW5nLFxuICBzY3J1dGluOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXIsIHNjcnV0aW4udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcInJlb3JnYW5pemVfZGF0YS50c1wiKSkge1xuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuICBwcm9jZXNzLmV4aXQocmVvcmdhbml6ZURhdGEob3B0aW9ucykpXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMs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
1085
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9jb21tYW5kTGluZUFyZ3MiLCJfZnNFeHRyYSIsIl9wYXRoIiwiX2RhdGFzZXRzIiwiX2RhdGVzIiwiZ2l0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfZmlsZV9zeXN0ZW1zIiwiX2xvYWRlcnMiLCJfYWN0ZXVyc19ldF9vcmdhbmVzIiwiX2FnZW5kYXMiLCJfYW1lbmRlbWVudHMiLCJfZG9zc2llcnNfbGVnaXNsYXRpZnMiLCJfc2NydXRpbnMiLCJfcXVlc3Rpb25zIiwiX2RlYmF0cyIsIl9sZWdpc2xhdHVyZXMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYXJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIlR5cGVFcnJvciIsIml0ZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiZnJvbSIsImlzQXJyYXkiLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwibyIsImFsbG93QXJyYXlMaWtlIiwiaXQiLCJsZW5ndGgiLCJpIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZSIsIl9lMiIsImYiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwiZXJyIiwic3RlcCIsIm5leHQiLCJfZTMiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJtaW5MZW4iLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsImxlbiIsImFycjIiLCJfaSIsIl9zIiwiX2UiLCJfeCIsIl9yIiwiX2FyciIsIl9uIiwiX2QiLCJwdXNoIiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsIk51bWJlciIsImRlZmF1bHRPcHRpb24iLCJyZW9yZ2FuaXplRGF0YSIsIm9wdGlvbnMiLCJfb3B0aW9ucyRsZWdpc2xhdHVyZSIsImRhdGFEaXIiLCJEYXRlIiwidG9KU09OIiwicGF0Y2hlZERhdGVUb0pzb24iLCJleGl0Q29kZSIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInVuZGVmaW5lZCIsInZhbGlkYXRlUmF3RGF0YSIsImNhdGVnb3JpZXMiLCJtYXAiLCJkYXRhc2V0TmFtZSIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwiRW5hYmxlZERhdGFzZXRzIiwiY29uY2F0IiwiZW5hYmxlZERhdGFzZXRzIiwicmVkdWNlIiwiTm9uZSIsImNob29zZW5EYXRhc2V0cyIsImRhdGFzZXRzIiwibGVnaXNsYXR1cmVzIiwibGVnaXNsYXR1cmUiLCJzb21lIiwiZW5hYmxlZExlZ2lzbGF0dXJlcyIsIl9PYmplY3QkZW50cmllcyIsImVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJmaWx0ZXIiLCJkYXRhc2V0IiwiTGVnaXNsYXR1cmUiLCJBbGwiLCJpbmNsdWRlcyIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJfaXRlcmF0b3IiLCJhY3RldXJzRXRPcmdhbmVzIiwiX3N0ZXAiLCJvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoIiwicGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJiYXNlbmFtZSIsImV4ZWNTeW5jIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJkYXRhc2V0UmVvcmdhbml6ZWREaXIiLCJwdWxsIiwiZnMiLCJlbnN1cmVEaXJTeW5jIiwiX2l0ZXJhdG9yMiIsInJlYWRkaXJTeW5jIiwiX3N0ZXAyIiwicmVtb3ZlU3luYyIsImFjdGV1cnNSZW9yZ2FuaXplZERpciIsIm1rZGlyU3luYyIsIm9yZ2FuZXNSZW9yZ2FuaXplZERpciIsInN0cnVjdHVyZSIsIkRhdGFzZXRTdHJ1Y3R1cmUiLCJTaW5nbGVGaWxlIiwib3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwib3JpZ2luYWxEYXRhIiwiQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJKU09OIiwicGFyc2UiLCJfaXRlcmF0b3IzIiwiYWN0ZXVycyIsImFjdGV1ciIsIl9zdGVwMyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIl9pdGVyYXRvcjQiLCJvcmdhbmVzIiwib3JnYW5lIiwiX3N0ZXA0IiwiU2VnbWVudGVkRmlsZXMiLCJkZXBvcnRzQnlBY3RldXJVaWQiLCJleGlzdHNTeW5jIiwiX2l0ZXJhdG9yNSIsIndhbGtEaXIiLCJfc3RlcDUiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsImFwcGx5IiwidmVyYm9zZSIsImRlcG9ydE9yaWdpbmFsSnNvbiIsImRlcG9ydE9yaWdpbmFsIiwidG9EZXBvcnQiLCJkZXBvcnQiLCJkZXBvcnRzIiwiYWN0ZXVyUmVmIiwiX2kyIiwiX09iamVjdCR2YWx1ZXMiLCJ2YWx1ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFuZGF0c0J5QWN0ZXVyVWlkIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsIm1hbmRhdFNwbGl0UGF0aCIsIm1hbmRhdEZpbGVuYW1lIiwibWFuZGF0T3JpZ2luYWxGaWxlUGF0aCIsIm1hbmRhdE9yaWdpbmFsSnNvbiIsIm1hbmRhdE9yaWdpbmFsIiwidG9NYW5kYXRXcmFwcGVyIiwibWFuZGF0IiwibWFuZGF0cyIsIl9pMyIsIl9PYmplY3QkdmFsdWVzMiIsIl9pdGVyYXRvcjciLCJfc3RlcDciLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImFjdGV1ck9yaWdpbmFsRmlsZVBhdGgiLCJhY3RldXJPcmlnaW5hbEpzb24iLCJhY3RldXJPcmlnaW5hbCIsInRvQWN0ZXVyIiwiYWN0ZXVyVWlkIiwic3RyaWN0RXF1YWwiLCJhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsIl9pdGVyYXRvcjgiLCJfc3RlcDgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJjb21taXQiLCJlcnJvckNvZGUiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiQWdlbmRhcyIsIl9pdGVyYXRvcjkiLCJhZ2VuZGFzIiwiX3N0ZXA5IiwiX2l0ZXJhdG9yMTAiLCJfc3RlcDEwIiwiQWdlbmRhc1Jhd0NvbnZlcnQiLCJ0b0FnZW5kYXMiLCJfaXRlcmF0b3IxMSIsInJldW5pb25zIiwicmV1bmlvbiIsIl9zdGVwMTEiLCJ3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24iLCJfaXRlcmF0b3IxMiIsIl9zdGVwMTIiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgiLCJyZXVuaW9uT3JpZ2luYWxKc29uIiwicmV1bmlvbk9yaWdpbmFsIiwidG9SZXVuaW9uIiwiQW1lbmRlbWVudHMiLCJfaXRlcmF0b3IxMyIsImFtZW5kZW1lbnRzIiwiX3N0ZXAxMyIsIl9pdGVyYXRvcjE0IiwiX3N0ZXAxNCIsIkFtZW5kZW1lbnRzUmF3Q29udmVydCIsInRvQW1lbmRlbWVudHMiLCJfaXRlcmF0b3IxNSIsInRleHRlc0V0QW1lbmRlbWVudHMiLCJ0ZXh0ZWxlZyIsIl9zdGVwMTUiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJfaXRlcmF0b3IxNiIsIl9zdGVwMTYiLCJhbWVuZGVtZW50Iiwid3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMTciLCJfc3RlcDE3IiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiYW1lbmRlbWVudE9yaWdpbmFsSnNvbiIsImFtZW5kZW1lbnRPcmlnaW5hbCIsInRvQW1lbmRlbWVudFdyYXBwZXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiX2l0ZXJhdG9yMTgiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwiX3N0ZXAxOCIsIl9pdGVyYXRvcjE5IiwiX3N0ZXAxOSIsImRvY3VtZW50c0RpciIsImRvc3NpZXJzRGlyIiwiRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJfaXRlcmF0b3IyMCIsInRleHRlc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJfc3RlcDIwIiwid3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbiIsIl9pdGVyYXRvcjIxIiwiZG9zc2llciIsIl9zdGVwMjEiLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsIndyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24iLCJfaXRlcmF0b3IyMiIsIl9zdGVwMjIiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgiLCJkb2N1bWVudE9yaWdpbmFsSnNvbiIsImRvY3VtZW50T3JpZ2luYWwiLCJ0b0RvY3VtZW50IiwiX2l0ZXJhdG9yMjMiLCJfc3RlcDIzIiwiZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsIlNjcnV0aW5zIiwiX2l0ZXJhdG9yMjQiLCJzY3J1dGlucyIsIl9zdGVwMjQiLCJfaXRlcmF0b3IyNSIsIl9zdGVwMjUiLCJTY3J1dGluc1Jhd0NvbnZlcnQiLCJ0b1NjcnV0aW5zIiwiX2l0ZXJhdG9yMjYiLCJzY3J1dGluIiwiX3N0ZXAyNiIsIndyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbiIsIl9pdGVyYXRvcjI3IiwiX3N0ZXAyNyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCIsInNjcnV0aW5PcmlnaW5hbEpzb24iLCJzY3J1dGluT3JpZ2luYWwiLCJ0b1NjcnV0aW5XcmFwcGVyIiwiUXVlc3Rpb25zIiwiX2l0ZXJhdG9yMjgiLCJxdWVzdGlvbnMiLCJfc3RlcDI4IiwiX2l0ZXJhdG9yMjkiLCJfc3RlcDI5IiwiX2l0ZXJhdG9yMzAiLCJfc3RlcDMwIiwicXVlc3Rpb25TcGxpdFBhdGgiLCJxdWVzdGlvbkZpbGVuYW1lIiwicXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoIiwicXVlc3Rpb25PcmlnaW5hbEpzb24iLCJxdWVzdGlvbk9yaWdpbmFsIiwiUXVlc3Rpb25zUmF3Q29udmVydCIsInRvUXVlc3Rpb25XcmFwcGVyIiwicXVlc3Rpb24iLCJ3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbiIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiX2l0ZXJhdG9yMzEiLCJjb21wdGVzUmVuZHVzU2VhbmNlcyIsIl9zdGVwMzEiLCJfaXRlcmF0b3IzMiIsIl9zdGVwMzIiLCJfaXRlcmF0b3IzMyIsIl9zdGVwMzMiLCJjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbiIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWwiLCJDb21wdGVzUmVuZHVzUmF3Q29udmVydCIsInRvQ29tcHRlUmVuZHVXcmFwcGVyIiwiY29tcHRlUmVuZHVTZWFuY2UiLCJjb21wdGVSZW5kdSIsIndyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbiIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsInRleHRlTGVnaXNsYXRpZkRpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicmV1bmlvbnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tU2NydXRpblVpZCIsInF1ZXN0aW9uc0RpciIsInF1ZXN0aW9uVWlkUmVnZXgiLCJwYXRoRnJvbVVpZCIsImNvbXB0ZXNSZW5kdXNEaXIiLCJjb21wdGVSZW5kdVVpZFJlZ2V4IiwiYXJndiIsImNvbW1hbmRMaW5lQXJncyIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZW9yZ2FuaXplX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgKiBhcyBnaXQgZnJvbSBcIi4uL2dpdFwiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbiAgcGF0aEZyb21VaWQsXG59IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQW1lbmRlbWVudHNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBRdWVzdGlvbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9xdWVzdGlvbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBDb21wdGVzUmVuZHVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4uL3R5cGVzL2xlZ2lzbGF0dXJlc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IHNwbGl0IGZpbGVzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwia1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwibFwiLFxuICAgIGhlbHA6IFwibGVnaXNsYXR1cmVzIG9mIGNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmV0cmlldmVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImxlZ2lzbGF0dXJlXCIsXG4gICAgdHlwZTogTnVtYmVyLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwicFwiLFxuICAgIGhlbHA6IFwicHVsbCByZXBvc2l0b3JpZXMgYmVmb3JlIHByb2NlZWRpbmdcIixcbiAgICBuYW1lOiBcInB1bGxcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiclwiLFxuICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJzXCIsXG4gICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJWXCIsXG4gICAgaGVscDogXCJkb24ndCB2YWxpZGF0ZSByYXcgZGF0YVwiLFxuICAgIG5hbWU6IFwibm8tdmFsaWRhdGUtcmF3XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5cbmZ1bmN0aW9uIHJlb3JnYW5pemVEYXRhKG9wdGlvbnM6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXhpdENvZGUgPSAxMCAvLyBOb3RoaW5nIHRvIGNvbW1pdFxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCB2YWxpZGF0ZVJhd0RhdGEgPSAhb3B0aW9uc1tcIm5vLXZhbGlkYXRlLXJhd1wiXVxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgbGV0IGNob29zZW5EYXRhc2V0cyA9IGRhdGFzZXRzXG4gIC8vIFdoZW4gYSBnaXZlbiBsZWdpc2xhdHVyZSBpcyAwLCBpdCBpcyB0aGUgc2FtZSBhcyBnaXZpbmcgbm8gbGVnaXNsYXR1cmU6XG4gIC8vIEl0IG1lYW5zIFwiZXZlcnkgbGVnaXNsYXR1cmVzXCIuXG4gIGNvbnN0IGxlZ2lzbGF0dXJlcyA9IG9wdGlvbnMubGVnaXNsYXR1cmU/LnNvbWUoXG4gICAgKGxlZ2lzbGF0dXJlOiBudW1iZXIpID0+IGxlZ2lzbGF0dXJlID09PSAwLFxuICApXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IG9wdGlvbnMubGVnaXNsYXR1cmVcbiAgaWYgKGxlZ2lzbGF0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZW5hYmxlZExlZ2lzbGF0dXJlcyA9IGxlZ2lzbGF0dXJlcy5tYXAoKGxlZ2lzbGF0dXJlOiBudW1iZXIpID0+XG4gICAgICBsZWdpc2xhdHVyZS50b1N0cmluZygpLFxuICAgIClcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2hvb3NlbkRhdGFzZXRzKSkge1xuICAgICAgY2hvb3NlbkRhdGFzZXRzW2tleSBhcyBrZXlvZiB0eXBlb2YgY2hvb3NlbkRhdGFzZXRzXSA9IHZhbHVlLmZpbHRlcihcbiAgICAgICAgKGRhdGFzZXQ6IHsgbGVnaXNsYXR1cmU6IGFueSB9KSA9PlxuICAgICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCB8fFxuICAgICAgICAgIGVuYWJsZWRMZWdpc2xhdHVyZXMuaW5jbHVkZXMoZGF0YXNldC5sZWdpc2xhdHVyZSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGlmIChvcHRpb25zLnB1bGwpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCByZXNldCAtLWhhcmQgb3JpZ2luL21hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcHVsbCAtLXJlYmFzZWAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJhY3RldXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoYWN0ZXVyc1Jlb3JnYW5pemVkRGlyKVxuICAgICAgY29uc3Qgb3JnYW5lc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJvcmdhbmVzXCIpXG4gICAgICBmcy5ta2RpclN5bmMob3JnYW5lc1Jlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LmFjdGV1cnMuYWN0ZXVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1ci51aWRbXCIjdGV4dFwiXSArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5vcmdhbmVzLm9yZ2FuZSkge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgZGVwb3J0c0J5QWN0ZXVyVWlkOiB7XG4gICAgICAgICAgICAgIFthY3RldXJVaWQ6IHN0cmluZ106IHsgdWlkOiBzdHJpbmcgfVtdXG4gICAgICAgICAgICB9ID0ge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4ob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCJkZXBvcnRcIiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcG9ydFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgW1wiZGVwb3J0XCJdLFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgICAgZGVwb3J0U3BsaXRQYXRoW2RlcG9ydFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIGlmICghZGVwb3J0RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAuLi5kZXBvcnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICBgICBMb2FkaW5nIFwiZGVwb3J0XCIgZmlsZTogJHtkZXBvcnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgICAgZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0RlcG9ydChkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydCA9IGRlcG9ydE9yaWdpbmFsLmRlcG9ydFxuICAgICAgICAgICAgICAgIGxldCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlcG9ydHMucHVzaChkZXBvcnQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcG9ydHMgb2YgT2JqZWN0LnZhbHVlcyhkZXBvcnRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWFuZGF0c0J5QWN0ZXVyVWlkOiB7XG4gICAgICAgICAgICAgIFthY3RldXJVaWQ6IHN0cmluZ106IHsgdWlkOiBzdHJpbmcgfVtdXG4gICAgICAgICAgICB9ID0ge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4ob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCJtYW5kYXRcIiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgW1wibWFuZGF0XCJdLFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgICAgbWFuZGF0U3BsaXRQYXRoW21hbmRhdFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIGlmICghbWFuZGF0RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAuLi5tYW5kYXRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICBgICBMb2FkaW5nIFwibWFuZGF0XCIgZmlsZTogJHttYW5kYXRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgICAgbWFuZGF0T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b01hbmRhdFdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgICAgbWFuZGF0T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdCA9IG1hbmRhdE9yaWdpbmFsLm1hbmRhdFxuICAgICAgICAgICAgICAgIGxldCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hbmRhdHMucHVzaChtYW5kYXQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdHMgb2YgT2JqZWN0LnZhbHVlcyhtYW5kYXRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiYWN0ZXVyXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFjdGV1clwiIGZpbGU6ICR7YWN0ZXVyT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXIgPSBhY3RldXJPcmlnaW5hbC5hY3RldXJcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyVWlkID0gYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdXG4gICAgICAgICAgICAgIGNvbnN0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAoZGVwb3J0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5kZXBvcnRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLmRlcG9ydHMgPSB7IGRlcG9ydDogZGVwb3J0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChtYW5kYXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLm1hbmRhdHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIubWFuZGF0cyA9IHsgbWFuZGF0OiBtYW5kYXRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXJVaWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcIm9yZ2FuZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLm9yZ2FuZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJvcmdhbmVcIiBmaWxlOiAke29yZ2FuZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b09yZ2FuZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lID0gb3JnYW5lT3JpZ2luYWwub3JnYW5lXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudHMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBvcmlnaW5hbERhdGEudGV4dGVzRXRBbWVuZGVtZW50c1xuICAgICAgICAgICAgICAudGV4dGVsZWcpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnQsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFtZW5kZW1lbnRcIiBmaWxlOiAke2FtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudFdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFtZW5kZW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBhbWVuZGVtZW50T3JpZ2luYWwuYW1lbmRlbWVudFxuICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBhbWVuZGVtZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvY3VtZW50c1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvY3VtZW50c0RpcilcbiAgICAgIGNvbnN0IGRvc3NpZXJzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb3NzaWVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvc3NpZXJzRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIG9yaWdpbmFsRGF0YS5leHBvcnQudGV4dGVzTGVnaXNsYXRpZnNcbiAgICAgICAgICAgICAgLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlIH0gb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydFxuICAgICAgICAgICAgICAuZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyKSB7XG4gICAgICAgICAgICAgIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9jdW1lbnRcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb2N1bWVudFwiIGZpbGU6ICR7ZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gZG9jdW1lbnRPcmlnaW5hbC5kb2N1bWVudFxuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9zc2llclBhcmxlbWVudGFpcmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoW1xuICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgaWYgKCFkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCIgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKFxuICAgICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsLmRvc3NpZXJQYXJsZW1lbnRhaXJlXG4gICAgICAgICAgICAgIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGxldCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBvcmlnaW5hbERhdGEuc2NydXRpbnMuc2NydXRpbikge1xuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJzY3J1dGluXCIgZmlsZTogJHtzY3J1dGluT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5XcmFwcGVyKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW4gPSBzY3J1dGluT3JpZ2luYWwuc2NydXRpblxuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXN0aW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInF1ZXN0aW9uXCIgZmlsZTogJHtxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFF1ZXN0aW9uc1Jhd0NvbnZlcnQudG9RdWVzdGlvbldyYXBwZXIocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHF1ZXN0aW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHF1ZXN0aW9uT3JpZ2luYWwucXVlc3Rpb25cbiAgICAgICAgICAgICAgd3JpdGVRdWVzdGlvbnNSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBxdWVzdGlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiLnhtbFwiKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiY29tcHRlUmVuZHVTZWFuY2VcIiBmaWxlOiAke2NvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0LnRvQ29tcHRlUmVuZHVXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2UgPSBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsLmNvbXB0ZVJlbmR1XG4gICAgICAgICAgICAgIHdyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2UsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXhpdENvZGVcbn1cblxuZnVuY3Rpb24gd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZyxcbiAgYW1lbmRlbWVudDoge1xuICAgIHVpZDogc3RyaW5nXG4gICAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCB1aWRUZXh0ZUxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnRleHRlTGVnaXNsYXRpZlJlZlxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodWlkVGV4dGVMZWdpc2xhdGlmLCB1bmRlZmluZWQpXG4gIGNvbnN0IHRleHRlTGVnaXNsYXRpZkRpciA9IHBhdGguam9pbihcbiAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgdWlkVGV4dGVMZWdpc2xhdGlmLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVMZWdpc2xhdGlmRGlyKVxuICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZEaXIsXG4gICAgYW1lbmRlbWVudC51aWQgKyBcIi5qc29uXCIsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkb2N1bWVudHNEaXI6IHN0cmluZyxcbiAgZG9jdW1lbnQ6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCBkb2N1bWVudC51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICAgIGRvc3NpZXJzRGlyLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIGAke2Jhc2VuYW1lfS5qc29uYCxcbiAgICBKU09OLnN0cmluZ2lmeShkb3NzaWVyUGFybGVtZW50YWlyZSwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKFxuICByZXVuaW9uc0Rpcjogc3RyaW5nLFxuICByZXVuaW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXIsIHJldW5pb24udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihcbiAgc2NydXRpbnNEaXI6IHN0cmluZyxcbiAgc2NydXRpbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyLCBzY3J1dGluLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbihcbiAgcXVlc3Rpb25zRGlyOiBzdHJpbmcsXG4gIHF1ZXN0aW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgcXVlc3Rpb25VaWRSZWdleDogUmVnRXhwID0gL15RQU4oUlxcZCspKExcXGQrKVEoRXxHfE9TRCkoXFxkKykkL1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKHF1ZXN0aW9uc0RpciwgcXVlc3Rpb24udWlkLCBxdWVzdGlvblVpZFJlZ2V4KVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocXVlc3Rpb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24oXG4gIGNvbXB0ZXNSZW5kdXNEaXI6IHN0cmluZyxcbiAgY29tcHRlUmVuZHU6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBjb21wdGVSZW5kdVVpZFJlZ2V4OiBSZWdFeHAgPVxuICAgIC9eQ1JTQU4oUlxcZCspKExcXGQrKShTXFxkKykoT3xFKShcXGQrKShOXFxkKykkL1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKFxuICAgIGNvbXB0ZXNSZW5kdXNEaXIsXG4gICAgY29tcHRlUmVuZHUudWlkLFxuICAgIGNvbXB0ZVJlbmR1VWlkUmVnZXgsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KGNvbXB0ZVJlbmR1LCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVvcmdhbml6ZV9kYXRhLnRzXCIpKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG4gIHByb2Nlc3MuZXhpdChyZW9yZ2FuaXplRGF0YShvcHRpb25zKSlcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsZ0JBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFLLFNBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE1BQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLEdBQUEsR0FBQUMsdUJBQUEsQ0FBQVIsT0FBQTtBQUNBLElBQUFTLGFBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFFBQUEsR0FBQVYsT0FBQTtBQU9BLElBQUFXLG1CQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxRQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxZQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxxQkFBQSxHQUFBZCxPQUFBO0FBQ0EsSUFBQWUsU0FBQSxHQUFBZixPQUFBO0FBQ0EsSUFBQWdCLFVBQUEsR0FBQWhCLE9BQUE7QUFDQSxJQUFBaUIsT0FBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixhQUFBLEdBQUFsQixPQUFBO0FBQW1ELFNBQUFtQix5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFB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