@tricoteuses/assemblee 1.1.2 → 1.1.4
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.
- package/lib/bugs/acteur-00010/plugin.test.js +53 -55
- package/lib/bugs/acteur-00010.js +26 -30
- package/lib/bugs/agenda-00002/plugin.test.js +78 -82
- package/lib/bugs/agenda-00002.js +206 -214
- package/lib/bugs/agenda-00008/plugin.test.js +54 -56
- package/lib/bugs/agenda-00008.js +38 -42
- package/lib/bugs/agenda-00011/plugin.test.js +204 -214
- package/lib/bugs/agenda-00011.js +117 -131
- package/lib/bugs.js +212 -232
- package/lib/cleaners/actes_legislatifs.js +1 -1
- package/lib/cleaners/acteurs.js +2 -2
- package/lib/cleaners/amendements.js +1 -1
- package/lib/cleaners/documents.js +1 -1
- package/lib/cleaners/dossiers_legislatifs.js +1 -1
- package/lib/cleaners/reunions.js +1 -1
- package/lib/cleaners/scrutins.js +1 -1
- package/lib/cleaners/xml.js +2 -2
- package/lib/datasets.js +2 -2
- package/lib/dossiers_legislatifs.js +1 -1
- package/lib/file_systems.js +48 -50
- package/lib/git.js +1 -1
- package/lib/inserters.js +1 -1
- package/lib/loaders.js +1 -1
- package/lib/parsers/documents.js +29 -31
- package/lib/parsers/recherche_amendements.js +284 -288
- package/lib/raw_types/acteurs_et_organes.d.ts +1 -0
- package/lib/raw_types/acteurs_et_organes.js +3 -2
- package/lib/raw_types/acteurs_et_organes.mjs +3 -2
- package/lib/scripts/bugs_helper.js +301 -317
- package/lib/scripts/clean_data.js +1 -1
- package/lib/scripts/clean_reorganized_data.js +13 -15
- package/lib/scripts/diff_amendements.js +1 -1
- package/lib/scripts/document_dossiers_legislatifs.js +2 -2
- package/lib/scripts/merge_scrutins.js +1 -1
- package/lib/scripts/parse_textes_lois.js +1 -1
- package/lib/scripts/raw_types_from_amendements.js +133 -135
- package/lib/scripts/reorganize_data.js +13 -15
- package/lib/scripts/retrieve_deputes_photos.js +169 -171
- package/lib/scripts/retrieve_documents.js +266 -278
- package/lib/scripts/retrieve_open_data.js +140 -144
- package/lib/scripts/retrieve_pending_amendments.js +118 -120
- package/lib/scripts/retrieve_senateurs_photos.js +167 -169
- package/lib/scripts/retrieve_textes_lois.js +129 -131
- package/lib/scripts/validate_json.js +87 -91
- package/lib/shared_types/codes_actes.d.ts +2 -0
- package/lib/shared_types/codes_actes.js +2 -1
- package/lib/shared_types/codes_actes.mjs +2 -1
- package/lib/types/acteurs_et_organes.d.ts +1 -0
- package/lib/types/acteurs_et_organes.js +3 -2
- package/lib/types/acteurs_et_organes.mjs +3 -2
- package/package.json +6 -6
|
@@ -27,7 +27,7 @@ var _chai = require("chai");
|
|
|
27
27
|
var _agenda = require("../agenda-00011");
|
|
28
28
|
var _fetchMock = _interopRequireDefault(require("fetch-mock"));
|
|
29
29
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
30
|
-
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; }
|
|
30
|
+
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; }
|
|
31
31
|
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); } }
|
|
32
32
|
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); }); }; }
|
|
33
33
|
var id = "00011";
|
|
@@ -35,243 +35,233 @@ suite("Plugin".concat(id));
|
|
|
35
35
|
test("#Plugin".concat(id, "FindSession"), /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
36
36
|
var plugin, sessions;
|
|
37
37
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
38
|
-
while (1) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return _context.stop();
|
|
80
|
-
}
|
|
38
|
+
while (1) switch (_context.prev = _context.next) {
|
|
39
|
+
case 0:
|
|
40
|
+
plugin = new _agenda.Plugin({});
|
|
41
|
+
sessions = [{
|
|
42
|
+
debut: "2019-09-10",
|
|
43
|
+
fin: "2019-09-27"
|
|
44
|
+
}, {
|
|
45
|
+
debut: "2019-10-01",
|
|
46
|
+
fin: "2020-06-30"
|
|
47
|
+
}, {
|
|
48
|
+
debut: "2020-06-31",
|
|
49
|
+
fin: "2020-07-31"
|
|
50
|
+
}, {
|
|
51
|
+
debut: "2020-08-01",
|
|
52
|
+
fin: "2020-08-31"
|
|
53
|
+
}, {
|
|
54
|
+
debut: "2020-09-01",
|
|
55
|
+
fin: "2020-09-30"
|
|
56
|
+
}];
|
|
57
|
+
plugin.sessions = sessions.slice(0, 2);
|
|
58
|
+
// between sessions
|
|
59
|
+
_chai.assert.strictEqual(plugin.lookupSession("2019-09-28"), null);
|
|
60
|
+
_chai.assert.strictEqual(plugin.lookupSession("2017-01-01"), null);
|
|
61
|
+
_chai.assert.deepEqual(plugin.lookupSession("2019-09-15"), plugin.sessions[0]);
|
|
62
|
+
_chai.assert.deepEqual(plugin.lookupSession("2020-02-02"), plugin.sessions[1]);
|
|
63
|
+
_chai.assert.strictEqual(plugin.lookupSession("2022-01-01"), null);
|
|
64
|
+
plugin.sessions = sessions.slice(0, 1);
|
|
65
|
+
_chai.assert.strictEqual(plugin.lookupSession("2017-01-01"), null);
|
|
66
|
+
_chai.assert.deepEqual(plugin.lookupSession("2019-09-15"), plugin.sessions[0]);
|
|
67
|
+
_chai.assert.strictEqual(plugin.lookupSession("2020-02-02"), null);
|
|
68
|
+
_chai.assert.strictEqual(plugin.lookupSession("2022-01-01"), null);
|
|
69
|
+
plugin.sessions = sessions;
|
|
70
|
+
_chai.assert.strictEqual(plugin.lookupSession("2017-01-01"), null);
|
|
71
|
+
_chai.assert.deepEqual(plugin.lookupSession("2019-09-15"), plugin.sessions[0]);
|
|
72
|
+
_chai.assert.deepEqual(plugin.lookupSession("2020-02-02"), plugin.sessions[1]);
|
|
73
|
+
_chai.assert.deepEqual(plugin.lookupSession("2020-09-01"), plugin.sessions[4]);
|
|
74
|
+
_chai.assert.deepEqual(plugin.lookupSession("2020-09-30"), plugin.sessions[4]);
|
|
75
|
+
_chai.assert.strictEqual(plugin.lookupSession("2022-01-01"), null);
|
|
76
|
+
case 20:
|
|
77
|
+
case "end":
|
|
78
|
+
return _context.stop();
|
|
81
79
|
}
|
|
82
80
|
}, _callee);
|
|
83
81
|
})));
|
|
84
82
|
test("#Plugin".concat(id, "Load"), /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
85
83
|
var plugin, d, wikidata, expected;
|
|
86
84
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
87
|
-
while (1) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return _context2.stop();
|
|
114
|
-
}
|
|
85
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
86
|
+
case 0:
|
|
87
|
+
plugin = new _agenda.Plugin({});
|
|
88
|
+
d = "src/bugs/agenda-".concat(id);
|
|
89
|
+
wikidata = (0, _file_systems.load)("".concat(d, "/wikidata.json"));
|
|
90
|
+
plugin.fetch = _fetchMock["default"].sandbox().mock(/query\.wikidata\.org/, {
|
|
91
|
+
body: wikidata,
|
|
92
|
+
status: 200
|
|
93
|
+
});
|
|
94
|
+
_context2.next = 6;
|
|
95
|
+
return plugin.preFix();
|
|
96
|
+
case 6:
|
|
97
|
+
expected = [{
|
|
98
|
+
debut: "2019-09-10",
|
|
99
|
+
fin: "2019-09-27",
|
|
100
|
+
label: "SESSION02"
|
|
101
|
+
}, {
|
|
102
|
+
debut: "2019-10-01",
|
|
103
|
+
fin: "2020-06-30",
|
|
104
|
+
label: "SESSION01"
|
|
105
|
+
}];
|
|
106
|
+
_chai.assert.deepEqual(plugin.sessions, expected);
|
|
107
|
+
_fetchMock["default"].restore();
|
|
108
|
+
case 9:
|
|
109
|
+
case "end":
|
|
110
|
+
return _context2.stop();
|
|
115
111
|
}
|
|
116
112
|
}, _callee2);
|
|
117
113
|
})));
|
|
118
114
|
test("#Plugin".concat(id, "Fix"), /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
119
115
|
var plugin, d, wikidata, f, content, _f, _content, _f2, _content2, _f3, _content3, _f4, _content4, _f5, _content5;
|
|
120
116
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
121
|
-
while (1) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
return _context3.stop();
|
|
203
|
-
}
|
|
117
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
118
|
+
case 0:
|
|
119
|
+
plugin = new _agenda.Plugin({});
|
|
120
|
+
d = "src/bugs/agenda-".concat(id);
|
|
121
|
+
wikidata = (0, _file_systems.load)("".concat(d, "/wikidata.json"));
|
|
122
|
+
plugin.fetch = _fetchMock["default"].sandbox().mock(/query\.wikidata\.org/, {
|
|
123
|
+
body: wikidata,
|
|
124
|
+
status: 200
|
|
125
|
+
});
|
|
126
|
+
_context3.next = 6;
|
|
127
|
+
return plugin.preFix();
|
|
128
|
+
case 6:
|
|
129
|
+
(0, _chai.assert)(plugin.sessions != undefined);
|
|
130
|
+
f = "".concat(d, "/ok.json");
|
|
131
|
+
content = (0, _file_systems.load)(f);
|
|
132
|
+
(0, _chai.assert)("sessionRef" in content, content);
|
|
133
|
+
_context3.t0 = _chai.assert;
|
|
134
|
+
_context3.next = 13;
|
|
135
|
+
return plugin.fix(content, f);
|
|
136
|
+
case 13:
|
|
137
|
+
_context3.t1 = _context3.sent;
|
|
138
|
+
_context3.t2 = f;
|
|
139
|
+
_context3.t0.equal.call(_context3.t0, _context3.t1, true, _context3.t2);
|
|
140
|
+
(0, _chai.assert)(!("sessionRef" in content), content);
|
|
141
|
+
(0, _chai.assert)(content.session.label, "SESSION01");
|
|
142
|
+
_f = "".concat(d, "/oldschema.json");
|
|
143
|
+
_content = (0, _file_systems.load)(_f);
|
|
144
|
+
_chai.assert.equal(_content.schemaVersion, "agenda-1.0");
|
|
145
|
+
_context3.t3 = _chai.assert;
|
|
146
|
+
_context3.next = 24;
|
|
147
|
+
return plugin.fix(_content, _f);
|
|
148
|
+
case 24:
|
|
149
|
+
_context3.t4 = _context3.sent;
|
|
150
|
+
_context3.t5 = _f;
|
|
151
|
+
_context3.t3.equal.call(_context3.t3, _context3.t4, true, _context3.t5);
|
|
152
|
+
_chai.assert.equal(_content.schemaVersion, "agenda-1.1");
|
|
153
|
+
_f2 = "".concat(d, "/noschema.json");
|
|
154
|
+
_content2 = (0, _file_systems.load)(_f2);
|
|
155
|
+
_chai.assert.strictEqual(_content2.schemaVersion, undefined);
|
|
156
|
+
_context3.t6 = _chai.assert;
|
|
157
|
+
_context3.next = 34;
|
|
158
|
+
return plugin.fix(_content2, _f2);
|
|
159
|
+
case 34:
|
|
160
|
+
_context3.t7 = _context3.sent;
|
|
161
|
+
_context3.t8 = _f2;
|
|
162
|
+
_context3.t6.equal.call(_context3.t6, _context3.t7, true, _context3.t8);
|
|
163
|
+
_chai.assert.equal(_content2.schemaVersion, "agenda-1.1");
|
|
164
|
+
_f3 = "".concat(d, "/nosessionref.json");
|
|
165
|
+
_content3 = (0, _file_systems.load)(_f3);
|
|
166
|
+
_context3.t9 = _chai.assert;
|
|
167
|
+
_context3.next = 43;
|
|
168
|
+
return plugin.fix(_content3, _f3);
|
|
169
|
+
case 43:
|
|
170
|
+
_context3.t10 = _context3.sent;
|
|
171
|
+
_context3.t11 = _f3;
|
|
172
|
+
_context3.t9.equal.call(_context3.t9, _context3.t10, true, _context3.t11);
|
|
173
|
+
_chai.assert.equal(_content3.session.label, "SESSION01");
|
|
174
|
+
_f4 = "".concat(d, "/session.json");
|
|
175
|
+
_content4 = (0, _file_systems.load)(_f4);
|
|
176
|
+
_chai.assert.equal(_content4.session.label, "SOMETHING");
|
|
177
|
+
_context3.t12 = _chai.assert;
|
|
178
|
+
_context3.next = 53;
|
|
179
|
+
return plugin.fix(_content4, _f4);
|
|
180
|
+
case 53:
|
|
181
|
+
_context3.t13 = _context3.sent;
|
|
182
|
+
_context3.t14 = _f4;
|
|
183
|
+
_context3.t12.equal.call(_context3.t12, _context3.t13, true, _context3.t14);
|
|
184
|
+
_chai.assert.equal(_content4.session.label, "SESSION01");
|
|
185
|
+
_f5 = "".concat(d, "/not_seance_type.json");
|
|
186
|
+
_content5 = (0, _file_systems.load)(_f5);
|
|
187
|
+
_context3.t15 = _chai.assert;
|
|
188
|
+
_context3.next = 62;
|
|
189
|
+
return plugin.fix(_content5, _f5);
|
|
190
|
+
case 62:
|
|
191
|
+
_context3.t16 = _context3.sent;
|
|
192
|
+
_context3.t17 = _f5;
|
|
193
|
+
_context3.t15.equal.call(_context3.t15, _context3.t16, null, _context3.t17);
|
|
194
|
+
_fetchMock["default"].restore();
|
|
195
|
+
case 66:
|
|
196
|
+
case "end":
|
|
197
|
+
return _context3.stop();
|
|
204
198
|
}
|
|
205
199
|
}, _callee3);
|
|
206
200
|
})));
|
|
207
201
|
test("#Plugin".concat(id, "Check"), /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
|
|
208
202
|
var plugin, d, wikidata, f, content, result, _f6, _content6, _result;
|
|
209
203
|
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
210
|
-
while (1) {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
return _context4.stop();
|
|
248
|
-
}
|
|
204
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
205
|
+
case 0:
|
|
206
|
+
plugin = new _agenda.Plugin({});
|
|
207
|
+
d = "src/bugs/agenda-".concat(id);
|
|
208
|
+
wikidata = (0, _file_systems.load)("".concat(d, "/wikidata.json"));
|
|
209
|
+
plugin.fetch = _fetchMock["default"].sandbox().mock(/query\.wikidata\.org/, {
|
|
210
|
+
body: wikidata,
|
|
211
|
+
status: 200
|
|
212
|
+
});
|
|
213
|
+
_context4.next = 6;
|
|
214
|
+
return plugin.preCheck();
|
|
215
|
+
case 6:
|
|
216
|
+
(0, _chai.assert)(plugin.sessions != undefined);
|
|
217
|
+
f = "".concat(d, "/ok.json");
|
|
218
|
+
content = (0, _file_systems.load)(f);
|
|
219
|
+
_context4.next = 11;
|
|
220
|
+
return plugin.check(content, f);
|
|
221
|
+
case 11:
|
|
222
|
+
result = _context4.sent;
|
|
223
|
+
_chai.assert.deepEqual(result, {
|
|
224
|
+
status: "ok",
|
|
225
|
+
info: [""]
|
|
226
|
+
}, f);
|
|
227
|
+
_f6 = "".concat(d, "/badtimestamp.json");
|
|
228
|
+
_content6 = (0, _file_systems.load)(_f6);
|
|
229
|
+
_context4.next = 17;
|
|
230
|
+
return plugin.check(_content6, _f6);
|
|
231
|
+
case 17:
|
|
232
|
+
_result = _context4.sent;
|
|
233
|
+
_chai.assert.deepEqual(_result, {
|
|
234
|
+
status: "needs-fixing",
|
|
235
|
+
info: ["2017-06-20 is not in a session"]
|
|
236
|
+
}, _f6);
|
|
237
|
+
_fetchMock["default"].restore();
|
|
238
|
+
case 20:
|
|
239
|
+
case "end":
|
|
240
|
+
return _context4.stop();
|
|
249
241
|
}
|
|
250
242
|
}, _callee4);
|
|
251
243
|
})));
|
|
252
244
|
test("#Plugin".concat(id, "FetchFail"), /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
|
|
253
245
|
var plugin, status;
|
|
254
246
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
255
|
-
while (1) {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
return
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
return _context5.stop();
|
|
273
|
-
}
|
|
247
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
248
|
+
case 0:
|
|
249
|
+
plugin = new _agenda.Plugin({});
|
|
250
|
+
plugin.fetch = _fetchMock["default"].sandbox().mock(/query\.wikidata\.org/, 500);
|
|
251
|
+
status = "unexpected";
|
|
252
|
+
_context5.next = 5;
|
|
253
|
+
return plugin.preFix().then(function () {
|
|
254
|
+
return status = "exception not thrown";
|
|
255
|
+
})["catch"](function (e) {
|
|
256
|
+
return status = String(e.status);
|
|
257
|
+
});
|
|
258
|
+
case 5:
|
|
259
|
+
_chai.assert.equal(status, "500");
|
|
260
|
+
_fetchMock["default"].restore();
|
|
261
|
+
case 7:
|
|
262
|
+
case "end":
|
|
263
|
+
return _context5.stop();
|
|
274
264
|
}
|
|
275
265
|
}, _callee5);
|
|
276
266
|
})));
|
|
277
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpZCIsInN1aXRlIiwidGVzdCIsInBsdWdpbiIsIlBsdWdpbiIsInNlc3Npb25zIiwiZGVidXQiLCJmaW4iLCJzbGljZSIsImFzc2VydCIsInN0cmljdEVxdWFsIiwibG9va3VwU2Vzc2lvbiIsImRlZXBFcXVhbCIsImQiLCJ3aWtpZGF0YSIsImxvYWQiLCJmZXRjaCIsImZldGNoTW9jayIsInNhbmRib3giLCJtb2NrIiwiYm9keSIsInN0YXR1cyIsInByZUZpeCIsImV4cGVjdGVkIiwibGFiZWwiLCJyZXN0b3JlIiwidW5kZWZpbmVkIiwiZiIsImNvbnRlbnQiLCJmaXgiLCJlcXVhbCIsInNlc3Npb24iLCJzY2hlbWFWZXJzaW9uIiwicHJlQ2hlY2siLCJjaGVjayIsInJlc3VsdCIsImluZm8iLCJ0aGVuIiwiZSIsIlN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWdzL2FnZW5kYS0wMDAxMS9wbHVnaW4udGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkIH0gZnJvbSBcIi4uLy4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tIFwiLi4vYWdlbmRhLTAwMDExXCJcbmltcG9ydCBmZXRjaE1vY2sgZnJvbSBcImZldGNoLW1vY2tcIlxuXG5jb25zdCBpZCA9IFwiMDAwMTFcIlxuXG5zdWl0ZShgUGx1Z2luJHtpZH1gKVxuXG50ZXN0KGAjUGx1Z2luJHtpZH1GaW5kU2Vzc2lvbmAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcGx1Z2luID0gbmV3IFBsdWdpbih7fSlcblxuICBjb25zdCBzZXNzaW9ucyA9IFtcbiAgICB7XG4gICAgICBkZWJ1dDogXCIyMDE5LTA5LTEwXCIsXG4gICAgICBmaW46IFwiMjAxOS0wOS0yN1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAxOS0xMC0wMVwiLFxuICAgICAgZmluOiBcIjIwMjAtMDYtMzBcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlYnV0OiBcIjIwMjAtMDYtMzFcIixcbiAgICAgIGZpbjogXCIyMDIwLTA3LTMxXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWJ1dDogXCIyMDIwLTA4LTAxXCIsXG4gICAgICBmaW46IFwiMjAyMC0wOC0zMVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAyMC0wOS0wMVwiLFxuICAgICAgZmluOiBcIjIwMjAtMDktMzBcIixcbiAgICB9LFxuICBdXG5cbiAgcGx1Z2luLnNlc3Npb25zID0gc2Vzc2lvbnMuc2xpY2UoMCwgMilcbiAgLy8gYmV0d2VlbiBzZXNzaW9uc1xuICBhc3NlcnQuc3RyaWN0RXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDE5LTA5LTI4XCIpLCBudWxsKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDE3LTAxLTAxXCIpLCBudWxsKVxuICBhc3NlcnQuZGVlcEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAxOS0wOS0xNVwiKSwgcGx1Z2luLnNlc3Npb25zWzBdKVxuICBhc3NlcnQuZGVlcEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAyMC0wMi0wMlwiKSwgcGx1Z2luLnNlc3Npb25zWzFdKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDIyLTAxLTAxXCIpLCBudWxsKVxuXG4gIHBsdWdpbi5zZXNzaW9ucyA9IHNlc3Npb25zLnNsaWNlKDAsIDEpXG4gIGFzc2VydC5zdHJpY3RFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMTctMDEtMDFcIiksIG51bGwpXG4gIGFzc2VydC5kZWVwRXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDE5LTA5LTE1XCIpLCBwbHVnaW4uc2Vzc2lvbnNbMF0pXG4gIGFzc2VydC5zdHJpY3RFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjAtMDItMDJcIiksIG51bGwpXG4gIGFzc2VydC5zdHJpY3RFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjItMDEtMDFcIiksIG51bGwpXG5cbiAgcGx1Z2luLnNlc3Npb25zID0gc2Vzc2lvbnNcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAxNy0wMS0wMVwiKSwgbnVsbClcbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMTktMDktMTVcIiksIHBsdWdpbi5zZXNzaW9uc1swXSlcbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjAtMDItMDJcIiksIHBsdWdpbi5zZXNzaW9uc1sxXSlcbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjAtMDktMDFcIiksIHBsdWdpbi5zZXNzaW9uc1s0XSlcbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjAtMDktMzBcIiksIHBsdWdpbi5zZXNzaW9uc1s0XSlcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAyMi0wMS0wMVwiKSwgbnVsbClcbn0pXG5cbnRlc3QoYCNQbHVnaW4ke2lkfUxvYWRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHBsdWdpbiA9IG5ldyBQbHVnaW4oe30pXG4gIGNvbnN0IGQgPSBgc3JjL2J1Z3MvYWdlbmRhLSR7aWR9YFxuXG4gIGNvbnN0IHdpa2lkYXRhID0gbG9hZChgJHtkfS93aWtpZGF0YS5qc29uYClcbiAgcGx1Z2luLmZldGNoID0gZmV0Y2hNb2NrXG4gICAgLnNhbmRib3goKVxuICAgIC5tb2NrKC9xdWVyeVxcLndpa2lkYXRhXFwub3JnLywgeyBib2R5OiB3aWtpZGF0YSwgc3RhdHVzOiAyMDAgfSlcbiAgYXdhaXQgcGx1Z2luLnByZUZpeCgpXG5cbiAgY29uc3QgZXhwZWN0ZWQgPSBbXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAxOS0wOS0xMFwiLFxuICAgICAgZmluOiBcIjIwMTktMDktMjdcIixcbiAgICAgIGxhYmVsOiBcIlNFU1NJT04wMlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAxOS0xMC0wMVwiLFxuICAgICAgZmluOiBcIjIwMjAtMDYtMzBcIixcbiAgICAgIGxhYmVsOiBcIlNFU1NJT04wMVwiLFxuICAgIH0sXG4gIF1cbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4uc2Vzc2lvbnMsIGV4cGVjdGVkKVxuXG4gIGZldGNoTW9jay5yZXN0b3JlKClcbn0pXG5cbnRlc3QoYCNQbHVnaW4ke2lkfUZpeGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcGx1Z2luID0gbmV3IFBsdWdpbih7fSlcbiAgY29uc3QgZCA9IGBzcmMvYnVncy9hZ2VuZGEtJHtpZH1gXG5cbiAgY29uc3Qgd2lraWRhdGEgPSBsb2FkKGAke2R9L3dpa2lkYXRhLmpzb25gKVxuICBwbHVnaW4uZmV0Y2ggPSBmZXRjaE1vY2tcbiAgICAuc2FuZGJveCgpXG4gICAgLm1vY2soL3F1ZXJ5XFwud2lraWRhdGFcXC5vcmcvLCB7IGJvZHk6IHdpa2lkYXRhLCBzdGF0dXM6IDIwMCB9KVxuXG4gIGF3YWl0IHBsdWdpbi5wcmVGaXgoKVxuICBhc3NlcnQocGx1Z2luLnNlc3Npb25zICE9IHVuZGVmaW5lZClcblxuICB7XG4gICAgY29uc3QgZiA9IGAke2R9L29rLmpzb25gXG4gICAgY29uc3QgY29udGVudCA9IGxvYWQoZilcbiAgICBhc3NlcnQoXCJzZXNzaW9uUmVmXCIgaW4gY29udGVudCwgY29udGVudClcbiAgICBhc3NlcnQuZXF1YWwoYXdhaXQgcGx1Z2luLmZpeChjb250ZW50LCBmKSwgdHJ1ZSwgZilcbiAgICBhc3NlcnQoIShcInNlc3Npb25SZWZcIiBpbiBjb250ZW50KSwgY29udGVudClcbiAgICBhc3NlcnQoY29udGVudC5zZXNzaW9uLmxhYmVsLCBcIlNFU1NJT04wMVwiKVxuICB9XG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9vbGRzY2hlbWEuanNvbmBcbiAgICBjb25zdCBjb250ZW50ID0gbG9hZChmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNjaGVtYVZlcnNpb24sIFwiYWdlbmRhLTEuMFwiKVxuICAgIGFzc2VydC5lcXVhbChhd2FpdCBwbHVnaW4uZml4KGNvbnRlbnQsIGYpLCB0cnVlLCBmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNjaGVtYVZlcnNpb24sIFwiYWdlbmRhLTEuMVwiKVxuICB9XG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9ub3NjaGVtYS5qc29uYFxuICAgIGNvbnN0IGNvbnRlbnQgPSBsb2FkKGYpXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbnRlbnQuc2NoZW1hVmVyc2lvbiwgdW5kZWZpbmVkKVxuICAgIGFzc2VydC5lcXVhbChhd2FpdCBwbHVnaW4uZml4KGNvbnRlbnQsIGYpLCB0cnVlLCBmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNjaGVtYVZlcnNpb24sIFwiYWdlbmRhLTEuMVwiKVxuICB9XG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9ub3Nlc3Npb25yZWYuanNvbmBcbiAgICBjb25zdCBjb250ZW50ID0gbG9hZChmKVxuICAgIGFzc2VydC5lcXVhbChhd2FpdCBwbHVnaW4uZml4KGNvbnRlbnQsIGYpLCB0cnVlLCBmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNlc3Npb24ubGFiZWwsIFwiU0VTU0lPTjAxXCIpXG4gIH1cblxuICB7XG4gICAgY29uc3QgZiA9IGAke2R9L3Nlc3Npb24uanNvbmBcbiAgICBjb25zdCBjb250ZW50ID0gbG9hZChmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNlc3Npb24ubGFiZWwsIFwiU09NRVRISU5HXCIpXG4gICAgYXNzZXJ0LmVxdWFsKGF3YWl0IHBsdWdpbi5maXgoY29udGVudCwgZiksIHRydWUsIGYpXG4gICAgYXNzZXJ0LmVxdWFsKGNvbnRlbnQuc2Vzc2lvbi5sYWJlbCwgXCJTRVNTSU9OMDFcIilcbiAgfVxuXG4gIHtcbiAgICBjb25zdCBmID0gYCR7ZH0vbm90X3NlYW5jZV90eXBlLmpzb25gXG4gICAgY29uc3QgY29udGVudCA9IGxvYWQoZilcbiAgICBhc3NlcnQuZXF1YWwoYXdhaXQgcGx1Z2luLmZpeChjb250ZW50LCBmKSwgbnVsbCwgZilcbiAgfVxuXG4gIGZldGNoTW9jay5yZXN0b3JlKClcbn0pXG5cbnRlc3QoYCNQbHVnaW4ke2lkfUNoZWNrYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luKHt9KVxuICBjb25zdCBkID0gYHNyYy9idWdzL2FnZW5kYS0ke2lkfWBcblxuICBjb25zdCB3aWtpZGF0YSA9IGxvYWQoYCR7ZH0vd2lraWRhdGEuanNvbmApXG4gIHBsdWdpbi5mZXRjaCA9IGZldGNoTW9ja1xuICAgIC5zYW5kYm94KClcbiAgICAubW9jaygvcXVlcnlcXC53aWtpZGF0YVxcLm9yZy8sIHsgYm9keTogd2lraWRhdGEsIHN0YXR1czogMjAwIH0pXG5cbiAgYXdhaXQgcGx1Z2luLnByZUNoZWNrKClcbiAgYXNzZXJ0KHBsdWdpbi5zZXNzaW9ucyAhPSB1bmRlZmluZWQpXG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9vay5qc29uYFxuICAgIGNvbnN0IGNvbnRlbnQgPSBsb2FkKGYpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmNoZWNrKGNvbnRlbnQsIGYpXG4gICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHQsIHsgc3RhdHVzOiBcIm9rXCIsIGluZm86IFtcIlwiXSB9LCBmKVxuICB9XG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9iYWR0aW1lc3RhbXAuanNvbmBcbiAgICBjb25zdCBjb250ZW50ID0gbG9hZChmKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5jaGVjayhjb250ZW50LCBmKVxuICAgIGFzc2VydC5kZWVwRXF1YWwoXG4gICAgICByZXN1bHQsXG4gICAgICB7IHN0YXR1czogXCJuZWVkcy1maXhpbmdcIiwgaW5mbzogW1wiMjAxNy0wNi0yMCBpcyBub3QgaW4gYSBzZXNzaW9uXCJdIH0sXG4gICAgICBmLFxuICAgIClcbiAgfVxuXG4gIGZldGNoTW9jay5yZXN0b3JlKClcbn0pXG5cbnRlc3QoYCNQbHVnaW4ke2lkfUZldGNoRmFpbGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcGx1Z2luID0gbmV3IFBsdWdpbih7fSlcblxuICBwbHVnaW4uZmV0Y2ggPSBmZXRjaE1vY2suc2FuZGJveCgpLm1vY2soL3F1ZXJ5XFwud2lraWRhdGFcXC5vcmcvLCA1MDApXG5cbiAgbGV0IHN0YXR1cyA9IFwidW5leHBlY3RlZFwiXG4gIGF3YWl0IHBsdWdpblxuICAgIC5wcmVGaXgoKVxuICAgIC50aGVuKCgpID0+IChzdGF0dXMgPSBcImV4Y2VwdGlvbiBub3QgdGhyb3duXCIpKVxuICAgIC5jYXRjaCgoZSkgPT4gKHN0YXR1cyA9IFN0cmluZyhlLnN0YXR1cykpKVxuICBhc3NlcnQuZXF1YWwoc3RhdHVzLCBcIjUwMFwiKVxuXG4gIGZldGNoTW9jay5yZXN0b3JlKClcbn0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQWtDO0FBQUEsK0NBRmxDO0FBQUE7QUFBQTtBQUlBLElBQU1BLEVBQUUsR0FBRyxPQUFPO0FBRWxCQyxLQUFLLGlCQUFVRCxFQUFFLEVBQUc7QUFFcEJFLElBQUksa0JBQVdGLEVBQUUsMEZBQWU7RUFBQTtFQUFBO0lBQUE7TUFBQTtRQUFBO1VBQ3hCRyxNQUFNLEdBQUcsSUFBSUMsY0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBRXZCQyxRQUFRLEdBQUcsQ0FDZjtZQUNFQyxLQUFLLEVBQUUsWUFBWTtZQUNuQkMsR0FBRyxFQUFFO1VBQ1AsQ0FBQyxFQUNEO1lBQ0VELEtBQUssRUFBRSxZQUFZO1lBQ25CQyxHQUFHLEVBQUU7VUFDUCxDQUFDLEVBQ0Q7WUFDRUQsS0FBSyxFQUFFLFlBQVk7WUFDbkJDLEdBQUcsRUFBRTtVQUNQLENBQUMsRUFDRDtZQUNFRCxLQUFLLEVBQUUsWUFBWTtZQUNuQkMsR0FBRyxFQUFFO1VBQ1AsQ0FBQyxFQUNEO1lBQ0VELEtBQUssRUFBRSxZQUFZO1lBQ25CQyxHQUFHLEVBQUU7VUFDUCxDQUFDLENBQ0Y7VUFFREosTUFBTSxDQUFDRSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0csS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDdEM7VUFDQUMsWUFBTSxDQUFDQyxXQUFXLENBQUNQLE1BQU0sQ0FBQ1EsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQztVQUM1REYsWUFBTSxDQUFDQyxXQUFXLENBQUNQLE1BQU0sQ0FBQ1EsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQztVQUM1REYsWUFBTSxDQUFDRyxTQUFTLENBQUNULE1BQU0sQ0FBQ1EsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFUixNQUFNLENBQUNFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUN4RUksWUFBTSxDQUFDRyxTQUFTLENBQUNULE1BQU0sQ0FBQ1EsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFUixNQUFNLENBQUNFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUN4RUksWUFBTSxDQUFDQyxXQUFXLENBQUNQLE1BQU0sQ0FBQ1EsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQztVQUU1RFIsTUFBTSxDQUFDRSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0csS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDdENDLFlBQU0sQ0FBQ0MsV0FBVyxDQUFDUCxNQUFNLENBQUNRLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUM7VUFDNURGLFlBQU0sQ0FBQ0csU0FBUyxDQUFDVCxNQUFNLENBQUNRLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRVIsTUFBTSxDQUFDRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDeEVJLFlBQU0sQ0FBQ0MsV0FBVyxDQUFDUCxNQUFNLENBQUNRLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUM7VUFDNURGLFlBQU0sQ0FBQ0MsV0FBVyxDQUFDUCxNQUFNLENBQUNRLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUM7VUFFNURSLE1BQU0sQ0FBQ0UsUUFBUSxHQUFHQSxRQUFRO1VBQzFCSSxZQUFNLENBQUNDLFdBQVcsQ0FBQ1AsTUFBTSxDQUFDUSxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDO1VBQzVERixZQUFNLENBQUNHLFNBQVMsQ0FBQ1QsTUFBTSxDQUFDUSxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUVSLE1BQU0sQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3hFSSxZQUFNLENBQUNHLFNBQVMsQ0FBQ1QsTUFBTSxDQUFDUSxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUVSLE1BQU0sQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3hFSSxZQUFNLENBQUNHLFNBQVMsQ0FBQ1QsTUFBTSxDQUFDUSxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUVSLE1BQU0sQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3hFSSxZQUFNLENBQUNHLFNBQVMsQ0FBQ1QsTUFBTSxDQUFDUSxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUVSLE1BQU0sQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3hFSSxZQUFNLENBQUNDLFdBQVcsQ0FBQ1AsTUFBTSxDQUFDUSxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQUE7UUFBQTtVQUFBO01BQUE7SUFBQTtFQUFBO0FBQUEsQ0FDN0QsR0FBQztBQUVGVCxJQUFJLGtCQUFXRixFQUFFLG1GQUFRO0VBQUE7RUFBQTtJQUFBO01BQUE7UUFBQTtVQUNqQkcsTUFBTSxHQUFHLElBQUlDLGNBQU0sQ0FBQyxD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
|
|
267
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpZCIsInN1aXRlIiwidGVzdCIsInBsdWdpbiIsIlBsdWdpbiIsInNlc3Npb25zIiwiZGVidXQiLCJmaW4iLCJzbGljZSIsImFzc2VydCIsInN0cmljdEVxdWFsIiwibG9va3VwU2Vzc2lvbiIsImRlZXBFcXVhbCIsImQiLCJ3aWtpZGF0YSIsImxvYWQiLCJmZXRjaCIsImZldGNoTW9jayIsInNhbmRib3giLCJtb2NrIiwiYm9keSIsInN0YXR1cyIsInByZUZpeCIsImV4cGVjdGVkIiwibGFiZWwiLCJyZXN0b3JlIiwidW5kZWZpbmVkIiwiZiIsImNvbnRlbnQiLCJmaXgiLCJlcXVhbCIsInNlc3Npb24iLCJzY2hlbWFWZXJzaW9uIiwicHJlQ2hlY2siLCJjaGVjayIsInJlc3VsdCIsImluZm8iLCJ0aGVuIiwiZSIsIlN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWdzL2FnZW5kYS0wMDAxMS9wbHVnaW4udGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkIH0gZnJvbSBcIi4uLy4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tIFwiLi4vYWdlbmRhLTAwMDExXCJcbmltcG9ydCBmZXRjaE1vY2sgZnJvbSBcImZldGNoLW1vY2tcIlxuXG5jb25zdCBpZCA9IFwiMDAwMTFcIlxuXG5zdWl0ZShgUGx1Z2luJHtpZH1gKVxuXG50ZXN0KGAjUGx1Z2luJHtpZH1GaW5kU2Vzc2lvbmAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcGx1Z2luID0gbmV3IFBsdWdpbih7fSlcblxuICBjb25zdCBzZXNzaW9ucyA9IFtcbiAgICB7XG4gICAgICBkZWJ1dDogXCIyMDE5LTA5LTEwXCIsXG4gICAgICBmaW46IFwiMjAxOS0wOS0yN1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAxOS0xMC0wMVwiLFxuICAgICAgZmluOiBcIjIwMjAtMDYtMzBcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlYnV0OiBcIjIwMjAtMDYtMzFcIixcbiAgICAgIGZpbjogXCIyMDIwLTA3LTMxXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWJ1dDogXCIyMDIwLTA4LTAxXCIsXG4gICAgICBmaW46IFwiMjAyMC0wOC0zMVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAyMC0wOS0wMVwiLFxuICAgICAgZmluOiBcIjIwMjAtMDktMzBcIixcbiAgICB9LFxuICBdXG5cbiAgcGx1Z2luLnNlc3Npb25zID0gc2Vzc2lvbnMuc2xpY2UoMCwgMilcbiAgLy8gYmV0d2VlbiBzZXNzaW9uc1xuICBhc3NlcnQuc3RyaWN0RXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDE5LTA5LTI4XCIpLCBudWxsKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDE3LTAxLTAxXCIpLCBudWxsKVxuICBhc3NlcnQuZGVlcEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAxOS0wOS0xNVwiKSwgcGx1Z2luLnNlc3Npb25zWzBdKVxuICBhc3NlcnQuZGVlcEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAyMC0wMi0wMlwiKSwgcGx1Z2luLnNlc3Npb25zWzFdKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDIyLTAxLTAxXCIpLCBudWxsKVxuXG4gIHBsdWdpbi5zZXNzaW9ucyA9IHNlc3Npb25zLnNsaWNlKDAsIDEpXG4gIGFzc2VydC5zdHJpY3RFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMTctMDEtMDFcIiksIG51bGwpXG4gIGFzc2VydC5kZWVwRXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDE5LTA5LTE1XCIpLCBwbHVnaW4uc2Vzc2lvbnNbMF0pXG4gIGFzc2VydC5zdHJpY3RFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjAtMDItMDJcIiksIG51bGwpXG4gIGFzc2VydC5zdHJpY3RFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjItMDEtMDFcIiksIG51bGwpXG5cbiAgcGx1Z2luLnNlc3Npb25zID0gc2Vzc2lvbnNcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAxNy0wMS0wMVwiKSwgbnVsbClcbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMTktMDktMTVcIiksIHBsdWdpbi5zZXNzaW9uc1swXSlcbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjAtMDItMDJcIiksIHBsdWdpbi5zZXNzaW9uc1sxXSlcbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjAtMDktMDFcIiksIHBsdWdpbi5zZXNzaW9uc1s0XSlcbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjAtMDktMzBcIiksIHBsdWdpbi5zZXNzaW9uc1s0XSlcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAyMi0wMS0wMVwiKSwgbnVsbClcbn0pXG5cbnRlc3QoYCNQbHVnaW4ke2lkfUxvYWRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHBsdWdpbiA9IG5ldyBQbHVnaW4oe30pXG4gIGNvbnN0IGQgPSBgc3JjL2J1Z3MvYWdlbmRhLSR7aWR9YFxuXG4gIGNvbnN0IHdpa2lkYXRhID0gbG9hZChgJHtkfS93aWtpZGF0YS5qc29uYClcbiAgcGx1Z2luLmZldGNoID0gZmV0Y2hNb2NrXG4gICAgLnNhbmRib3goKVxuICAgIC5tb2NrKC9xdWVyeVxcLndpa2lkYXRhXFwub3JnLywgeyBib2R5OiB3aWtpZGF0YSwgc3RhdHVzOiAyMDAgfSlcbiAgYXdhaXQgcGx1Z2luLnByZUZpeCgpXG5cbiAgY29uc3QgZXhwZWN0ZWQgPSBbXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAxOS0wOS0xMFwiLFxuICAgICAgZmluOiBcIjIwMTktMDktMjdcIixcbiAgICAgIGxhYmVsOiBcIlNFU1NJT04wMlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAxOS0xMC0wMVwiLFxuICAgICAgZmluOiBcIjIwMjAtMDYtMzBcIixcbiAgICAgIGxhYmVsOiBcIlNFU1NJT04wMVwiLFxuICAgIH0sXG4gIF1cbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4uc2Vzc2lvbnMsIGV4cGVjdGVkKVxuXG4gIGZldGNoTW9jay5yZXN0b3JlKClcbn0pXG5cbnRlc3QoYCNQbHVnaW4ke2lkfUZpeGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcGx1Z2luID0gbmV3IFBsdWdpbih7fSlcbiAgY29uc3QgZCA9IGBzcmMvYnVncy9hZ2VuZGEtJHtpZH1gXG5cbiAgY29uc3Qgd2lraWRhdGEgPSBsb2FkKGAke2R9L3dpa2lkYXRhLmpzb25gKVxuICBwbHVnaW4uZmV0Y2ggPSBmZXRjaE1vY2tcbiAgICAuc2FuZGJveCgpXG4gICAgLm1vY2soL3F1ZXJ5XFwud2lraWRhdGFcXC5vcmcvLCB7IGJvZHk6IHdpa2lkYXRhLCBzdGF0dXM6IDIwMCB9KVxuXG4gIGF3YWl0IHBsdWdpbi5wcmVGaXgoKVxuICBhc3NlcnQocGx1Z2luLnNlc3Npb25zICE9IHVuZGVmaW5lZClcblxuICB7XG4gICAgY29uc3QgZiA9IGAke2R9L29rLmpzb25gXG4gICAgY29uc3QgY29udGVudCA9IGxvYWQoZilcbiAgICBhc3NlcnQoXCJzZXNzaW9uUmVmXCIgaW4gY29udGVudCwgY29udGVudClcbiAgICBhc3NlcnQuZXF1YWwoYXdhaXQgcGx1Z2luLmZpeChjb250ZW50LCBmKSwgdHJ1ZSwgZilcbiAgICBhc3NlcnQoIShcInNlc3Npb25SZWZcIiBpbiBjb250ZW50KSwgY29udGVudClcbiAgICBhc3NlcnQoY29udGVudC5zZXNzaW9uLmxhYmVsLCBcIlNFU1NJT04wMVwiKVxuICB9XG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9vbGRzY2hlbWEuanNvbmBcbiAgICBjb25zdCBjb250ZW50ID0gbG9hZChmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNjaGVtYVZlcnNpb24sIFwiYWdlbmRhLTEuMFwiKVxuICAgIGFzc2VydC5lcXVhbChhd2FpdCBwbHVnaW4uZml4KGNvbnRlbnQsIGYpLCB0cnVlLCBmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNjaGVtYVZlcnNpb24sIFwiYWdlbmRhLTEuMVwiKVxuICB9XG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9ub3NjaGVtYS5qc29uYFxuICAgIGNvbnN0IGNvbnRlbnQgPSBsb2FkKGYpXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbnRlbnQuc2NoZW1hVmVyc2lvbiwgdW5kZWZpbmVkKVxuICAgIGFzc2VydC5lcXVhbChhd2FpdCBwbHVnaW4uZml4KGNvbnRlbnQsIGYpLCB0cnVlLCBmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNjaGVtYVZlcnNpb24sIFwiYWdlbmRhLTEuMVwiKVxuICB9XG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9ub3Nlc3Npb25yZWYuanNvbmBcbiAgICBjb25zdCBjb250ZW50ID0gbG9hZChmKVxuICAgIGFzc2VydC5lcXVhbChhd2FpdCBwbHVnaW4uZml4KGNvbnRlbnQsIGYpLCB0cnVlLCBmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNlc3Npb24ubGFiZWwsIFwiU0VTU0lPTjAxXCIpXG4gIH1cblxuICB7XG4gICAgY29uc3QgZiA9IGAke2R9L3Nlc3Npb24uanNvbmBcbiAgICBjb25zdCBjb250ZW50ID0gbG9hZChmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNlc3Npb24ubGFiZWwsIFwiU09NRVRISU5HXCIpXG4gICAgYXNzZXJ0LmVxdWFsKGF3YWl0IHBsdWdpbi5maXgoY29udGVudCwgZiksIHRydWUsIGYpXG4gICAgYXNzZXJ0LmVxdWFsKGNvbnRlbnQuc2Vzc2lvbi5sYWJlbCwgXCJTRVNTSU9OMDFcIilcbiAgfVxuXG4gIHtcbiAgICBjb25zdCBmID0gYCR7ZH0vbm90X3NlYW5jZV90eXBlLmpzb25gXG4gICAgY29uc3QgY29udGVudCA9IGxvYWQoZilcbiAgICBhc3NlcnQuZXF1YWwoYXdhaXQgcGx1Z2luLmZpeChjb250ZW50LCBmKSwgbnVsbCwgZilcbiAgfVxuXG4gIGZldGNoTW9jay5yZXN0b3JlKClcbn0pXG5cbnRlc3QoYCNQbHVnaW4ke2lkfUNoZWNrYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luKHt9KVxuICBjb25zdCBkID0gYHNyYy9idWdzL2FnZW5kYS0ke2lkfWBcblxuICBjb25zdCB3aWtpZGF0YSA9IGxvYWQoYCR7ZH0vd2lraWRhdGEuanNvbmApXG4gIHBsdWdpbi5mZXRjaCA9IGZldGNoTW9ja1xuICAgIC5zYW5kYm94KClcbiAgICAubW9jaygvcXVlcnlcXC53aWtpZGF0YVxcLm9yZy8sIHsgYm9keTogd2lraWRhdGEsIHN0YXR1czogMjAwIH0pXG5cbiAgYXdhaXQgcGx1Z2luLnByZUNoZWNrKClcbiAgYXNzZXJ0KHBsdWdpbi5zZXNzaW9ucyAhPSB1bmRlZmluZWQpXG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9vay5qc29uYFxuICAgIGNvbnN0IGNvbnRlbnQgPSBsb2FkKGYpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmNoZWNrKGNvbnRlbnQsIGYpXG4gICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHQsIHsgc3RhdHVzOiBcIm9rXCIsIGluZm86IFtcIlwiXSB9LCBmKVxuICB9XG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9iYWR0aW1lc3RhbXAuanNvbmBcbiAgICBjb25zdCBjb250ZW50ID0gbG9hZChmKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5jaGVjayhjb250ZW50LCBmKVxuICAgIGFzc2VydC5kZWVwRXF1YWwoXG4gICAgICByZXN1bHQsXG4gICAgICB7IHN0YXR1czogXCJuZWVkcy1maXhpbmdcIiwgaW5mbzogW1wiMjAxNy0wNi0yMCBpcyBub3QgaW4gYSBzZXNzaW9uXCJdIH0sXG4gICAgICBmLFxuICAgIClcbiAgfVxuXG4gIGZldGNoTW9jay5yZXN0b3JlKClcbn0pXG5cbnRlc3QoYCNQbHVnaW4ke2lkfUZldGNoRmFpbGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcGx1Z2luID0gbmV3IFBsdWdpbih7fSlcblxuICBwbHVnaW4uZmV0Y2ggPSBmZXRjaE1vY2suc2FuZGJveCgpLm1vY2soL3F1ZXJ5XFwud2lraWRhdGFcXC5vcmcvLCA1MDApXG5cbiAgbGV0IHN0YXR1cyA9IFwidW5leHBlY3RlZFwiXG4gIGF3YWl0IHBsdWdpblxuICAgIC5wcmVGaXgoKVxuICAgIC50aGVuKCgpID0+IChzdGF0dXMgPSBcImV4Y2VwdGlvbiBub3QgdGhyb3duXCIpKVxuICAgIC5jYXRjaCgoZSkgPT4gKHN0YXR1cyA9IFN0cmluZyhlLnN0YXR1cykpKVxuICBhc3NlcnQuZXF1YWwoc3RhdHVzLCBcIjUwMFwiKVxuXG4gIGZldGNoTW9jay5yZXN0b3JlKClcbn0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQWtDO0FBQUEsK0NBRmxDO0FBQUE7QUFBQTtBQUlBLElBQU1BLEVBQUUsR0FBRyxPQUFPO0FBRWxCQyxLQUFLLGlCQUFVRCxFQUFFLEVBQUc7QUFFcEJFLElBQUksa0JBQVdGLEVBQUUsMEZBQWU7RUFBQTtFQUFBO0lBQUE7TUFBQTtRQUN4QkcsTUFBTSxHQUFHLElBQUlDLGNBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2QkMsUUFBUSxHQUFHLENBQ2Y7VUFDRUMsS0FBSyxFQUFFLFlBQVk7VUFDbkJDLEdBQUcsRUFBRTtRQUNQLENBQUMsRUFDRDtVQUNFRCxLQUFLLEVBQUUsWUFBWTtVQUNuQkMsR0FBRyxFQUFFO1FBQ1As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
|