@tricoteuses/assemblee
Version:
Retrieve, clean up & handle French Assemblée nationale's open data
340 lines (339 loc) • 38.5 kB
JavaScript
;
require("core-js/modules/es.symbol.js");
require("core-js/modules/es.symbol.description.js");
require("core-js/modules/es.symbol.iterator.js");
require("core-js/modules/es.array.from.js");
require("core-js/modules/es.array.iterator.js");
require("core-js/modules/es.array.slice.js");
require("core-js/modules/es.date.to-string.js");
require("core-js/modules/es.function.name.js");
require("core-js/modules/es.object.define-property.js");
require("core-js/modules/es.regexp.exec.js");
require("core-js/modules/es.regexp.to-string.js");
require("core-js/modules/es.string.iterator.js");
require("core-js/modules/web.dom-collections.iterator.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.cleanScrutin = cleanScrutin;
require("core-js/modules/es.array.filter.js");
require("core-js/modules/es.array.is-array.js");
require("core-js/modules/es.object.to-string.js");
require("core-js/modules/es.object.values.js");
var _assert = _interopRequireDefault(require("assert"));
var _xml = require("./xml");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
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."); }
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, 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 o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function cleanDecompteNominatif(decompteNominatif) {
(0, _xml.cleanXmlArtefacts)(decompteNominatif);
var nonVotants = decompteNominatif.nonVotants;
if (nonVotants === undefined) {
nonVotants = decompteNominatif.nonVotant;
delete decompteNominatif.nonVotant;
} else {
_assert["default"].strictEqual(decompteNominatif.nonVotant, undefined);
}
if (nonVotants !== undefined) {
if (typeof nonVotants === "string") {
_assert["default"].strictEqual(nonVotants, "0");
nonVotants = [];
} else if (!Array.isArray(nonVotants)) {
(0, _assert["default"])(nonVotants);
nonVotants = [nonVotants];
}
var nonVotantsArray = nonVotants;
nonVotants = [];
var _iterator = _createForOfIteratorHelper(nonVotantsArray),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var nonVotant = _step.value;
if (nonVotant === null) {
continue;
}
nonVotant = nonVotant.votant;
if (Array.isArray(nonVotant)) {
var _nonVotants;
(_nonVotants = nonVotants).push.apply(_nonVotants, _toConsumableArray(nonVotant));
} else {
(0, _assert["default"])(nonVotant);
nonVotants.push(nonVotant);
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
if (nonVotants.length === 0) {
delete decompteNominatif.nonVotants;
} else {
decompteNominatif.nonVotants = nonVotants;
var _iterator2 = _createForOfIteratorHelper(nonVotants),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var votant = _step2.value;
cleanVotant(votant);
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
}
var pour = decompteNominatif.pour;
if (pour === undefined) {
pour = decompteNominatif.pours;
delete decompteNominatif.pours;
} else {
_assert["default"].strictEqual(decompteNominatif.pours, undefined);
}
if (pour !== undefined) {
pour = pour.votant;
if (!Array.isArray(pour)) {
(0, _assert["default"])(pour);
pour = [pour];
}
if (pour.length === 0) {
delete decompteNominatif.pour;
} else {
decompteNominatif.pour = pour;
var _iterator3 = _createForOfIteratorHelper(pour),
_step3;
try {
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
var _votant = _step3.value;
cleanVotant(_votant);
}
} catch (err) {
_iterator3.e(err);
} finally {
_iterator3.f();
}
}
}
var contre = decompteNominatif.contre;
if (contre === undefined) {
contre = decompteNominatif.contres;
delete decompteNominatif.contres;
} else {
_assert["default"].strictEqual(decompteNominatif.contres, undefined);
}
if (contre !== undefined) {
contre = contre.votant;
if (!Array.isArray(contre)) {
(0, _assert["default"])(contre);
contre = [contre];
}
if (contre.length === 0) {
delete decompteNominatif.contre;
} else {
decompteNominatif.contre = contre;
var _iterator4 = _createForOfIteratorHelper(contre),
_step4;
try {
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
var _votant2 = _step4.value;
cleanVotant(_votant2);
}
} catch (err) {
_iterator4.e(err);
} finally {
_iterator4.f();
}
}
}
var abstentions = decompteNominatif.abstentions;
if (abstentions === undefined) {
abstentions = decompteNominatif.abstention;
delete decompteNominatif.abstention;
} else {
_assert["default"].strictEqual(decompteNominatif.abstention, undefined);
}
if (abstentions !== undefined) {
if (!Array.isArray(abstentions)) {
(0, _assert["default"])(abstentions);
abstentions = [abstentions];
}
var abstentionsArray = abstentions;
abstentions = [];
var _iterator5 = _createForOfIteratorHelper(abstentionsArray),
_step5;
try {
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
var absentionsItem = _step5.value;
if (absentionsItem === null) {
continue;
}
absentionsItem = absentionsItem.votant;
if (Array.isArray(absentionsItem)) {
var _abstentions;
(_abstentions = abstentions).push.apply(_abstentions, _toConsumableArray(absentionsItem));
} else {
(0, _assert["default"])(absentionsItem);
abstentions.push(absentionsItem);
}
}
} catch (err) {
_iterator5.e(err);
} finally {
_iterator5.f();
}
if (abstentions.length === 0) {
delete decompteNominatif.abstentions;
} else {
decompteNominatif.abstentions = abstentions;
var _iterator6 = _createForOfIteratorHelper(abstentions),
_step6;
try {
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
var _votant3 = _step6.value;
cleanVotant(_votant3);
}
} catch (err) {
_iterator6.e(err);
} finally {
_iterator6.f();
}
}
}
var nonVotantsVolontaires = decompteNominatif.nonVotantsVolontaires;
if (nonVotantsVolontaires !== undefined) {
if (!Array.isArray(nonVotantsVolontaires)) {
nonVotantsVolontaires = [nonVotantsVolontaires];
}
var nonVotantsVolontairesArray = nonVotantsVolontaires;
nonVotantsVolontaires = [];
var _iterator7 = _createForOfIteratorHelper(nonVotantsVolontairesArray),
_step7;
try {
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
var _absentionsItem = _step7.value;
if (_absentionsItem === null) {
continue;
}
_absentionsItem = _absentionsItem.votant;
if (Array.isArray(_absentionsItem)) {
var _nonVotantsVolontaire;
(_nonVotantsVolontaire = nonVotantsVolontaires).push.apply(_nonVotantsVolontaire, _toConsumableArray(_absentionsItem));
} else {
(0, _assert["default"])(_absentionsItem);
nonVotantsVolontaires.push(_absentionsItem);
}
}
} catch (err) {
_iterator7.e(err);
} finally {
_iterator7.f();
}
if (nonVotantsVolontaires.length === 0) {
delete decompteNominatif.nonVotantsVolontaires;
} else {
decompteNominatif.nonVotantsVolontaires = nonVotantsVolontaires;
var _iterator8 = _createForOfIteratorHelper(nonVotantsVolontaires),
_step8;
try {
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
var _votant4 = _step8.value;
cleanVotant(_votant4);
}
} catch (err) {
_iterator8.e(err);
} finally {
_iterator8.f();
}
}
}
}
function cleanScrutin(scrutin) {
(0, _xml.cleanXmlArtefacts)(scrutin);
var demandeur = scrutin.demandeur;
(0, _assert["default"])(demandeur);
{
(0, _xml.cleanXmlArtefacts)(demandeur);
_assert["default"].strictEqual(demandeur.referenceLegislative, undefined);
}
var objet = scrutin.objet;
(0, _assert["default"])(objet);
{
(0, _xml.cleanXmlArtefacts)(objet);
_assert["default"].strictEqual(objet.referenceLegislative, undefined);
}
var ventilationVotes = scrutin.ventilationVotes;
(0, _assert["default"])(ventilationVotes);
{
ventilationVotes = ventilationVotes.organe;
(0, _assert["default"])(ventilationVotes);
var groupes = ventilationVotes.groupes;
(0, _assert["default"])(groupes);
{
groupes = groupes.groupe;
(0, _assert["default"])(Array.isArray(groupes));
var _iterator9 = _createForOfIteratorHelper(groupes),
_step9;
try {
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
var groupe = _step9.value;
var vote = groupe.vote;
(0, _assert["default"])(vote);
{
var decompteVoix = vote.decompteVoix;
(0, _assert["default"])(decompteVoix);
{
if (decompteVoix.abstention !== undefined) {
_assert["default"].strictEqual(decompteVoix.abstentions, undefined);
decompteVoix.abstentions = decompteVoix.abstention;
delete decompteVoix.abstention;
}
if (decompteVoix.nonVotant !== undefined) {
_assert["default"].strictEqual(decompteVoix.nonVotants, undefined);
decompteVoix.nonVotants = decompteVoix.nonVotant;
delete decompteVoix.nonVotant;
}
}
var decompteNominatif = vote.decompteNominatif;
(0, _assert["default"])(decompteNominatif);
cleanDecompteNominatif(decompteNominatif);
}
}
} catch (err) {
_iterator9.e(err);
} finally {
_iterator9.f();
}
ventilationVotes.groupes = groupes;
}
scrutin.ventilationVotes = ventilationVotes;
}
var miseAuPoint = scrutin.miseAuPoint;
if (miseAuPoint !== undefined) {
cleanDecompteNominatif(miseAuPoint);
var dysfonctionnement = miseAuPoint.dysfonctionnement;
if (dysfonctionnement !== undefined) {
cleanDecompteNominatif(dysfonctionnement);
if (Object.values(dysfonctionnement).filter(function (value) {
return value !== undefined;
}).length === 0) {
delete miseAuPoint.dysfonctionnement;
}
}
if (Object.values(miseAuPoint).filter(function (value) {
return value !== undefined;
}).length === 0) {
delete scrutin.miseAuPoint;
}
}
}
function cleanVotant(votant) {
(0, _xml.cleanBooleanAttribute)(votant, "parDelegation");
(0, _xml.cleanIntegerAttribute)(votant, "numPlace");
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfeG1sIiwiZSIsIl9fZXNNb2R1bGUiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIlR5cGVFcnJvciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJmcm9tIiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJ0IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsImNsZWFuRGVjb21wdGVOb21pbmF0aWYiLCJkZWNvbXB0ZU5vbWluYXRpZiIsImNsZWFuWG1sQXJ0ZWZhY3RzIiwibm9uVm90YW50cyIsInVuZGVmaW5lZCIsIm5vblZvdGFudCIsImFzc2VydCIsInN0cmljdEVxdWFsIiwibm9uVm90YW50c0FycmF5IiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJ2b3RhbnQiLCJfbm9uVm90YW50cyIsInB1c2giLCJhcHBseSIsImVyciIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJjbGVhblZvdGFudCIsInBvdXIiLCJwb3VycyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJjb250cmUiLCJjb250cmVzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFic3RlbnRpb25zIiwiYWJzdGVudGlvbiIsImFic3RlbnRpb25zQXJyYXkiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiYWJzZW50aW9uc0l0ZW0iLCJfYWJzdGVudGlvbnMiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2Iiwibm9uVm90YW50c1ZvbG9udGFpcmVzIiwibm9uVm90YW50c1ZvbG9udGFpcmVzQXJyYXkiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiX25vblZvdGFudHNWb2xvbnRhaXJlIiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsImNsZWFuU2NydXRpbiIsInNjcnV0aW4iLCJkZW1hbmRldXIiLCJyZWZlcmVuY2VMZWdpc2xhdGl2ZSIsIm9iamV0IiwidmVudGlsYXRpb25Wb3RlcyIsIm9yZ2FuZSIsImdyb3VwZXMiLCJncm91cGUiLCJfaXRlcmF0b3I5IiwiX3N0ZXA5Iiwidm90ZSIsImRlY29tcHRlVm9peCIsIm1pc2VBdVBvaW50IiwiZHlzZm9uY3Rpb25uZW1lbnQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJjbGVhbkludGVnZXJBdHRyaWJ1dGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xlYW5lcnMvc2NydXRpbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcblxuaW1wb3J0IHtcbiAgY2xlYW5Cb29sZWFuQXR0cmlidXRlLFxuICBjbGVhbkludGVnZXJBdHRyaWJ1dGUsXG4gIGNsZWFuWG1sQXJ0ZWZhY3RzLFxufSBmcm9tIFwiLi94bWxcIlxuXG5mdW5jdGlvbiBjbGVhbkRlY29tcHRlTm9taW5hdGlmKGRlY29tcHRlTm9taW5hdGlmOiBhbnkpIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoZGVjb21wdGVOb21pbmF0aWYpXG5cbiAgbGV0IG5vblZvdGFudHMgPSBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzXG4gIGlmIChub25Wb3RhbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBub25Wb3RhbnRzID0gZGVjb21wdGVOb21pbmF0aWYubm9uVm90YW50XG4gICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLm5vblZvdGFudFxuICB9IGVsc2Uge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnQsIHVuZGVmaW5lZClcbiAgfVxuICBpZiAobm9uVm90YW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBub25Wb3RhbnRzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobm9uVm90YW50cywgXCIwXCIpXG4gICAgICBub25Wb3RhbnRzID0gW11cbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG5vblZvdGFudHMpKSB7XG4gICAgICBhc3NlcnQobm9uVm90YW50cylcbiAgICAgIG5vblZvdGFudHMgPSBbbm9uVm90YW50c11cbiAgICB9XG4gICAgY29uc3Qgbm9uVm90YW50c0FycmF5ID0gbm9uVm90YW50c1xuICAgIG5vblZvdGFudHMgPSBbXVxuICAgIGZvciAobGV0IG5vblZvdGFudCBvZiBub25Wb3RhbnRzQXJyYXkpIHtcbiAgICAgIGlmIChub25Wb3RhbnQgPT09IG51bGwpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIG5vblZvdGFudCA9IG5vblZvdGFudC52b3RhbnRcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vblZvdGFudCkpIHtcbiAgICAgICAgbm9uVm90YW50cy5wdXNoKC4uLm5vblZvdGFudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChub25Wb3RhbnQpXG4gICAgICAgIG5vblZvdGFudHMucHVzaChub25Wb3RhbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub25Wb3RhbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLm5vblZvdGFudHNcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb21wdGVOb21pbmF0aWYubm9uVm90YW50cyA9IG5vblZvdGFudHNcbiAgICAgIGZvciAoY29uc3Qgdm90YW50IG9mIG5vblZvdGFudHMpIHtcbiAgICAgICAgY2xlYW5Wb3RhbnQodm90YW50KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBwb3VyID0gZGVjb21wdGVOb21pbmF0aWYucG91clxuICBpZiAocG91ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcG91ciA9IGRlY29tcHRlTm9taW5hdGlmLnBvdXJzXG4gICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLnBvdXJzXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlY29tcHRlTm9taW5hdGlmLnBvdXJzLCB1bmRlZmluZWQpXG4gIH1cbiAgaWYgKHBvdXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHBvdXIgPSBwb3VyLnZvdGFudFxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb3VyKSkge1xuICAgICAgYXNzZXJ0KHBvdXIpXG4gICAgICBwb3VyID0gW3BvdXJdXG4gICAgfVxuICAgIGlmIChwb3VyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLnBvdXJcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb21wdGVOb21pbmF0aWYucG91ciA9IHBvdXJcbiAgICAgIGZvciAoY29uc3Qgdm90YW50IG9mIHBvdXIpIHtcbiAgICAgICAgY2xlYW5Wb3RhbnQodm90YW50KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBjb250cmUgPSBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmVcbiAgaWYgKGNvbnRyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29udHJlID0gZGVjb21wdGVOb21pbmF0aWYuY29udHJlc1xuICAgIGRlbGV0ZSBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmVzXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlY29tcHRlTm9taW5hdGlmLmNvbnRyZXMsIHVuZGVmaW5lZClcbiAgfVxuICBpZiAoY29udHJlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb250cmUgPSBjb250cmUudm90YW50XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRyZSkpIHtcbiAgICAgIGFzc2VydChjb250cmUpXG4gICAgICBjb250cmUgPSBbY29udHJlXVxuICAgIH1cbiAgICBpZiAoY29udHJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLmNvbnRyZVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmUgPSBjb250cmVcbiAgICAgIGZvciAoY29uc3Qgdm90YW50IG9mIGNvbnRyZSkge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IGFic3RlbnRpb25zID0gZGVjb21wdGVOb21pbmF0aWYuYWJzdGVudGlvbnNcbiAgaWYgKGFic3RlbnRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICBhYnN0ZW50aW9ucyA9IGRlY29tcHRlTm9taW5hdGlmLmFic3RlbnRpb25cbiAgICBkZWxldGUgZGVjb21wdGVOb21pbmF0aWYuYWJzdGVudGlvblxuICB9IGVsc2Uge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNvbXB0ZU5vbWluYXRpZi5hYnN0ZW50aW9uLCB1bmRlZmluZWQpXG4gIH1cbiAgaWYgKGFic3RlbnRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWJzdGVudGlvbnMpKSB7XG4gICAgICBhc3NlcnQoYWJzdGVudGlvbnMpXG4gICAgICBhYnN0ZW50aW9ucyA9IFthYnN0ZW50aW9uc11cbiAgICB9XG4gICAgY29uc3QgYWJzdGVudGlvbnNBcnJheSA9IGFic3RlbnRpb25zXG4gICAgYWJzdGVudGlvbnMgPSBbXVxuICAgIGZvciAobGV0IGFic2VudGlvbnNJdGVtIG9mIGFic3RlbnRpb25zQXJyYXkpIHtcbiAgICAgIGlmIChhYnNlbnRpb25zSXRlbSA9PT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgYWJzZW50aW9uc0l0ZW0gPSBhYnNlbnRpb25zSXRlbS52b3RhbnRcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFic2VudGlvbnNJdGVtKSkge1xuICAgICAgICBhYnN0ZW50aW9ucy5wdXNoKC4uLmFic2VudGlvbnNJdGVtKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KGFic2VudGlvbnNJdGVtKVxuICAgICAgICBhYnN0ZW50aW9ucy5wdXNoKGFic2VudGlvbnNJdGVtKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWJzdGVudGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgZGVjb21wdGVOb21pbmF0aWYuYWJzdGVudGlvbnNcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb21wdGVOb21pbmF0aWYuYWJzdGVudGlvbnMgPSBhYnN0ZW50aW9uc1xuICAgICAgZm9yIChjb25zdCB2b3RhbnQgb2YgYWJzdGVudGlvbnMpIHtcbiAgICAgICAgY2xlYW5Wb3RhbnQodm90YW50KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBub25Wb3RhbnRzVm9sb250YWlyZXMgPSBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzVm9sb250YWlyZXNcbiAgaWYgKG5vblZvdGFudHNWb2xvbnRhaXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5vblZvdGFudHNWb2xvbnRhaXJlcykpIHtcbiAgICAgIG5vblZvdGFudHNWb2xvbnRhaXJlcyA9IFtub25Wb3RhbnRzVm9sb250YWlyZXNdXG4gICAgfVxuICAgIGNvbnN0IG5vblZvdGFudHNWb2xvbnRhaXJlc0FycmF5ID0gbm9uVm90YW50c1ZvbG9udGFpcmVzXG4gICAgbm9uVm90YW50c1ZvbG9udGFpcmVzID0gW11cbiAgICBmb3IgKGxldCBhYnNlbnRpb25zSXRlbSBvZiBub25Wb3RhbnRzVm9sb250YWlyZXNBcnJheSkge1xuICAgICAgaWYgKGFic2VudGlvbnNJdGVtID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhYnNlbnRpb25zSXRlbSA9IGFic2VudGlvbnNJdGVtLnZvdGFudFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWJzZW50aW9uc0l0ZW0pKSB7XG4gICAgICAgIG5vblZvdGFudHNWb2xvbnRhaXJlcy5wdXNoKC4uLmFic2VudGlvbnNJdGVtKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KGFic2VudGlvbnNJdGVtKVxuICAgICAgICBub25Wb3RhbnRzVm9sb250YWlyZXMucHVzaChhYnNlbnRpb25zSXRlbSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vblZvdGFudHNWb2xvbnRhaXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlbGV0ZSBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzVm9sb250YWlyZXNcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb21wdGVOb21pbmF0aWYubm9uVm90YW50c1ZvbG9udGFpcmVzID0gbm9uVm90YW50c1ZvbG9udGFpcmVzXG4gICAgICBmb3IgKGNvbnN0IHZvdGFudCBvZiBub25Wb3RhbnRzVm9sb250YWlyZXMpIHtcbiAgICAgICAgY2xlYW5Wb3RhbnQodm90YW50KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5TY3J1dGluKHNjcnV0aW46IGFueSk6IHZvaWQge1xuICBjbGVhblhtbEFydGVmYWN0cyhzY3J1dGluKVxuXG4gIGNvbnN0IGRlbWFuZGV1ciA9IHNjcnV0aW4uZGVtYW5kZXVyXG4gIGFzc2VydChkZW1hbmRldXIpXG4gIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhkZW1hbmRldXIpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVtYW5kZXVyLnJlZmVyZW5jZUxlZ2lzbGF0aXZlLCB1bmRlZmluZWQpXG4gIH1cblxuICBjb25zdCBvYmpldCA9IHNjcnV0aW4ub2JqZXRcbiAgYXNzZXJ0KG9iamV0KVxuICB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMob2JqZXQpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqZXQucmVmZXJlbmNlTGVnaXNsYXRpdmUsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGxldCB2ZW50aWxhdGlvblZvdGVzID0gc2NydXRpbi52ZW50aWxhdGlvblZvdGVzXG4gIGFzc2VydCh2ZW50aWxhdGlvblZvdGVzKVxuICB7XG4gICAgdmVudGlsYXRpb25Wb3RlcyA9IHZlbnRpbGF0aW9uVm90ZXMub3JnYW5lXG4gICAgYXNzZXJ0KHZlbnRpbGF0aW9uVm90ZXMpXG5cbiAgICBsZXQgZ3JvdXBlcyA9IHZlbnRpbGF0aW9uVm90ZXMuZ3JvdXBlc1xuICAgIGFzc2VydChncm91cGVzKVxuICAgIHtcbiAgICAgIGdyb3VwZXMgPSBncm91cGVzLmdyb3VwZVxuICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoZ3JvdXBlcykpXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwZSBvZiBncm91cGVzKSB7XG4gICAgICAgIGNvbnN0IHZvdGUgPSBncm91cGUudm90ZVxuICAgICAgICBhc3NlcnQodm90ZSlcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGRlY29tcHRlVm9peCA9IHZvdGUuZGVjb21wdGVWb2l4XG4gICAgICAgICAgYXNzZXJ0KGRlY29tcHRlVm9peClcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoZGVjb21wdGVWb2l4LmFic3RlbnRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVjb21wdGVWb2l4LmFic3RlbnRpb25zLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGRlY29tcHRlVm9peC5hYnN0ZW50aW9ucyA9IGRlY29tcHRlVm9peC5hYnN0ZW50aW9uXG4gICAgICAgICAgICAgIGRlbGV0ZSBkZWNvbXB0ZVZvaXguYWJzdGVudGlvblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGVjb21wdGVWb2l4Lm5vblZvdGFudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNvbXB0ZVZvaXgubm9uVm90YW50cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBkZWNvbXB0ZVZvaXgubm9uVm90YW50cyA9IGRlY29tcHRlVm9peC5ub25Wb3RhbnRcbiAgICAgICAgICAgICAgZGVsZXRlIGRlY29tcHRlVm9peC5ub25Wb3RhbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkZWNvbXB0ZU5vbWluYXRpZiA9IHZvdGUuZGVjb21wdGVOb21pbmF0aWZcbiAgICAgICAgICBhc3NlcnQoZGVjb21wdGVOb21pbmF0aWYpXG4gICAgICAgICAgY2xlYW5EZWNvbXB0ZU5vbWluYXRpZihkZWNvbXB0ZU5vbWluYXRpZilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmVudGlsYXRpb25Wb3Rlcy5ncm91cGVzID0gZ3JvdXBlc1xuICAgIH1cblxuICAgIHNjcnV0aW4udmVudGlsYXRpb25Wb3RlcyA9IHZlbnRpbGF0aW9uVm90ZXNcbiAgfVxuXG4gIGNvbnN0IG1pc2VBdVBvaW50ID0gc2NydXRpbi5taXNlQXVQb2ludFxuICBpZiAobWlzZUF1UG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuRGVjb21wdGVOb21pbmF0aWYobWlzZUF1UG9pbnQpXG5cbiAgICBsZXQgZHlzZm9uY3Rpb25uZW1lbnQgPSBtaXNlQXVQb2ludC5keXNmb25jdGlvbm5lbWVudFxuICAgIGlmIChkeXNmb25jdGlvbm5lbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhbkRlY29tcHRlTm9taW5hdGlmKGR5c2ZvbmN0aW9ubmVtZW50KVxuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QudmFsdWVzKGR5c2ZvbmN0aW9ubmVtZW50KS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICBkZWxldGUgbWlzZUF1UG9pbnQuZHlzZm9uY3Rpb25uZW1lbnRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBPYmplY3QudmFsdWVzKG1pc2VBdVBvaW50KS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICBkZWxldGUgc2NydXRpbi5taXNlQXVQb2ludFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhblZvdGFudCh2b3RhbnQ6IGFueSkge1xuICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUodm90YW50LCBcInBhckRlbGVnYXRpb25cIilcbiAgY2xlYW5JbnRlZ2VyQXR0cmlidXRlKHZvdGFudCwgXCJudW1QbGFjZVwiKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLElBQUEsR0FBQUQsT0FBQTtBQUljLFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSxtQkFBQUMsQ0FBQSxXQUFBQyxrQkFBQSxDQUFBRCxDQUFBLEtBQUFFLGdCQUFBLENBQUFGLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUgsQ0FBQSxLQUFBSSxrQkFBQTtBQUFBLFNBQUFBLG1CQUFBLGNBQUFDLFNBQUE7QUFBQSxTQUFBSCxpQkFBQUYsQ0FBQSw4QkFBQU0sTUFBQSxZQUFBTixDQUFBLENBQUFNLE1BQUEsQ0FBQUMsUUFBQSxhQUFBUCxDQUFBLHVCQUFBUSxLQUFBLENBQUFDLElBQUEsQ0FBQVQsQ0FBQTtBQUFBLFNBQUFDLG1CQUFBRCxDQUFBLFFBQUFRLEtBQUEsQ0FBQUUsT0FBQSxDQUFBVixDQUFBLFVBQUFXLGlCQUFBLENBQUFYLENBQUE7QUFBQSxTQUFBWSwyQkFBQVosQ0FBQSxFQUFBSCxDQUFBLFFBQUFnQixDQUFBLHlCQUFBUCxNQUFBLElBQUFOLENBQUEsQ0FBQU0sTUFBQSxDQUFBQyxR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LFNBQVMsQ0FBQztnQkFDdERtRCxZQUFZLENBQUNwRCxVQUFVLEdBQUdvRCxZQUFZLENBQUNsRCxTQUFTO2dCQUNoRCxPQUFPa0QsWUFBWSxDQUFDbEQsU0FBUztjQUMvQjtZQUNGO1lBRUEsSUFBTUosaUJBQWlCLEdBQUdxRCxJQUFJLENBQUNyRCxpQkFBaUI7WUFDaEQsSUFBQUssa0JBQU0sRUFBQ0wsaUJBQWlCLENBQUM7WUFDekJELHNCQUFzQixDQUFDQyxpQkFBaUIsQ0FBQztVQUMzQztRQUNGO01BQUMsU0FBQWMsR0FBQTtRQUFBcUMsVUFBQSxDQUFBdkYsQ0FBQSxDQUFBa0QsR0FBQTtNQUFBO1FBQUFxQyxVQUFBLENBQUEvRCxDQUFBO01BQUE7TUFDRDJELGdCQUFnQixDQUFDRSxPQUFPLEdBQUdBLE9BQU87SUFDcEM7SUFFQU4sT0FBTyxDQUFDSSxnQkFBZ0IsR0FBR0EsZ0JBQWdCO0VBQzdDO0VBRUEsSUFBTVEsV0FBVyxHQUFHWixPQUFPLENBQUNZLFdBQVc7RUFDdkMsSUFBSUEsV0FBVyxLQUFLcEQsU0FBUyxFQUFFO0lBQzdCSixzQkFBc0IsQ0FBQ3dELFdBQVcsQ0FBQztJQUVuQyxJQUFJQyxpQkFBaUIsR0FBR0QsV0FBVyxDQUFDQyxpQkFBaUI7SUFDckQsSUFBSUEsaUJBQWlCLEtBQUtyRCxTQUFTLEVBQUU7TUFDbkNKLHNCQUFzQixDQUFDeUQsaUJBQWlCLENBQUM7TUFDekMsSUFDRUMsTUFBTSxDQUFDQyxNQUFNLENBQUNGLGlCQUFpQixDQUFDLENBQUNHLE1BQU0sQ0FBQyxVQUFDeEUsS0FBSztRQUFBLE9BQUtBLEtBQUssS0FBS2dCLFNBQVM7TUFBQSxFQUFDLENBQ3BFdEIsTUFBTSxLQUFLLENBQUMsRUFDZjtRQUNBLE9BQU8wRSxXQUFXLENBQUNDLGlCQUFpQjtNQUN0QztJQUNGO0lBRUEsSUFDRUMsTUFBTSxDQUFDQyxNQUFNLENBQUNILFdBQVcsQ0FBQyxDQUFDSSxNQUFNLENBQUMsVUFBQ3hFLEtBQUs7TUFBQSxPQUFLQSxLQUFLLEtBQUtnQixTQUFTO0lBQUEsRUFBQyxDQUM5RHRCLE1BQU0sS0FBSyxDQUFDLEVBQ2Y7TUFDQSxPQUFPOEQsT0FBTyxDQUFDWSxXQUFXO0lBQzVCO0VBQ0Y7QUFDRjtBQUVBLFNBQVN0QyxXQUFXQSxDQUFDUCxNQUFXLEVBQUU7RUFDaEMsSUFBQWtELDBCQUFxQixFQUFDbEQsTUFBTSxFQUFFLGVBQWUsQ0FBQztFQUM5QyxJQUFBbUQsMEJBQXFCLEVBQUNuRCxNQUFNLEVBQUUsVUFBVSxDQUFDO0FBQzNDIiwiaWdub3JlTGlzdCI6W119