@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
package/lib/loaders.js CHANGED
@@ -1,17 +1,25 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
3
4
  require("core-js/modules/es.array.slice.js");
4
- require("core-js/modules/es.object.to-string.js");
5
5
  require("core-js/modules/es.function.name.js");
6
6
  require("core-js/modules/es.array.from.js");
7
- require("core-js/modules/es.string.iterator.js");
8
7
  require("core-js/modules/es.symbol.js");
9
8
  require("core-js/modules/es.symbol.description.js");
10
9
  require("core-js/modules/es.symbol.iterator.js");
11
- require("core-js/modules/es.array.iterator.js");
12
- require("core-js/modules/web.dom-collections.iterator.js");
13
10
  require("core-js/modules/es.array.is-array.js");
14
11
  require("core-js/modules/es.object.define-property.js");
12
+ require("core-js/modules/es.symbol.async-iterator.js");
13
+ require("core-js/modules/es.symbol.to-string-tag.js");
14
+ require("core-js/modules/es.json.to-string-tag.js");
15
+ require("core-js/modules/es.math.to-string-tag.js");
16
+ require("core-js/modules/es.object.create.js");
17
+ require("core-js/modules/es.object.get-prototype-of.js");
18
+ require("core-js/modules/es.array.for-each.js");
19
+ require("core-js/modules/web.dom-collections.for-each.js");
20
+ require("core-js/modules/es.object.set-prototype-of.js");
21
+ require("core-js/modules/es.promise.js");
22
+ require("core-js/modules/es.array.reverse.js");
15
23
  Object.defineProperty(exports, "__esModule", {
16
24
  value: true
17
25
  });
@@ -21,8 +29,17 @@ Object.defineProperty(exports, "EnabledDatasets", {
21
29
  return _datasets.EnabledDatasets;
22
30
  }
23
31
  });
32
+ exports.iterLoadAssembleeActeurs = iterLoadAssembleeActeurs;
33
+ exports.iterLoadAssembleeAmendements = iterLoadAssembleeAmendements;
34
+ exports.iterLoadAssembleeDocuments = iterLoadAssembleeDocuments;
35
+ exports.iterLoadAssembleeDossiersParlementaires = iterLoadAssembleeDossiersParlementaires;
36
+ exports.iterLoadAssembleeOrganes = iterLoadAssembleeOrganes;
37
+ exports.iterLoadAssembleeReunions = iterLoadAssembleeReunions;
38
+ exports.iterLoadAssembleeScrutins = iterLoadAssembleeScrutins;
24
39
  exports.loadAssembleeData = loadAssembleeData;
25
40
  exports.loadAssembleeDataFromBigFiles = loadAssembleeDataFromBigFiles;
41
+ exports.loadAssembleePhotosDeputes = loadAssembleePhotosDeputes;
42
+ exports.loadAssembleePhotosSenateurs = loadAssembleePhotosSenateurs;
26
43
  exports.pathFromDocumentUid = pathFromDocumentUid;
27
44
  exports.pathFromDossierParlementaireUid = pathFromDossierParlementaireUid;
28
45
  exports.pathFromReunionUid = pathFromReunionUid;
@@ -33,6 +50,11 @@ Object.defineProperty(exports, "walkDir", {
33
50
  return _file_systems.walkDir;
34
51
  }
35
52
  });
53
+ require("core-js/modules/es.array.iterator.js");
54
+ require("core-js/modules/es.object.to-string.js");
55
+ require("core-js/modules/es.set.js");
56
+ require("core-js/modules/es.string.iterator.js");
57
+ require("core-js/modules/web.dom-collections.iterator.js");
36
58
  require("core-js/modules/es.array.join.js");
37
59
  require("core-js/modules/es.regexp.exec.js");
38
60
  require("core-js/modules/es.string.replace.js");
@@ -52,6 +74,7 @@ var _dossiers_legislatifs = require("./types/dossiers_legislatifs");
52
74
  var _legislatures = require("./types/legislatures");
53
75
  var _scrutins = require("./types/scrutins");
54
76
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
77
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
55
78
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
56
79
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
57
80
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
@@ -63,20 +86,742 @@ var documentUidRegex = /^(ACIN|ALCN|AVCE|AVIS|DECL|ETDI|LETT|MESS|PION|PNRE|PRJL
63
86
  var dossierUidRegex = /^DL(R\d+)(L\d+)N(\d+)$/;
64
87
  var reunionUidRegex = /^RU(AN|CG|SN)(R\d+)(L\d+)([AS]\d{4})(IDC|IDFL?|IDS)(\d+)$/;
65
88
  var scrutinUidRegex = /^VTAN(R\d+)(L\d+)V(\d+)$/;
66
-
67
- /** Load data from split files. */
68
- function loadAssembleeData(dataDir, enabledDatasets, legislature) {
69
- var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
89
+ function iterLoadAssembleeActeurs(dataDir, legislature) {
90
+ var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
70
91
  _ref$log = _ref.log,
71
92
  log = _ref$log === void 0 ? false : _ref$log;
93
+ return /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
94
+ var acteursUid, _iterator, _step, dataset, datasetDir, _iterator2, _step2, acteurSplitPath, acteurFilename, acteurFilePath, acteurJson, acteur;
95
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
96
+ while (1) switch (_context.prev = _context.next) {
97
+ case 0:
98
+ acteursUid = new Set();
99
+ _iterator = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes);
100
+ _context.prev = 2;
101
+ _iterator.s();
102
+ case 4:
103
+ if ((_step = _iterator.n()).done) {
104
+ _context.next = 40;
105
+ break;
106
+ }
107
+ dataset = _step.value;
108
+ if (!dataset.ignoreForWeb) {
109
+ _context.next = 8;
110
+ break;
111
+ }
112
+ return _context.abrupt("continue", 38);
113
+ case 8:
114
+ if (!(legislature !== _legislatures.Legislature.All && dataset.legislature !== _legislatures.Legislature.All && legislature !== dataset.legislature)) {
115
+ _context.next = 10;
116
+ break;
117
+ }
118
+ return _context.abrupt("continue", 38);
119
+ case 10:
120
+ datasetDir = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
121
+ _iterator2 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir, ["acteurs"]));
122
+ _context.prev = 12;
123
+ _iterator2.s();
124
+ case 14:
125
+ if ((_step2 = _iterator2.n()).done) {
126
+ _context.next = 30;
127
+ break;
128
+ }
129
+ acteurSplitPath = _step2.value;
130
+ acteurFilename = acteurSplitPath[acteurSplitPath.length - 1];
131
+ if (acteurFilename.endsWith(".json")) {
132
+ _context.next = 19;
133
+ break;
134
+ }
135
+ return _context.abrupt("continue", 28);
136
+ case 19:
137
+ acteurFilePath = _path["default"].join.apply(_path["default"], [datasetDir].concat(_toConsumableArray(acteurSplitPath)));
138
+ if (log) {
139
+ console.log("Loading file: ".concat(acteurFilePath, "\u2026"));
140
+ }
141
+ acteurJson = _fsExtra["default"].readFileSync(acteurFilePath, {
142
+ encoding: "utf8"
143
+ });
144
+ acteur = _acteurs_et_organes.Convert.toActeur(acteurJson); // Keep the first existing "acteur", because the first wrapper is the most complete.
145
+ if (!acteursUid.has(acteur.uid)) {
146
+ _context.next = 25;
147
+ break;
148
+ }
149
+ return _context.abrupt("continue", 28);
150
+ case 25:
151
+ acteursUid.add(acteur.uid);
152
+ _context.next = 28;
153
+ return {
154
+ acteur: acteur,
155
+ datasetLegislature: dataset.legislature
156
+ };
157
+ case 28:
158
+ _context.next = 14;
159
+ break;
160
+ case 30:
161
+ _context.next = 35;
162
+ break;
163
+ case 32:
164
+ _context.prev = 32;
165
+ _context.t0 = _context["catch"](12);
166
+ _iterator2.e(_context.t0);
167
+ case 35:
168
+ _context.prev = 35;
169
+ _iterator2.f();
170
+ return _context.finish(35);
171
+ case 38:
172
+ _context.next = 4;
173
+ break;
174
+ case 40:
175
+ _context.next = 45;
176
+ break;
177
+ case 42:
178
+ _context.prev = 42;
179
+ _context.t1 = _context["catch"](2);
180
+ _iterator.e(_context.t1);
181
+ case 45:
182
+ _context.prev = 45;
183
+ _iterator.f();
184
+ return _context.finish(45);
185
+ case 48:
186
+ case "end":
187
+ return _context.stop();
188
+ }
189
+ }, _callee, null, [[2, 42, 45, 48], [12, 32, 35, 38]]);
190
+ })();
191
+ }
192
+ function iterLoadAssembleeAmendements(dataDir, legislature) {
193
+ var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
194
+ _ref2$log = _ref2.log,
195
+ log = _ref2$log === void 0 ? false : _ref2$log;
196
+ return /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
197
+ var amendementsUid, _iterator3, _step3, dataset, datasetDir, _iterator4, _step4, amendementSplitPath, amendementFilename, amendementFilePath, amendementJson, amendement;
198
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
199
+ while (1) switch (_context2.prev = _context2.next) {
200
+ case 0:
201
+ amendementsUid = new Set();
202
+ _iterator3 = _createForOfIteratorHelper(_datasets.datasets.amendements);
203
+ _context2.prev = 2;
204
+ _iterator3.s();
205
+ case 4:
206
+ if ((_step3 = _iterator3.n()).done) {
207
+ _context2.next = 40;
208
+ break;
209
+ }
210
+ dataset = _step3.value;
211
+ if (!dataset.ignoreForWeb) {
212
+ _context2.next = 8;
213
+ break;
214
+ }
215
+ return _context2.abrupt("continue", 38);
216
+ case 8:
217
+ if (!(legislature !== _legislatures.Legislature.All && dataset.legislature !== _legislatures.Legislature.All && legislature !== dataset.legislature)) {
218
+ _context2.next = 10;
219
+ break;
220
+ }
221
+ return _context2.abrupt("continue", 38);
222
+ case 10:
223
+ datasetDir = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
224
+ _iterator4 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir));
225
+ _context2.prev = 12;
226
+ _iterator4.s();
227
+ case 14:
228
+ if ((_step4 = _iterator4.n()).done) {
229
+ _context2.next = 30;
230
+ break;
231
+ }
232
+ amendementSplitPath = _step4.value;
233
+ amendementFilename = amendementSplitPath[amendementSplitPath.length - 1];
234
+ if (amendementFilename.endsWith(".json")) {
235
+ _context2.next = 19;
236
+ break;
237
+ }
238
+ return _context2.abrupt("continue", 28);
239
+ case 19:
240
+ amendementFilePath = _path["default"].join.apply(_path["default"], [datasetDir].concat(_toConsumableArray(amendementSplitPath)));
241
+ if (log) {
242
+ console.log("Loading file: ".concat(amendementFilePath, "\u2026"));
243
+ }
244
+ amendementJson = _fsExtra["default"].readFileSync(amendementFilePath, {
245
+ encoding: "utf8"
246
+ });
247
+ amendement = _amendements.Convert.toAmendement(amendementJson);
248
+ if (!amendementsUid.has(amendement.uid)) {
249
+ _context2.next = 25;
250
+ break;
251
+ }
252
+ return _context2.abrupt("continue", 28);
253
+ case 25:
254
+ amendementsUid.add(amendement.uid);
255
+ _context2.next = 28;
256
+ return {
257
+ amendement: amendement,
258
+ datasetLegislature: dataset.legislature
259
+ };
260
+ case 28:
261
+ _context2.next = 14;
262
+ break;
263
+ case 30:
264
+ _context2.next = 35;
265
+ break;
266
+ case 32:
267
+ _context2.prev = 32;
268
+ _context2.t0 = _context2["catch"](12);
269
+ _iterator4.e(_context2.t0);
270
+ case 35:
271
+ _context2.prev = 35;
272
+ _iterator4.f();
273
+ return _context2.finish(35);
274
+ case 38:
275
+ _context2.next = 4;
276
+ break;
277
+ case 40:
278
+ _context2.next = 45;
279
+ break;
280
+ case 42:
281
+ _context2.prev = 42;
282
+ _context2.t1 = _context2["catch"](2);
283
+ _iterator3.e(_context2.t1);
284
+ case 45:
285
+ _context2.prev = 45;
286
+ _iterator3.f();
287
+ return _context2.finish(45);
288
+ case 48:
289
+ case "end":
290
+ return _context2.stop();
291
+ }
292
+ }, _callee2, null, [[2, 42, 45, 48], [12, 32, 35, 38]]);
293
+ })();
294
+ }
295
+ function iterLoadAssembleeDocuments(dataDir, legislature) {
296
+ var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
297
+ _ref3$log = _ref3.log,
298
+ log = _ref3$log === void 0 ? false : _ref3$log;
299
+ return /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
300
+ var documentsUid, _iterator5, _step5, dataset, datasetDir, _iterator6, _step6, documentSplitPath, documentFilename, documentFilePath, documentJson, document;
301
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
302
+ while (1) switch (_context3.prev = _context3.next) {
303
+ case 0:
304
+ documentsUid = new Set();
305
+ _iterator5 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs);
306
+ _context3.prev = 2;
307
+ _iterator5.s();
308
+ case 4:
309
+ if ((_step5 = _iterator5.n()).done) {
310
+ _context3.next = 40;
311
+ break;
312
+ }
313
+ dataset = _step5.value;
314
+ if (!dataset.ignoreForWeb) {
315
+ _context3.next = 8;
316
+ break;
317
+ }
318
+ return _context3.abrupt("continue", 38);
319
+ case 8:
320
+ if (!(legislature !== _legislatures.Legislature.All && dataset.legislature !== _legislatures.Legislature.All && legislature !== dataset.legislature)) {
321
+ _context3.next = 10;
322
+ break;
323
+ }
324
+ return _context3.abrupt("continue", 38);
325
+ case 10:
326
+ datasetDir = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
327
+ _iterator6 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir, ["documents"]));
328
+ _context3.prev = 12;
329
+ _iterator6.s();
330
+ case 14:
331
+ if ((_step6 = _iterator6.n()).done) {
332
+ _context3.next = 30;
333
+ break;
334
+ }
335
+ documentSplitPath = _step6.value;
336
+ documentFilename = documentSplitPath[documentSplitPath.length - 1];
337
+ if (documentFilename.endsWith(".json")) {
338
+ _context3.next = 19;
339
+ break;
340
+ }
341
+ return _context3.abrupt("continue", 28);
342
+ case 19:
343
+ documentFilePath = _path["default"].join.apply(_path["default"], [datasetDir].concat(_toConsumableArray(documentSplitPath)));
344
+ if (log) {
345
+ console.log("Loading file: ".concat(documentFilePath, "\u2026"));
346
+ }
347
+ documentJson = _fsExtra["default"].readFileSync(documentFilePath, {
348
+ encoding: "utf8"
349
+ });
350
+ document = _dossiers_legislatifs.Convert.toDocument(documentJson);
351
+ if (!documentsUid.has(document.uid)) {
352
+ _context3.next = 25;
353
+ break;
354
+ }
355
+ return _context3.abrupt("continue", 28);
356
+ case 25:
357
+ documentsUid.add(document.uid);
358
+ _context3.next = 28;
359
+ return {
360
+ document: document,
361
+ datasetLegislature: dataset.legislature
362
+ };
363
+ case 28:
364
+ _context3.next = 14;
365
+ break;
366
+ case 30:
367
+ _context3.next = 35;
368
+ break;
369
+ case 32:
370
+ _context3.prev = 32;
371
+ _context3.t0 = _context3["catch"](12);
372
+ _iterator6.e(_context3.t0);
373
+ case 35:
374
+ _context3.prev = 35;
375
+ _iterator6.f();
376
+ return _context3.finish(35);
377
+ case 38:
378
+ _context3.next = 4;
379
+ break;
380
+ case 40:
381
+ _context3.next = 45;
382
+ break;
383
+ case 42:
384
+ _context3.prev = 42;
385
+ _context3.t1 = _context3["catch"](2);
386
+ _iterator5.e(_context3.t1);
387
+ case 45:
388
+ _context3.prev = 45;
389
+ _iterator5.f();
390
+ return _context3.finish(45);
391
+ case 48:
392
+ case "end":
393
+ return _context3.stop();
394
+ }
395
+ }, _callee3, null, [[2, 42, 45, 48], [12, 32, 35, 38]]);
396
+ })();
397
+ }
398
+ function iterLoadAssembleeDossiersParlementaires(dataDir, legislature) {
399
+ var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
400
+ _ref4$log = _ref4.log,
401
+ log = _ref4$log === void 0 ? false : _ref4$log;
402
+ return /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
403
+ var dossiersParlementairesUid, _iterator7, _step7, dataset, datasetDir, _iterator8, _step8, dossierParlementaireSplitPath, dossierParlementaireFilename, dossierParlementaireFilePath, dossierParlementaireJson, dossierParlementaire;
404
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
405
+ while (1) switch (_context4.prev = _context4.next) {
406
+ case 0:
407
+ dossiersParlementairesUid = new Set();
408
+ _iterator7 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs);
409
+ _context4.prev = 2;
410
+ _iterator7.s();
411
+ case 4:
412
+ if ((_step7 = _iterator7.n()).done) {
413
+ _context4.next = 40;
414
+ break;
415
+ }
416
+ dataset = _step7.value;
417
+ if (!dataset.ignoreForWeb) {
418
+ _context4.next = 8;
419
+ break;
420
+ }
421
+ return _context4.abrupt("continue", 38);
422
+ case 8:
423
+ if (!(legislature !== _legislatures.Legislature.All && dataset.legislature !== _legislatures.Legislature.All && legislature !== dataset.legislature)) {
424
+ _context4.next = 10;
425
+ break;
426
+ }
427
+ return _context4.abrupt("continue", 38);
428
+ case 10:
429
+ datasetDir = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
430
+ _iterator8 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir, ["dossiers"]));
431
+ _context4.prev = 12;
432
+ _iterator8.s();
433
+ case 14:
434
+ if ((_step8 = _iterator8.n()).done) {
435
+ _context4.next = 30;
436
+ break;
437
+ }
438
+ dossierParlementaireSplitPath = _step8.value;
439
+ dossierParlementaireFilename = dossierParlementaireSplitPath[dossierParlementaireSplitPath.length - 1];
440
+ if (dossierParlementaireFilename.endsWith(".json")) {
441
+ _context4.next = 19;
442
+ break;
443
+ }
444
+ return _context4.abrupt("continue", 28);
445
+ case 19:
446
+ dossierParlementaireFilePath = _path["default"].join.apply(_path["default"], [datasetDir].concat(_toConsumableArray(dossierParlementaireSplitPath)));
447
+ if (log) {
448
+ console.log("Loading file: ".concat(dossierParlementaireFilePath, "\u2026"));
449
+ }
450
+ dossierParlementaireJson = _fsExtra["default"].readFileSync(dossierParlementaireFilePath, {
451
+ encoding: "utf8"
452
+ });
453
+ dossierParlementaire = _dossiers_legislatifs.Convert.toDossierParlementaire(dossierParlementaireJson);
454
+ if (!dossiersParlementairesUid.has(dossierParlementaire.uid)) {
455
+ _context4.next = 25;
456
+ break;
457
+ }
458
+ return _context4.abrupt("continue", 28);
459
+ case 25:
460
+ dossiersParlementairesUid.add(dossierParlementaire.uid);
461
+ _context4.next = 28;
462
+ return {
463
+ dossierParlementaire: dossierParlementaire,
464
+ datasetLegislature: dataset.legislature
465
+ };
466
+ case 28:
467
+ _context4.next = 14;
468
+ break;
469
+ case 30:
470
+ _context4.next = 35;
471
+ break;
472
+ case 32:
473
+ _context4.prev = 32;
474
+ _context4.t0 = _context4["catch"](12);
475
+ _iterator8.e(_context4.t0);
476
+ case 35:
477
+ _context4.prev = 35;
478
+ _iterator8.f();
479
+ return _context4.finish(35);
480
+ case 38:
481
+ _context4.next = 4;
482
+ break;
483
+ case 40:
484
+ _context4.next = 45;
485
+ break;
486
+ case 42:
487
+ _context4.prev = 42;
488
+ _context4.t1 = _context4["catch"](2);
489
+ _iterator7.e(_context4.t1);
490
+ case 45:
491
+ _context4.prev = 45;
492
+ _iterator7.f();
493
+ return _context4.finish(45);
494
+ case 48:
495
+ case "end":
496
+ return _context4.stop();
497
+ }
498
+ }, _callee4, null, [[2, 42, 45, 48], [12, 32, 35, 38]]);
499
+ })();
500
+ }
501
+ function iterLoadAssembleeOrganes(dataDir, legislature) {
502
+ var _ref5 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
503
+ _ref5$log = _ref5.log,
504
+ log = _ref5$log === void 0 ? false : _ref5$log;
505
+ return /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
506
+ var organesUid, _iterator9, _step9, dataset, datasetDir, _iterator10, _step10, organeSplitPath, organeFilename, organeFilePath, organeJson, organe;
507
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
508
+ while (1) switch (_context5.prev = _context5.next) {
509
+ case 0:
510
+ organesUid = new Set();
511
+ _iterator9 = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes);
512
+ _context5.prev = 2;
513
+ _iterator9.s();
514
+ case 4:
515
+ if ((_step9 = _iterator9.n()).done) {
516
+ _context5.next = 40;
517
+ break;
518
+ }
519
+ dataset = _step9.value;
520
+ if (!dataset.ignoreForWeb) {
521
+ _context5.next = 8;
522
+ break;
523
+ }
524
+ return _context5.abrupt("continue", 38);
525
+ case 8:
526
+ if (!(legislature !== _legislatures.Legislature.All && dataset.legislature !== _legislatures.Legislature.All && legislature !== dataset.legislature)) {
527
+ _context5.next = 10;
528
+ break;
529
+ }
530
+ return _context5.abrupt("continue", 38);
531
+ case 10:
532
+ datasetDir = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
533
+ _iterator10 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir, ["organes"]));
534
+ _context5.prev = 12;
535
+ _iterator10.s();
536
+ case 14:
537
+ if ((_step10 = _iterator10.n()).done) {
538
+ _context5.next = 30;
539
+ break;
540
+ }
541
+ organeSplitPath = _step10.value;
542
+ organeFilename = organeSplitPath[organeSplitPath.length - 1];
543
+ if (organeFilename.endsWith(".json")) {
544
+ _context5.next = 19;
545
+ break;
546
+ }
547
+ return _context5.abrupt("continue", 28);
548
+ case 19:
549
+ organeFilePath = _path["default"].join.apply(_path["default"], [datasetDir].concat(_toConsumableArray(organeSplitPath)));
550
+ if (log) {
551
+ console.log("Loading file: ".concat(organeFilePath, "\u2026"));
552
+ }
553
+ organeJson = _fsExtra["default"].readFileSync(organeFilePath, {
554
+ encoding: "utf8"
555
+ });
556
+ organe = _acteurs_et_organes.Convert.toOrgane(organeJson); // Keep the first existing "organe", because the first wrapper is the most complete.
557
+ if (!organesUid.has(organe.uid)) {
558
+ _context5.next = 25;
559
+ break;
560
+ }
561
+ return _context5.abrupt("continue", 28);
562
+ case 25:
563
+ organesUid.add(organe.uid);
564
+ _context5.next = 28;
565
+ return {
566
+ organe: organe,
567
+ datasetLegislature: dataset.legislature
568
+ };
569
+ case 28:
570
+ _context5.next = 14;
571
+ break;
572
+ case 30:
573
+ _context5.next = 35;
574
+ break;
575
+ case 32:
576
+ _context5.prev = 32;
577
+ _context5.t0 = _context5["catch"](12);
578
+ _iterator10.e(_context5.t0);
579
+ case 35:
580
+ _context5.prev = 35;
581
+ _iterator10.f();
582
+ return _context5.finish(35);
583
+ case 38:
584
+ _context5.next = 4;
585
+ break;
586
+ case 40:
587
+ _context5.next = 45;
588
+ break;
589
+ case 42:
590
+ _context5.prev = 42;
591
+ _context5.t1 = _context5["catch"](2);
592
+ _iterator9.e(_context5.t1);
593
+ case 45:
594
+ _context5.prev = 45;
595
+ _iterator9.f();
596
+ return _context5.finish(45);
597
+ case 48:
598
+ case "end":
599
+ return _context5.stop();
600
+ }
601
+ }, _callee5, null, [[2, 42, 45, 48], [12, 32, 35, 38]]);
602
+ })();
603
+ }
604
+ function iterLoadAssembleeReunions(dataDir, legislature) {
605
+ var _ref6 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
606
+ _ref6$log = _ref6.log,
607
+ log = _ref6$log === void 0 ? false : _ref6$log;
608
+ return /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
609
+ var reunionsUid, _iterator11, _step11, dataset, datasetDir, _iterator12, _step12, reunionSplitPath, reunionFilename, reunionFilePath, reunionJson, reunion;
610
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
611
+ while (1) switch (_context6.prev = _context6.next) {
612
+ case 0:
613
+ reunionsUid = new Set();
614
+ _iterator11 = _createForOfIteratorHelper(_datasets.datasets.agendas);
615
+ _context6.prev = 2;
616
+ _iterator11.s();
617
+ case 4:
618
+ if ((_step11 = _iterator11.n()).done) {
619
+ _context6.next = 40;
620
+ break;
621
+ }
622
+ dataset = _step11.value;
623
+ if (!dataset.ignoreForWeb) {
624
+ _context6.next = 8;
625
+ break;
626
+ }
627
+ return _context6.abrupt("continue", 38);
628
+ case 8:
629
+ if (!(legislature !== _legislatures.Legislature.All && dataset.legislature !== _legislatures.Legislature.All && legislature !== dataset.legislature)) {
630
+ _context6.next = 10;
631
+ break;
632
+ }
633
+ return _context6.abrupt("continue", 38);
634
+ case 10:
635
+ datasetDir = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
636
+ _iterator12 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir));
637
+ _context6.prev = 12;
638
+ _iterator12.s();
639
+ case 14:
640
+ if ((_step12 = _iterator12.n()).done) {
641
+ _context6.next = 30;
642
+ break;
643
+ }
644
+ reunionSplitPath = _step12.value;
645
+ reunionFilename = reunionSplitPath[reunionSplitPath.length - 1];
646
+ if (reunionFilename.endsWith(".json")) {
647
+ _context6.next = 19;
648
+ break;
649
+ }
650
+ return _context6.abrupt("continue", 28);
651
+ case 19:
652
+ reunionFilePath = _path["default"].join.apply(_path["default"], [datasetDir].concat(_toConsumableArray(reunionSplitPath)));
653
+ if (log) {
654
+ console.log("Loading file: ".concat(reunionFilePath, "\u2026"));
655
+ }
656
+ reunionJson = _fsExtra["default"].readFileSync(reunionFilePath, {
657
+ encoding: "utf8"
658
+ });
659
+ reunion = _agendas.Convert.toReunion(reunionJson);
660
+ if (!reunionsUid.has(reunion.uid)) {
661
+ _context6.next = 25;
662
+ break;
663
+ }
664
+ return _context6.abrupt("continue", 28);
665
+ case 25:
666
+ reunionsUid.add(reunion.uid);
667
+ _context6.next = 28;
668
+ return {
669
+ reunion: reunion,
670
+ datasetLegislature: dataset.legislature
671
+ };
672
+ case 28:
673
+ _context6.next = 14;
674
+ break;
675
+ case 30:
676
+ _context6.next = 35;
677
+ break;
678
+ case 32:
679
+ _context6.prev = 32;
680
+ _context6.t0 = _context6["catch"](12);
681
+ _iterator12.e(_context6.t0);
682
+ case 35:
683
+ _context6.prev = 35;
684
+ _iterator12.f();
685
+ return _context6.finish(35);
686
+ case 38:
687
+ _context6.next = 4;
688
+ break;
689
+ case 40:
690
+ _context6.next = 45;
691
+ break;
692
+ case 42:
693
+ _context6.prev = 42;
694
+ _context6.t1 = _context6["catch"](2);
695
+ _iterator11.e(_context6.t1);
696
+ case 45:
697
+ _context6.prev = 45;
698
+ _iterator11.f();
699
+ return _context6.finish(45);
700
+ case 48:
701
+ case "end":
702
+ return _context6.stop();
703
+ }
704
+ }, _callee6, null, [[2, 42, 45, 48], [12, 32, 35, 38]]);
705
+ })();
706
+ }
707
+ function iterLoadAssembleeScrutins(dataDir, legislature) {
708
+ var _ref7 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
709
+ _ref7$log = _ref7.log,
710
+ log = _ref7$log === void 0 ? false : _ref7$log;
711
+ return /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
712
+ var scrutinsUid, _iterator13, _step13, dataset, datasetDir, _iterator14, _step14, scrutinSplitPath, scrutinFilename, scrutinFilePath, scrutinJson, scrutin;
713
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
714
+ while (1) switch (_context7.prev = _context7.next) {
715
+ case 0:
716
+ scrutinsUid = new Set();
717
+ _iterator13 = _createForOfIteratorHelper(_datasets.datasets.scrutins);
718
+ _context7.prev = 2;
719
+ _iterator13.s();
720
+ case 4:
721
+ if ((_step13 = _iterator13.n()).done) {
722
+ _context7.next = 40;
723
+ break;
724
+ }
725
+ dataset = _step13.value;
726
+ if (!dataset.ignoreForWeb) {
727
+ _context7.next = 8;
728
+ break;
729
+ }
730
+ return _context7.abrupt("continue", 38);
731
+ case 8:
732
+ if (!(legislature !== _legislatures.Legislature.All && dataset.legislature !== _legislatures.Legislature.All && legislature !== dataset.legislature)) {
733
+ _context7.next = 10;
734
+ break;
735
+ }
736
+ return _context7.abrupt("continue", 38);
737
+ case 10:
738
+ datasetDir = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
739
+ _iterator14 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir));
740
+ _context7.prev = 12;
741
+ _iterator14.s();
742
+ case 14:
743
+ if ((_step14 = _iterator14.n()).done) {
744
+ _context7.next = 30;
745
+ break;
746
+ }
747
+ scrutinSplitPath = _step14.value;
748
+ scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
749
+ if (scrutinFilename.endsWith(".json")) {
750
+ _context7.next = 19;
751
+ break;
752
+ }
753
+ return _context7.abrupt("continue", 28);
754
+ case 19:
755
+ scrutinFilePath = _path["default"].join.apply(_path["default"], [datasetDir].concat(_toConsumableArray(scrutinSplitPath)));
756
+ if (log) {
757
+ console.log("Loading file: ".concat(scrutinFilePath, "\u2026"));
758
+ }
759
+ scrutinJson = _fsExtra["default"].readFileSync(scrutinFilePath, {
760
+ encoding: "utf8"
761
+ });
762
+ scrutin = _scrutins.Convert.toScrutin(scrutinJson);
763
+ if (!scrutinsUid.has(scrutin.uid)) {
764
+ _context7.next = 25;
765
+ break;
766
+ }
767
+ return _context7.abrupt("continue", 28);
768
+ case 25:
769
+ scrutinsUid.add(scrutin.uid);
770
+ _context7.next = 28;
771
+ return {
772
+ scrutin: scrutin,
773
+ datasetLegislature: dataset.legislature
774
+ };
775
+ case 28:
776
+ _context7.next = 14;
777
+ break;
778
+ case 30:
779
+ _context7.next = 35;
780
+ break;
781
+ case 32:
782
+ _context7.prev = 32;
783
+ _context7.t0 = _context7["catch"](12);
784
+ _iterator14.e(_context7.t0);
785
+ case 35:
786
+ _context7.prev = 35;
787
+ _iterator14.f();
788
+ return _context7.finish(35);
789
+ case 38:
790
+ _context7.next = 4;
791
+ break;
792
+ case 40:
793
+ _context7.next = 45;
794
+ break;
795
+ case 42:
796
+ _context7.prev = 42;
797
+ _context7.t1 = _context7["catch"](2);
798
+ _iterator13.e(_context7.t1);
799
+ case 45:
800
+ _context7.prev = 45;
801
+ _iterator13.f();
802
+ return _context7.finish(45);
803
+ case 48:
804
+ case "end":
805
+ return _context7.stop();
806
+ }
807
+ }, _callee7, null, [[2, 42, 45, 48], [12, 32, 35, 38]]);
808
+ })();
809
+ }
810
+
811
+ /// Load data from split files.
812
+ /// Deprecated: Use iterLoad... iterators instead.
813
+ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
814
+ var _ref8 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
815
+ _ref8$log = _ref8.log,
816
+ log = _ref8$log === void 0 ? false : _ref8$log;
72
817
  var acteurByUid = {};
73
818
  var organeByUid = {};
74
819
  if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
75
- var _iterator = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes),
76
- _step;
820
+ var _iterator15 = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes),
821
+ _step15;
77
822
  try {
78
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
79
- var dataset = _step.value;
823
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
824
+ var dataset = _step15.value;
80
825
  if (dataset.ignoreForWeb) {
81
826
  continue;
82
827
  }
@@ -84,11 +829,11 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
84
829
  continue;
85
830
  }
86
831
  var datasetDir = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
87
- var _iterator2 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir, ["acteurs"])),
88
- _step2;
832
+ var _iterator16 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir, ["acteurs"])),
833
+ _step16;
89
834
  try {
90
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
91
- var acteurSplitPath = _step2.value;
835
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
836
+ var acteurSplitPath = _step16.value;
92
837
  var acteurFilename = acteurSplitPath[acteurSplitPath.length - 1];
93
838
  if (!acteurFilename.endsWith(".json")) {
94
839
  continue;
@@ -107,15 +852,15 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
107
852
  }
108
853
  }
109
854
  } catch (err) {
110
- _iterator2.e(err);
855
+ _iterator16.e(err);
111
856
  } finally {
112
- _iterator2.f();
857
+ _iterator16.f();
113
858
  }
114
- var _iterator3 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir, ["organes"])),
115
- _step3;
859
+ var _iterator17 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetDir, ["organes"])),
860
+ _step17;
116
861
  try {
117
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
118
- var organeSplitPath = _step3.value;
862
+ for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
863
+ var organeSplitPath = _step17.value;
119
864
  var organeFilename = organeSplitPath[organeSplitPath.length - 1];
120
865
  if (!organeFilename.endsWith(".json")) {
121
866
  continue;
@@ -134,26 +879,26 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
134
879
  }
135
880
  }
136
881
  } catch (err) {
137
- _iterator3.e(err);
882
+ _iterator17.e(err);
138
883
  } finally {
139
- _iterator3.f();
884
+ _iterator17.f();
140
885
  }
141
886
  }
142
887
  } catch (err) {
143
- _iterator.e(err);
888
+ _iterator15.e(err);
144
889
  } finally {
145
- _iterator.f();
890
+ _iterator15.f();
146
891
  }
147
892
  }
148
893
  var reunionByUid = {};
149
894
  var reunionsByDay = {};
150
895
  var reunionsByDossierUid = {};
151
896
  if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
152
- var _iterator4 = _createForOfIteratorHelper(_datasets.datasets.agendas),
153
- _step4;
897
+ var _iterator18 = _createForOfIteratorHelper(_datasets.datasets.agendas),
898
+ _step18;
154
899
  try {
155
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
156
- var _dataset = _step4.value;
900
+ for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
901
+ var _dataset = _step18.value;
157
902
  if (_dataset.ignoreForWeb) {
158
903
  continue;
159
904
  }
@@ -161,11 +906,11 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
161
906
  continue;
162
907
  }
163
908
  var _datasetDir = _path["default"].join(dataDir, _dataset.filename.replace(/\.json$/, "_nettoye"));
164
- var _iterator5 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir)),
165
- _step5;
909
+ var _iterator19 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir)),
910
+ _step19;
166
911
  try {
167
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
168
- var reunionSplitPath = _step5.value;
912
+ for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
913
+ var reunionSplitPath = _step19.value;
169
914
  var reunionFilename = reunionSplitPath[reunionSplitPath.length - 1];
170
915
  if (!reunionFilename.endsWith(".json")) {
171
916
  continue;
@@ -189,16 +934,16 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
189
934
  reunionsAtDay.push(reunion);
190
935
  var odj = reunion.odj;
191
936
  if (odj !== undefined) {
192
- var _iterator6 = _createForOfIteratorHelper(odj.pointsOdj || []),
193
- _step6;
937
+ var _iterator20 = _createForOfIteratorHelper(odj.pointsOdj || []),
938
+ _step20;
194
939
  try {
195
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
196
- var pointOdj = _step6.value;
197
- var _iterator7 = _createForOfIteratorHelper(pointOdj.dossiersLegislatifsRefs || []),
198
- _step7;
940
+ for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
941
+ var pointOdj = _step20.value;
942
+ var _iterator21 = _createForOfIteratorHelper(pointOdj.dossiersLegislatifsRefs || []),
943
+ _step21;
199
944
  try {
200
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
201
- var dossierLegislatifRef = _step7.value;
945
+ for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
946
+ var dossierLegislatifRef = _step21.value;
202
947
  var reunionsAtDossierUid = reunionsByDossierUid[dossierLegislatifRef];
203
948
  if (reunionsAtDossierUid === undefined) {
204
949
  reunionsAtDossierUid = reunionsByDossierUid[dossierLegislatifRef] = [];
@@ -206,37 +951,37 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
206
951
  reunionsAtDossierUid.push(reunion);
207
952
  }
208
953
  } catch (err) {
209
- _iterator7.e(err);
954
+ _iterator21.e(err);
210
955
  } finally {
211
- _iterator7.f();
956
+ _iterator21.f();
212
957
  }
213
958
  }
214
959
  } catch (err) {
215
- _iterator6.e(err);
960
+ _iterator20.e(err);
216
961
  } finally {
217
- _iterator6.f();
962
+ _iterator20.f();
218
963
  }
219
964
  }
220
965
  }
221
966
  } catch (err) {
222
- _iterator5.e(err);
967
+ _iterator19.e(err);
223
968
  } finally {
224
- _iterator5.f();
969
+ _iterator19.f();
225
970
  }
226
971
  }
227
972
  } catch (err) {
228
- _iterator4.e(err);
973
+ _iterator18.e(err);
229
974
  } finally {
230
- _iterator4.f();
975
+ _iterator18.f();
231
976
  }
232
977
  }
233
978
  var amendementByUid = {};
234
979
  if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
235
- var _iterator8 = _createForOfIteratorHelper(_datasets.datasets.amendements),
236
- _step8;
980
+ var _iterator22 = _createForOfIteratorHelper(_datasets.datasets.amendements),
981
+ _step22;
237
982
  try {
238
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
239
- var _dataset2 = _step8.value;
983
+ for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
984
+ var _dataset2 = _step22.value;
240
985
  if (_dataset2.ignoreForWeb) {
241
986
  continue;
242
987
  }
@@ -244,11 +989,11 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
244
989
  continue;
245
990
  }
246
991
  var _datasetDir2 = _path["default"].join(dataDir, _dataset2.filename.replace(/\.json$/, "_nettoye"));
247
- var _iterator9 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir2)),
248
- _step9;
992
+ var _iterator23 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir2)),
993
+ _step23;
249
994
  try {
250
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
251
- var amendementSplitPath = _step9.value;
995
+ for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
996
+ var amendementSplitPath = _step23.value;
252
997
  var amendementFilename = amendementSplitPath[amendementSplitPath.length - 1];
253
998
  if (!amendementFilename.endsWith(".json")) {
254
999
  continue;
@@ -266,15 +1011,15 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
266
1011
  }
267
1012
  }
268
1013
  } catch (err) {
269
- _iterator9.e(err);
1014
+ _iterator23.e(err);
270
1015
  } finally {
271
- _iterator9.f();
1016
+ _iterator23.f();
272
1017
  }
273
1018
  }
274
1019
  } catch (err) {
275
- _iterator8.e(err);
1020
+ _iterator22.e(err);
276
1021
  } finally {
277
- _iterator8.f();
1022
+ _iterator22.f();
278
1023
  }
279
1024
  }
280
1025
  var documentByUid = {};
@@ -282,11 +1027,11 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
282
1027
  var dossierParlementaireByTitreChemin = {};
283
1028
  var dossierParlementaireByUid = {};
284
1029
  if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
285
- var _iterator10 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs),
286
- _step10;
1030
+ var _iterator24 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs),
1031
+ _step24;
287
1032
  try {
288
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
289
- var _dataset3 = _step10.value;
1033
+ for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
1034
+ var _dataset3 = _step24.value;
290
1035
  if (_dataset3.ignoreForWeb) {
291
1036
  continue;
292
1037
  }
@@ -294,11 +1039,11 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
294
1039
  continue;
295
1040
  }
296
1041
  var _datasetDir3 = _path["default"].join(dataDir, _dataset3.filename.replace(/\.json$/, "_nettoye"));
297
- var _iterator11 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir3, ["documents"])),
298
- _step11;
1042
+ var _iterator25 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir3, ["documents"])),
1043
+ _step25;
299
1044
  try {
300
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
301
- var documentSplitPath = _step11.value;
1045
+ for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
1046
+ var documentSplitPath = _step25.value;
302
1047
  var documentFilename = documentSplitPath[documentSplitPath.length - 1];
303
1048
  if (!documentFilename.endsWith(".json")) {
304
1049
  continue;
@@ -316,15 +1061,15 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
316
1061
  }
317
1062
  }
318
1063
  } catch (err) {
319
- _iterator11.e(err);
1064
+ _iterator25.e(err);
320
1065
  } finally {
321
- _iterator11.f();
1066
+ _iterator25.f();
322
1067
  }
323
- var _iterator12 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir3, ["dossiers"])),
324
- _step12;
1068
+ var _iterator26 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir3, ["dossiers"])),
1069
+ _step26;
325
1070
  try {
326
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
327
- var dossierSplitPath = _step12.value;
1071
+ for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
1072
+ var dossierSplitPath = _step26.value;
328
1073
  var dossierFilename = dossierSplitPath[dossierSplitPath.length - 1];
329
1074
  if (!dossierFilename.endsWith(".json")) {
330
1075
  continue;
@@ -349,15 +1094,15 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
349
1094
  }
350
1095
  }
351
1096
  } catch (err) {
352
- _iterator12.e(err);
1097
+ _iterator26.e(err);
353
1098
  } finally {
354
- _iterator12.f();
1099
+ _iterator26.f();
355
1100
  }
356
1101
  }
357
1102
  } catch (err) {
358
- _iterator10.e(err);
1103
+ _iterator24.e(err);
359
1104
  } finally {
360
- _iterator10.f();
1105
+ _iterator24.f();
361
1106
  }
362
1107
  }
363
1108
  var photoByUid = {};
@@ -395,11 +1140,11 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
395
1140
  }
396
1141
  var scrutinByUid = {};
397
1142
  if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
398
- var _iterator13 = _createForOfIteratorHelper(_datasets.datasets.scrutins),
399
- _step13;
1143
+ var _iterator27 = _createForOfIteratorHelper(_datasets.datasets.scrutins),
1144
+ _step27;
400
1145
  try {
401
- for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
402
- var _dataset4 = _step13.value;
1146
+ for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {
1147
+ var _dataset4 = _step27.value;
403
1148
  if (_dataset4.ignoreForWeb) {
404
1149
  continue;
405
1150
  }
@@ -407,11 +1152,11 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
407
1152
  continue;
408
1153
  }
409
1154
  var _datasetDir4 = _path["default"].join(dataDir, _dataset4.filename.replace(/\.json$/, "_nettoye"));
410
- var _iterator14 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir4)),
411
- _step14;
1155
+ var _iterator28 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetDir4)),
1156
+ _step28;
412
1157
  try {
413
- for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
414
- var scrutinSplitPath = _step14.value;
1158
+ for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {
1159
+ var scrutinSplitPath = _step28.value;
415
1160
  var scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
416
1161
  if (!scrutinFilename.endsWith(".json")) {
417
1162
  continue;
@@ -429,15 +1174,15 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
429
1174
  }
430
1175
  }
431
1176
  } catch (err) {
432
- _iterator14.e(err);
1177
+ _iterator28.e(err);
433
1178
  } finally {
434
- _iterator14.f();
1179
+ _iterator28.f();
435
1180
  }
436
1181
  }
437
1182
  } catch (err) {
438
- _iterator13.e(err);
1183
+ _iterator27.e(err);
439
1184
  } finally {
440
- _iterator13.f();
1185
+ _iterator27.f();
441
1186
  }
442
1187
  }
443
1188
  return {
@@ -456,19 +1201,20 @@ function loadAssembleeData(dataDir, enabledDatasets, legislature) {
456
1201
  };
457
1202
  }
458
1203
 
459
- /** Load data from big monolytic files. */
1204
+ /// Load data from big monolytic files.
1205
+ /// Deprecated: Assemblée nationale open data no more uses monolytic files.
460
1206
  function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
461
- var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
462
- _ref2$log = _ref2.log,
463
- log = _ref2$log === void 0 ? false : _ref2$log;
1207
+ var _ref9 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
1208
+ _ref9$log = _ref9.log,
1209
+ log = _ref9$log === void 0 ? false : _ref9$log;
464
1210
  var acteurByUid = {};
465
1211
  var organeByUid = {};
466
1212
  if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
467
- var _iterator15 = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes),
468
- _step15;
1213
+ var _iterator29 = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes),
1214
+ _step29;
469
1215
  try {
470
- for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
471
- var dataset = _step15.value;
1216
+ for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {
1217
+ var dataset = _step29.value;
472
1218
  if (dataset.ignoreForWeb) {
473
1219
  continue;
474
1220
  }
@@ -483,52 +1229,52 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
483
1229
  encoding: "utf8"
484
1230
  });
485
1231
  var acteursEtOrganes = _acteurs_et_organes.Convert.toActeursEtOrganes(json);
486
- var _iterator16 = _createForOfIteratorHelper(acteursEtOrganes.acteurs),
487
- _step16;
1232
+ var _iterator30 = _createForOfIteratorHelper(acteursEtOrganes.acteurs),
1233
+ _step30;
488
1234
  try {
489
- for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
490
- var acteur = _step16.value;
1235
+ for (_iterator30.s(); !(_step30 = _iterator30.n()).done;) {
1236
+ var acteur = _step30.value;
491
1237
  // Keep the first existing "acteur", because the first wrapper is the most complete.
492
1238
  if (acteurByUid[acteur.uid] === undefined) {
493
1239
  acteurByUid[acteur.uid] = acteur;
494
1240
  }
495
1241
  }
496
1242
  } catch (err) {
497
- _iterator16.e(err);
1243
+ _iterator30.e(err);
498
1244
  } finally {
499
- _iterator16.f();
1245
+ _iterator30.f();
500
1246
  }
501
- var _iterator17 = _createForOfIteratorHelper(acteursEtOrganes.organes),
502
- _step17;
1247
+ var _iterator31 = _createForOfIteratorHelper(acteursEtOrganes.organes),
1248
+ _step31;
503
1249
  try {
504
- for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
505
- var organe = _step17.value;
1250
+ for (_iterator31.s(); !(_step31 = _iterator31.n()).done;) {
1251
+ var organe = _step31.value;
506
1252
  // Keep the first existing "organe", because the first wrapper is the most complete.
507
1253
  if (organeByUid[organe.uid] === undefined) {
508
1254
  organeByUid[organe.uid] = organe;
509
1255
  }
510
1256
  }
511
1257
  } catch (err) {
512
- _iterator17.e(err);
1258
+ _iterator31.e(err);
513
1259
  } finally {
514
- _iterator17.f();
1260
+ _iterator31.f();
515
1261
  }
516
1262
  }
517
1263
  } catch (err) {
518
- _iterator15.e(err);
1264
+ _iterator29.e(err);
519
1265
  } finally {
520
- _iterator15.f();
1266
+ _iterator29.f();
521
1267
  }
522
1268
  }
523
1269
  var reunionByUid = {};
524
1270
  var reunionsByDay = {};
525
1271
  var reunionsByDossierUid = {};
526
1272
  if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
527
- var _iterator18 = _createForOfIteratorHelper(_datasets.datasets.agendas),
528
- _step18;
1273
+ var _iterator32 = _createForOfIteratorHelper(_datasets.datasets.agendas),
1274
+ _step32;
529
1275
  try {
530
- for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
531
- var _dataset5 = _step18.value;
1276
+ for (_iterator32.s(); !(_step32 = _iterator32.n()).done;) {
1277
+ var _dataset5 = _step32.value;
532
1278
  if (_dataset5.ignoreForWeb) {
533
1279
  continue;
534
1280
  }
@@ -543,11 +1289,11 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
543
1289
  encoding: "utf8"
544
1290
  });
545
1291
  var agendas = _agendas.Convert.toAgendas(_json2);
546
- var _iterator19 = _createForOfIteratorHelper(agendas.reunions),
547
- _step19;
1292
+ var _iterator33 = _createForOfIteratorHelper(agendas.reunions),
1293
+ _step33;
548
1294
  try {
549
- for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
550
- var reunion = _step19.value;
1295
+ for (_iterator33.s(); !(_step33 = _iterator33.n()).done;) {
1296
+ var reunion = _step33.value;
551
1297
  if (reunionByUid[reunion.uid] === undefined) {
552
1298
  reunionByUid[reunion.uid] = reunion;
553
1299
  }
@@ -559,16 +1305,16 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
559
1305
  reunionsAtDay.push(reunion);
560
1306
  var odj = reunion.odj;
561
1307
  if (odj !== undefined) {
562
- var _iterator20 = _createForOfIteratorHelper(odj.pointsOdj || []),
563
- _step20;
1308
+ var _iterator34 = _createForOfIteratorHelper(odj.pointsOdj || []),
1309
+ _step34;
564
1310
  try {
565
- for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
566
- var pointOdj = _step20.value;
567
- var _iterator21 = _createForOfIteratorHelper(pointOdj.dossiersLegislatifsRefs || []),
568
- _step21;
1311
+ for (_iterator34.s(); !(_step34 = _iterator34.n()).done;) {
1312
+ var pointOdj = _step34.value;
1313
+ var _iterator35 = _createForOfIteratorHelper(pointOdj.dossiersLegislatifsRefs || []),
1314
+ _step35;
569
1315
  try {
570
- for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
571
- var dossierLegislatifRef = _step21.value;
1316
+ for (_iterator35.s(); !(_step35 = _iterator35.n()).done;) {
1317
+ var dossierLegislatifRef = _step35.value;
572
1318
  var reunionsAtDossierUid = reunionsByDossierUid[dossierLegislatifRef];
573
1319
  if (reunionsAtDossierUid === undefined) {
574
1320
  reunionsAtDossierUid = reunionsByDossierUid[dossierLegislatifRef] = [];
@@ -576,37 +1322,37 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
576
1322
  reunionsAtDossierUid.push(reunion);
577
1323
  }
578
1324
  } catch (err) {
579
- _iterator21.e(err);
1325
+ _iterator35.e(err);
580
1326
  } finally {
581
- _iterator21.f();
1327
+ _iterator35.f();
582
1328
  }
583
1329
  }
584
1330
  } catch (err) {
585
- _iterator20.e(err);
1331
+ _iterator34.e(err);
586
1332
  } finally {
587
- _iterator20.f();
1333
+ _iterator34.f();
588
1334
  }
589
1335
  }
590
1336
  }
591
1337
  } catch (err) {
592
- _iterator19.e(err);
1338
+ _iterator33.e(err);
593
1339
  } finally {
594
- _iterator19.f();
1340
+ _iterator33.f();
595
1341
  }
596
1342
  }
597
1343
  } catch (err) {
598
- _iterator18.e(err);
1344
+ _iterator32.e(err);
599
1345
  } finally {
600
- _iterator18.f();
1346
+ _iterator32.f();
601
1347
  }
602
1348
  }
603
1349
  var amendementByUid = {};
604
1350
  if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
605
- var _iterator22 = _createForOfIteratorHelper(_datasets.datasets.amendements),
606
- _step22;
1351
+ var _iterator36 = _createForOfIteratorHelper(_datasets.datasets.amendements),
1352
+ _step36;
607
1353
  try {
608
- for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
609
- var _dataset6 = _step22.value;
1354
+ for (_iterator36.s(); !(_step36 = _iterator36.n()).done;) {
1355
+ var _dataset6 = _step36.value;
610
1356
  if (_dataset6.ignoreForWeb) {
611
1357
  continue;
612
1358
  }
@@ -621,36 +1367,36 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
621
1367
  encoding: "utf8"
622
1368
  });
623
1369
  var amendements = _amendements.Convert.toAmendements(_json3);
624
- var _iterator23 = _createForOfIteratorHelper(amendements.textesLegislatifs),
625
- _step23;
1370
+ var _iterator37 = _createForOfIteratorHelper(amendements.textesLegislatifs),
1371
+ _step37;
626
1372
  try {
627
- for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
628
- var texteLegislatif = _step23.value;
629
- var _iterator24 = _createForOfIteratorHelper(texteLegislatif.amendements),
630
- _step24;
1373
+ for (_iterator37.s(); !(_step37 = _iterator37.n()).done;) {
1374
+ var texteLegislatif = _step37.value;
1375
+ var _iterator38 = _createForOfIteratorHelper(texteLegislatif.amendements),
1376
+ _step38;
631
1377
  try {
632
- for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
633
- var amendement = _step24.value;
1378
+ for (_iterator38.s(); !(_step38 = _iterator38.n()).done;) {
1379
+ var amendement = _step38.value;
634
1380
  if (amendementByUid[amendement.uid] === undefined) {
635
1381
  amendementByUid[amendement.uid] = amendement;
636
1382
  }
637
1383
  }
638
1384
  } catch (err) {
639
- _iterator24.e(err);
1385
+ _iterator38.e(err);
640
1386
  } finally {
641
- _iterator24.f();
1387
+ _iterator38.f();
642
1388
  }
643
1389
  }
644
1390
  } catch (err) {
645
- _iterator23.e(err);
1391
+ _iterator37.e(err);
646
1392
  } finally {
647
- _iterator23.f();
1393
+ _iterator37.f();
648
1394
  }
649
1395
  }
650
1396
  } catch (err) {
651
- _iterator22.e(err);
1397
+ _iterator36.e(err);
652
1398
  } finally {
653
- _iterator22.f();
1399
+ _iterator36.f();
654
1400
  }
655
1401
  }
656
1402
  var documentByUid = {};
@@ -658,11 +1404,11 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
658
1404
  var dossierParlementaireByTitreChemin = {};
659
1405
  var dossierParlementaireByUid = {};
660
1406
  if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
661
- var _iterator25 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs),
662
- _step25;
1407
+ var _iterator39 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs),
1408
+ _step39;
663
1409
  try {
664
- for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
665
- var _dataset7 = _step25.value;
1410
+ for (_iterator39.s(); !(_step39 = _iterator39.n()).done;) {
1411
+ var _dataset7 = _step39.value;
666
1412
  if (_dataset7.ignoreForWeb) {
667
1413
  continue;
668
1414
  }
@@ -677,25 +1423,25 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
677
1423
  encoding: "utf8"
678
1424
  });
679
1425
  var dossiersLegislatifs = _dossiers_legislatifs.Convert.toDossiersLegislatifs(_json4);
680
- var _iterator26 = _createForOfIteratorHelper(dossiersLegislatifs.textesLegislatifs),
681
- _step26;
1426
+ var _iterator40 = _createForOfIteratorHelper(dossiersLegislatifs.textesLegislatifs),
1427
+ _step40;
682
1428
  try {
683
- for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
684
- var document = _step26.value;
1429
+ for (_iterator40.s(); !(_step40 = _iterator40.n()).done;) {
1430
+ var document = _step40.value;
685
1431
  if (documentByUid[document.uid] === undefined) {
686
1432
  documentByUid[document.uid] = document;
687
1433
  }
688
1434
  }
689
1435
  } catch (err) {
690
- _iterator26.e(err);
1436
+ _iterator40.e(err);
691
1437
  } finally {
692
- _iterator26.f();
1438
+ _iterator40.f();
693
1439
  }
694
- var _iterator27 = _createForOfIteratorHelper(dossiersLegislatifs.dossiersParlementaires),
695
- _step27;
1440
+ var _iterator41 = _createForOfIteratorHelper(dossiersLegislatifs.dossiersParlementaires),
1441
+ _step41;
696
1442
  try {
697
- for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {
698
- var dossier = _step27.value;
1443
+ for (_iterator41.s(); !(_step41 = _iterator41.n()).done;) {
1444
+ var dossier = _step41.value;
699
1445
  var titreDossier = dossier.titreDossier;
700
1446
  if (titreDossier.senatChemin && dossierParlementaireBySenatChemin[titreDossier.senatChemin] === undefined) {
701
1447
  dossierParlementaireBySenatChemin[titreDossier.senatChemin] = dossier;
@@ -708,15 +1454,15 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
708
1454
  }
709
1455
  }
710
1456
  } catch (err) {
711
- _iterator27.e(err);
1457
+ _iterator41.e(err);
712
1458
  } finally {
713
- _iterator27.f();
1459
+ _iterator41.f();
714
1460
  }
715
1461
  }
716
1462
  } catch (err) {
717
- _iterator25.e(err);
1463
+ _iterator39.e(err);
718
1464
  } finally {
719
- _iterator25.f();
1465
+ _iterator39.f();
720
1466
  }
721
1467
  }
722
1468
  var photoByUid = {};
@@ -755,11 +1501,11 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
755
1501
  }
756
1502
  var scrutinByUid = {};
757
1503
  if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
758
- var _iterator28 = _createForOfIteratorHelper(_datasets.datasets.scrutins),
759
- _step28;
1504
+ var _iterator42 = _createForOfIteratorHelper(_datasets.datasets.scrutins),
1505
+ _step42;
760
1506
  try {
761
- for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {
762
- var _dataset8 = _step28.value;
1507
+ for (_iterator42.s(); !(_step42 = _iterator42.n()).done;) {
1508
+ var _dataset8 = _step42.value;
763
1509
  if (_dataset8.ignoreForWeb) {
764
1510
  continue;
765
1511
  }
@@ -774,25 +1520,25 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
774
1520
  encoding: "utf8"
775
1521
  });
776
1522
  var scrutins = _scrutins.Convert.toScrutins(_json7);
777
- var _iterator29 = _createForOfIteratorHelper(scrutins.scrutins),
778
- _step29;
1523
+ var _iterator43 = _createForOfIteratorHelper(scrutins.scrutins),
1524
+ _step43;
779
1525
  try {
780
- for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {
781
- var scrutin = _step29.value;
1526
+ for (_iterator43.s(); !(_step43 = _iterator43.n()).done;) {
1527
+ var scrutin = _step43.value;
782
1528
  if (scrutinByUid[scrutin.uid] === undefined) {
783
1529
  scrutinByUid[scrutin.uid] = scrutin;
784
1530
  }
785
1531
  }
786
1532
  } catch (err) {
787
- _iterator29.e(err);
1533
+ _iterator43.e(err);
788
1534
  } finally {
789
- _iterator29.f();
1535
+ _iterator43.f();
790
1536
  }
791
1537
  }
792
1538
  } catch (err) {
793
- _iterator28.e(err);
1539
+ _iterator42.e(err);
794
1540
  } finally {
795
- _iterator28.f();
1541
+ _iterator42.f();
796
1542
  }
797
1543
  }
798
1544
  return {
@@ -810,6 +1556,34 @@ function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature) {
810
1556
  scrutinByUid: scrutinByUid
811
1557
  };
812
1558
  }
1559
+ function loadAssembleePhotosDeputes(dataDir, legislature) {
1560
+ var _ref10 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
1561
+ _ref10$log = _ref10.log,
1562
+ log = _ref10$log === void 0 ? false : _ref10$log;
1563
+ var jsonFilePath = _path["default"].join(dataDir, "photos_deputes_".concat(
1564
+ // TODO: Handle Legislature.All.
1565
+ legislature === _legislatures.Legislature.All ? _legislatures.Legislature.Seize : legislature), "deputes.json");
1566
+ if (log) {
1567
+ console.log("Loading file: ".concat(jsonFilePath));
1568
+ }
1569
+ var json = _fsExtra["default"].readFileSync(jsonFilePath, {
1570
+ encoding: "utf8"
1571
+ });
1572
+ return JSON.parse(json);
1573
+ }
1574
+ function loadAssembleePhotosSenateurs(dataDir) {
1575
+ var _ref11 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1576
+ _ref11$log = _ref11.log,
1577
+ log = _ref11$log === void 0 ? false : _ref11$log;
1578
+ var jsonFilePath = _path["default"].join(dataDir, "photos_senateurs", "senateurs.json");
1579
+ if (log) {
1580
+ console.log("Loading file: ".concat(jsonFilePath));
1581
+ }
1582
+ var json = _fsExtra["default"].readFileSync(jsonFilePath, {
1583
+ encoding: "utf8"
1584
+ });
1585
+ return JSON.parse(json);
1586
+ }
813
1587
  function pathFromDocumentUid(documentsDir, uid) {
814
1588
  var match = documentUidRegex.exec(uid);
815
1589
  _assert["default"].notStrictEqual(match, null, "Unexpected structure for document UID: ".concat(uid));
@@ -861,4 +1635,4 @@ function pathFromScrutinUid(scrutinsDir, uid) {
861
1635
  _fsExtra["default"].ensureDirSync(numeroMilliersDir);
862
1636
  return _path["default"].join(numeroMilliersDir, uid);
863
1637
  }
864
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwibG9hZEFzc2VtYmxlZURhdGEiLCJkYXRhRGlyIiwiZW5hYmxlZERhdGFzZXRzIiwibGVnaXNsYXR1cmUiLCJsb2ciLCJhY3RldXJCeVVpZCIsIm9yZ2FuZUJ5VWlkIiwiRW5hYmxlZERhdGFzZXRzIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJpZ25vcmVGb3JXZWIiLCJMZWdpc2xhdHVyZSIsIkFsbCIsImRhdGFzZXREaXIiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwicmVwbGFjZSIsIndhbGtEaXIiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsImZzIiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJhY3RldXIiLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsInRvQWN0ZXVyIiwidWlkIiwidW5kZWZpbmVkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsInJldW5pb25CeVVpZCIsInJldW5pb25zQnlEYXkiLCJyZXVuaW9uc0J5RG9zc2llclVpZCIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25GaWxlUGF0aCIsInJldW5pb25Kc29uIiwicmV1bmlvbiIsIkFnZW5kYXNDb252ZXJ0IiwidG9SZXVuaW9uIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludHNPZGoiLCJwb2ludE9kaiIsImRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIiwiZG9zc2llckxlZ2lzbGF0aWZSZWYiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudEZpbGVQYXRoIiwiYW1lbmRlbWVudEpzb24iLCJhbWVuZGVtZW50IiwiQW1lbmRlbWVudHNDb252ZXJ0IiwidG9BbWVuZGVtZW50IiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50RmlsZVBhdGgiLCJkb2N1bWVudEpzb24iLCJkb2N1bWVudCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwidG9Eb2N1bWVudCIsImRvc3NpZXJTcGxpdFBhdGgiLCJkb3NzaWVyRmlsZW5hbWUiLCJkb3NzaWVyRmlsZVBhdGgiLCJkb3NzaWVySnNvbiIsImRvc3NpZXIiLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwidGl0cmVEb3NzaWVyIiwic2VuYXRDaGVtaW4iLCJ0aXRyZUNoZW1pbiIsInBob3RvQnlVaWQiLCJQaG90b3MiLCJqc29uRmlsZVBhdGgiLCJTZWl6ZSIsImV4aXN0c1N5bmMiLCJqc29uIiwiT2JqZWN0IiwiYXNzaWduIiwiSlNPTiIsInBhcnNlIiwic2NydXRpbkJ5VWlkIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluRmlsZVBhdGgiLCJzY3J1dGluSnNvbiIsInNjcnV0aW4iLCJTY3J1dGluc0NvbnZlcnQiLCJ0b1NjcnV0aW4iLCJsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnMiLCJvcmdhbmVzIiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwidG9TY3J1dGlucyIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJkb2N1bWVudHNEaXIiLCJtYXRjaCIsImV4ZWMiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsImRvY3VtZW50VHlwZSIsImNoYW1icmVEaXIiLCJyZXB1YmxpcXVlRGlyIiwibGVnaXNsYXR1cmVEaXIiLCJldGF0RGlyIiwibnVtZXJvIiwic3Vic3RyIiwibnVtZXJvTWlsbGllcnNEaXIiLCJlbnN1cmVEaXJTeW5jIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsImRvc3NpZXJzRGlyIiwicGF0aEZyb21SZXVuaW9uVWlkIiwicmV1bmlvbnNEaXIiLCJzZXNzaW9uRGlyIiwiaWREaXIiLCJudW1lcm9NaWxsaW9uc0RpciIsInBhdGhGcm9tU2NydXRpblVpZCIsInNjcnV0aW5zRGlyIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8vIExvYWQgZGF0YSBmcm9tIGZpbGVzXG5cbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuZXhwb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxufVxuXG5jb25zdCBkb2N1bWVudFVpZFJlZ2V4ID1cbiAgL14oQUNJTnxBTENOfEFWQ0V8QVZJU3xERUNMfEVUREl8TEVUVHxNRVNTfFBJT058UE5SRXxQUkpMfFJBUFB8UklORnxSSU9OKShBTnxTTikoUlxcZCspW0xTXShcXGQrKShCfEJUQXxCVEN8VEFQKShcXGQrKSgtLiopPyQvXG5jb25zdCBkb3NzaWVyVWlkUmVnZXggPSAvXkRMKFJcXGQrKShMXFxkKylOKFxcZCspJC9cbmNvbnN0IHJldW5pb25VaWRSZWdleCA9XG4gIC9eUlUoQU58Q0d8U04pKFJcXGQrKShMXFxkKykoW0FTXVxcZHs0fSkoSURDfElERkw/fElEUykoXFxkKykkL1xuY29uc3Qgc2NydXRpblVpZFJlZ2V4ID0gL15WVEFOKFJcXGQrKShMXFxkKylWKFxcZCspJC9cblxuLyoqIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgfVxufVxuXG4vKiogTG9hZCBkYXRhIGZyb20gYmlnIG1vbm9seXRpYyBmaWxlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBhY3RldXJzRXRPcmdhbmVzLmFjdGV1cnMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBhY3RldXJzRXRPcmdhbmVzLm9yZ2FuZXMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFnZW5kYXMgPSBBZ2VuZGFzQ29udmVydC50b0FnZW5kYXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBhZ2VuZGFzLnJldW5pb25zKSB7XG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYW1lbmRlbWVudHMgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50cyhqc29uKVxuICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2YgYW1lbmRlbWVudHMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnMgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoanNvbilcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXIgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzKSB7XG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAgY29uc3QgcGhvdG9CeVVpZCA9IHt9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IHNjcnV0aW5zID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbnMoanNvbilcbiAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBzY3J1dGlucy5zY3J1dGlucykge1xuICAgICAgICBpZiAoc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9IHNjcnV0aW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZG9jdW1lbnRVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb2N1bWVudCBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgZG9jdW1lbnRUeXBlID0gcGF0aC5qb2luKGRvY3VtZW50c0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBjaGFtYnJlRGlyID0gcGF0aC5qb2luKGRvY3VtZW50VHlwZSwgbWF0Y2ghWzJdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBldGF0RGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGV0YXREaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb3NzaWVyVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9zc2llciBwYXJsZW1lbnRhaXJlIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGRvc3NpZXJzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gcmV1bmlvblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHJldW5pb24gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4ocmV1bmlvbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbMl0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3Qgc2Vzc2lvbkRpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBpZERpciA9IHBhdGguam9pbihzZXNzaW9uRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDkpXG4gIGNvbnN0IG51bWVyb01pbGxpb25zRGlyID0gcGF0aC5qb2luKGlkRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihudW1lcm9NaWxsaW9uc0RpciwgbnVtZXJvLnN1YnN0cigzLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBzY3J1dGluVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3Igc2NydXRpbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihzY3J1dGluc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFBc0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFCdEUsSUFBTUEsZ0JBQWdCLEdBQ3BCLDJIQUEySDtBQUM3SCxJQUFNQyxlQUFlLEdBQUcsd0JBQXdCO0FBQ2hELElBQU1DLGVBQWUsR0FDbkIsMkRBQTJEO0FBQzdELElBQU1DLGVBQWUsR0FBRywwQkFBMEI7O0FBRWxEO0FBQ08sU0FBU0MsaUJBQWlCLENBQy9CQyxPQUFlLEVBQ2ZDLGVBQWdDLEVBQ2hDQyxXQUF3QixFQUVsQjtFQUFBLCtFQURZLENBQUMsQ0FBQztJQUFBLGdCQUFsQkMsR0FBRztJQUFIQSxHQUFHLHlCQUFHLEtB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
1638
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZnNFeHRyYSIsIl9wYXRoIiwiX2RhdGFzZXRzIiwiX2ZpbGVfc3lzdGVtcyIsIl9hY3RldXJzX2V0X29yZ2FuZXMiLCJfYWdlbmRhcyIsIl9hbWVuZGVtZW50cyIsIl9kb3NzaWVyc19sZWdpc2xhdGlmcyIsIl9sZWdpc2xhdHVyZXMiLCJfc2NydXRpbnMiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsImV4cG9ydHMiLCJPcCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093biIsImhhc093blByb3BlcnR5IiwiZGVmaW5lUHJvcGVydHkiLCJrZXkiLCJkZXNjIiwidmFsdWUiLCIkU3ltYm9sIiwiU3ltYm9sIiwiaXRlcmF0b3JTeW1ib2wiLCJpdGVyYXRvciIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImVyciIsIndyYXAiLCJpbm5lckZuIiwib3V0ZXJGbiIsInNlbGYiLCJ0cnlMb2NzTGlzdCIsInByb3RvR2VuZXJhdG9yIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiY3JlYXRlIiwiY29udGV4dCIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJmbiIsImFyZyIsInR5cGUiLCJjYWxsIiwiQ29udGludWVTZW50aW5lbCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJJdGVyYXRvclByb3RvdHlwZSIsImdldFByb3RvIiwiZ2V0UHJvdG90eXBlT2YiLCJOYXRpdmVJdGVyYXRvclByb3RvdHlwZSIsInZhbHVlcyIsIkdwIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIm1ldGhvZCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiUHJvbWlzZUltcGwiLCJpbnZva2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVjb3JkIiwicmVzdWx0IiwiX3R5cGVvZiIsIl9fYXdhaXQiLCJ0aGVuIiwidW53cmFwcGVkIiwiZXJyb3IiLCJwcmV2aW91c1Byb21pc2UiLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsInN0YXRlIiwiRXJyb3IiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGUiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsImRvbmUiLCJtZXRob2ROYW1lIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiaW5mbyIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsImxvY3MiLCJlbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXRlcmFibGUiLCJpdGVyYXRvck1ldGhvZCIsImlzTmFOIiwibGVuZ3RoIiwiaSIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsImN0b3IiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsIml0ZXIiLCJrZXlzIiwidmFsIiwib2JqZWN0IiwicmV2ZXJzZSIsInBvcCIsInNraXBUZW1wUmVzZXQiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicm9vdFJlY29yZCIsInJ2YWwiLCJleGNlcHRpb24iLCJoYW5kbGUiLCJsb2MiLCJjYXVnaHQiLCJoYXNDYXRjaCIsImhhc0ZpbmFsbHkiLCJmaW5hbGx5RW50cnkiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsInRocm93biIsImRlbGVnYXRlWWllbGQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiQXJyYXkiLCJmcm9tIiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJvIiwiYWxsb3dBcnJheUxpa2UiLCJpdCIsIkYiLCJzIiwibiIsImUiLCJfZSIsImYiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwic3RlcCIsIl9lMiIsIm1pbkxlbiIsInRvU3RyaW5nIiwidGVzdCIsImxlbiIsImFycjIiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzIiwiZGF0YURpciIsImxlZ2lzbGF0dXJlIiwiX3JlZiIsImFyZ3VtZW50cyIsIl9yZWYkbG9nIiwibG9nIiwiX2NhbGxlZSIsImFjdGV1cnNVaWQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImRhdGFzZXQiLCJkYXRhc2V0RGlyIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImFjdGV1clNwbGl0UGF0aCIsImFjdGV1ckZpbGVuYW1lIiwiYWN0ZXVyRmlsZVBhdGgiLCJhY3RldXJKc29uIiwiYWN0ZXVyIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIlNldCIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImlnbm9yZUZvcldlYiIsIkxlZ2lzbGF0dXJlIiwiQWxsIiwicGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJ3YWxrRGlyIiwiZW5kc1dpdGgiLCJhcHBseSIsImNvbmNhdCIsImNvbnNvbGUiLCJmcyIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJ0b0FjdGV1ciIsImhhcyIsInVpZCIsImFkZCIsImRhdGFzZXRMZWdpc2xhdHVyZSIsInQwIiwidDEiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiX3JlZjIiLCJfcmVmMiRsb2ciLCJfY2FsbGVlMiIsImFtZW5kZW1lbnRzVWlkIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudEZpbGVQYXRoIiwiYW1lbmRlbWVudEpzb24iLCJhbWVuZGVtZW50IiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYW1lbmRlbWVudHMiLCJBbWVuZGVtZW50c0NvbnZlcnQiLCJ0b0FtZW5kZW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsIl9yZWYzIiwiX3JlZjMkbG9nIiwiX2NhbGxlZTMiLCJkb2N1bWVudHNVaWQiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50RmlsZVBhdGgiLCJkb2N1bWVudEpzb24iLCJkb2N1bWVudCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsInRvRG9jdW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJfcmVmNCIsIl9yZWY0JGxvZyIsIl9jYWxsZWU0IiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCIsIl9pdGVyYXRvcjciLCJfc3RlcDciLCJfaXRlcmF0b3I4IiwiX3N0ZXA4IiwiZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsIml0ZXJMb2FkQXNzZW1ibGVlT3JnYW5lcyIsIl9yZWY1IiwiX3JlZjUkbG9nIiwiX2NhbGxlZTUiLCJvcmdhbmVzVWlkIiwiX2l0ZXJhdG9yOSIsIl9zdGVwOSIsIl9pdGVyYXRvcjEwIiwiX3N0ZXAxMCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lRmlsZVBhdGgiLCJvcmdhbmVKc29uIiwib3JnYW5lIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwidG9PcmdhbmUiLCJpdGVyTG9hZEFzc2VtYmxlZVJldW5pb25zIiwiX3JlZjYiLCJfcmVmNiRsb2ciLCJfY2FsbGVlNiIsInJldW5pb25zVWlkIiwiX2l0ZXJhdG9yMTEiLCJfc3RlcDExIiwiX2l0ZXJhdG9yMTIiLCJfc3RlcDEyIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25GaWxlUGF0aCIsInJldW5pb25Kc29uIiwicmV1bmlvbiIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsImFnZW5kYXMiLCJBZ2VuZGFzQ29udmVydCIsInRvUmV1bmlvbiIsIml0ZXJMb2FkQXNzZW1ibGVlU2NydXRpbnMiLCJfcmVmNyIsIl9yZWY3JGxvZyIsIl9jYWxsZWU3Iiwic2NydXRpbnNVaWQiLCJfaXRlcmF0b3IxMyIsIl9zdGVwMTMiLCJfaXRlcmF0b3IxNCIsIl9zdGVwMTQiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3Iiwic2NydXRpbnMiLCJTY3J1dGluc0NvbnZlcnQiLCJ0b1NjcnV0aW4iLCJsb2FkQXNzZW1ibGVlRGF0YSIsImVuYWJsZWREYXRhc2V0cyIsIl9yZWY4IiwiX3JlZjgkbG9nIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkVuYWJsZWREYXRhc2V0cyIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJfaXRlcmF0b3IxNSIsIl9zdGVwMTUiLCJfaXRlcmF0b3IxNiIsIl9zdGVwMTYiLCJfaXRlcmF0b3IxNyIsIl9zdGVwMTciLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiX2l0ZXJhdG9yMTgiLCJfc3RlcDE4IiwiX2l0ZXJhdG9yMTkiLCJfc3RlcDE5IiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsIm9kaiIsIl9pdGVyYXRvcjIwIiwicG9pbnRzT2RqIiwiX3N0ZXAyMCIsInBvaW50T2RqIiwiX2l0ZXJhdG9yMjEiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyIsIl9zdGVwMjEiLCJkb3NzaWVyTGVnaXNsYXRpZlJlZiIsInJldW5pb25zQXREb3NzaWVyVWlkIiwiYW1lbmRlbWVudEJ5VWlkIiwiQW1lbmRlbWVudHMiLCJfaXRlcmF0b3IyMiIsIl9zdGVwMjIiLCJfaXRlcmF0b3IyMyIsIl9zdGVwMjMiLCJkb2N1bWVudEJ5VWlkIiwiZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluIiwiZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluIiwiZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJfaXRlcmF0b3IyNCIsIl9zdGVwMjQiLCJfaXRlcmF0b3IyNSIsIl9zdGVwMjUiLCJfaXRlcmF0b3IyNiIsIl9zdGVwMjYiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidGl0cmVEb3NzaWVyIiwic2VuYXRDaGVtaW4iLCJ0aXRyZUNoZW1pbiIsInBob3RvQnlVaWQiLCJQaG90b3MiLCJqc29uRmlsZVBhdGgiLCJTZWl6ZSIsImV4aXN0c1N5bmMiLCJqc29uIiwiYXNzaWduIiwiSlNPTiIsInBhcnNlIiwic2NydXRpbkJ5VWlkIiwiU2NydXRpbnMiLCJfaXRlcmF0b3IyNyIsIl9zdGVwMjciLCJfaXRlcmF0b3IyOCIsIl9zdGVwMjgiLCJsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyIsIl9yZWY5IiwiX3JlZjkkbG9nIiwiX2l0ZXJhdG9yMjkiLCJfc3RlcDI5IiwidG9BY3RldXJzRXRPcmdhbmVzIiwiX2l0ZXJhdG9yMzAiLCJhY3RldXJzIiwiX3N0ZXAzMCIsIl9pdGVyYXRvcjMxIiwib3JnYW5lcyIsIl9zdGVwMzEiLCJfaXRlcmF0b3IzMiIsIl9zdGVwMzIiLCJ0b0FnZW5kYXMiLCJfaXRlcmF0b3IzMyIsInJldW5pb25zIiwiX3N0ZXAzMyIsIl9pdGVyYXRvcjM0IiwiX3N0ZXAzNCIsIl9pdGVyYXRvcjM1IiwiX3N0ZXAzNSIsIl9pdGVyYXRvcjM2IiwiX3N0ZXAzNiIsInRvQW1lbmRlbWVudHMiLCJfaXRlcmF0b3IzNyIsInRleHRlc0xlZ2lzbGF0aWZzIiwiX3N0ZXAzNyIsInRleHRlTGVnaXNsYXRpZiIsIl9pdGVyYXRvcjM4IiwiX3N0ZXAzOCIsIl9pdGVyYXRvcjM5IiwiX3N0ZXAzOSIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsIl9pdGVyYXRvcjQwIiwiX3N0ZXA0MCIsIl9pdGVyYXRvcjQxIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlcyIsIl9zdGVwNDEiLCJfaXRlcmF0b3I0MiIsIl9zdGVwNDIiLCJ0b1NjcnV0aW5zIiwiX2l0ZXJhdG9yNDMiLCJfc3RlcDQzIiwibG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMiLCJfcmVmMTAiLCJfcmVmMTAkbG9nIiwibG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyIsIl9yZWYxMSIsIl9yZWYxMSRsb2ciLCJwYXRoRnJvbURvY3VtZW50VWlkIiwiZG9jdW1lbnRzRGlyIiwibWF0Y2giLCJleGVjIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJkb2N1bWVudFR5cGUiLCJjaGFtYnJlRGlyIiwicmVwdWJsaXF1ZURpciIsImxlZ2lzbGF0dXJlRGlyIiwiZXRhdERpciIsIm51bWVybyIsInN1YnN0ciIsIm51bWVyb01pbGxpZXJzRGlyIiwiZW5zdXJlRGlyU3luYyIsInBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQiLCJkb3NzaWVyc0RpciIsInBhdGhGcm9tUmV1bmlvblVpZCIsInJldW5pb25zRGlyIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5leHBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG4gIFBob3RvLFxufSBmcm9tIFwiLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4vdHlwZXMvc2NydXRpbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICByZWFkb25seSBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9XG4gIHJlYWRvbmx5IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbn1cblxuY29uc3QgZG9jdW1lbnRVaWRSZWdleCA9XG4gIC9eKEFDSU58QUxDTnxBVkNFfEFWSVN8REVDTHxFVERJfExFVFR8TUVTU3xQSU9OfFBOUkV8UFJKTHxSQVBQfFJJTkZ8UklPTikoQU58U04pKFJcXGQrKVtMU10oXFxkKykoQnxCVEF8QlRDfFRBUCkoXFxkKykoLS4qKT8kL1xuY29uc3QgZG9zc2llclVpZFJlZ2V4ID0gL15ETChSXFxkKykoTFxcZCspTihcXGQrKSQvXG5jb25zdCByZXVuaW9uVWlkUmVnZXggPVxuICAvXlJVKEFOfENHfFNOKShSXFxkKykoTFxcZCspKFtBU11cXGR7NH0pKElEQ3xJREZMP3xJRFMpKFxcZCspJC9cbmNvbnN0IHNjcnV0aW5VaWRSZWdleCA9IC9eVlRBTihSXFxkKykoTFxcZCspVihcXGQrKSQvXG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgYWN0ZXVyOiBBY3RldXI7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFjdGV1cnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgaWYgKGFjdGV1cnNVaWQuaGFzKGFjdGV1ci51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhY3RldXJzVWlkLmFkZChhY3RldXIudWlkKVxuICAgICAgeWllbGQgeyBhY3RldXIsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBbWVuZGVtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFtZW5kZW1lbnRzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgaWYgKGFtZW5kZW1lbnRzVWlkLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGFtZW5kZW1lbnRzVWlkLmFkZChhbWVuZGVtZW50LnVpZClcbiAgICAgIHlpZWxkIHsgYW1lbmRlbWVudCwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGRvY3VtZW50OiBEb2N1bWVudDsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgZG9jdW1lbnRzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9jdW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgIGlmIChkb2N1bWVudHNVaWQuaGFzKGRvY3VtZW50LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50c1VpZC5hZGQoZG9jdW1lbnQudWlkKVxuICAgICAgeWllbGQgeyBkb2N1bWVudCwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvc3NpZXJzUGFybGVtZW50YWlyZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAge1xuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmVcbiAgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGRvc3NpZXJzUGFybGVtZW50YWlyZXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1xuICAgICAgXCJkb3NzaWVyc1wiLFxuICAgIF0pKSB7XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhc2V0RGlyLFxuICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUpzb24sXG4gICAgICAgIClcbiAgICAgIGlmIChkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkLmhhcyhkb3NzaWVyUGFybGVtZW50YWlyZS51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkLmFkZChkb3NzaWVyUGFybGVtZW50YWlyZS51aWQpXG4gICAgICB5aWVsZCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlT3JnYW5lcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IG9yZ2FuZTogT3JnYW5lOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBvcmdhbmVzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgIGlmIChvcmdhbmVzVWlkLmhhcyhvcmdhbmUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgb3JnYW5lc1VpZC5hZGQob3JnYW5lLnVpZClcbiAgICAgIHlpZWxkIHsgb3JnYW5lLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyByZXVuaW9uOiBSZXVuaW9uOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCByZXVuaW9uc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldW5pb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICBpZiAocmV1bmlvbnNVaWQuaGFzKHJldW5pb24udWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV1bmlvbnNVaWQuYWRkKHJldW5pb24udWlkKVxuICAgICAgeWllbGQgeyByZXVuaW9uLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlU2NydXRpbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBzY3J1dGluOiBTY3J1dGluOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBzY3J1dGluc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBzY3J1dGluRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgIGlmIChzY3J1dGluc1VpZC5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBzY3J1dGluc1VpZC5hZGQoc2NydXRpbi51aWQpXG4gICAgICB5aWVsZCB7IHNjcnV0aW4sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBMb2FkIGRhdGEgZnJvbSBzcGxpdCBmaWxlcy5cbi8vLyBEZXByZWNhdGVkOiBVc2UgaXRlckxvYWQuLi4gaXRlcmF0b3JzIGluc3RlYWQuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGEoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthY3RldXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXIoYWN0ZXVySnNvbilcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ub3JnYW5lU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhvcmdhbmVGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgb3JnYW5lID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUob3JnYW5lSnNvbilcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyZXVuaW9uRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uSnNvbilcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYW1lbmRlbWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb2N1bWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9jdW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvY3VtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudEpzb24pXG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9zc2llcnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlbmFtZSA9IGRvc3NpZXJTcGxpdFBhdGhbZG9zc2llclNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvc3NpZXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9zc2llclNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9zc2llckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb3NzaWVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvc3NpZXIgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llckpzb24pXG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9IHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7c2NydXRpbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzY3J1dGluRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHNjcnV0aW4gPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGluKHNjcnV0aW5Kc29uKVxuICAgICAgICBpZiAoc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9IHNjcnV0aW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICB9XG59XG5cbi8vLyBMb2FkIGRhdGEgZnJvbSBiaWcgbW9ub2x5dGljIGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IEFzc2VtYmzDqWUgbmF0aW9uYWxlIG9wZW4gZGF0YSBubyBtb3JlIHVzZXMgbW9ub2x5dGljIGZpbGVzLlxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXMgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnNFdE9yZ2FuZXMuYWN0ZXVycykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIGFjdGV1cnNFdE9yZ2FuZXMub3JnYW5lcykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWdlbmRhcyA9IEFnZW5kYXNDb252ZXJ0LnRvQWdlbmRhcyhqc29uKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIGFnZW5kYXMucmV1bmlvbnMpIHtcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhbWVuZGVtZW50cyA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnRzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmcyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZG9zc2llciBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMpIHtcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICBjb25zdCBwaG90b0J5VWlkID0ge31cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3Qgc2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIHNjcnV0aW5zLnNjcnV0aW5zKSB7XG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVQaG90b3NEZXB1dGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0ge1xuICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICBkYXRhRGlyLFxuICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgfWAsXG4gICAgXCJkZXB1dGVzLmpzb25cIixcbiAgKVxuICBpZiAobG9nKSB7XG4gICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgfVxuICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICByZXR1cm4gSlNPTi5wYXJzZShqc29uKSBhcyB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVQaG90b3NTZW5hdGV1cnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0ge1xuICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICBkYXRhRGlyLFxuICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgKVxuICBpZiAobG9nKSB7XG4gICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgfVxuICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICByZXR1cm4gSlNPTi5wYXJzZShqc29uKSBhcyB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudFVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvY3VtZW50IFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBkb2N1bWVudFR5cGUgPSBwYXRoLmpvaW4oZG9jdW1lbnRzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oZG9jdW1lbnRUeXBlLCBtYXRjaCFbMl0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGV0YXREaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4oZXRhdERpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvc3NpZXJVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb3NzaWVyIHBhcmxlbWVudGFpcmUgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZG9zc2llcnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSByZXVuaW9uVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgcmV1bmlvbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihyZXVuaW9uc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBzZXNzaW9uRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGlkRGlyID0gcGF0aC5qb2luKHNlc3Npb25EaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gOSlcbiAgY29uc3QgbnVtZXJvTWlsbGlvbnNEaXIgPSBwYXRoLmpvaW4oaWREaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKG51bWVyb01pbGxpb25zRGlyLCBudW1lcm8uc3Vic3RyKDMsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHNjcnV0aW5VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBzY3J1dGluIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKHNjcnV0aW5zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLGFBQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLG1CQUFBLEdBQUFMLE9BQUE7QUFNQSxJQUFBTSxRQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxZQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxxQkFBQSxHQUFBUixPQUFBO0FBS0EsSUFBQVMsYUFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsU0FBQSxHQUFBVixPQUFBO0FBQXNFLFNBQUFELHVCQUFBWSxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsZ0JBQUFBLEdBQUE7QUFBQSxTQUFBRSxvQkFBQSxrQkF2QnRFLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBQyxPQUFBLFNBQUFBLE9BQUEsT0FBQUMsRUFBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsTUFBQSxHQUFBSCxFQUFBLENBQUFJLGNBQUEsRUFBQUMsY0FBQSxHQUFBSixNQUFBLENBQUFJLGNBQUEsY0FBQVQsR0FBQSxFQUFBVSxHQUFBLEVBQUFDLElBQUEsSUFBQVgsR0FBQSxDQUFBVSxH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