@tricoteuses/assemblee 1.1.5 → 1.1.7

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 (120) hide show
  1. package/lib/api.js +1 -1
  2. package/lib/bugs/acteur-00010/plugin.test.js +1 -1
  3. package/lib/bugs/acteur-00010.js +1 -1
  4. package/lib/bugs/acteur-00010.mjs +1 -1
  5. package/lib/bugs/agenda-00002/plugin.test.js +1 -1
  6. package/lib/bugs/agenda-00002.js +2 -2
  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-00008.js +1 -1
  10. package/lib/bugs/agenda-00008.mjs +1 -1
  11. package/lib/bugs/agenda-00011/plugin.test.js +1 -1
  12. package/lib/bugs/agenda-00011.js +1 -1
  13. package/lib/bugs/agenda-00011.mjs +1 -1
  14. package/lib/bugs.js +1 -1
  15. package/lib/bugs.mjs +1 -1
  16. package/lib/cleaners/actes_legislatifs.js +1 -1
  17. package/lib/cleaners/actes_legislatifs.mjs +1 -1
  18. package/lib/cleaners/acteurs.js +1 -1
  19. package/lib/cleaners/acteurs.mjs +1 -1
  20. package/lib/cleaners/amendements.js +1 -1
  21. package/lib/cleaners/amendements.mjs +1 -1
  22. package/lib/cleaners/documents.js +1 -1
  23. package/lib/cleaners/documents.mjs +1 -1
  24. package/lib/cleaners/dossiers_legislatifs.js +1 -1
  25. package/lib/cleaners/dossiers_legislatifs.mjs +1 -1
  26. package/lib/cleaners/index.js +1 -1
  27. package/lib/cleaners/organes.js +1 -1
  28. package/lib/cleaners/organes.mjs +1 -1
  29. package/lib/cleaners/reunions.js +1 -1
  30. package/lib/cleaners/reunions.mjs +1 -1
  31. package/lib/cleaners/scrutins.js +1 -1
  32. package/lib/cleaners/scrutins.mjs +1 -1
  33. package/lib/cleaners/xml.js +1 -1
  34. package/lib/cleaners/xml.mjs +1 -1
  35. package/lib/datasets.js +1 -1
  36. package/lib/datasets.mjs +1 -1
  37. package/lib/dates.js +16 -7
  38. package/lib/dates.mjs +15 -6
  39. package/lib/dossiers_legislatifs.js +1 -1
  40. package/lib/dossiers_legislatifs.mjs +1 -1
  41. package/lib/file_systems.js +2 -2
  42. package/lib/file_systems.mjs +2 -2
  43. package/lib/git.d.ts +2 -1
  44. package/lib/git.js +77 -44
  45. package/lib/git.mjs +48 -25
  46. package/lib/index.js +1 -1
  47. package/lib/inserters.js +1 -1
  48. package/lib/inserters.mjs +1 -1
  49. package/lib/loaders.d.ts +52 -2
  50. package/lib/loaders.js +961 -187
  51. package/lib/loaders.mjs +285 -3
  52. package/lib/organes.js +1 -1
  53. package/lib/organes.mjs +1 -1
  54. package/lib/parsers/documents.js +1 -1
  55. package/lib/parsers/documents.mjs +1 -1
  56. package/lib/parsers/index.js +1 -1
  57. package/lib/parsers/recherche_amendements.js +39 -32
  58. package/lib/parsers/recherche_amendements.mjs +5 -1
  59. package/lib/raw_types/acteurs_et_organes.js +1 -1
  60. package/lib/raw_types/acteurs_et_organes.mjs +1 -1
  61. package/lib/raw_types/agendas.js +1 -1
  62. package/lib/raw_types/agendas.mjs +1 -1
  63. package/lib/raw_types/amendements.js +1 -1
  64. package/lib/raw_types/amendements.mjs +1 -1
  65. package/lib/raw_types/dossiers_legislatifs.js +1 -1
  66. package/lib/raw_types/dossiers_legislatifs.mjs +1 -1
  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 +3 -3
  70. package/lib/scripts/bugs_helper.mjs +3 -3
  71. package/lib/scripts/clean_data.js +1 -1
  72. package/lib/scripts/clean_data.mjs +1 -1
  73. package/lib/scripts/clean_reorganized_data.js +63 -61
  74. package/lib/scripts/clean_reorganized_data.mjs +55 -48
  75. package/lib/scripts/diff_amendements.js +1 -1
  76. package/lib/scripts/diff_amendements.mjs +1 -1
  77. package/lib/scripts/document_dossiers_legislatifs.js +1 -1
  78. package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
  79. package/lib/scripts/get_today_reunions.js +1 -1
  80. package/lib/scripts/merge_scrutins.js +1 -1
  81. package/lib/scripts/merge_scrutins.mjs +1 -1
  82. package/lib/scripts/parse_textes_lois.js +5 -48
  83. package/lib/scripts/parse_textes_lois.mjs +5 -49
  84. package/lib/scripts/raw_types_from_amendements.js +1 -1
  85. package/lib/scripts/raw_types_from_amendements.mjs +1 -1
  86. package/lib/scripts/reorganize_data.js +231 -239
  87. package/lib/scripts/reorganize_data.mjs +50 -59
  88. package/lib/scripts/retrieve_deputes_photos.js +86 -107
  89. package/lib/scripts/retrieve_deputes_photos.mjs +21 -42
  90. package/lib/scripts/retrieve_documents.js +3 -3
  91. package/lib/scripts/retrieve_documents.mjs +3 -3
  92. package/lib/scripts/retrieve_open_data.js +29 -22
  93. package/lib/scripts/retrieve_open_data.mjs +9 -4
  94. package/lib/scripts/retrieve_pending_amendments.js +73 -81
  95. package/lib/scripts/retrieve_pending_amendments.mjs +19 -26
  96. package/lib/scripts/retrieve_senateurs_photos.js +65 -87
  97. package/lib/scripts/retrieve_senateurs_photos.mjs +21 -42
  98. package/lib/scripts/retrieve_textes_lois.js +32 -71
  99. package/lib/scripts/retrieve_textes_lois.mjs +6 -44
  100. package/lib/scripts/test_load.js +1 -1
  101. package/lib/scripts/test_load_big_files.js +1 -1
  102. package/lib/scripts/validate_json.js +3 -3
  103. package/lib/scripts/validate_json.mjs +3 -3
  104. package/lib/shared_types/codes_actes.js +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.js +1 -1
  112. package/lib/types/amendements.mjs +1 -1
  113. package/lib/types/dossiers_legislatifs.js +1 -1
  114. package/lib/types/dossiers_legislatifs.mjs +1 -1
  115. package/lib/types/legislatures.js +1 -1
  116. package/lib/types/scrutins.js +1 -1
  117. package/lib/types/scrutins.mjs +1 -1
  118. package/lib/urls.js +1 -1
  119. package/lib/urls.mjs +1 -1
  120. package/package.json +6 -5
@@ -23,6 +23,7 @@ require("core-js/modules/es.string.trim.js");
23
23
  require("core-js/modules/es.array.map.js");
24
24
  require("core-js/modules/es.array.reduce.js");
25
25
  require("core-js/modules/es.object.to-string.js");
26
+ require("core-js/modules/es.array.some.js");
26
27
  require("core-js/modules/es.regexp.to-string.js");
27
28
  require("core-js/modules/es.object.entries.js");
28
29
  require("core-js/modules/es.array.filter.js");
@@ -45,6 +46,7 @@ var _acteurs_et_organes = require("../types/acteurs_et_organes");
45
46
  var _agendas = require("../types/agendas");
46
47
  var _amendements = require("../types/amendements");
47
48
  var _dossiers_legislatifs = require("../types/dossiers_legislatifs");
49
+ var _legislatures = require("../types/legislatures");
48
50
  var _scrutins = require("../types/scrutins");
49
51
  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); }
50
52
  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; }
@@ -89,6 +91,11 @@ function parseArgs(argv) {
89
91
  multiple: true,
90
92
  name: "legislature",
91
93
  type: Number
94
+ }, {
95
+ alias: "p",
96
+ help: "pull repositories before proceeding",
97
+ name: "pull",
98
+ type: Boolean
92
99
  }, {
93
100
  alias: "r",
94
101
  help: "push commit to given remote",
@@ -121,9 +128,10 @@ function parseArgs(argv) {
121
128
  return options;
122
129
  }
123
130
  function cleanReorganizedData(options) {
131
+ var _options$legislature;
124
132
  var dataDir = options.dataDir;
125
133
  Date.prototype.toJSON = _dates.patchedDateToJson;
126
- var error = false;
134
+ var exitCode = 0;
127
135
  var gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
128
136
  options.categories.map(function (datasetName) {
129
137
  return _assert["default"].notStrictEqual(_datasets.EnabledDatasets[datasetName], undefined, "Unknown name of dataset: ".concat(datasetName));
@@ -132,8 +140,13 @@ function cleanReorganizedData(options) {
132
140
  return enabledDatasets | _datasets.EnabledDatasets[datasetName];
133
141
  }, _datasets.EnabledDatasets.None);
134
142
  var choosenDatasets = _datasets.datasets;
135
- if (options.legislature) {
136
- var enabledLegislatures = options.legislature.map(function (legislature) {
143
+ // When a given legislature is 0, it is the same as giving no legislature:
144
+ // It means "every legislatures".
145
+ var legislatures = (_options$legislature = options.legislature) !== null && _options$legislature !== void 0 && _options$legislature.some(function (legislature) {
146
+ return legislature === 0;
147
+ }) ? undefined : options.legislature;
148
+ if (legislatures !== undefined) {
149
+ var enabledLegislatures = legislatures.map(function (legislature) {
137
150
  return legislature.toString();
138
151
  });
139
152
  for (var _i = 0, _Object$entries = Object.entries(choosenDatasets); _i < _Object$entries.length; _i++) {
@@ -141,7 +154,7 @@ function cleanReorganizedData(options) {
141
154
  key = _Object$entries$_i[0],
142
155
  value = _Object$entries$_i[1];
143
156
  choosenDatasets[key] = value.filter(function (dataset) {
144
- return enabledLegislatures.includes(dataset.legislature);
157
+ return dataset.legislature === _legislatures.Legislature.All || enabledLegislatures.includes(dataset.legislature);
145
158
  });
146
159
  }
147
160
  }
@@ -163,9 +176,17 @@ function cleanReorganizedData(options) {
163
176
  stdio: ["ignore", "ignore", "pipe"]
164
177
  });
165
178
  }
166
- analyzeAndRemove(datasetName, options);
167
179
  var datasetRawDir = _path["default"].join(dataDir, datasetName);
168
180
  var datasetCleanDir = datasetRawDir + "_nettoye";
181
+ if (options.pull) {
182
+ (0, _child_process.execSync)("git pull --rebase", {
183
+ cwd: datasetCleanDir,
184
+ env: process.env,
185
+ encoding: "utf-8",
186
+ stdio: ["ignore", "ignore", "pipe"]
187
+ });
188
+ }
189
+ analyzeAndRemove(datasetName, options);
169
190
  var _iterator2 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetRawDir, ["acteurs"])),
170
191
  _step2;
171
192
  try {
@@ -234,11 +255,14 @@ function cleanReorganizedData(options) {
234
255
  } finally {
235
256
  _iterator3.f();
236
257
  }
237
- if (commitAndPush(datasetCleanDir, options, options.remote)) {
238
- error = true;
258
+ if (options.commit) {
259
+ var errorCode = git.commitAndPush(datasetCleanDir, "Nouvelle moisson", options.remote);
260
+ if (errorCode !== 0 && exitCode === 0) {
261
+ exitCode = errorCode;
262
+ }
239
263
  }
240
264
  if (commitAndPushUid(datasetCleanDir, options, ["acteurs", "organes"])) {
241
- error = true;
265
+ exitCode = 1;
242
266
  }
243
267
  }
244
268
  } catch (err) {
@@ -302,11 +326,14 @@ function cleanReorganizedData(options) {
302
326
  } finally {
303
327
  _iterator5.f();
304
328
  }
305
- if (commitAndPush(_datasetCleanDir, options, options.remote)) {
306
- error = true;
329
+ if (options.commit) {
330
+ var _errorCode = git.commitAndPush(_datasetCleanDir, "Nouvelle moisson", options.remote);
331
+ if (_errorCode !== 0 && exitCode === 0) {
332
+ exitCode = _errorCode;
333
+ }
307
334
  }
308
335
  if (commitAndPushUid(_datasetCleanDir, options, ["."])) {
309
- error = true;
336
+ exitCode = 1;
310
337
  }
311
338
  }
312
339
  } catch (err) {
@@ -370,11 +397,14 @@ function cleanReorganizedData(options) {
370
397
  } finally {
371
398
  _iterator7.f();
372
399
  }
373
- if (commitAndPush(_datasetCleanDir2, options, options.remote)) {
374
- error = true;
400
+ if (options.commit) {
401
+ var _errorCode2 = git.commitAndPush(_datasetCleanDir2, "Nouvelle moisson", options.remote);
402
+ if (_errorCode2 !== 0 && exitCode === 0) {
403
+ exitCode = _errorCode2;
404
+ }
375
405
  }
376
406
  if (commitAndPushUid(_datasetCleanDir2, options, ["."])) {
377
- error = true;
407
+ exitCode = 1;
378
408
  }
379
409
  }
380
410
  } catch (err) {
@@ -472,11 +502,14 @@ function cleanReorganizedData(options) {
472
502
  } finally {
473
503
  _iterator10.f();
474
504
  }
475
- if (commitAndPush(_datasetCleanDir3, options, options.remote)) {
476
- error = true;
505
+ if (options.commit) {
506
+ var _errorCode3 = git.commitAndPush(_datasetCleanDir3, "Nouvelle moisson", options.remote);
507
+ if (_errorCode3 !== 0 && exitCode === 0) {
508
+ exitCode = _errorCode3;
509
+ }
477
510
  }
478
511
  if (commitAndPushUid(_datasetCleanDir3, options, ["documents", "dossiers"])) {
479
- error = true;
512
+ exitCode = 1;
480
513
  }
481
514
  }
482
515
  } catch (err) {
@@ -540,11 +573,14 @@ function cleanReorganizedData(options) {
540
573
  } finally {
541
574
  _iterator12.f();
542
575
  }
543
- if (commitAndPush(_datasetCleanDir4, options, options.remote)) {
544
- error = true;
576
+ if (options.commit) {
577
+ var _errorCode4 = git.commitAndPush(_datasetCleanDir4, "Nouvelle moisson", options.remote);
578
+ if (_errorCode4 !== 0 && exitCode === 0) {
579
+ exitCode = _errorCode4;
580
+ }
545
581
  }
546
582
  if (commitAndPushUid(_datasetCleanDir4, options, ["."])) {
547
- error = true;
583
+ exitCode = 1;
548
584
  }
549
585
  }
550
586
  } catch (err) {
@@ -556,7 +592,7 @@ function cleanReorganizedData(options) {
556
592
 
557
593
  // Restore standard conversion of dates to JSON.
558
594
  Date.prototype.toJSON = _dates.existingDateToJson;
559
- return error;
595
+ return exitCode;
560
596
  }
561
597
  function analyzeAndRemove(datasetName, options) {
562
598
  var dataDir = options.dataDir;
@@ -583,25 +619,18 @@ function analyzeAndRemove(datasetName, options) {
583
619
  _iterator13.f();
584
620
  }
585
621
  }
586
- function commitAndPush(repositoryDir, options, remotes) {
622
+ function commitAndPushUid(repositoryDir, options, subdirectories) {
587
623
  var error = false;
588
624
  if (options.commit) {
589
- git.commit(repositoryDir, "Nouvelle moisson");
590
- var _iterator14 = _createForOfIteratorHelper(remotes || []),
625
+ git.uidBranchUpdate(repositoryDir, subdirectories, options["no-reset-after-commit"]);
626
+ var _iterator14 = _createForOfIteratorHelper(options.remote || []),
591
627
  _step14;
592
628
  try {
593
629
  for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
594
630
  var remote = _step14.value;
595
631
  try {
596
- (0, _child_process.execSync)("git push ".concat(remote, " master"), {
597
- cwd: repositoryDir,
598
- env: process.env,
599
- encoding: "utf-8",
600
- stdio: ["ignore", "ignore", "pipe"]
601
- });
632
+ git.run(repositoryDir, "push --quiet ".concat(remote, " uid:uid"));
602
633
  } catch (childProcess) {
603
- // Don't stop when push fails.
604
- console.error(childProcess.output);
605
634
  error = true;
606
635
  }
607
636
  }
@@ -613,38 +642,11 @@ function commitAndPush(repositoryDir, options, remotes) {
613
642
  }
614
643
  return error;
615
644
  }
616
- function commitAndPushUid(repositoryDir, options, subdirectories) {
617
- var error = false;
618
- if (options.commit) {
619
- git.uidBranchUpdate(repositoryDir, subdirectories, options["no-reset-after-commit"]);
620
- var _iterator15 = _createForOfIteratorHelper(options.remote || []),
621
- _step15;
622
- try {
623
- for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
624
- var remote = _step15.value;
625
- try {
626
- git.run(repositoryDir, "push --quiet ".concat(remote, " uid:uid"));
627
- } catch (childProcess) {
628
- error = true;
629
- }
630
- }
631
- } catch (err) {
632
- _iterator15.e(err);
633
- } finally {
634
- _iterator15.f();
635
- }
636
- }
637
- return error;
638
- }
639
645
  function main(argv) {
640
646
  var options = parseArgs(argv);
641
- if (cleanReorganizedData(options)) {
642
- return 1;
643
- } else {
644
- return 0;
645
- }
647
+ return cleanReorganizedData(options);
646
648
  }
647
649
 
648
650
  /* istanbul ignore if */
649
651
  if (process.argv[1].endsWith("clean_reorganized_data.ts")) process.exit(main(process.argv));
650
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJOdW1iZXIiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsImNsZWFuUmVvcmdhbml6ZWREYXRhIiwiZGF0YURpciIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImVycm9yIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiY2hvb3NlbkRhdGFzZXRzIiwiZGF0YXNldHMiLCJsZWdpc2xhdHVyZSIsImVuYWJsZWRMZWdpc2xhdHVyZXMiLCJ0b1N0cmluZyIsIk9iamVjdCIsImVudHJpZXMiLCJrZXkiLCJ2YWx1ZSIsImZpbHRlciIsImRhdGFzZXQiLCJpbmNsdWRlcyIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJzRXRPcmdhbmVzIiwicGF0aCIsImJhc2VuYW1lIiwiZmlsZW5hbWUiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiYW5hbHl6ZUFuZFJlbW92ZSIsImRhdGFzZXRSYXdEaXIiLCJqb2luIiwiZGF0YXNldENsZWFuRGlyIiwid2Fsa0RpciIsImFjdGV1clNwbGl0UGF0aCIsImFjdGV1ckZpbGVuYW1lIiwibGVuZ3RoIiwiZW5kc1dpdGgiLCJhY3RldXJSYXdGaWxlUGF0aCIsInZlcmJvc2UiLCJjb25zb2xlIiwibG9nIiwiYWN0ZXVyUmF3SnNvbiIsImZzIiwicmVhZEZpbGVTeW5jIiwiYWN0ZXVyIiwiSlNPTiIsInBhcnNlIiwiY2xlYW5BY3RldXIiLCJhY3RldXJKc29uIiwic3RyaW5naWZ5IiwiYWN0ZXVyQ2xlYW4iLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsInRvQWN0ZXVyIiwiYWN0ZXVyQ2xlYW5Kc29uIiwiYWN0ZXVyVG9Kc29uIiwiYWN0ZXVyQ2xlYW5GaWxlUGF0aCIsImVuc3VyZURpclN5bmMiLCJkaXJuYW1lIiwid3JpdGVGaWxlU3luYyIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lUmF3RmlsZVBhdGgiLCJvcmdhbmVSYXdKc29uIiwib3JnYW5lIiwiY2xlYW5PcmdhbmUiLCJvcmdhbmVKc29uIiwib3JnYW5lQ2xlYW4iLCJ0b09yZ2FuZSIsIm9yZ2FuZUNsZWFuSnNvbiIsIm9yZ2FuZVRvSnNvbiIsIm9yZ2FuZUNsZWFuRmlsZVBhdGgiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiY29tbWl0QW5kUHVzaFVpZCIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25SYXdGaWxlUGF0aCIsInJldW5pb25SYXdKc29uIiwicmV1bmlvbiIsImNsZWFuUmV1bmlvbiIsInJldW5pb25Kc29uIiwicmV1bmlvbkNsZWFuIiwiQWdlbmRhc0NvbnZlcnQiLCJ0b1JldW5pb24iLCJyZXVuaW9uQ2xlYW5Kc29uIiwicmV1bmlvblRvSnNvbiIsInJldW5pb25DbGVhbkZpbGVQYXRoIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50UmF3RmlsZVBhdGgiLCJhbWVuZGVtZW50UmF3SnNvbiIsImFtZW5kZW1lbnQiLCJjbGVhbkFtZW5kZW1lbnQiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnRDbGVhbiIsIkFtZW5kZW1lbnRzQ29udmVydCIsInRvQW1lbmRlbWVudCIsImFtZW5kZW1lbnRDbGVhbkpzb24iLCJhbWVuZGVtZW50VG9Kc29uIiwiYW1lbmRlbWVudENsZWFuRmlsZVBhdGgiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50UmF3RmlsZVBhdGgiLCJkb2N1bWVudFJhd0pzb24iLCJkb2N1bWVudCIsImNsZWFuRG9jdW1lbnRPckRpdmlzaW9uIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnRDbGVhbiIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwidG9Eb2N1bWVudCIsImRvY3VtZW50Q2xlYW5Kc29uIiwiZG9jdW1lbnRUb0pzb24iLCJkb2N1bWVudENsZWFuRmlsZVBhdGgiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llclJhd0ZpbGVQYXRoIiwiZG9zc2llclJhd0pzb24iLCJkb3NzaWVyIiwiY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXJKc29uIiwiZG9zc2llckNsZWFuIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXJDbGVhbkpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZVRvSnNvbiIsImRvc3NpZXJDbGVhbkZpbGVQYXRoIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluUmF3RmlsZVBhdGgiLCJzY3J1dGluUmF3SnNvbiIsInNjcnV0aW4iLCJjbGVhblNjcnV0aW4iLCJzY3J1dGluSnNvbiIsInNjcnV0aW5DbGVhbiIsIlNjcnV0aW5zQ29udmVydCIsInRvU2NydXRpbiIsInNjcnV0aW5DbGVhbkpzb24iLCJzY3J1dGluVG9Kc29uIiwic2NydXRpbkNsZWFuRmlsZVBhdGgiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJzaWxlbnQiLCJyZWFkZGlyU3luYyIsInBhdGhuYW1lIiwicmVtb3ZlU3luYyIsInJlcG9zaXRvcnlEaXIiLCJyZW1vdGVzIiwiY29tbWl0IiwiZ2l0IiwiY2hpbGRQcm9jZXNzIiwib3V0cHV0Iiwic3ViZGlyZWN0b3JpZXMiLCJ1aWRCcmFuY2hVcGRhdGUiLCJydW4iLCJtYWluIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NsZWFuX3Jlb3JnYW5pemVkX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7XG4gIGNsZWFuQWN0ZXVyLFxuICBjbGVhbkFtZW5kZW1lbnQsXG4gIGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uLFxuICBjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBjbGVhbk9yZ2FuZSxcbiAgY2xlYW5SZXVuaW9uLFxuICBjbGVhblNjcnV0aW4sXG59IGZyb20gXCIuLi9jbGVhbmVyc1wiXG5pbXBvcnQgeyBkYXRhc2V0cywgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG59IGZyb20gXCIuLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQsIENvbnZlcnQgYXMgQW1lbmRlbWVudHNDb252ZXJ0IH0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4uL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4uL3R5cGVzL3NjcnV0aW5zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGFsaWFzOiBcIkNcIixcbiAgICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgICAgbmFtZTogXCJjbG9uZVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiY1wiLFxuICAgICAgaGVscDogXCJjb21taXQgY2xlYW4gZmlsZXNcIixcbiAgICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiZFwiLFxuICAgICAgaGVscDogXCJzaW5nbGUgZGF0YXNldCB0byByZW9yZ2FuaXplXCIsXG4gICAgICBuYW1lOiBcImRhdGFzZXRcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImtcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJsXCIsXG4gICAgICBoZWxwOiBcImxlZ2lzbGF0dXJlcyBvZiBjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJldHJpZXZlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInJcIixcbiAgICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJzXCIsXG4gICAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWxwOiBcImRvIG5vdCByZXNldCAtLWhhcmQgYWZ0ZXIgY29tbWl0IHRvIHNhdmUgSS9PIGlmIHRoZSB3b3JraW5nIHRyZWUgaXMgdG8gYmUgZGlzY2FyZGVkXCIsXG4gICAgICBuYW1lOiBcIm5vLXJlc2V0LWFmdGVyLWNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInZcIixcbiAgICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIGNsZWFuUmVvcmdhbml6ZWREYXRhKG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhRGlyOiBzdHJpbmcgPSBvcHRpb25zLmRhdGFEaXJcblxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvb3NlbkRhdGFzZXRzID0gZGF0YXNldHNcbiAgaWYgKG9wdGlvbnMubGVnaXNsYXR1cmUpIHtcbiAgICBjb25zdCBlbmFibGVkTGVnaXNsYXR1cmVzID0gb3B0aW9ucy5sZWdpc2xhdHVyZS5tYXAoKGxlZ2lzbGF0dXJlOiBudW1iZXIpID0+XG4gICAgICBsZWdpc2xhdHVyZS50b1N0cmluZygpLFxuICAgIClcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2hvb3NlbkRhdGFzZXRzKSkge1xuICAgICAgY2hvb3NlbkRhdGFzZXRzW2tleSBhcyBrZXlvZiB0eXBlb2YgY2hvb3NlbkRhdGFzZXRzXSA9IHZhbHVlLmZpbHRlcihcbiAgICAgICAgKGRhdGFzZXQ6IHsgbGVnaXNsYXR1cmU6IGFueSB9KSA9PlxuICAgICAgICAgIGVuYWJsZWRMZWdpc2xhdHVyZXMuaW5jbHVkZXMoZGF0YXNldC5sZWdpc2xhdHVyZSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHthY3RldXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1clJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gSlNPTi5wYXJzZShhY3RldXJSYXdKc29uKVxuICAgICAgICBjbGVhbkFjdGV1cihhY3RldXIpXG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW46IEFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5hY3RldXJUb0pzb24oYWN0ZXVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoYWN0ZXVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYWN0ZXVyQ2xlYW5GaWxlUGF0aCwgYWN0ZXVyQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZVJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7b3JnYW5lUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEpTT04ucGFyc2Uob3JnYW5lUmF3SnNvbilcbiAgICAgICAgY2xlYW5PcmdhbmUob3JnYW5lKVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuOiBPcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQub3JnYW5lVG9Kc29uKG9yZ2FuZUNsZWFuKVxuXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKG9yZ2FuZUNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKG9yZ2FuZUNsZWFuRmlsZVBhdGgsIG9yZ2FuZUNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImFjdGV1cnNcIiwgXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtyZXVuaW9uUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEpTT04ucGFyc2UocmV1bmlvblJhd0pzb24pXG4gICAgICAgIGNsZWFuUmV1bmlvbihyZXVuaW9uKVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuOiBSZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFnZW5kYXNDb252ZXJ0LnJldW5pb25Ub0pzb24ocmV1bmlvbkNsZWFuKVxuXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUocmV1bmlvbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHJldW5pb25DbGVhbkZpbGVQYXRoLCByZXVuaW9uQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudFJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRSYXdEaXIsXG4gICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHthbWVuZGVtZW50UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50UmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgIGFtZW5kZW1lbnRSYXdGaWxlUGF0aCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gSlNPTi5wYXJzZShhbWVuZGVtZW50UmF3SnNvbilcbiAgICAgICAgY2xlYW5BbWVuZGVtZW50KGFtZW5kZW1lbnQpXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW46IEFtZW5kZW1lbnQgPVxuICAgICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LmFtZW5kZW1lbnRUb0pzb24oYW1lbmRlbWVudENsZWFuKVxuXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoYW1lbmRlbWVudENsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoLCBhbWVuZGVtZW50Q2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2RvY3VtZW50UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudFJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudFJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IEpTT04ucGFyc2UoZG9jdW1lbnRSYXdKc29uKVxuICAgICAgICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkb2N1bWVudClcbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbjogRG9jdW1lbnQgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb2N1bWVudFRvSnNvbihkb2N1bWVudENsZWFuKVxuXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb2N1bWVudENsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRvY3VtZW50Q2xlYW5GaWxlUGF0aCwgZG9jdW1lbnRDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llclJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2Rvc3NpZXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llclJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID0gSlNPTi5wYXJzZShkb3NzaWVyUmF3SnNvbilcbiAgICAgICAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVyKVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZG9zc2llciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuOiBEb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb3NzaWVyUGFybGVtZW50YWlyZVRvSnNvbihkb3NzaWVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uZG9zc2llclNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb3NzaWVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZG9zc2llckNsZWFuRmlsZVBhdGgsIGRvc3NpZXJDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiZG9jdW1lbnRzXCIsIFwiZG9zc2llcnNcIl0pXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtzY3J1dGluUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IEpTT04ucGFyc2Uoc2NydXRpblJhd0pzb24pXG4gICAgICAgIGNsZWFuU2NydXRpbihzY3J1dGluKVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuOiBTY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBTY3J1dGluc0NvbnZlcnQuc2NydXRpblRvSnNvbihzY3J1dGluQ2xlYW4pXG5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShzY3J1dGluQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoc2NydXRpbkNsZWFuRmlsZVBhdGgsIHNjcnV0aW5DbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWU6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgY29uc29sZS5sb2coYENsZWFuaW5nIGRpcmVjdG9yeTogJHtkYXRhc2V0Q2xlYW5EaXJ94oCmYClcbiAgfVxuICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRDbGVhbkRpcilcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpKSB7XG4gICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgcGF0aG5hbWUgPSBwYXRoLmpvaW4oZGF0YXNldENsZWFuRGlyLCBmaWxlbmFtZSlcbiAgICBmcy5yZW1vdmVTeW5jKHBhdGhuYW1lKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgb3B0aW9uczogYW55LFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LmNvbW1pdChyZXBvc2l0b3J5RGlyLCBcIk5vdXZlbGxlIG1vaXNzb25cIilcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaFVpZChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBvcHRpb25zOiBhbnksXG4gIHN1YmRpcmVjdG9yaWVzOiBhbnksXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LnVpZEJyYW5jaFVwZGF0ZShcbiAgICAgIHJlcG9zaXRvcnlEaXIsXG4gICAgICBzdWJkaXJlY3RvcmllcyxcbiAgICAgIG9wdGlvbnNbXCJuby1yZXNldC1hZnRlci1jb21taXRcIl0sXG4gICAgKVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIG9wdGlvbnMucmVtb3RlIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBnaXQucnVuKHJlcG9zaXRvcnlEaXIsIGBwdXNoIC0tcXVpZXQgJHtyZW1vdGV9IHVpZDp1aWRgKVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChjbGVhblJlb3JnYW5pemVkRGF0YShvcHRpb25zKSkge1xuICAgIHJldHVybiAxXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJjbGVhbl9yZW9yZ2FuaXplZF9kYXRhLnRzXCIpKVxuICBwcm9jZXNzLmV4aXQobWFpbihwcm9jZXNzLmFyZ3YpKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBS0E7QUFBdUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUV2RSxTQUFTQSxTQUFTLENBQUNDLElBQWMsRUFBTztFQUN0QyxJQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtJQUNFQyxLQUFLLEVBQUUsR0FBRztJQUNWQyxJQUFJLEVBQUUsK0RBQStEO0lBQ3JFQyxJQUFJLEVBQUUsT0FBTztJQUNiQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VKLEtBQUssRUFBRSxHQUFHO0lBQ1ZDLElBQUksRUFBRSxvQkFBb0I7SUFDMUJDLElBQUksRUFBRSxRQUFRO0lBQ2RDLElBQUksRUFBRUU7RUFDUixDQUFDLEVBQ0Q7SUFDRUwsS0FBSyxFQUFFLEdBQUc7SUFDVkMsSUFBSSxFQUFFLDhCQUE4QjtJQUNwQ0MsSUFBSSxFQUFFLFNBQVM7SUFDZkMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFD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
652
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9jb21tYW5kTGluZUFyZ3MiLCJfZnNFeHRyYSIsIl9wYXRoIiwiX2NsZWFuZXJzIiwiX2RhdGFzZXRzIiwiX2RhdGVzIiwiX2ZpbGVfc3lzdGVtcyIsImdpdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2FjdGV1cnNfZXRfb3JnYW5lcyIsIl9hZ2VuZGFzIiwiX2FtZW5kZW1lbnRzIiwiX2Rvc3NpZXJzX2xlZ2lzbGF0aWZzIiwiX2xlZ2lzbGF0dXJlcyIsIl9zY3J1dGlucyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiVHlwZUVycm9yIiwiaXRlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJmcm9tIiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJvIiwiYWxsb3dBcnJheUxpa2UiLCJpdCIsImxlbmd0aCIsImkiLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlIiwiX2UyIiwiZiIsIm5vcm1hbENvbXBsZXRpb24iLCJkaWRFcnIiLCJlcnIiLCJzdGVwIiwibmV4dCIsIl9lMyIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsIm1pbkxlbiIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJ0ZXN0IiwibGVuIiwiYXJyMiIsIl9pIiwiX3MiLCJfZSIsIl94IiwiX3IiLCJfYXJyIiwiX24iLCJfZCIsInB1c2giLCJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsIk51bWJlciIsImRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwiY2xlYW5SZW9yZ2FuaXplZERhdGEiLCJfb3B0aW9ucyRsZWdpc2xhdHVyZSIsImRhdGFEaXIiLCJEYXRlIiwidG9KU09OIiwicGF0Y2hlZERhdGVUb0pzb24iLCJleGl0Q29kZSIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInVuZGVmaW5lZCIsImNhdGVnb3JpZXMiLCJtYXAiLCJkYXRhc2V0TmFtZSIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwiRW5hYmxlZERhdGFzZXRzIiwiY29uY2F0IiwiZW5hYmxlZERhdGFzZXRzIiwicmVkdWNlIiwiTm9uZSIsImNob29zZW5EYXRhc2V0cyIsImRhdGFzZXRzIiwibGVnaXNsYXR1cmVzIiwibGVnaXNsYXR1cmUiLCJzb21lIiwiZW5hYmxlZExlZ2lzbGF0dXJlcyIsIl9PYmplY3QkZW50cmllcyIsImVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJmaWx0ZXIiLCJkYXRhc2V0IiwiTGVnaXNsYXR1cmUiLCJBbGwiLCJpbmNsdWRlcyIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJfaXRlcmF0b3IiLCJhY3RldXJzRXRPcmdhbmVzIiwiX3N0ZXAiLCJwYXRoIiwiYmFzZW5hbWUiLCJmaWxlbmFtZSIsImV4ZWNTeW5jIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJkYXRhc2V0UmF3RGlyIiwiam9pbiIsImRhdGFzZXRDbGVhbkRpciIsInB1bGwiLCJhbmFseXplQW5kUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIndhbGtEaXIiLCJfc3RlcDIiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImVuZHNXaXRoIiwiYWN0ZXVyUmF3RmlsZVBhdGgiLCJhcHBseSIsInZlcmJvc2UiLCJjb25zb2xlIiwibG9nIiwiYWN0ZXVyUmF3SnNvbiIsImZzIiwicmVhZEZpbGVTeW5jIiwiYWN0ZXVyIiwiSlNPTiIsInBhcnNlIiwiY2xlYW5BY3RldXIiLCJhY3RldXJKc29uIiwic3RyaW5naWZ5IiwiYWN0ZXVyQ2xlYW4iLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsInRvQWN0ZXVyIiwiYWN0ZXVyQ2xlYW5Kc29uIiwiYWN0ZXVyVG9Kc29uIiwiYWN0ZXVyQ2xlYW5GaWxlUGF0aCIsImVuc3VyZURpclN5bmMiLCJkaXJuYW1lIiwid3JpdGVGaWxlU3luYyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZVJhd0ZpbGVQYXRoIiwib3JnYW5lUmF3SnNvbiIsIm9yZ2FuZSIsImNsZWFuT3JnYW5lIiwib3JnYW5lSnNvbiIsIm9yZ2FuZUNsZWFuIiwidG9PcmdhbmUiLCJvcmdhbmVDbGVhbkpzb24iLCJvcmdhbmVUb0pzb24iLCJvcmdhbmVDbGVhbkZpbGVQYXRoIiwiY29tbWl0IiwiZXJyb3JDb2RlIiwiY29tbWl0QW5kUHVzaCIsInJlbW90ZSIsImNvbW1pdEFuZFB1c2hVaWQiLCJBZ2VuZGFzIiwiX2l0ZXJhdG9yNCIsImFnZW5kYXMiLCJfc3RlcDQiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25SYXdGaWxlUGF0aCIsInJldW5pb25SYXdKc29uIiwicmV1bmlvbiIsImNsZWFuUmV1bmlvbiIsInJldW5pb25Kc29uIiwicmV1bmlvbkNsZWFuIiwiQWdlbmRhc0NvbnZlcnQiLCJ0b1JldW5pb24iLCJyZXVuaW9uQ2xlYW5Kc29uIiwicmV1bmlvblRvSnNvbiIsInJldW5pb25DbGVhbkZpbGVQYXRoIiwiQW1lbmRlbWVudHMiLCJfaXRlcmF0b3I2IiwiYW1lbmRlbWVudHMiLCJfc3RlcDYiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRSYXdGaWxlUGF0aCIsImFtZW5kZW1lbnRSYXdKc29uIiwiYW1lbmRlbWVudCIsImNsZWFuQW1lbmRlbWVudCIsImFtZW5kZW1lbnRKc29uIiwiYW1lbmRlbWVudENsZWFuIiwiQW1lbmRlbWVudHNDb252ZXJ0IiwidG9BbWVuZGVtZW50IiwiYW1lbmRlbWVudENsZWFuSnNvbiIsImFtZW5kZW1lbnRUb0pzb24iLCJhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aCIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJfaXRlcmF0b3I4IiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsIl9zdGVwOCIsIl9pdGVyYXRvcjkiLCJfc3RlcDkiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudFJhd0ZpbGVQYXRoIiwiZG9jdW1lbnRSYXdKc29uIiwiZG9jdW1lbnQiLCJjbGVhbkRvY3VtZW50T3JEaXZpc2lvbiIsImRvY3VtZW50SnNvbiIsImRvY3VtZW50Q2xlYW4iLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsInRvRG9jdW1lbnQiLCJkb2N1bWVudENsZWFuSnNvbiIsImRvY3VtZW50VG9Kc29uIiwiZG9jdW1lbnRDbGVhbkZpbGVQYXRoIiwiX2l0ZXJhdG9yMTAiLCJfc3RlcDEwIiwiZG9zc2llclNwbGl0UGF0aCIsImRvc3NpZXJGaWxlbmFtZSIsImRvc3NpZXJSYXdGaWxlUGF0aCIsImRvc3NpZXJSYXdKc29uIiwiZG9zc2llciIsImNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUiLCJkb3NzaWVySnNvbiIsImRvc3NpZXJDbGVhbiIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJkb3NzaWVyQ2xlYW5Kc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVUb0pzb24iLCJkb3NzaWVyQ2xlYW5GaWxlUGF0aCIsIlNjcnV0aW5zIiwiX2l0ZXJhdG9yMTEiLCJzY3J1dGlucyIsIl9zdGVwMTEiLCJfaXRlcmF0b3IxMiIsIl9zdGVwMTIiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpblJhd0ZpbGVQYXRoIiwic2NydXRpblJhd0pzb24iLCJzY3J1dGluIiwiY2xlYW5TY3J1dGluIiwic2NydXRpbkpzb24iLCJzY3J1dGluQ2xlYW4iLCJTY3J1dGluc0NvbnZlcnQiLCJ0b1NjcnV0aW4iLCJzY3J1dGluQ2xlYW5Kc29uIiwic2NydXRpblRvSnNvbiIsInNjcnV0aW5DbGVhbkZpbGVQYXRoIiwiZXhpc3RpbmdEYXRlVG9Kc29uIiwic2lsZW50IiwiX2l0ZXJhdG9yMTMiLCJyZWFkZGlyU3luYyIsIl9zdGVwMTMiLCJwYXRobmFtZSIsInJlbW92ZVN5bmMiLCJyZXBvc2l0b3J5RGlyIiwic3ViZGlyZWN0b3JpZXMiLCJlcnJvciIsInVpZEJyYW5jaFVwZGF0ZSIsIl9pdGVyYXRvcjE0IiwiX3N0ZXAxNCIsInJ1biIsImNoaWxkUHJvY2VzcyIsIm1haW4iLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvY2xlYW5fcmVvcmdhbml6ZWRfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHtcbiAgY2xlYW5BY3RldXIsXG4gIGNsZWFuQW1lbmRlbWVudCxcbiAgY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24sXG4gIGNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUsXG4gIGNsZWFuT3JnYW5lLFxuICBjbGVhblJldW5pb24sXG4gIGNsZWFuU2NydXRpbixcbn0gZnJvbSBcIi4uL2NsZWFuZXJzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgKiBhcyBnaXQgZnJvbSBcIi4uL2dpdFwiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbn0gZnJvbSBcIi4uL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4uL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi4vdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHtcbiAgQ29udmVydCBhcyBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCxcbiAgRG9jdW1lbnQsXG4gIERvc3NpZXJQYXJsZW1lbnRhaXJlLFxufSBmcm9tIFwiLi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4uL3R5cGVzL3NjcnV0aW5zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGFsaWFzOiBcIkNcIixcbiAgICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgICAgbmFtZTogXCJjbG9uZVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiY1wiLFxuICAgICAgaGVscDogXCJjb21taXQgY2xlYW4gZmlsZXNcIixcbiAgICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiZFwiLFxuICAgICAgaGVscDogXCJzaW5nbGUgZGF0YXNldCB0byByZW9yZ2FuaXplXCIsXG4gICAgICBuYW1lOiBcImRhdGFzZXRcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImtcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJsXCIsXG4gICAgICBoZWxwOiBcImxlZ2lzbGF0dXJlcyBvZiBjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJldHJpZXZlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInBcIixcbiAgICAgIGhlbHA6IFwicHVsbCByZXBvc2l0b3JpZXMgYmVmb3JlIHByb2NlZWRpbmdcIixcbiAgICAgIG5hbWU6IFwicHVsbFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInJcIixcbiAgICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJzXCIsXG4gICAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWxwOiBcImRvIG5vdCByZXNldCAtLWhhcmQgYWZ0ZXIgY29tbWl0IHRvIHNhdmUgSS9PIGlmIHRoZSB3b3JraW5nIHRyZWUgaXMgdG8gYmUgZGlzY2FyZGVkXCIsXG4gICAgICBuYW1lOiBcIm5vLXJlc2V0LWFmdGVyLWNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInZcIixcbiAgICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIGNsZWFuUmVvcmdhbml6ZWREYXRhKG9wdGlvbnM6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IGRhdGFEaXI6IHN0cmluZyA9IG9wdGlvbnMuZGF0YURpclxuXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG5cbiAgbGV0IGV4aXRDb2RlID0gMFxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgbGV0IGNob29zZW5EYXRhc2V0cyA9IGRhdGFzZXRzXG4gIC8vIFdoZW4gYSBnaXZlbiBsZWdpc2xhdHVyZSBpcyAwLCBpdCBpcyB0aGUgc2FtZSBhcyBnaXZpbmcgbm8gbGVnaXNsYXR1cmU6XG4gIC8vIEl0IG1lYW5zIFwiZXZlcnkgbGVnaXNsYXR1cmVzXCIuXG4gIGNvbnN0IGxlZ2lzbGF0dXJlcyA9IG9wdGlvbnMubGVnaXNsYXR1cmU/LnNvbWUoXG4gICAgKGxlZ2lzbGF0dXJlOiBudW1iZXIpID0+IGxlZ2lzbGF0dXJlID09PSAwLFxuICApXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IG9wdGlvbnMubGVnaXNsYXR1cmVcbiAgaWYgKGxlZ2lzbGF0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZW5hYmxlZExlZ2lzbGF0dXJlcyA9IGxlZ2lzbGF0dXJlcy5tYXAoKGxlZ2lzbGF0dXJlOiBudW1iZXIpID0+XG4gICAgICBsZWdpc2xhdHVyZS50b1N0cmluZygpLFxuICAgIClcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2hvb3NlbkRhdGFzZXRzKSkge1xuICAgICAgY2hvb3NlbkRhdGFzZXRzW2tleSBhcyBrZXlvZiB0eXBlb2YgY2hvb3NlbkRhdGFzZXRzXSA9IHZhbHVlLmZpbHRlcihcbiAgICAgICAgKGRhdGFzZXQ6IHsgbGVnaXNsYXR1cmU6IGFueSB9KSA9PlxuICAgICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCB8fFxuICAgICAgICAgIGVuYWJsZWRMZWdpc2xhdHVyZXMuaW5jbHVkZXMoZGF0YXNldC5sZWdpc2xhdHVyZSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgaWYgKG9wdGlvbnMucHVsbCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1bGwgLS1yZWJhc2VgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJSYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5hY3RldXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2FjdGV1clJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1clJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhY3RldXIgPSBKU09OLnBhcnNlKGFjdGV1clJhd0pzb24pXG4gICAgICAgIGNsZWFuQWN0ZXVyKGFjdGV1cilcbiAgICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBhY3RldXJDbGVhbjogQWN0ZXVyID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXIoYWN0ZXVySnNvbilcbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LmFjdGV1clRvSnNvbihhY3RldXJDbGVhbilcblxuICAgICAgICBjb25zdCBhY3RldXJDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShhY3RldXJDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhhY3RldXJDbGVhbkZpbGVQYXRoLCBhY3RldXJDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4ub3JnYW5lU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtvcmdhbmVSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZVJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhvcmdhbmVSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgb3JnYW5lID0gSlNPTi5wYXJzZShvcmdhbmVSYXdKc29uKVxuICAgICAgICBjbGVhbk9yZ2FuZShvcmdhbmUpXG4gICAgICAgIGNvbnN0IG9yZ2FuZUpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3Qgb3JnYW5lQ2xlYW46IE9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5vcmdhbmVUb0pzb24ob3JnYW5lQ2xlYW4pXG5cbiAgICAgICAgY29uc3Qgb3JnYW5lQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUob3JnYW5lQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMob3JnYW5lQ2xlYW5GaWxlUGF0aCwgb3JnYW5lQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDAgJiYgZXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImFjdGV1cnNcIiwgXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBleGl0Q29kZSA9IDFcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtyZXVuaW9uUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEpTT04ucGFyc2UocmV1bmlvblJhd0pzb24pXG4gICAgICAgIGNsZWFuUmV1bmlvbihyZXVuaW9uKVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuOiBSZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFnZW5kYXNDb252ZXJ0LnJldW5pb25Ub0pzb24ocmV1bmlvbkNsZWFuKVxuXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUocmV1bmlvbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHJldW5pb25DbGVhbkZpbGVQYXRoLCByZXVuaW9uQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDAgJiYgZXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pKSB7XG4gICAgICAgIGV4aXRDb2RlID0gMVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7YW1lbmRlbWVudFJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudFJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICBhbWVuZGVtZW50UmF3RmlsZVBhdGgsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEpTT04ucGFyc2UoYW1lbmRlbWVudFJhd0pzb24pXG4gICAgICAgIGNsZWFuQW1lbmRlbWVudChhbWVuZGVtZW50KVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuOiBBbWVuZGVtZW50ID1cbiAgICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC5hbWVuZGVtZW50VG9Kc29uKGFtZW5kZW1lbnRDbGVhbilcblxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aCwgYW1lbmRlbWVudENsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwICYmIGV4aXRDb2RlID09PSAwKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSkge1xuICAgICAgICBleGl0Q29kZSA9IDFcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudFJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRSYXdEaXIsXG4gICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7ZG9jdW1lbnRSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50UmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvY3VtZW50UmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gSlNPTi5wYXJzZShkb2N1bWVudFJhd0pzb24pXG4gICAgICAgIGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uKGRvY3VtZW50KVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRvY3VtZW50LCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuOiBEb2N1bWVudCA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudEpzb24pXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LmRvY3VtZW50VG9Kc29uKGRvY3VtZW50Q2xlYW4pXG5cbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGRvY3VtZW50Q2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZG9jdW1lbnRDbGVhbkZpbGVQYXRoLCBkb2N1bWVudENsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiZG9zc2llcnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlbmFtZSA9IGRvc3NpZXJTcGxpdFBhdGhbZG9zc2llclNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvc3NpZXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uZG9zc2llclNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7ZG9zc2llclJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llclJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb3NzaWVyUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvc3NpZXIgPSBKU09OLnBhcnNlKGRvc3NpZXJSYXdKc29uKVxuICAgICAgICBjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXIpXG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkb3NzaWVyLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBkb3NzaWVyQ2xlYW46IERvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCBkb3NzaWVyQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LmRvc3NpZXJQYXJsZW1lbnRhaXJlVG9Kc29uKGRvc3NpZXJDbGVhbilcblxuICAgICAgICBjb25zdCBkb3NzaWVyQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5kb3NzaWVyU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGRvc3NpZXJDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhkb3NzaWVyQ2xlYW5GaWxlUGF0aCwgZG9zc2llckNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwICYmIGV4aXRDb2RlID09PSAwKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiZG9jdW1lbnRzXCIsIFwiZG9zc2llcnNcIl0pXG4gICAgICApIHtcbiAgICAgICAgZXhpdENvZGUgPSAxXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtzY3J1dGluUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IEpTT04ucGFyc2Uoc2NydXRpblJhd0pzb24pXG4gICAgICAgIGNsZWFuU2NydXRpbihzY3J1dGluKVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuOiBTY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBTY3J1dGluc0NvbnZlcnQuc2NydXRpblRvSnNvbihzY3J1dGluQ2xlYW4pXG5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShzY3J1dGluQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoc2NydXRpbkNsZWFuRmlsZVBhdGgsIHNjcnV0aW5DbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCAmJiBleGl0Q29kZSA9PT0gMCkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXhpdENvZGUgPSAxXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBleGl0Q29kZVxufVxuXG5mdW5jdGlvbiBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IGFueSB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIGNvbnNvbGUubG9nKGBDbGVhbmluZyBkaXJlY3Rvcnk6ICR7ZGF0YXNldENsZWFuRGlyfeKApmApXG4gIH1cbiAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpXG4gIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldENsZWFuRGlyKSkge1xuICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHBhdGhuYW1lID0gcGF0aC5qb2luKGRhdGFzZXRDbGVhbkRpciwgZmlsZW5hbWUpXG4gICAgZnMucmVtb3ZlU3luYyhwYXRobmFtZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRBbmRQdXNoVWlkKFxuICByZXBvc2l0b3J5RGlyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IGFueSxcbiAgc3ViZGlyZWN0b3JpZXM6IGFueSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICBnaXQudWlkQnJhbmNoVXBkYXRlKFxuICAgICAgcmVwb3NpdG9yeURpcixcbiAgICAgIHN1YmRpcmVjdG9yaWVzLFxuICAgICAgb3B0aW9uc1tcIm5vLXJlc2V0LWFmdGVyLWNvbW1pdFwiXSxcbiAgICApXG4gICAgZm9yIChjb25zdCByZW1vdGUgb2Ygb3B0aW9ucy5yZW1vdGUgfHwgW10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGdpdC5ydW4ocmVwb3NpdG9yeURpciwgYHB1c2ggLS1xdWlldCAke3JlbW90ZX0gdWlkOnVpZGApXG4gICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvclxufVxuXG5mdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgcmV0dXJuIGNsZWFuUmVvcmdhbml6ZWREYXRhKG9wdGlvbnMpXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcImNsZWFuX3Jlb3JnYW5pemVkX2RhdGEudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxnQkFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUssU0FBQSxHQUFBTCxPQUFBO0FBU0EsSUFBQU0sU0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sTUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsYUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsR0FBQSxHQUFBQyx1QkFBQSxDQUFBVixPQUFBO0FBQ0EsSUFBQVcsbUJBQUEsR0FBQVgsT0FBQTtBQUtBLElBQUFZLFFBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLFlBQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFjLHFCQUFBLEdBQUFkLE9BQUE7QUFLQSxJQUFBZSxhQUFBLEdBQUFmLE9BQUE7QUFDQSxJQUFBZ0IsU0FBQSxHQUFBaEIsT0FBQTtBQUF1RSxTQUFBaUIseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxXQUFBLFdBQUFBLFdBQUEsR0FBQUcsZ0JBQUEsR0FBQUQsaUJBQUEsS0FBQUYsV0FBQTtBQUFBLFNBQUFSLHdCQUFBWSxHQUFBLEVBQUFKLFdBQUEsU0FBQUEsV0FBQSxJQUFBSSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxXQUFBRCxHQUFBLFFBQUFBLEdBQUEsYUFBQUUsT0FBQSxDQUFBRixH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