@tricoteuses/assemblee 1.0.0-next.2 → 1.0.2

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 (135) hide show
  1. package/README.md +2 -0
  2. package/lib/api.js +23 -7
  3. package/lib/api.mjs +41 -0
  4. package/lib/bugs/acteur-00010/plugin.test.js +139 -33
  5. package/lib/bugs/acteur-00010/plugin.test.mjs +33 -0
  6. package/lib/bugs/acteur-00010.js +166 -24
  7. package/lib/bugs/acteur-00010.mjs +31 -0
  8. package/lib/bugs/agenda-00002/plugin.test.js +178 -52
  9. package/lib/bugs/agenda-00002/plugin.test.mjs +52 -0
  10. package/lib/bugs/agenda-00002.js +507 -143
  11. package/lib/bugs/agenda-00002.mjs +197 -0
  12. package/lib/bugs/agenda-00008/plugin.test.js +143 -31
  13. package/lib/bugs/agenda-00008/plugin.test.mjs +31 -0
  14. package/lib/bugs/agenda-00008.js +180 -25
  15. package/lib/bugs/agenda-00008.mjs +30 -0
  16. package/lib/bugs/agenda-00011/plugin.test.js +371 -156
  17. package/lib/bugs/agenda-00011/plugin.test.mjs +156 -0
  18. package/lib/bugs/agenda-00011.js +416 -117
  19. package/lib/bugs/agenda-00011.mjs +150 -0
  20. package/lib/bugs.js +591 -54
  21. package/lib/bugs.mjs +93 -0
  22. package/lib/cleaners/actes_legislatifs.js +149 -61
  23. package/lib/cleaners/actes_legislatifs.mjs +311 -0
  24. package/lib/cleaners/acteurs.js +255 -123
  25. package/lib/cleaners/acteurs.mjs +211 -0
  26. package/lib/cleaners/amendements.js +242 -117
  27. package/lib/cleaners/amendements.mjs +292 -0
  28. package/lib/cleaners/documents.js +147 -62
  29. package/lib/cleaners/documents.mjs +162 -0
  30. package/lib/cleaners/dossiers_legislatifs.js +132 -45
  31. package/lib/cleaners/dossiers_legislatifs.mjs +123 -0
  32. package/lib/cleaners/index.js +64 -8
  33. package/lib/cleaners/index.mjs +8 -0
  34. package/lib/cleaners/organes.js +54 -21
  35. package/lib/cleaners/organes.mjs +64 -0
  36. package/lib/cleaners/reunions.js +237 -127
  37. package/lib/cleaners/reunions.mjs +318 -0
  38. package/lib/cleaners/scrutins.js +261 -99
  39. package/lib/cleaners/scrutins.mjs +254 -0
  40. package/lib/cleaners/xml.js +81 -16
  41. package/lib/cleaners/xml.mjs +42 -0
  42. package/lib/datasets.js +284 -153
  43. package/lib/datasets.mjs +596 -0
  44. package/lib/dates.js +93 -34
  45. package/lib/dates.mjs +98 -0
  46. package/lib/dossiers_legislatifs.js +107 -33
  47. package/lib/dossiers_legislatifs.mjs +215 -0
  48. package/lib/file_systems.js +203 -35
  49. package/lib/file_systems.mjs +64 -0
  50. package/lib/git.js +139 -41
  51. package/lib/git.mjs +114 -0
  52. package/lib/index.js +310 -16
  53. package/lib/index.mjs +16 -0
  54. package/lib/inserters.js +355 -131
  55. package/lib/inserters.mjs +413 -0
  56. package/lib/loaders.js +900 -440
  57. package/lib/loaders.mjs +678 -0
  58. package/lib/organes.js +15 -5
  59. package/lib/organes.mjs +18 -0
  60. package/lib/parsers/documents.js +241 -89
  61. package/lib/parsers/documents.mjs +433 -0
  62. package/lib/parsers/index.js +36 -3
  63. package/lib/parsers/index.mjs +3 -0
  64. package/lib/parsers/recherche_amendements.js +616 -173
  65. package/lib/parsers/recherche_amendements.mjs +189 -0
  66. package/lib/raw_types/acteurs_et_organes.d.ts +36 -148
  67. package/lib/raw_types/acteurs_et_organes.js +228 -506
  68. package/lib/raw_types/acteurs_et_organes.mjs +1240 -0
  69. package/lib/raw_types/agendas.js +165 -75
  70. package/lib/raw_types/agendas.mjs +944 -0
  71. package/lib/raw_types/amendements.js +165 -77
  72. package/lib/raw_types/amendements.mjs +1040 -0
  73. package/lib/raw_types/dossiers_legislatifs.d.ts +1 -43
  74. package/lib/raw_types/dossiers_legislatifs.js +181 -143
  75. package/lib/raw_types/dossiers_legislatifs.mjs +1792 -0
  76. package/lib/raw_types/scrutins.js +144 -61
  77. package/lib/raw_types/scrutins.mjs +645 -0
  78. package/lib/scripts/bugs_helper.js +657 -155
  79. package/lib/scripts/bugs_helper.mjs +286 -0
  80. package/lib/scripts/clean_data.js +380 -145
  81. package/lib/scripts/clean_data.mjs +190 -0
  82. package/lib/scripts/clean_reorganized_data.js +627 -331
  83. package/lib/scripts/clean_reorganized_data.mjs +520 -0
  84. package/lib/scripts/diff_amendements.js +159 -73
  85. package/lib/scripts/diff_amendements.mjs +234 -0
  86. package/lib/scripts/document_dossiers_legislatifs.js +570 -288
  87. package/lib/scripts/document_dossiers_legislatifs.mjs +494 -0
  88. package/lib/scripts/get_today_reunions.js +37 -20
  89. package/lib/scripts/get_today_reunions.mjs +41 -0
  90. package/lib/scripts/merge_scrutins.js +121 -39
  91. package/lib/scripts/merge_scrutins.mjs +69 -0
  92. package/lib/scripts/parse_textes_lois.js +179 -125
  93. package/lib/scripts/parse_textes_lois.mjs +215 -0
  94. package/lib/scripts/raw_types_from_amendements.js +276 -77
  95. package/lib/scripts/raw_types_from_amendements.mjs +118 -0
  96. package/lib/scripts/reorganize_data.js +867 -446
  97. package/lib/scripts/reorganize_data.mjs +712 -0
  98. package/lib/scripts/retrieve_deputes_photos.js +378 -157
  99. package/lib/scripts/retrieve_deputes_photos.mjs +230 -0
  100. package/lib/scripts/retrieve_documents.js +648 -172
  101. package/lib/scripts/retrieve_documents.mjs +292 -0
  102. package/lib/scripts/retrieve_open_data.js +286 -85
  103. package/lib/scripts/retrieve_open_data.mjs +125 -0
  104. package/lib/scripts/retrieve_pending_amendments.js +302 -69
  105. package/lib/scripts/retrieve_pending_amendments.mjs +130 -0
  106. package/lib/scripts/retrieve_senateurs_photos.js +374 -198
  107. package/lib/scripts/retrieve_senateurs_photos.mjs +277 -0
  108. package/lib/scripts/retrieve_textes_lois.js +343 -89
  109. package/lib/scripts/retrieve_textes_lois.mjs +168 -0
  110. package/lib/scripts/test_load.js +30 -11
  111. package/lib/scripts/test_load.mjs +26 -0
  112. package/lib/scripts/test_load_big_files.js +30 -11
  113. package/lib/scripts/test_load_big_files.mjs +26 -0
  114. package/lib/scripts/validate_json.js +370 -120
  115. package/lib/scripts/validate_json.mjs +216 -0
  116. package/lib/shared_types/codes_actes.js +50 -15
  117. package/lib/shared_types/codes_actes.mjs +228 -0
  118. package/lib/strings.js +16 -3
  119. package/lib/strings.mjs +7 -0
  120. package/lib/types/acteurs_et_organes.js +156 -71
  121. package/lib/types/acteurs_et_organes.mjs +918 -0
  122. package/lib/types/agendas.js +154 -67
  123. package/lib/types/agendas.mjs +623 -0
  124. package/lib/types/amendements.js +166 -77
  125. package/lib/types/amendements.mjs +885 -0
  126. package/lib/types/dossiers_legislatifs.d.ts +1 -42
  127. package/lib/types/dossiers_legislatifs.js +182 -143
  128. package/lib/types/dossiers_legislatifs.mjs +1120 -0
  129. package/lib/types/legislatures.js +12 -3
  130. package/lib/types/legislatures.mjs +9 -0
  131. package/lib/types/scrutins.js +144 -61
  132. package/lib/types/scrutins.mjs +528 -0
  133. package/lib/urls.js +44 -25
  134. package/lib/urls.mjs +201 -0
  135. package/package.json +33 -12
@@ -1,14 +1,132 @@
1
- import assert from "assert";
2
- import { execSync } from "child_process";
3
- import commandLineArgs from "command-line-args";
4
- import fs from "fs-extra";
5
- import fetch from "node-fetch";
6
- import path from "path";
7
- import { EnabledDatasets } from "../datasets.js";
8
- import { loadAssembleeData } from "../loaders.js";
9
- import { TypeDocument } from "../types/dossiers_legislatifs.js";
10
- import { DocumentUrlFormat, urlFromDocument } from "../urls.js";
11
- const optionsDefinitions = [{
1
+ "use strict";
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); }
4
+
5
+ require("core-js/modules/es.array.slice.js");
6
+
7
+ require("core-js/modules/es.function.name.js");
8
+
9
+ require("core-js/modules/es.array.from.js");
10
+
11
+ require("core-js/modules/es.symbol.js");
12
+
13
+ require("core-js/modules/es.symbol.description.js");
14
+
15
+ require("core-js/modules/es.symbol.iterator.js");
16
+
17
+ require("core-js/modules/es.array.is-array.js");
18
+
19
+ require("core-js/modules/es.promise.js");
20
+
21
+ require("core-js/modules/es.object.define-property.js");
22
+
23
+ require("core-js/modules/es.object.keys.js");
24
+
25
+ require("core-js/modules/es.object.get-own-property-descriptor.js");
26
+
27
+ require("core-js/modules/es.array.for-each.js");
28
+
29
+ require("core-js/modules/web.dom-collections.for-each.js");
30
+
31
+ require("core-js/modules/es.object.get-own-property-descriptors.js");
32
+
33
+ require("core-js/modules/es.object.define-properties.js");
34
+
35
+ require("core-js/modules/es.symbol.async-iterator.js");
36
+
37
+ require("core-js/modules/es.symbol.to-string-tag.js");
38
+
39
+ require("core-js/modules/es.json.to-string-tag.js");
40
+
41
+ require("core-js/modules/es.math.to-string-tag.js");
42
+
43
+ require("core-js/modules/es.object.create.js");
44
+
45
+ require("core-js/modules/es.object.get-prototype-of.js");
46
+
47
+ require("core-js/modules/es.object.set-prototype-of.js");
48
+
49
+ require("core-js/modules/es.array.reverse.js");
50
+
51
+ require("core-js/modules/es.regexp.exec.js");
52
+
53
+ require("core-js/modules/es.array.join.js");
54
+
55
+ require("core-js/modules/es.array.sort.js");
56
+
57
+ require("core-js/modules/es.array.map.js");
58
+
59
+ require("core-js/modules/es.array.filter.js");
60
+
61
+ require("core-js/modules/es.object.to-string.js");
62
+
63
+ require("core-js/modules/es.object.values.js");
64
+
65
+ require("core-js/modules/es.string.starts-with.js");
66
+
67
+ require("core-js/modules/es.array.concat.js");
68
+
69
+ require("core-js/modules/es.array.iterator.js");
70
+
71
+ require("core-js/modules/es.string.iterator.js");
72
+
73
+ require("core-js/modules/web.dom-collections.iterator.js");
74
+
75
+ require("core-js/modules/web.url.js");
76
+
77
+ require("core-js/modules/web.url-search-params.js");
78
+
79
+ require("core-js/modules/es.string.split.js");
80
+
81
+ var _assert = _interopRequireDefault(require("assert"));
82
+
83
+ var _child_process = require("child_process");
84
+
85
+ var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
86
+
87
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
88
+
89
+ var _nodeFetch = _interopRequireDefault(require("node-fetch"));
90
+
91
+ var _path = _interopRequireDefault(require("path"));
92
+
93
+ var _datasets = require("../datasets");
94
+
95
+ var _loaders = require("../loaders");
96
+
97
+ var _dossiers_legislatifs = require("../types/dossiers_legislatifs");
98
+
99
+ var _urls = require("../urls");
100
+
101
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
102
+
103
+ 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, $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 generator._invoke = function (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); } }; }(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; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return 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, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), 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 (object) { var 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; }
104
+
105
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
106
+
107
+ 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."); }
108
+
109
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
110
+
111
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
112
+
113
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
114
+
115
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
116
+
117
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
118
+
119
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
120
+
121
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
122
+
123
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
124
+
125
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
126
+
127
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
128
+
129
+ var optionsDefinitions = [{
12
130
  alias: "c",
13
131
  help: "commit documents",
14
132
  name: "commit",
@@ -45,13 +163,13 @@ const optionsDefinitions = [{
45
163
  name: "dataDir",
46
164
  type: String
47
165
  }];
48
- const options = commandLineArgs(optionsDefinitions);
166
+ var options = (0, _commandLineArgs["default"])(optionsDefinitions);
49
167
 
50
168
  function commitAndPush(repositoryDir, commit, remotes) {
51
- let error = false;
169
+ var error = false;
52
170
 
53
171
  if (commit) {
54
- execSync("git add .", {
172
+ (0, _child_process.execSync)("git add .", {
55
173
  cwd: repositoryDir,
56
174
  env: process.env,
57
175
  encoding: "utf-8",
@@ -59,7 +177,7 @@ function commitAndPush(repositoryDir, commit, remotes) {
59
177
  });
60
178
 
61
179
  try {
62
- execSync('git commit -m "Nouvelle moisson"', {
180
+ (0, _child_process.execSync)('git commit -m "Nouvelle moisson"', {
63
181
  cwd: repositoryDir,
64
182
  env: process.env,
65
183
  encoding: "utf-8"
@@ -71,98 +189,234 @@ function commitAndPush(repositoryDir, commit, remotes) {
71
189
  }
72
190
  }
73
191
 
74
- for (const remote of remotes || []) {
75
- try {
76
- execSync(`git push ${remote} master`, {
77
- cwd: repositoryDir,
78
- env: process.env,
79
- encoding: "utf-8",
80
- stdio: ["ignore", "ignore", "pipe"]
81
- });
82
- } catch (childProcess) {
83
- // Don't stop when push fails.
84
- console.error(childProcess.output);
85
- error = true;
192
+ var _iterator = _createForOfIteratorHelper(remotes || []),
193
+ _step;
194
+
195
+ try {
196
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
197
+ var remote = _step.value;
198
+
199
+ try {
200
+ (0, _child_process.execSync)("git push ".concat(remote, " master"), {
201
+ cwd: repositoryDir,
202
+ env: process.env,
203
+ encoding: "utf-8",
204
+ stdio: ["ignore", "ignore", "pipe"]
205
+ });
206
+ } catch (childProcess) {
207
+ // Don't stop when push fails.
208
+ console.error(childProcess.output);
209
+ error = true;
210
+ }
86
211
  }
212
+ } catch (err) {
213
+ _iterator.e(err);
214
+ } finally {
215
+ _iterator.f();
87
216
  }
88
217
  }
89
218
 
90
219
  return error;
91
220
  }
92
221
 
93
- async function retrieveDocuments() {
94
- assert(!options.commit || options.uid, 'Options "commit" & "uid" are incompatible');
95
- const dataDir = options.dataDir;
96
- const {
97
- documentByUid
98
- } = loadAssembleeData(dataDir, EnabledDatasets.DossiersLegislatifs, options.legislature);
99
- const textesLoisDir = path.join(dataDir, "www.assemblee-nationale.fr", options.legislature, "textes");
100
- fs.ensureDirSync(textesLoisDir);
101
-
102
- if (!options.uid) {
103
- for (const filename of fs.readdirSync(textesLoisDir)) {
104
- if (filename[0] === ".") {
105
- continue;
106
- }
222
+ function retrieveDocuments() {
223
+ return _retrieveDocuments.apply(this, arguments);
224
+ }
107
225
 
108
- fs.removeSync(path.join(textesLoisDir, filename));
109
- }
110
- }
226
+ function _retrieveDocuments() {
227
+ _retrieveDocuments = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
228
+ var dataDir, _loadAssembleeData, documentByUid, textesLoisDir, _iterator2, _step2, filename, textesLois, firstUid, skip, _iterator3, _step3, texteLoi, url, filePath, response, page;
111
229
 
112
- const textesLois = Object.values(documentByUid).filter(document => document.xsiType === TypeDocument.TexteLoiType).filter(document => document.uid.startsWith("PIONAN") || document.uid.startsWith("PRJLAN")).map(document => {
113
- return { ...document,
114
- rawDocumentAssembleeUrl: urlFromDocument(document, DocumentUrlFormat.RawHtml)
115
- };
116
- }).sort((a, b) => a.rawDocumentAssembleeUrl === null ? -1 : b.rawDocumentAssembleeUrl === null ? 1 : a.rawDocumentAssembleeUrl.localeCompare(b.rawDocumentAssembleeUrl));
117
- const firstUid = options.uid;
118
- let skip = !!firstUid;
119
-
120
- for (const texteLoi of textesLois) {
121
- if (skip) {
122
- if (texteLoi.uid === firstUid) {
123
- skip = false;
124
- } else {
125
- continue;
126
- }
127
- }
230
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
231
+ while (1) {
232
+ switch (_context.prev = _context.next) {
233
+ case 0:
234
+ (0, _assert["default"])(!options.commit || options.uid, 'Options "commit" & "uid" are incompatible');
235
+ dataDir = options.dataDir;
236
+ _loadAssembleeData = (0, _loaders.loadAssembleeData)(dataDir, _datasets.EnabledDatasets.DossiersLegislatifs, options.legislature), documentByUid = _loadAssembleeData.documentByUid;
237
+ textesLoisDir = _path["default"].join(dataDir, "www.assemblee-nationale.fr", options.legislature, "textes");
128
238
 
129
- if (!options.silent) {
130
- console.log(`Retrieving bill ${texteLoi.uid} at ${texteLoi.rawDocumentAssembleeUrl}`);
131
- }
239
+ _fsExtra["default"].ensureDirSync(textesLoisDir);
132
240
 
133
- if (texteLoi.rawDocumentAssembleeUrl === null) {
134
- continue;
135
- }
241
+ if (options.uid) {
242
+ _context.next = 24;
243
+ break;
244
+ }
136
245
 
137
- const url = new URL(texteLoi.rawDocumentAssembleeUrl);
138
- const filePath = path.join(dataDir, url.hostname, ...url.pathname.split("/"));
139
- assert.strictEqual(textesLoisDir, path.dirname(filePath));
140
- const response = await fetch(texteLoi.rawDocumentAssembleeUrl);
141
- const page = await response.text();
142
-
143
- if (!response.ok) {
144
- if (response.status !== 404) {
145
- console.error(`Error while getting page "${texteLoi.rawDocumentAssembleeUrl}" (uid: ${texteLoi.uid}):\n\nError:\n${JSON.stringify({
146
- code: response.status,
147
- message: response.statusText
148
- }, null, 2)}`);
149
- }
246
+ _iterator2 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(textesLoisDir));
247
+ _context.prev = 7;
150
248
 
151
- continue;
152
- }
249
+ _iterator2.s();
153
250
 
154
- fs.writeFileSync(filePath, page);
155
- }
251
+ case 9:
252
+ if ((_step2 = _iterator2.n()).done) {
253
+ _context.next = 16;
254
+ break;
255
+ }
156
256
 
157
- if (commitAndPush(textesLoisDir, options.commit, options.remote)) {
158
- process.exit(1);
159
- }
257
+ filename = _step2.value;
258
+
259
+ if (!(filename[0] === ".")) {
260
+ _context.next = 13;
261
+ break;
262
+ }
263
+
264
+ return _context.abrupt("continue", 14);
265
+
266
+ case 13:
267
+ _fsExtra["default"].removeSync(_path["default"].join(textesLoisDir, filename));
268
+
269
+ case 14:
270
+ _context.next = 9;
271
+ break;
272
+
273
+ case 16:
274
+ _context.next = 21;
275
+ break;
276
+
277
+ case 18:
278
+ _context.prev = 18;
279
+ _context.t0 = _context["catch"](7);
280
+
281
+ _iterator2.e(_context.t0);
282
+
283
+ case 21:
284
+ _context.prev = 21;
285
+
286
+ _iterator2.f();
287
+
288
+ return _context.finish(21);
160
289
 
161
- return textesLois;
290
+ case 24:
291
+ textesLois = Object.values(documentByUid).filter(function (document) {
292
+ return document.xsiType === _dossiers_legislatifs.TypeDocument.TexteLoiType;
293
+ }).filter(function (document) {
294
+ return document.uid.startsWith("PIONAN") || document.uid.startsWith("PRJLAN");
295
+ }).map(function (document) {
296
+ return _objectSpread(_objectSpread({}, document), {}, {
297
+ rawDocumentAssembleeUrl: (0, _urls.urlFromDocument)(document, _urls.DocumentUrlFormat.RawHtml)
298
+ });
299
+ }).sort(function (a, b) {
300
+ return a.rawDocumentAssembleeUrl === null ? -1 : b.rawDocumentAssembleeUrl === null ? 1 : a.rawDocumentAssembleeUrl.localeCompare(b.rawDocumentAssembleeUrl);
301
+ });
302
+ firstUid = options.uid;
303
+ skip = !!firstUid;
304
+ _iterator3 = _createForOfIteratorHelper(textesLois);
305
+ _context.prev = 28;
306
+
307
+ _iterator3.s();
308
+
309
+ case 30:
310
+ if ((_step3 = _iterator3.n()).done) {
311
+ _context.next = 56;
312
+ break;
313
+ }
314
+
315
+ texteLoi = _step3.value;
316
+
317
+ if (!skip) {
318
+ _context.next = 38;
319
+ break;
320
+ }
321
+
322
+ if (!(texteLoi.uid === firstUid)) {
323
+ _context.next = 37;
324
+ break;
325
+ }
326
+
327
+ skip = false;
328
+ _context.next = 38;
329
+ break;
330
+
331
+ case 37:
332
+ return _context.abrupt("continue", 54);
333
+
334
+ case 38:
335
+ if (!options.silent) {
336
+ console.log("Retrieving bill ".concat(texteLoi.uid, " at ").concat(texteLoi.rawDocumentAssembleeUrl));
337
+ }
338
+
339
+ if (!(texteLoi.rawDocumentAssembleeUrl === null)) {
340
+ _context.next = 41;
341
+ break;
342
+ }
343
+
344
+ return _context.abrupt("continue", 54);
345
+
346
+ case 41:
347
+ url = new URL(texteLoi.rawDocumentAssembleeUrl);
348
+ filePath = _path["default"].join.apply(_path["default"], [dataDir, url.hostname].concat(_toConsumableArray(url.pathname.split("/"))));
349
+
350
+ _assert["default"].strictEqual(textesLoisDir, _path["default"].dirname(filePath));
351
+
352
+ _context.next = 46;
353
+ return (0, _nodeFetch["default"])(texteLoi.rawDocumentAssembleeUrl);
354
+
355
+ case 46:
356
+ response = _context.sent;
357
+ _context.next = 49;
358
+ return response.text();
359
+
360
+ case 49:
361
+ page = _context.sent;
362
+
363
+ if (response.ok) {
364
+ _context.next = 53;
365
+ break;
366
+ }
367
+
368
+ if (response.status !== 404) {
369
+ console.error("Error while getting page \"".concat(texteLoi.rawDocumentAssembleeUrl, "\" (uid: ").concat(texteLoi.uid, "):\n\nError:\n").concat(JSON.stringify({
370
+ code: response.status,
371
+ message: response.statusText
372
+ }, null, 2)));
373
+ }
374
+
375
+ return _context.abrupt("continue", 54);
376
+
377
+ case 53:
378
+ _fsExtra["default"].writeFileSync(filePath, page);
379
+
380
+ case 54:
381
+ _context.next = 30;
382
+ break;
383
+
384
+ case 56:
385
+ _context.next = 61;
386
+ break;
387
+
388
+ case 58:
389
+ _context.prev = 58;
390
+ _context.t1 = _context["catch"](28);
391
+
392
+ _iterator3.e(_context.t1);
393
+
394
+ case 61:
395
+ _context.prev = 61;
396
+
397
+ _iterator3.f();
398
+
399
+ return _context.finish(61);
400
+
401
+ case 64:
402
+ if (commitAndPush(textesLoisDir, options.commit, options.remote)) {
403
+ process.exit(1);
404
+ }
405
+
406
+ return _context.abrupt("return", textesLois);
407
+
408
+ case 66:
409
+ case "end":
410
+ return _context.stop();
411
+ }
412
+ }
413
+ }, _callee, null, [[7, 18, 21, 24], [28, 58, 61, 64]]);
414
+ }));
415
+ return _retrieveDocuments.apply(this, arguments);
162
416
  }
163
417
 
164
- retrieveDocuments().catch(error => {
418
+ retrieveDocuments()["catch"](function (error) {
165
419
  console.log(error);
166
420
  process.exit(1);
167
421
  });
168
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwiZmV0Y2giLCJwYXRoIiwiRW5hYmxlZERhdGFzZXRzIiwibG9hZEFzc2VtYmxlZURhdGEiLCJUeXBlRG9jdW1lbnQiLCJEb2N1bWVudFVybEZvcm1hdCIsInVybEZyb21Eb2N1bWVudCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIlN0cmluZyIsIm11bHRpcGxlIiwiZGVmYXVsdE9wdGlvbiIsIm9wdGlvbnMiLCJjb21taXRBbmRQdXNoIiwicmVwb3NpdG9yeURpciIsImNvbW1pdCIsInJlbW90ZXMiLCJlcnJvciIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwic3RkZXJyIiwidGVzdCIsInN0ZG91dCIsImNvbnNvbGUiLCJvdXRwdXQiLCJyZW1vdGUiLCJyZXRyaWV2ZURvY3VtZW50cyIsInVpZCIsImRhdGFEaXIiLCJkb2N1bWVudEJ5VWlkIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImxlZ2lzbGF0dXJlIiwidGV4dGVzTG9pc0RpciIsImpvaW4iLCJlbnN1cmVEaXJTeW5jIiwiZmlsZW5hbWUiLCJyZWFkZGlyU3luYyIsInJlbW92ZVN5bmMiLCJ0ZXh0ZXNMb2lzIiwiT2JqZWN0IiwidmFsdWVzIiwiZmlsdGVyIiwiZG9jdW1lbnQiLCJ4c2lUeXBlIiwiVGV4dGVMb2lUeXBlIiwic3RhcnRzV2l0aCIsIm1hcCIsInJhd0RvY3VtZW50QXNzZW1ibGVlVXJsIiwiUmF3SHRtbCIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJmaXJzdFVpZCIsInNraXAiLCJ0ZXh0ZUxvaSIsInNpbGVudCIsImxvZyIsInVybCIsIlVSTCIsImZpbGVQYXRoIiwiaG9zdG5hbWUiLCJwYXRobmFtZSIsInNwbGl0Iiwic3RyaWN0RXF1YWwiLCJkaXJuYW1lIiwicmVzcG9uc2UiLCJwYWdlIiwidGV4dCIsIm9rIiwic3RhdHVzIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvZGUiLCJtZXNzYWdlIiwic3RhdHVzVGV4dCIsIndyaXRlRmlsZVN5bmMiLCJleGl0IiwiY2F0Y2giXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZXRyaWV2ZV90ZXh0ZXNfbG9pcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGxvYWRBc3NlbWJsZWVEYXRhIH0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgRG9jdW1lbnQsIFR5cGVEb2N1bWVudCB9IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBEb2N1bWVudFVybEZvcm1hdCwgdXJsRnJvbURvY3VtZW50IH0gZnJvbSBcIi4uL3VybHNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgZG9jdW1lbnRzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwibFwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCIxNlwiLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInVcIixcbiAgICBoZWxwOiBcIlVJRCBvZiBmaXJzdCBBc3NlbWJsw6llJ3MgZG9jdW1lbnQgdG8gcmV0cmlldmVcIixcbiAgICBuYW1lOiBcInVpZFwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBjb21taXQ6IGJvb2xlYW4sXG4gIHJlbW90ZXM/OiBzdHJpbmdbXSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAoY29tbWl0KSB7XG4gICAgZXhlY1N5bmMoXCJnaXQgYWRkIC5cIiwge1xuICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICBleGVjU3luYygnZ2l0IGNvbW1pdCAtbSBcIk5vdXZlbGxlIG1vaXNzb25cIicsIHtcbiAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGNoaWxkUHJvY2VzcyBhcyBDaGlsZFByb2Nlc3MpLnN0ZGVyciA9PT0gbnVsbCB8fFxuICAgICAgICAhL25vdGhpbmcgdG8gY29tbWl0Ly50ZXN0KChjaGlsZFByb2Nlc3MgYXMgYW55KS5zdGRvdXQpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICB0aHJvdyBjaGlsZFByb2Nlc3NcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlRG9jdW1lbnRzKCk6IFByb21pc2U8RG9jdW1lbnRbXT4ge1xuICBhc3NlcnQoXG4gICAgIW9wdGlvbnMuY29tbWl0IHx8IG9wdGlvbnMudWlkLFxuICAgICdPcHRpb25zIFwiY29tbWl0XCIgJiBcInVpZFwiIGFyZSBpbmNvbXBhdGlibGUnLFxuICApXG5cbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCB7IGRvY3VtZW50QnlVaWQgfSA9IGxvYWRBc3NlbWJsZWVEYXRhKFxuICAgIGRhdGFEaXIsXG4gICAgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMsXG4gICAgb3B0aW9ucy5sZWdpc2xhdHVyZSxcbiAgKVxuXG4gIGNvbnN0IHRleHRlc0xvaXNEaXIgPSBwYXRoLmpvaW4oXG4gICAgZGF0YURpcixcbiAgICBcInd3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyXCIsXG4gICAgb3B0aW9ucy5sZWdpc2xhdHVyZSxcbiAgICBcInRleHRlc1wiLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVzTG9pc0RpcilcbiAgaWYgKCFvcHRpb25zLnVpZCkge1xuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmModGV4dGVzTG9pc0RpcikpIHtcbiAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKHRleHRlc0xvaXNEaXIsIGZpbGVuYW1lKSlcbiAgICB9XG4gIH1cblxuICBjb25zdCB0ZXh0ZXNMb2lzID0gT2JqZWN0LnZhbHVlcyhkb2N1bWVudEJ5VWlkKVxuICAgIC5maWx0ZXIoKGRvY3VtZW50KSA9PiBkb2N1bWVudC54c2lUeXBlID09PSBUeXBlRG9jdW1lbnQuVGV4dGVMb2lUeXBlKVxuICAgIC5maWx0ZXIoXG4gICAgICAoZG9jdW1lbnQpID0+XG4gICAgICAgIGRvY3VtZW50LnVpZC5zdGFydHNXaXRoKFwiUElPTkFOXCIpIHx8IGRvY3VtZW50LnVpZC5zdGFydHNXaXRoKFwiUFJKTEFOXCIpLFxuICAgIClcbiAgICAubWFwKChkb2N1bWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZG9jdW1lbnQsXG4gICAgICAgIHJhd0RvY3VtZW50QXNzZW1ibGVlVXJsOiB1cmxGcm9tRG9jdW1lbnQoXG4gICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgRG9jdW1lbnRVcmxGb3JtYXQuUmF3SHRtbCxcbiAgICAgICAgKSxcbiAgICAgIH1cbiAgICB9KVxuICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgYS5yYXdEb2N1bWVudEFzc2VtYmxlZVVybCA9PT0gbnVsbFxuICAgICAgICA/IC0xXG4gICAgICAgIDogYi5yYXdEb2N1bWVudEFzc2VtYmxlZVVybCA9PT0gbnVsbFxuICAgICAgICA/IDFcbiAgICAgICAgOiBhLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsLmxvY2FsZUNvbXBhcmUoYi5yYXdEb2N1bWVudEFzc2VtYmxlZVVybCksXG4gICAgKVxuXG4gIGNvbnN0IGZpcnN0VWlkID0gb3B0aW9ucy51aWRcbiAgbGV0IHNraXAgPSAhIWZpcnN0VWlkXG4gIGZvciAoY29uc3QgdGV4dGVMb2kgb2YgdGV4dGVzTG9pcykge1xuICAgIGlmIChza2lwKSB7XG4gICAgICBpZiAodGV4dGVMb2kudWlkID09PSBmaXJzdFVpZCkge1xuICAgICAgICBza2lwID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgUmV0cmlldmluZyBiaWxsICR7dGV4dGVMb2kudWlkfSBhdCAke3RleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsfWAsXG4gICAgICApXG4gICAgfVxuICAgIGlmICh0ZXh0ZUxvaS5yYXdEb2N1bWVudEFzc2VtYmxlZVVybCA9PT0gbnVsbCkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0ZXh0ZUxvaS5yYXdEb2N1bWVudEFzc2VtYmxlZVVybClcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICB1cmwuaG9zdG5hbWUsXG4gICAgICAuLi51cmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpLFxuICAgIClcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGV4dGVzTG9pc0RpciwgcGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwpXG4gICAgY29uc3QgcGFnZSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDQwNCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBFcnJvciB3aGlsZSBnZXR0aW5nIHBhZ2UgXCIke1xuICAgICAgICAgICAgdGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmxcbiAgICAgICAgICB9XCIgKHVpZDogJHt0ZXh0ZUxvaS51aWR9KTpcXG5cXG5FcnJvcjpcXG4ke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgeyBjb2RlOiByZXNwb25zZS5zdGF0dXMsIG1lc3NhZ2U6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAyLFxuICAgICAgICAgICl9YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgcGFnZSlcbiAgfVxuXG4gIGlmIChjb21taXRBbmRQdXNoKHRleHRlc0xvaXNEaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICByZXR1cm4gdGV4dGVzTG9pc1xufVxuXG5yZXRyaWV2ZURvY3VtZW50cygpLmNhdGNoKChlcnJvcikgPT4ge1xuICBjb25zb2xlLmxvZyhlcnJvcilcbiAgcHJvY2Vzcy5leGl0KDEpXG59KVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFQLE1BQW1CLFFBQW5CO0FBQ0EsU0FBdUJDLFFBQXZCLFFBQXVDLGVBQXZDO0FBQ0EsT0FBT0MsZUFBUCxNQUE0QixtQkFBNUI7QUFDQSxPQUFPQyxFQUFQLE1BQWUsVUFBZjtBQUNBLE9BQU9DLEtBQVAsTUFBa0IsWUFBbEI7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLE1BQWpCO1NBRVNDLGU7U0FDQUMsaUI7U0FDVUMsWTtTQUNWQyxpQixFQUFtQkMsZTtBQUU1QixNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsa0JBRlI7RUFHRUMsSUFBSSxFQUFFLFFBSFI7RUFJRUMsSUFBSSxFQUFFQztBQUpSLENBRHlCLEVBT3pCO0VBQ0VKLEtBQUssRUFBRSxHQURUO0VBRUVLLFlBQVksRUFBRSxJQUZoQjtFQUdFSCxJQUFJLEVBQUUsYUFIUjtFQUlFQyxJQUFJLEVBQUVHO0FBSlIsQ0FQeUIsRUFhekI7RUFDRU4sS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLDZCQUZSO0VBR0VNLFFBQVEsRUFBRSxJQUhaO0VBSUVMLElBQUksRUFBRSxRQUpSO0VBS0VDLElBQUksRUFBRUc7QUFMUixDQWJ5QixFQW9CekI7RUFDRU4sS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLG9CQUZSO0VBR0VDLElBQUksRUFBRSxR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
422
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJTdHJpbmciLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwiY29tbWl0QW5kUHVzaCIsInJlcG9zaXRvcnlEaXIiLCJjb21taXQiLCJyZW1vdGVzIiwiZXJyb3IiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwic3RkZXJyIiwidGVzdCIsInN0ZG91dCIsImNvbnNvbGUiLCJvdXRwdXQiLCJyZW1vdGUiLCJyZXRyaWV2ZURvY3VtZW50cyIsImFzc2VydCIsInVpZCIsImRhdGFEaXIiLCJsb2FkQXNzZW1ibGVlRGF0YSIsIkVuYWJsZWREYXRhc2V0cyIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJsZWdpc2xhdHVyZSIsImRvY3VtZW50QnlVaWQiLCJ0ZXh0ZXNMb2lzRGlyIiwicGF0aCIsImpvaW4iLCJmcyIsImVuc3VyZURpclN5bmMiLCJyZWFkZGlyU3luYyIsImZpbGVuYW1lIiwicmVtb3ZlU3luYyIsInRleHRlc0xvaXMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJkb2N1bWVudCIsInhzaVR5cGUiLCJUeXBlRG9jdW1lbnQiLCJUZXh0ZUxvaVR5cGUiLCJzdGFydHNXaXRoIiwibWFwIiwicmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwiLCJ1cmxGcm9tRG9jdW1lbnQiLCJEb2N1bWVudFVybEZvcm1hdCIsIlJhd0h0bWwiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZmlyc3RVaWQiLCJza2lwIiwidGV4dGVMb2kiLCJzaWxlbnQiLCJsb2ciLCJ1cmwiLCJVUkwiLCJmaWxlUGF0aCIsImhvc3RuYW1lIiwicGF0aG5hbWUiLCJzcGxpdCIsInN0cmljdEVxdWFsIiwiZGlybmFtZSIsImZldGNoIiwicmVzcG9uc2UiLCJ0ZXh0IiwicGFnZSIsIm9rIiwic3RhdHVzIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvZGUiLCJtZXNzYWdlIiwic3RhdHVzVGV4dCIsIndyaXRlRmlsZVN5bmMiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfdGV4dGVzX2xvaXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IENoaWxkUHJvY2VzcywgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBsb2FkQXNzZW1ibGVlRGF0YSB9IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IERvY3VtZW50LCBUeXBlRG9jdW1lbnQgfSBmcm9tIFwiLi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgRG9jdW1lbnRVcmxGb3JtYXQsIHVybEZyb21Eb2N1bWVudCB9IGZyb20gXCIuLi91cmxzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IGRvY3VtZW50c1wiLFxuICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImxcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiMTZcIixcbiAgICBuYW1lOiBcImxlZ2lzbGF0dXJlXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiclwiLFxuICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJzXCIsXG4gICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJ1XCIsXG4gICAgaGVscDogXCJVSUQgb2YgZmlyc3QgQXNzZW1ibMOpZSdzIGRvY3VtZW50IHRvIHJldHJpZXZlXCIsXG4gICAgbmFtZTogXCJ1aWRcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJ2XCIsXG4gICAgaGVscDogXCJ2ZXJib3NlIGxvZ3NcIixcbiAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgY29tbWl0OiBib29sZWFuLFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKGNvbW1pdCkge1xuICAgIGV4ZWNTeW5jKFwiZ2l0IGFkZCAuXCIsIHtcbiAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgZXhlY1N5bmMoJ2dpdCBjb21taXQgLW0gXCJOb3V2ZWxsZSBtb2lzc29uXCInLCB7XG4gICAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChjaGlsZFByb2Nlc3MgYXMgQ2hpbGRQcm9jZXNzKS5zdGRlcnIgPT09IG51bGwgfHxcbiAgICAgICAgIS9ub3RoaW5nIHRvIGNvbW1pdC8udGVzdCgoY2hpbGRQcm9jZXNzIGFzIGFueSkuc3Rkb3V0KVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLm91dHB1dClcbiAgICAgICAgdGhyb3cgY2hpbGRQcm9jZXNzXG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIHJlbW90ZXMgfHwgW10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcHVzaCAke3JlbW90ZX0gbWFzdGVyYCwge1xuICAgICAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgLy8gRG9uJ3Qgc3RvcCB3aGVuIHB1c2ggZmFpbHMuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLm91dHB1dClcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvclxufVxuXG5hc3luYyBmdW5jdGlvbiByZXRyaWV2ZURvY3VtZW50cygpOiBQcm9taXNlPERvY3VtZW50W10+IHtcbiAgYXNzZXJ0KFxuICAgICFvcHRpb25zLmNvbW1pdCB8fCBvcHRpb25zLnVpZCxcbiAgICAnT3B0aW9ucyBcImNvbW1pdFwiICYgXCJ1aWRcIiBhcmUgaW5jb21wYXRpYmxlJyxcbiAgKVxuXG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgY29uc3QgeyBkb2N1bWVudEJ5VWlkIH0gPSBsb2FkQXNzZW1ibGVlRGF0YShcbiAgICBkYXRhRGlyLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzLFxuICAgIG9wdGlvbnMubGVnaXNsYXR1cmUsXG4gIClcblxuICBjb25zdCB0ZXh0ZXNMb2lzRGlyID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgXCJ3d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mclwiLFxuICAgIG9wdGlvbnMubGVnaXNsYXR1cmUsXG4gICAgXCJ0ZXh0ZXNcIixcbiAgKVxuICBmcy5lbnN1cmVEaXJTeW5jKHRleHRlc0xvaXNEaXIpXG4gIGlmICghb3B0aW9ucy51aWQpIHtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKHRleHRlc0xvaXNEaXIpKSB7XG4gICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbih0ZXh0ZXNMb2lzRGlyLCBmaWxlbmFtZSkpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dGVzTG9pcyA9IE9iamVjdC52YWx1ZXMoZG9jdW1lbnRCeVVpZClcbiAgICAuZmlsdGVyKChkb2N1bWVudCkgPT4gZG9jdW1lbnQueHNpVHlwZSA9PT0gVHlwZURvY3VtZW50LlRleHRlTG9pVHlwZSlcbiAgICAuZmlsdGVyKFxuICAgICAgKGRvY3VtZW50KSA9PlxuICAgICAgICBkb2N1bWVudC51aWQuc3RhcnRzV2l0aChcIlBJT05BTlwiKSB8fCBkb2N1bWVudC51aWQuc3RhcnRzV2l0aChcIlBSSkxBTlwiKSxcbiAgICApXG4gICAgLm1hcCgoZG9jdW1lbnQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRvY3VtZW50LFxuICAgICAgICByYXdEb2N1bWVudEFzc2VtYmxlZVVybDogdXJsRnJvbURvY3VtZW50KFxuICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgIERvY3VtZW50VXJsRm9ybWF0LlJhd0h0bWwsXG4gICAgICAgICksXG4gICAgICB9XG4gICAgfSlcbiAgICAuc29ydCgoYSwgYikgPT5cbiAgICAgIGEucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwgPT09IG51bGxcbiAgICAgICAgPyAtMVxuICAgICAgICA6IGIucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwgPT09IG51bGxcbiAgICAgICAgPyAxXG4gICAgICAgIDogYS5yYXdEb2N1bWVudEFzc2VtYmxlZVVybC5sb2NhbGVDb21wYXJlKGIucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwpLFxuICAgIClcblxuICBjb25zdCBmaXJzdFVpZCA9IG9wdGlvbnMudWlkXG4gIGxldCBza2lwID0gISFmaXJzdFVpZFxuICBmb3IgKGNvbnN0IHRleHRlTG9pIG9mIHRleHRlc0xvaXMpIHtcbiAgICBpZiAoc2tpcCkge1xuICAgICAgaWYgKHRleHRlTG9pLnVpZCA9PT0gZmlyc3RVaWQpIHtcbiAgICAgICAgc2tpcCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFJldHJpZXZpbmcgYmlsbCAke3RleHRlTG9pLnVpZH0gYXQgJHt0ZXh0ZUxvaS5yYXdEb2N1bWVudEFzc2VtYmxlZVVybH1gLFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAodGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwgPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwpXG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgdXJsLmhvc3RuYW1lLFxuICAgICAgLi4udXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKSxcbiAgICApXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRleHRlc0xvaXNEaXIsIHBhdGguZGlybmFtZShmaWxlUGF0aCkpXG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsKVxuICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSA0MDQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgRXJyb3Igd2hpbGUgZ2V0dGluZyBwYWdlIFwiJHtcbiAgICAgICAgICAgIHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsXG4gICAgICAgICAgfVwiICh1aWQ6ICR7dGV4dGVMb2kudWlkfSk6XFxuXFxuRXJyb3I6XFxuJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHsgY29kZTogcmVzcG9uc2Uuc3RhdHVzLCBtZXNzYWdlOiByZXNwb25zZS5zdGF0dXNUZXh0IH0sXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIHBhZ2UpXG4gIH1cblxuICBpZiAoY29tbWl0QW5kUHVzaCh0ZXh0ZXNMb2lzRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgcmV0dXJuIHRleHRlc0xvaXNcbn1cblxucmV0cmlldmVEb2N1bWVudHMoKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgY29uc29sZS5sb2coZXJyb3IpXG4gIHByb2Nlc3MuZXhpdCgxKVxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7OzsrQ0FUQSxvSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxJQUFNQSxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsa0JBRlI7RUFHRUMsSUFBSSxFQUFFLFFBSFI7RUFJRUMsSUFBSSxFQUFFQztBQUpSLENBRHlCLEVBT3pCO0VBQ0VKLEtBQUssRUFBRSxHQURUO0VBRUVLLFlBQVksRUFBRSxJQUZoQjtFQUdFSCxJQUFJLEVBQUUsYUFIUjtFQUlFQyxJQUFJLEVBQUVHO0FBSlIsQ0FQeUIsRUFhekI7RUFDRU4sS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLDZCQUZSO0VBR0VNLFFBQVEsRUFBRSxJQUhaO0VBSUVMLElBQUksRUFBRSxRQUpSO0VBS0VDLElBQUksRUFBRUc7QUFMUixDQWJ5QixFQW9CekI7RUFDRU4sS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLG9CQUZSO0VBR0VDLElBQUksRUFBRSxRQUhSO0VBSUVDLElBQUksRUFBRUM7QUFKUixDQXBCeUIsRUEwQnpCO0VBQ0VK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