@tricoteuses/assemblee 1.10.5 → 2.0.0
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/README.md +8 -1
- package/lib/amendements-79bwpkvR.js +154 -0
- package/lib/amendements-CV3s5a0M.js +667 -0
- package/lib/cleaners/index.d.ts +9 -9
- package/lib/cleaners.js +564 -0
- package/lib/datasets.d.ts +3 -3
- package/lib/dossiers_legislatifs.d.ts +2 -2
- package/lib/index.d.ts +17 -22
- package/lib/index.js +1542 -314
- package/lib/inserters.d.ts +5 -5
- package/lib/loaders-9mHdTl9L.js +4158 -0
- package/lib/loaders.d.ts +12 -12
- package/lib/loaders.js +29 -1689
- package/lib/organes.d.ts +1 -1
- package/lib/parse-Ccs6wcUg.js +2512 -0
- package/lib/parsers/index.d.ts +2 -3
- package/lib/parsers/plf.d.ts +1 -0
- package/lib/parsers/recherche_amendements.d.ts +2 -2
- package/lib/parsers/textes_lois.d.ts +1 -23
- package/lib/parsers.js +398 -0
- package/lib/raw_types/debats.d.ts +2 -2
- package/lib/raw_types/dossiers_legislatifs.d.ts +1 -1
- package/lib/schemas/acteurs_et_organes.json +1166 -0
- package/lib/schemas/agendas.json +1745 -0
- package/lib/schemas/amendements.json +2085 -0
- package/lib/schemas/debats.json +842 -0
- package/lib/schemas/dossiers_legislatifs.json +3874 -0
- package/lib/schemas/legislatures.json +17 -0
- package/lib/schemas/questions.json +704 -0
- package/lib/schemas/scrutins.json +701 -0
- package/lib/scripts/retrieve_deputes_photos.d.ts +1 -1
- package/lib/types/acteurs_et_organes.d.ts +340 -0
- package/lib/types/agendas.d.ts +236 -10
- package/lib/types/amendements.d.ts +276 -1
- package/lib/types/debats.d.ts +52 -2
- package/lib/types/dossiers_legislatifs.d.ts +403 -9
- package/lib/types/questions.d.ts +99 -2
- package/lib/types/scrutins.d.ts +101 -0
- package/lib/urls.d.ts +2 -2
- package/package.json +32 -94
- package/lib/api.js +0 -52
- package/lib/api.mjs +0 -45
- package/lib/bugs/acteur-00010/plugin.test.js +0 -90
- package/lib/bugs/acteur-00010/plugin.test.mjs +0 -33
- package/lib/bugs/acteur-00010.d.ts +0 -7
- package/lib/bugs/acteur-00010.js +0 -116
- package/lib/bugs/acteur-00010.mjs +0 -26
- package/lib/bugs/agenda-00002/plugin.test.js +0 -124
- package/lib/bugs/agenda-00002/plugin.test.mjs +0 -50
- package/lib/bugs/agenda-00002.d.ts +0 -15
- package/lib/bugs/agenda-00002.js +0 -406
- package/lib/bugs/agenda-00002.mjs +0 -172
- package/lib/bugs/agenda-00008/plugin.test.js +0 -92
- package/lib/bugs/agenda-00008/plugin.test.mjs +0 -31
- package/lib/bugs/agenda-00008.d.ts +0 -7
- package/lib/bugs/agenda-00008.js +0 -123
- package/lib/bugs/agenda-00008.mjs +0 -26
- package/lib/bugs/agenda-00011/plugin.test.d.ts +0 -1
- package/lib/bugs/agenda-00011/plugin.test.js +0 -263
- package/lib/bugs/agenda-00011/plugin.test.mjs +0 -152
- package/lib/bugs/agenda-00011.d.ts +0 -16
- package/lib/bugs/agenda-00011.js +0 -333
- package/lib/bugs/agenda-00011.mjs +0 -125
- package/lib/bugs.d.ts +0 -21
- package/lib/bugs.js +0 -452
- package/lib/bugs.mjs +0 -70
- package/lib/cleaners/actes_legislatifs.js +0 -315
- package/lib/cleaners/actes_legislatifs.mjs +0 -253
- package/lib/cleaners/acteurs.js +0 -265
- package/lib/cleaners/acteurs.mjs +0 -180
- package/lib/cleaners/amendements.js +0 -294
- package/lib/cleaners/amendements.mjs +0 -227
- package/lib/cleaners/debats.js +0 -12
- package/lib/cleaners/debats.mjs +0 -5
- package/lib/cleaners/documents.js +0 -205
- package/lib/cleaners/documents.mjs +0 -133
- package/lib/cleaners/dossiers_legislatifs.js +0 -131
- package/lib/cleaners/dossiers_legislatifs.mjs +0 -70
- package/lib/cleaners/index.js +0 -70
- package/lib/cleaners/index.mjs +0 -10
- package/lib/cleaners/organes.js +0 -65
- package/lib/cleaners/organes.mjs +0 -48
- package/lib/cleaners/questions.js +0 -12
- package/lib/cleaners/questions.mjs +0 -5
- package/lib/cleaners/reunions.js +0 -312
- package/lib/cleaners/reunions.mjs +0 -255
- package/lib/cleaners/scrutins.js +0 -340
- package/lib/cleaners/scrutins.mjs +0 -221
- package/lib/cleaners/xml.js +0 -74
- package/lib/cleaners/xml.mjs +0 -59
- package/lib/datasets.js +0 -837
- package/lib/datasets.mjs +0 -755
- package/lib/dates.js +0 -124
- package/lib/dates.mjs +0 -100
- package/lib/dossiers_legislatifs.js +0 -346
- package/lib/dossiers_legislatifs.mjs +0 -208
- package/lib/file_systems.js +0 -162
- package/lib/file_systems.mjs +0 -62
- package/lib/git.js +0 -223
- package/lib/git.mjs +0 -151
- package/lib/index.mjs +0 -17
- package/lib/inserters.js +0 -521
- package/lib/inserters.mjs +0 -337
- package/lib/loaders.mjs +0 -886
- package/lib/logger.js +0 -35
- package/lib/logger.mjs +0 -26
- package/lib/organes.js +0 -22
- package/lib/organes.mjs +0 -15
- package/lib/parsers/documents.d.ts +0 -62
- package/lib/parsers/documents.js +0 -453
- package/lib/parsers/documents.mjs +0 -370
- package/lib/parsers/index.js +0 -40
- package/lib/parsers/index.mjs +0 -4
- package/lib/parsers/recherche_amendements.js +0 -403
- package/lib/parsers/recherche_amendements.mjs +0 -167
- package/lib/parsers/textes_lois.js +0 -307
- package/lib/parsers/textes_lois.mjs +0 -264
- package/lib/raw_types/acteurs_et_organes.js +0 -1215
- package/lib/raw_types/acteurs_et_organes.mjs +0 -1148
- package/lib/raw_types/agendas.js +0 -777
- package/lib/raw_types/agendas.mjs +0 -724
- package/lib/raw_types/amendements.js +0 -1052
- package/lib/raw_types/amendements.mjs +0 -993
- package/lib/raw_types/debats.js +0 -630
- package/lib/raw_types/debats.mjs +0 -573
- package/lib/raw_types/dossiers_legislatifs.js +0 -1529
- package/lib/raw_types/dossiers_legislatifs.mjs +0 -1471
- package/lib/raw_types/questions.js +0 -469
- package/lib/raw_types/questions.mjs +0 -416
- package/lib/raw_types/scrutins.js +0 -651
- package/lib/raw_types/scrutins.mjs +0 -598
- package/lib/schemas/acteur/Acteur.json +0 -56
- package/lib/schemas/acteur/AdresseElectronique.json +0 -52
- package/lib/schemas/acteur/AdressePostale.json +0 -75
- package/lib/schemas/acteur/Civ.json +0 -14
- package/lib/schemas/acteur/Collaborateur.json +0 -29
- package/lib/schemas/acteur/EtatCivil.json +0 -51
- package/lib/schemas/acteur/Ident.json +0 -40
- package/lib/schemas/acteur/Lieu.json +0 -66
- package/lib/schemas/acteur/Mandat.json +0 -192
- package/lib/schemas/acteur/Profession.json +0 -46
- package/lib/schemas/agenda/Agenda.json +0 -318
- package/lib/schemas/agenda/CycleDeVie.json +0 -45
- package/lib/schemas/agenda/PointOdj.json +0 -82
- package/lib/schemas/amendement/Amendement.json +0 -246
- package/lib/schemas/amendement/Diff.json +0 -25
- package/lib/schemas/amendement/DispositifAmdtCredit.json +0 -85
- package/lib/schemas/amendement/Identifiant.json +0 -62
- package/lib/schemas/amendement/PointeurFragmentTexte.json +0 -127
- package/lib/schemas/amendement/Representation.json +0 -67
- package/lib/schemas/amendement/Total.json +0 -26
- package/lib/schemas/converted_from_type/acteurs_et_organes.json +0 -666
- package/lib/schemas/converted_from_type/agendas.json +0 -1100
- package/lib/schemas/converted_from_type/amendements.json +0 -3191
- package/lib/schemas/converted_from_type/debats.json +0 -682
- package/lib/schemas/converted_from_type/deputes.json +0 -26
- package/lib/schemas/converted_from_type/dossiers_legislatifs.json +0 -2918
- package/lib/schemas/converted_from_type/legislatures.json +0 -16
- package/lib/schemas/converted_from_type/questions.json +0 -328
- package/lib/schemas/converted_from_type/scrutins.json +0 -393
- package/lib/schemas/debat/Contenu.json +0 -75
- package/lib/schemas/debat/Debat.json +0 -40
- package/lib/schemas/debat/Metadonnees.json +0 -75
- package/lib/schemas/debat/Orateur.json +0 -60
- package/lib/schemas/debat/Point.json +0 -169
- package/lib/schemas/debat/Sommaire.json +0 -71
- package/lib/schemas/debat/SommaireElement.json +0 -108
- package/lib/schemas/debat/Texte.json +0 -34
- package/lib/schemas/document/CodeLibelle.json +0 -25
- package/lib/schemas/document/Document.json +0 -385
- package/lib/schemas/document/Indexation.json +0 -38
- package/lib/schemas/dossier/ActeLegislatif.json +0 -211
- package/lib/schemas/dossier/ActeLegislatifBase.json +0 -62
- package/lib/schemas/dossier/Agenda.json +0 -23
- package/lib/schemas/dossier/ConseilConstitutionnel.json +0 -35
- package/lib/schemas/dossier/Decision.json +0 -25
- package/lib/schemas/dossier/Dossier.json +0 -124
- package/lib/schemas/dossier/EtudeImpact.json +0 -29
- package/lib/schemas/dossier/EtudePlf.json +0 -105
- package/lib/schemas/dossier/Europe.json +0 -42
- package/lib/schemas/dossier/FamCodeLibelle.json +0 -25
- package/lib/schemas/dossier/InfoJO.json +0 -23
- package/lib/schemas/dossier/Initiateur.json +0 -36
- package/lib/schemas/dossier/Motion.json +0 -27
- package/lib/schemas/dossier/Promulgation.json +0 -62
- package/lib/schemas/dossier/Rapporteur.json +0 -36
- package/lib/schemas/dossier/Texte.json +0 -47
- package/lib/schemas/organe/CodeTypeOrgane.json +0 -43
- package/lib/schemas/organe/Organe.json +0 -136
- package/lib/schemas/organe/ViMoDe.json +0 -28
- package/lib/schemas/question/Auteur.json +0 -58
- package/lib/schemas/question/Cloture.json +0 -28
- package/lib/schemas/question/InfoJO.json +0 -40
- package/lib/schemas/question/MinAttribElement.json +0 -30
- package/lib/schemas/question/Question.json +0 -172
- package/lib/schemas/question/Renouvellement.json +0 -17
- package/lib/schemas/question/Signalement.json +0 -21
- package/lib/schemas/question/Texte.json +0 -24
- package/lib/schemas/scrutin/DecompteVoix.json +0 -35
- package/lib/schemas/scrutin/Dysfonctionnement.json +0 -50
- package/lib/schemas/scrutin/MiseAuPoint.json +0 -53
- package/lib/schemas/scrutin/OrganeVotant.json +0 -88
- package/lib/schemas/scrutin/Scrutin.json +0 -187
- package/lib/schemas/scrutin/Votant.json +0 -37
- package/lib/scripts/bugs_helper.d.ts +0 -13
- package/lib/scripts/bugs_helper.js +0 -595
- package/lib/scripts/bugs_helper.mjs +0 -251
- package/lib/scripts/clean_reorganized_data.js +0 -613
- package/lib/scripts/clean_reorganized_data.mjs +0 -276
- package/lib/scripts/diff_amendements.js +0 -249
- package/lib/scripts/diff_amendements.mjs +0 -202
- package/lib/scripts/document_dossiers_legislatifs.js +0 -655
- package/lib/scripts/document_dossiers_legislatifs.mjs +0 -414
- package/lib/scripts/get_today_reunions.js +0 -37
- package/lib/scripts/get_today_reunions.mjs +0 -31
- package/lib/scripts/merge_scrutins.js +0 -97
- package/lib/scripts/merge_scrutins.mjs +0 -47
- package/lib/scripts/parse_textes_lois.d.ts +0 -1
- package/lib/scripts/parse_textes_lois.js +0 -171
- package/lib/scripts/parse_textes_lois.mjs +0 -140
- package/lib/scripts/process_open_dataset.js +0 -301
- package/lib/scripts/process_open_dataset.mjs +0 -134
- package/lib/scripts/raw_types_from_amendements.js +0 -135
- package/lib/scripts/raw_types_from_amendements.mjs +0 -134
- package/lib/scripts/reorganize_data.js +0 -805
- package/lib/scripts/reorganize_data.mjs +0 -517
- package/lib/scripts/retrieve_deputes_photos.js +0 -310
- package/lib/scripts/retrieve_deputes_photos.mjs +0 -158
- package/lib/scripts/retrieve_documents.js +0 -547
- package/lib/scripts/retrieve_documents.mjs +0 -242
- package/lib/scripts/retrieve_open_data.js +0 -107
- package/lib/scripts/retrieve_open_data.mjs +0 -26
- package/lib/scripts/retrieve_pending_amendments.js +0 -206
- package/lib/scripts/retrieve_pending_amendments.mjs +0 -57
- package/lib/scripts/retrieve_senateurs_photos.js +0 -234
- package/lib/scripts/retrieve_senateurs_photos.mjs +0 -116
- package/lib/scripts/retrieve_textes_lois.d.ts +0 -1
- package/lib/scripts/retrieve_textes_lois.js +0 -240
- package/lib/scripts/retrieve_textes_lois.mjs +0 -85
- package/lib/scripts/shared/cli_helpers.js +0 -89
- package/lib/scripts/shared/cli_helpers.mjs +0 -81
- package/lib/scripts/test_iter_load.js +0 -155
- package/lib/scripts/test_iter_load.mjs +0 -72
- package/lib/scripts/test_load.js +0 -26
- package/lib/scripts/test_load.mjs +0 -16
- package/lib/scripts/test_load_big_files.js +0 -26
- package/lib/scripts/test_load_big_files.mjs +0 -16
- package/lib/scripts/validate_json.js +0 -353
- package/lib/scripts/validate_json.mjs +0 -184
- package/lib/shared_types/codes_actes.js +0 -231
- package/lib/shared_types/codes_actes.mjs +0 -224
- package/lib/strings.js +0 -16
- package/lib/strings.mjs +0 -7
- package/lib/types/acteurs_et_organes.js +0 -965
- package/lib/types/acteurs_et_organes.mjs +0 -906
- package/lib/types/agendas.js +0 -628
- package/lib/types/agendas.mjs +0 -575
- package/lib/types/amendements.js +0 -899
- package/lib/types/amendements.mjs +0 -842
- package/lib/types/debats.js +0 -619
- package/lib/types/debats.mjs +0 -562
- package/lib/types/dossiers_legislatifs.js +0 -1188
- package/lib/types/dossiers_legislatifs.mjs +0 -1130
- package/lib/types/legislatures.js +0 -17
- package/lib/types/legislatures.mjs +0 -10
- package/lib/types/questions.js +0 -454
- package/lib/types/questions.mjs +0 -401
- package/lib/types/scrutins.js +0 -556
- package/lib/types/scrutins.mjs +0 -503
- package/lib/urls.js +0 -325
- package/lib/urls.mjs +0 -258
- /package/lib/{bugs/acteur-00010/plugin.test.d.ts → scripts/add_links_to_documents.d.ts} +0 -0
- /package/lib/{bugs/agenda-00002/plugin.test.d.ts → scripts/copy-schemas.d.ts} +0 -0
- /package/lib/{bugs/agenda-00008/plugin.test.d.ts → scripts/generate-json-schemas.d.ts} +0 -0
|
@@ -1,805 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
-
require("core-js/modules/es.symbol.js");
|
|
5
|
-
require("core-js/modules/es.symbol.description.js");
|
|
6
|
-
require("core-js/modules/es.symbol.iterator.js");
|
|
7
|
-
require("core-js/modules/es.array.from.js");
|
|
8
|
-
require("core-js/modules/es.array.is-array.js");
|
|
9
|
-
require("core-js/modules/es.array.iterator.js");
|
|
10
|
-
require("core-js/modules/es.array.slice.js");
|
|
11
|
-
require("core-js/modules/es.function.name.js");
|
|
12
|
-
require("core-js/modules/es.object.define-property.js");
|
|
13
|
-
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
14
|
-
require("core-js/modules/es.object.to-string.js");
|
|
15
|
-
require("core-js/modules/es.regexp.to-string.js");
|
|
16
|
-
require("core-js/modules/es.string.iterator.js");
|
|
17
|
-
require("core-js/modules/es.weak-map.js");
|
|
18
|
-
require("core-js/modules/web.dom-collections.iterator.js");
|
|
19
|
-
require("core-js/modules/es.array.concat.js");
|
|
20
|
-
require("core-js/modules/es.array.join.js");
|
|
21
|
-
require("core-js/modules/es.array.sort.js");
|
|
22
|
-
require("core-js/modules/es.date.to-json.js");
|
|
23
|
-
require("core-js/modules/es.date.to-string.js");
|
|
24
|
-
require("core-js/modules/es.object.keys.js");
|
|
25
|
-
require("core-js/modules/es.object.values.js");
|
|
26
|
-
require("core-js/modules/es.regexp.exec.js");
|
|
27
|
-
require("core-js/modules/es.string.ends-with.js");
|
|
28
|
-
require("core-js/modules/es.string.replace.js");
|
|
29
|
-
require("core-js/modules/es.string.starts-with.js");
|
|
30
|
-
require("core-js/modules/es.string.trim.js");
|
|
31
|
-
var _assert = _interopRequireDefault(require("assert"));
|
|
32
|
-
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
|
|
33
|
-
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
34
|
-
var _path = _interopRequireDefault(require("path"));
|
|
35
|
-
var _datasets = require("../datasets");
|
|
36
|
-
var _dates = require("../dates");
|
|
37
|
-
var git = _interopRequireWildcard(require("../git"));
|
|
38
|
-
var _file_systems = require("../file_systems");
|
|
39
|
-
var _loaders = require("../loaders");
|
|
40
|
-
var _acteurs_et_organes = require("../raw_types/acteurs_et_organes");
|
|
41
|
-
var _agendas = require("../raw_types/agendas");
|
|
42
|
-
var _amendements = require("../raw_types/amendements");
|
|
43
|
-
var _dossiers_legislatifs = require("../raw_types/dossiers_legislatifs");
|
|
44
|
-
var _scrutins = require("../raw_types/scrutins");
|
|
45
|
-
var _questions = require("../raw_types/questions");
|
|
46
|
-
var _debats = require("../raw_types/debats");
|
|
47
|
-
var _cli_helpers = require("./shared/cli_helpers");
|
|
48
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
49
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
50
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
51
|
-
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
52
|
-
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."); }
|
|
53
|
-
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
54
|
-
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
55
|
-
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; } } }; }
|
|
56
|
-
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; } }
|
|
57
|
-
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; }
|
|
58
|
-
function parseArgs(argv) {
|
|
59
|
-
var optionsDefinitions = [_cli_helpers.cloneOption, _cli_helpers.commitOption, _cli_helpers.categoriesOption, _cli_helpers.legislatureOption, _cli_helpers.remoteOption, _cli_helpers.silentOption, _cli_helpers.verboseOption, _cli_helpers.dataDirDefaultOption, _cli_helpers.fetchDocumentsOption, _cli_helpers.parseDocumentsOption, _cli_helpers.documentFormatOption, _cli_helpers.pullOption, {
|
|
60
|
-
alias: "V",
|
|
61
|
-
help: "don't validate raw data",
|
|
62
|
-
name: "no-validate-raw",
|
|
63
|
-
type: Boolean
|
|
64
|
-
}];
|
|
65
|
-
var options = (0, _commandLineArgs["default"])(optionsDefinitions, {
|
|
66
|
-
argv: argv
|
|
67
|
-
});
|
|
68
|
-
return options;
|
|
69
|
-
}
|
|
70
|
-
function clearDirectory(dirPath) {
|
|
71
|
-
_fsExtra["default"].ensureDirSync(dirPath);
|
|
72
|
-
var _iterator = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(dirPath)),
|
|
73
|
-
_step;
|
|
74
|
-
try {
|
|
75
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
76
|
-
var filename = _step.value;
|
|
77
|
-
if (!filename.startsWith(".")) {
|
|
78
|
-
_fsExtra["default"].removeSync(_path["default"].join(dirPath, filename));
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
} catch (err) {
|
|
82
|
-
_iterator.e(err);
|
|
83
|
-
} finally {
|
|
84
|
-
_iterator.f();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
function cloneGit(gitGroupUrl, datasetName, dataDir) {
|
|
88
|
-
git.clone(gitGroupUrl, datasetName, dataDir);
|
|
89
|
-
}
|
|
90
|
-
function reorganizeData(options) {
|
|
91
|
-
var _options$clone;
|
|
92
|
-
var dataDir = options.dataDir;
|
|
93
|
-
Date.prototype.toJSON = _dates.patchedDateToJson;
|
|
94
|
-
var exitCode = options.commit ? 10 : 0;
|
|
95
|
-
var gitGroupUrl = (_options$clone = options.clone) === null || _options$clone === void 0 ? void 0 : _options$clone.trim().replace(/\/+$/, "");
|
|
96
|
-
var validateRawData = !options["no-validate-raw"];
|
|
97
|
-
var enabledDatasets = (0, _datasets.getEnabledDatasets)(options.categories);
|
|
98
|
-
var chosenDatasets = (0, _datasets.filterByLegislature)(_datasets.datasets, options.legislature);
|
|
99
|
-
function commitGit(datasetReorganizedDir, options) {
|
|
100
|
-
if (options.commit) {
|
|
101
|
-
var errorCode = git.commitAndPush(datasetReorganizedDir, "Nouvelle moisson", options.remote);
|
|
102
|
-
if (exitCode === 10 && errorCode !== 10 || exitCode === 0 && errorCode !== 0 && errorCode !== 10) {
|
|
103
|
-
exitCode = errorCode;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
|
|
108
|
-
var _iterator2 = _createForOfIteratorHelper(chosenDatasets.acteursEtOrganes),
|
|
109
|
-
_step2;
|
|
110
|
-
try {
|
|
111
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
112
|
-
var dataset = _step2.value;
|
|
113
|
-
var originalJsonDirectoryOrFilePath = _path["default"].join(dataDir, dataset.filename);
|
|
114
|
-
if (!options.silent) {
|
|
115
|
-
console.log("Reorganizing ".concat(originalJsonDirectoryOrFilePath));
|
|
116
|
-
}
|
|
117
|
-
var datasetName = _path["default"].basename(originalJsonDirectoryOrFilePath, ".json");
|
|
118
|
-
cloneGit(gitGroupUrl, datasetName, dataDir);
|
|
119
|
-
var datasetReorganizedDir = _path["default"].join(dataDir, datasetName);
|
|
120
|
-
if (options.pull) {
|
|
121
|
-
git.resetAndPull(datasetReorganizedDir);
|
|
122
|
-
}
|
|
123
|
-
clearDirectory(datasetReorganizedDir);
|
|
124
|
-
var acteursReorganizedDir = _path["default"].join(datasetReorganizedDir, "acteurs");
|
|
125
|
-
_fsExtra["default"].mkdirSync(acteursReorganizedDir);
|
|
126
|
-
var organesReorganizedDir = _path["default"].join(datasetReorganizedDir, "organes");
|
|
127
|
-
_fsExtra["default"].mkdirSync(organesReorganizedDir);
|
|
128
|
-
switch (dataset.structure) {
|
|
129
|
-
case _datasets.DatasetStructure.SingleFile:
|
|
130
|
-
{
|
|
131
|
-
var originalJson = _fsExtra["default"].readFileSync(originalJsonDirectoryOrFilePath, {
|
|
132
|
-
encoding: "utf8"
|
|
133
|
-
});
|
|
134
|
-
var originalData = validateRawData ? _acteurs_et_organes.Convert.toActeursEtOrganes(originalJson) : JSON.parse(originalJson);
|
|
135
|
-
var _iterator3 = _createForOfIteratorHelper(originalData["export"].acteurs.acteur),
|
|
136
|
-
_step3;
|
|
137
|
-
try {
|
|
138
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
139
|
-
var acteur = _step3.value;
|
|
140
|
-
var reorganizedJsonFilePath = _path["default"].join(acteursReorganizedDir, acteur.uid["#text"] + ".json");
|
|
141
|
-
_fsExtra["default"].writeFileSync(reorganizedJsonFilePath, JSON.stringify(acteur, null, 2), {
|
|
142
|
-
encoding: "utf8"
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
} catch (err) {
|
|
146
|
-
_iterator3.e(err);
|
|
147
|
-
} finally {
|
|
148
|
-
_iterator3.f();
|
|
149
|
-
}
|
|
150
|
-
var _iterator4 = _createForOfIteratorHelper(originalData["export"].organes.organe),
|
|
151
|
-
_step4;
|
|
152
|
-
try {
|
|
153
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
154
|
-
var organe = _step4.value;
|
|
155
|
-
var _reorganizedJsonFilePath = _path["default"].join(organesReorganizedDir, organe.uid + ".json");
|
|
156
|
-
_fsExtra["default"].writeFileSync(_reorganizedJsonFilePath, JSON.stringify(organe, null, 2), {
|
|
157
|
-
encoding: "utf8"
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
} catch (err) {
|
|
161
|
-
_iterator4.e(err);
|
|
162
|
-
} finally {
|
|
163
|
-
_iterator4.f();
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
break;
|
|
167
|
-
case _datasets.DatasetStructure.SegmentedFiles:
|
|
168
|
-
{
|
|
169
|
-
var deportsByActeurUid = {};
|
|
170
|
-
if (_fsExtra["default"].existsSync(_path["default"].join(originalJsonDirectoryOrFilePath, "deport"))) {
|
|
171
|
-
var _iterator5 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["deport"])),
|
|
172
|
-
_step5;
|
|
173
|
-
try {
|
|
174
|
-
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
175
|
-
var deportSplitPath = _step5.value;
|
|
176
|
-
var deportFilename = deportSplitPath[deportSplitPath.length - 1];
|
|
177
|
-
if (!deportFilename.endsWith(".json")) {
|
|
178
|
-
continue;
|
|
179
|
-
}
|
|
180
|
-
var deportOriginalFilePath = _path["default"].join.apply(_path["default"], [originalJsonDirectoryOrFilePath].concat(_toConsumableArray(deportSplitPath)));
|
|
181
|
-
if (options.verbose) {
|
|
182
|
-
console.log(" Loading \"deport\" file: ".concat(deportOriginalFilePath, "\u2026"));
|
|
183
|
-
}
|
|
184
|
-
var deportOriginalJson = _fsExtra["default"].readFileSync(deportOriginalFilePath, {
|
|
185
|
-
encoding: "utf8"
|
|
186
|
-
});
|
|
187
|
-
var deportOriginal = validateRawData ? _acteurs_et_organes.Convert.toDeport(deportOriginalJson) : JSON.parse(deportOriginalJson);
|
|
188
|
-
var deport = deportOriginal.deport;
|
|
189
|
-
var _deports = deportsByActeurUid[deport.acteurRef];
|
|
190
|
-
if (_deports === undefined) {
|
|
191
|
-
_deports = deportsByActeurUid[deport.acteurRef] = [];
|
|
192
|
-
}
|
|
193
|
-
_deports.push(deport);
|
|
194
|
-
}
|
|
195
|
-
} catch (err) {
|
|
196
|
-
_iterator5.e(err);
|
|
197
|
-
} finally {
|
|
198
|
-
_iterator5.f();
|
|
199
|
-
}
|
|
200
|
-
for (var _i = 0, _Object$values = Object.values(deportsByActeurUid); _i < _Object$values.length; _i++) {
|
|
201
|
-
var deports = _Object$values[_i];
|
|
202
|
-
deports.sort(function (a, b) {
|
|
203
|
-
return a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length;
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
var mandatsByActeurUid = {};
|
|
208
|
-
if (_fsExtra["default"].existsSync(_path["default"].join(originalJsonDirectoryOrFilePath, "mandat"))) {
|
|
209
|
-
var _iterator6 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["mandat"])),
|
|
210
|
-
_step6;
|
|
211
|
-
try {
|
|
212
|
-
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
213
|
-
var mandatSplitPath = _step6.value;
|
|
214
|
-
var mandatFilename = mandatSplitPath[mandatSplitPath.length - 1];
|
|
215
|
-
if (!mandatFilename.endsWith(".json")) {
|
|
216
|
-
continue;
|
|
217
|
-
}
|
|
218
|
-
var mandatOriginalFilePath = _path["default"].join.apply(_path["default"], [originalJsonDirectoryOrFilePath].concat(_toConsumableArray(mandatSplitPath)));
|
|
219
|
-
if (options.verbose) {
|
|
220
|
-
console.log(" Loading \"mandat\" file: ".concat(mandatOriginalFilePath, "\u2026"));
|
|
221
|
-
}
|
|
222
|
-
var mandatOriginalJson = _fsExtra["default"].readFileSync(mandatOriginalFilePath, {
|
|
223
|
-
encoding: "utf8"
|
|
224
|
-
});
|
|
225
|
-
var mandatOriginal = validateRawData ? _acteurs_et_organes.Convert.toMandatWrapper(mandatOriginalJson) : JSON.parse(mandatOriginalJson);
|
|
226
|
-
var mandat = mandatOriginal.mandat;
|
|
227
|
-
var _mandats = mandatsByActeurUid[mandat.acteurRef];
|
|
228
|
-
if (_mandats === undefined) {
|
|
229
|
-
_mandats = mandatsByActeurUid[mandat.acteurRef] = [];
|
|
230
|
-
}
|
|
231
|
-
_mandats.push(mandat);
|
|
232
|
-
}
|
|
233
|
-
} catch (err) {
|
|
234
|
-
_iterator6.e(err);
|
|
235
|
-
} finally {
|
|
236
|
-
_iterator6.f();
|
|
237
|
-
}
|
|
238
|
-
for (var _i2 = 0, _Object$values2 = Object.values(mandatsByActeurUid); _i2 < _Object$values2.length; _i2++) {
|
|
239
|
-
var mandats = _Object$values2[_i2];
|
|
240
|
-
mandats.sort(function (a, b) {
|
|
241
|
-
return a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length;
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
var _iterator7 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["acteur"])),
|
|
246
|
-
_step7;
|
|
247
|
-
try {
|
|
248
|
-
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
249
|
-
var acteurSplitPath = _step7.value;
|
|
250
|
-
var acteurFilename = acteurSplitPath[acteurSplitPath.length - 1];
|
|
251
|
-
if (!acteurFilename.endsWith(".json")) {
|
|
252
|
-
continue;
|
|
253
|
-
}
|
|
254
|
-
var acteurOriginalFilePath = _path["default"].join.apply(_path["default"], [originalJsonDirectoryOrFilePath].concat(_toConsumableArray(acteurSplitPath)));
|
|
255
|
-
if (options.verbose) {
|
|
256
|
-
console.log(" Reorganizing \"acteur\" file: ".concat(acteurOriginalFilePath, "\u2026"));
|
|
257
|
-
}
|
|
258
|
-
var acteurOriginalJson = _fsExtra["default"].readFileSync(acteurOriginalFilePath, {
|
|
259
|
-
encoding: "utf8"
|
|
260
|
-
});
|
|
261
|
-
var acteurOriginal = validateRawData ? _acteurs_et_organes.Convert.toActeur(acteurOriginalJson) : JSON.parse(acteurOriginalJson);
|
|
262
|
-
var _acteur = acteurOriginal.acteur;
|
|
263
|
-
var acteurUid = _acteur.uid["#text"];
|
|
264
|
-
var _deports2 = deportsByActeurUid[acteurUid];
|
|
265
|
-
if (_deports2 !== undefined) {
|
|
266
|
-
_assert["default"].strictEqual(_acteur.deports, undefined);
|
|
267
|
-
_acteur.deports = {
|
|
268
|
-
deport: _deports2
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
var _mandats2 = mandatsByActeurUid[acteurUid];
|
|
272
|
-
if (_mandats2 !== undefined) {
|
|
273
|
-
_assert["default"].strictEqual(_acteur.mandats, undefined);
|
|
274
|
-
_acteur.mandats = {
|
|
275
|
-
mandat: _mandats2
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
var acteurReorganizedJsonFilePath = _path["default"].join(acteursReorganizedDir, acteurUid + ".json");
|
|
279
|
-
_fsExtra["default"].writeFileSync(acteurReorganizedJsonFilePath, JSON.stringify(_acteur, null, 2), {
|
|
280
|
-
encoding: "utf8"
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
} catch (err) {
|
|
284
|
-
_iterator7.e(err);
|
|
285
|
-
} finally {
|
|
286
|
-
_iterator7.f();
|
|
287
|
-
}
|
|
288
|
-
var _iterator8 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["organe"])),
|
|
289
|
-
_step8;
|
|
290
|
-
try {
|
|
291
|
-
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
292
|
-
var organeSplitPath = _step8.value;
|
|
293
|
-
var organeFilename = organeSplitPath[organeSplitPath.length - 1];
|
|
294
|
-
if (!organeFilename.endsWith(".json")) {
|
|
295
|
-
continue;
|
|
296
|
-
}
|
|
297
|
-
var organeOriginalFilePath = _path["default"].join.apply(_path["default"], [originalJsonDirectoryOrFilePath].concat(_toConsumableArray(organeSplitPath)));
|
|
298
|
-
if (options.verbose) {
|
|
299
|
-
console.log(" Reorganizing \"organe\" file: ".concat(organeOriginalFilePath, "\u2026"));
|
|
300
|
-
}
|
|
301
|
-
var organeOriginalJson = _fsExtra["default"].readFileSync(organeOriginalFilePath, {
|
|
302
|
-
encoding: "utf8"
|
|
303
|
-
});
|
|
304
|
-
var organeOriginal = validateRawData ? _acteurs_et_organes.Convert.toOrgane(organeOriginalJson) : JSON.parse(organeOriginalJson);
|
|
305
|
-
var _organe = organeOriginal.organe;
|
|
306
|
-
var organeReorganizedJsonFilePath = _path["default"].join(organesReorganizedDir, _organe.uid + ".json");
|
|
307
|
-
_fsExtra["default"].writeFileSync(organeReorganizedJsonFilePath, JSON.stringify(_organe, null, 2), {
|
|
308
|
-
encoding: "utf8"
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
} catch (err) {
|
|
312
|
-
_iterator8.e(err);
|
|
313
|
-
} finally {
|
|
314
|
-
_iterator8.f();
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
break;
|
|
318
|
-
}
|
|
319
|
-
commitGit(datasetReorganizedDir, options);
|
|
320
|
-
}
|
|
321
|
-
} catch (err) {
|
|
322
|
-
_iterator2.e(err);
|
|
323
|
-
} finally {
|
|
324
|
-
_iterator2.f();
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
|
|
328
|
-
var _iterator9 = _createForOfIteratorHelper(chosenDatasets.agendas),
|
|
329
|
-
_step9;
|
|
330
|
-
try {
|
|
331
|
-
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
332
|
-
var _dataset = _step9.value;
|
|
333
|
-
var _originalJsonDirectoryOrFilePath = _path["default"].join(dataDir, _dataset.filename);
|
|
334
|
-
if (!options.silent) {
|
|
335
|
-
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath));
|
|
336
|
-
}
|
|
337
|
-
var _datasetName = _path["default"].basename(_originalJsonDirectoryOrFilePath, ".json");
|
|
338
|
-
cloneGit(gitGroupUrl, _datasetName, dataDir);
|
|
339
|
-
var _datasetReorganizedDir = _path["default"].join(dataDir, _datasetName);
|
|
340
|
-
clearDirectory(_datasetReorganizedDir);
|
|
341
|
-
switch (_dataset.structure) {
|
|
342
|
-
case _datasets.DatasetStructure.SingleFile:
|
|
343
|
-
{
|
|
344
|
-
var _originalJson = _fsExtra["default"].readFileSync(_originalJsonDirectoryOrFilePath, {
|
|
345
|
-
encoding: "utf8"
|
|
346
|
-
});
|
|
347
|
-
var _originalData = validateRawData ? _agendas.Convert.toAgendas(_originalJson) : JSON.parse(_originalJson);
|
|
348
|
-
var _iterator10 = _createForOfIteratorHelper(_originalData.reunions.reunion),
|
|
349
|
-
_step10;
|
|
350
|
-
try {
|
|
351
|
-
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
352
|
-
var reunion = _step10.value;
|
|
353
|
-
writeReorganizedJson(_datasetReorganizedDir, reunion, _loaders.pathFromReunionUid);
|
|
354
|
-
}
|
|
355
|
-
} catch (err) {
|
|
356
|
-
_iterator10.e(err);
|
|
357
|
-
} finally {
|
|
358
|
-
_iterator10.f();
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
break;
|
|
362
|
-
case _datasets.DatasetStructure.SegmentedFiles:
|
|
363
|
-
{
|
|
364
|
-
var _iterator11 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath, ["reunion"])),
|
|
365
|
-
_step11;
|
|
366
|
-
try {
|
|
367
|
-
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
368
|
-
var reunionSplitPath = _step11.value;
|
|
369
|
-
var reunionFilename = reunionSplitPath[reunionSplitPath.length - 1];
|
|
370
|
-
if (!reunionFilename.endsWith(".json")) {
|
|
371
|
-
continue;
|
|
372
|
-
}
|
|
373
|
-
var reunionOriginalFilePath = _path["default"].join.apply(_path["default"], [_originalJsonDirectoryOrFilePath].concat(_toConsumableArray(reunionSplitPath)));
|
|
374
|
-
if (options.verbose) {
|
|
375
|
-
console.log(" Reorganizing \"reunion\" file: ".concat(reunionOriginalFilePath, "\u2026"));
|
|
376
|
-
}
|
|
377
|
-
var reunionOriginalJson = _fsExtra["default"].readFileSync(reunionOriginalFilePath, {
|
|
378
|
-
encoding: "utf8"
|
|
379
|
-
});
|
|
380
|
-
var reunionOriginal = validateRawData ? _agendas.Convert.toReunion(reunionOriginalJson) : JSON.parse(reunionOriginalJson);
|
|
381
|
-
var _reunion = reunionOriginal.reunion;
|
|
382
|
-
writeReorganizedJson(_datasetReorganizedDir, _reunion, _loaders.pathFromReunionUid);
|
|
383
|
-
}
|
|
384
|
-
} catch (err) {
|
|
385
|
-
_iterator11.e(err);
|
|
386
|
-
} finally {
|
|
387
|
-
_iterator11.f();
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
break;
|
|
391
|
-
}
|
|
392
|
-
commitGit(_datasetReorganizedDir, options);
|
|
393
|
-
}
|
|
394
|
-
} catch (err) {
|
|
395
|
-
_iterator9.e(err);
|
|
396
|
-
} finally {
|
|
397
|
-
_iterator9.f();
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
|
|
401
|
-
var _iterator12 = _createForOfIteratorHelper(chosenDatasets.amendements),
|
|
402
|
-
_step12;
|
|
403
|
-
try {
|
|
404
|
-
for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
|
|
405
|
-
var _dataset2 = _step12.value;
|
|
406
|
-
var _originalJsonDirectoryOrFilePath2 = _path["default"].join(dataDir, _dataset2.filename);
|
|
407
|
-
if (!options.silent) {
|
|
408
|
-
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath2));
|
|
409
|
-
}
|
|
410
|
-
var _datasetName2 = _path["default"].basename(_originalJsonDirectoryOrFilePath2, ".json");
|
|
411
|
-
cloneGit(gitGroupUrl, _datasetName2, dataDir);
|
|
412
|
-
var _datasetReorganizedDir2 = _path["default"].join(dataDir, _datasetName2);
|
|
413
|
-
clearDirectory(_datasetReorganizedDir2);
|
|
414
|
-
switch (_dataset2.structure) {
|
|
415
|
-
case _datasets.DatasetStructure.SingleFile:
|
|
416
|
-
{
|
|
417
|
-
var _originalJson2 = _fsExtra["default"].readFileSync(_originalJsonDirectoryOrFilePath2, {
|
|
418
|
-
encoding: "utf8"
|
|
419
|
-
});
|
|
420
|
-
var _originalData2 = validateRawData ? _amendements.Convert.toAmendements(_originalJson2) : JSON.parse(_originalJson2);
|
|
421
|
-
var _iterator13 = _createForOfIteratorHelper(_originalData2.textesEtAmendements.texteleg),
|
|
422
|
-
_step13;
|
|
423
|
-
try {
|
|
424
|
-
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
|
425
|
-
var texteLegislatif = _step13.value;
|
|
426
|
-
var _iterator14 = _createForOfIteratorHelper(texteLegislatif.amendements),
|
|
427
|
-
_step14;
|
|
428
|
-
try {
|
|
429
|
-
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
430
|
-
var amendement = _step14.value;
|
|
431
|
-
writeAmendementReorganizedJson(_datasetReorganizedDir2, amendement);
|
|
432
|
-
}
|
|
433
|
-
} catch (err) {
|
|
434
|
-
_iterator14.e(err);
|
|
435
|
-
} finally {
|
|
436
|
-
_iterator14.f();
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
} catch (err) {
|
|
440
|
-
_iterator13.e(err);
|
|
441
|
-
} finally {
|
|
442
|
-
_iterator13.f();
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
break;
|
|
446
|
-
case _datasets.DatasetStructure.SegmentedFiles:
|
|
447
|
-
{
|
|
448
|
-
var _iterator15 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath2)),
|
|
449
|
-
_step15;
|
|
450
|
-
try {
|
|
451
|
-
for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
|
|
452
|
-
var amendementSplitPath = _step15.value;
|
|
453
|
-
var amendementFilename = amendementSplitPath[amendementSplitPath.length - 1];
|
|
454
|
-
if (!amendementFilename.endsWith(".json")) {
|
|
455
|
-
continue;
|
|
456
|
-
}
|
|
457
|
-
var amendementOriginalFilePath = _path["default"].join.apply(_path["default"], [_originalJsonDirectoryOrFilePath2].concat(_toConsumableArray(amendementSplitPath)));
|
|
458
|
-
if (options.verbose) {
|
|
459
|
-
console.log(" Reorganizing \"amendement\" file: ".concat(amendementOriginalFilePath, "\u2026"));
|
|
460
|
-
}
|
|
461
|
-
var amendementOriginalJson = _fsExtra["default"].readFileSync(amendementOriginalFilePath, {
|
|
462
|
-
encoding: "utf8"
|
|
463
|
-
});
|
|
464
|
-
var amendementOriginal = validateRawData ? _amendements.Convert.toAmendementWrapper(amendementOriginalJson) : JSON.parse(amendementOriginalJson);
|
|
465
|
-
var _amendement = amendementOriginal.amendement;
|
|
466
|
-
writeAmendementReorganizedJson(_datasetReorganizedDir2, _amendement);
|
|
467
|
-
}
|
|
468
|
-
} catch (err) {
|
|
469
|
-
_iterator15.e(err);
|
|
470
|
-
} finally {
|
|
471
|
-
_iterator15.f();
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
break;
|
|
475
|
-
}
|
|
476
|
-
commitGit(_datasetReorganizedDir2, options);
|
|
477
|
-
}
|
|
478
|
-
} catch (err) {
|
|
479
|
-
_iterator12.e(err);
|
|
480
|
-
} finally {
|
|
481
|
-
_iterator12.f();
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
|
|
485
|
-
var _iterator16 = _createForOfIteratorHelper(chosenDatasets.dossiersLegislatifs),
|
|
486
|
-
_step16;
|
|
487
|
-
try {
|
|
488
|
-
for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
|
|
489
|
-
var _dataset3 = _step16.value;
|
|
490
|
-
var _originalJsonDirectoryOrFilePath3 = _path["default"].join(dataDir, _dataset3.filename);
|
|
491
|
-
if (!options.silent) {
|
|
492
|
-
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath3));
|
|
493
|
-
}
|
|
494
|
-
var _datasetName3 = _path["default"].basename(_originalJsonDirectoryOrFilePath3, ".json");
|
|
495
|
-
cloneGit(gitGroupUrl, _datasetName3, dataDir);
|
|
496
|
-
var _datasetReorganizedDir3 = _path["default"].join(dataDir, _datasetName3);
|
|
497
|
-
clearDirectory(_datasetReorganizedDir3);
|
|
498
|
-
var documentsDir = _path["default"].join(_datasetReorganizedDir3, "documents");
|
|
499
|
-
_fsExtra["default"].mkdirSync(documentsDir);
|
|
500
|
-
var dossiersDir = _path["default"].join(_datasetReorganizedDir3, "dossiers");
|
|
501
|
-
_fsExtra["default"].mkdirSync(dossiersDir);
|
|
502
|
-
switch (_dataset3.structure) {
|
|
503
|
-
case _datasets.DatasetStructure.SingleFile:
|
|
504
|
-
{
|
|
505
|
-
var _originalJson3 = _fsExtra["default"].readFileSync(_originalJsonDirectoryOrFilePath3, {
|
|
506
|
-
encoding: "utf8"
|
|
507
|
-
});
|
|
508
|
-
var _originalData3 = validateRawData ? _dossiers_legislatifs.Convert.toDossiersLegislatifs(_originalJson3) : JSON.parse(_originalJson3);
|
|
509
|
-
var _iterator17 = _createForOfIteratorHelper(_originalData3["export"].textesLegislatifs.document),
|
|
510
|
-
_step17;
|
|
511
|
-
try {
|
|
512
|
-
for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
|
|
513
|
-
var document = _step17.value;
|
|
514
|
-
writeReorganizedJson(documentsDir, document, _loaders.pathFromDocumentUid);
|
|
515
|
-
}
|
|
516
|
-
} catch (err) {
|
|
517
|
-
_iterator17.e(err);
|
|
518
|
-
} finally {
|
|
519
|
-
_iterator17.f();
|
|
520
|
-
}
|
|
521
|
-
var _iterator18 = _createForOfIteratorHelper(_originalData3["export"].dossiersLegislatifs.dossier),
|
|
522
|
-
_step18;
|
|
523
|
-
try {
|
|
524
|
-
for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
|
|
525
|
-
var dossierParlementaire = _step18.value.dossierParlementaire;
|
|
526
|
-
writeReorganizedJson(dossiersDir, dossierParlementaire, _loaders.pathFromDossierParlementaireUid);
|
|
527
|
-
}
|
|
528
|
-
} catch (err) {
|
|
529
|
-
_iterator18.e(err);
|
|
530
|
-
} finally {
|
|
531
|
-
_iterator18.f();
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
break;
|
|
535
|
-
case _datasets.DatasetStructure.SegmentedFiles:
|
|
536
|
-
{
|
|
537
|
-
var _iterator19 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath3, ["document"])),
|
|
538
|
-
_step19;
|
|
539
|
-
try {
|
|
540
|
-
for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
|
|
541
|
-
var documentSplitPath = _step19.value;
|
|
542
|
-
var documentFilename = documentSplitPath[documentSplitPath.length - 1];
|
|
543
|
-
if (!documentFilename.endsWith(".json")) {
|
|
544
|
-
continue;
|
|
545
|
-
}
|
|
546
|
-
var documentOriginalFilePath = _path["default"].join.apply(_path["default"], [_originalJsonDirectoryOrFilePath3].concat(_toConsumableArray(documentSplitPath)));
|
|
547
|
-
if (options.verbose) {
|
|
548
|
-
console.log(" Reorganizing \"document\" file: ".concat(documentOriginalFilePath, "\u2026"));
|
|
549
|
-
}
|
|
550
|
-
var documentOriginalJson = _fsExtra["default"].readFileSync(documentOriginalFilePath, {
|
|
551
|
-
encoding: "utf8"
|
|
552
|
-
});
|
|
553
|
-
var documentOriginal = validateRawData ? _dossiers_legislatifs.Convert.toDocument(documentOriginalJson) : JSON.parse(documentOriginalJson);
|
|
554
|
-
var _document = documentOriginal.document;
|
|
555
|
-
writeReorganizedJson(documentsDir, _document, _loaders.pathFromDocumentUid);
|
|
556
|
-
}
|
|
557
|
-
} catch (err) {
|
|
558
|
-
_iterator19.e(err);
|
|
559
|
-
} finally {
|
|
560
|
-
_iterator19.f();
|
|
561
|
-
}
|
|
562
|
-
var _iterator20 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath3, ["dossierParlementaire"])),
|
|
563
|
-
_step20;
|
|
564
|
-
try {
|
|
565
|
-
for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
|
|
566
|
-
var dossierParlementaireSplitPath = _step20.value;
|
|
567
|
-
var dossierParlementaireFilename = dossierParlementaireSplitPath[dossierParlementaireSplitPath.length - 1];
|
|
568
|
-
if (!dossierParlementaireFilename.endsWith(".json")) {
|
|
569
|
-
continue;
|
|
570
|
-
}
|
|
571
|
-
var dossierParlementaireOriginalFilePath = _path["default"].join.apply(_path["default"], [_originalJsonDirectoryOrFilePath3].concat(_toConsumableArray(dossierParlementaireSplitPath)));
|
|
572
|
-
if (options.verbose) {
|
|
573
|
-
console.log(" Reorganizing \"dossierParlementaire\" file: ".concat(dossierParlementaireOriginalFilePath, "\u2026"));
|
|
574
|
-
}
|
|
575
|
-
var dossierParlementaireOriginalJson = _fsExtra["default"].readFileSync(dossierParlementaireOriginalFilePath, {
|
|
576
|
-
encoding: "utf8"
|
|
577
|
-
});
|
|
578
|
-
var dossierParlementaireOriginal = validateRawData ? _dossiers_legislatifs.Convert.toDossierParlementaire(dossierParlementaireOriginalJson) : JSON.parse(dossierParlementaireOriginalJson);
|
|
579
|
-
var _dossierParlementaire = dossierParlementaireOriginal.dossierParlementaire;
|
|
580
|
-
writeReorganizedJson(dossiersDir, _dossierParlementaire, _loaders.pathFromDossierParlementaireUid);
|
|
581
|
-
}
|
|
582
|
-
} catch (err) {
|
|
583
|
-
_iterator20.e(err);
|
|
584
|
-
} finally {
|
|
585
|
-
_iterator20.f();
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
break;
|
|
589
|
-
}
|
|
590
|
-
commitGit(_datasetReorganizedDir3, options);
|
|
591
|
-
}
|
|
592
|
-
} catch (err) {
|
|
593
|
-
_iterator16.e(err);
|
|
594
|
-
} finally {
|
|
595
|
-
_iterator16.f();
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
|
|
599
|
-
var _iterator21 = _createForOfIteratorHelper(chosenDatasets.scrutins),
|
|
600
|
-
_step21;
|
|
601
|
-
try {
|
|
602
|
-
for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
|
|
603
|
-
var _dataset4 = _step21.value;
|
|
604
|
-
var _originalJsonDirectoryOrFilePath4 = _path["default"].join(dataDir, _dataset4.filename);
|
|
605
|
-
if (!options.silent) {
|
|
606
|
-
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath4));
|
|
607
|
-
}
|
|
608
|
-
var _datasetName4 = _path["default"].basename(_originalJsonDirectoryOrFilePath4, ".json");
|
|
609
|
-
cloneGit(gitGroupUrl, _datasetName4, dataDir);
|
|
610
|
-
var _datasetReorganizedDir4 = _path["default"].join(dataDir, _datasetName4);
|
|
611
|
-
clearDirectory(_datasetReorganizedDir4);
|
|
612
|
-
switch (_dataset4.structure) {
|
|
613
|
-
case _datasets.DatasetStructure.SingleFile:
|
|
614
|
-
{
|
|
615
|
-
var _originalJson4 = _fsExtra["default"].readFileSync(_originalJsonDirectoryOrFilePath4, {
|
|
616
|
-
encoding: "utf8"
|
|
617
|
-
});
|
|
618
|
-
var _originalData4 = validateRawData ? _scrutins.Convert.toScrutins(_originalJson4) : JSON.parse(_originalJson4);
|
|
619
|
-
var _iterator22 = _createForOfIteratorHelper(_originalData4.scrutins.scrutin),
|
|
620
|
-
_step22;
|
|
621
|
-
try {
|
|
622
|
-
for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
|
|
623
|
-
var scrutin = _step22.value;
|
|
624
|
-
writeReorganizedJson(_datasetReorganizedDir4, scrutin, _loaders.pathFromScrutinUid);
|
|
625
|
-
}
|
|
626
|
-
} catch (err) {
|
|
627
|
-
_iterator22.e(err);
|
|
628
|
-
} finally {
|
|
629
|
-
_iterator22.f();
|
|
630
|
-
}
|
|
631
|
-
}
|
|
632
|
-
break;
|
|
633
|
-
case _datasets.DatasetStructure.SegmentedFiles:
|
|
634
|
-
{
|
|
635
|
-
var _iterator23 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath4)),
|
|
636
|
-
_step23;
|
|
637
|
-
try {
|
|
638
|
-
for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
|
|
639
|
-
var scrutinSplitPath = _step23.value;
|
|
640
|
-
var scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
|
|
641
|
-
if (!scrutinFilename.endsWith(".json")) {
|
|
642
|
-
continue;
|
|
643
|
-
}
|
|
644
|
-
var scrutinOriginalFilePath = _path["default"].join.apply(_path["default"], [_originalJsonDirectoryOrFilePath4].concat(_toConsumableArray(scrutinSplitPath)));
|
|
645
|
-
if (options.verbose) {
|
|
646
|
-
console.log(" Reorganizing \"scrutin\" file: ".concat(scrutinOriginalFilePath, "\u2026"));
|
|
647
|
-
}
|
|
648
|
-
var scrutinOriginalJson = _fsExtra["default"].readFileSync(scrutinOriginalFilePath, {
|
|
649
|
-
encoding: "utf8"
|
|
650
|
-
});
|
|
651
|
-
var scrutinOriginal = validateRawData ? _scrutins.Convert.toScrutinWrapper(scrutinOriginalJson) : JSON.parse(scrutinOriginalJson);
|
|
652
|
-
var _scrutin = scrutinOriginal.scrutin;
|
|
653
|
-
writeReorganizedJson(_datasetReorganizedDir4, _scrutin, _loaders.pathFromScrutinUid);
|
|
654
|
-
}
|
|
655
|
-
} catch (err) {
|
|
656
|
-
_iterator23.e(err);
|
|
657
|
-
} finally {
|
|
658
|
-
_iterator23.f();
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
break;
|
|
662
|
-
}
|
|
663
|
-
commitGit(_datasetReorganizedDir4, options);
|
|
664
|
-
}
|
|
665
|
-
} catch (err) {
|
|
666
|
-
_iterator21.e(err);
|
|
667
|
-
} finally {
|
|
668
|
-
_iterator21.f();
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
if (enabledDatasets & _datasets.EnabledDatasets.Questions) {
|
|
672
|
-
var _iterator24 = _createForOfIteratorHelper(_datasets.datasets.questions),
|
|
673
|
-
_step24;
|
|
674
|
-
try {
|
|
675
|
-
for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
|
|
676
|
-
var _dataset5 = _step24.value;
|
|
677
|
-
var _originalJsonDirectoryOrFilePath5 = _path["default"].join(dataDir, _dataset5.filename);
|
|
678
|
-
if (!options.silent) {
|
|
679
|
-
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath5));
|
|
680
|
-
}
|
|
681
|
-
var _datasetName5 = _path["default"].basename(_originalJsonDirectoryOrFilePath5, ".json");
|
|
682
|
-
cloneGit(gitGroupUrl, _datasetName5, dataDir);
|
|
683
|
-
var _datasetReorganizedDir5 = _path["default"].join(dataDir, _datasetName5);
|
|
684
|
-
clearDirectory(_datasetReorganizedDir5);
|
|
685
|
-
switch (_dataset5.structure) {
|
|
686
|
-
case _datasets.DatasetStructure.SegmentedFiles:
|
|
687
|
-
{
|
|
688
|
-
var _iterator25 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath5)),
|
|
689
|
-
_step25;
|
|
690
|
-
try {
|
|
691
|
-
for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
|
|
692
|
-
var questionSplitPath = _step25.value;
|
|
693
|
-
var questionFilename = questionSplitPath[questionSplitPath.length - 1];
|
|
694
|
-
if (!questionFilename.endsWith(".json")) {
|
|
695
|
-
continue;
|
|
696
|
-
}
|
|
697
|
-
var questionOriginalFilePath = _path["default"].join.apply(_path["default"], [_originalJsonDirectoryOrFilePath5].concat(_toConsumableArray(questionSplitPath)));
|
|
698
|
-
if (options.verbose) {
|
|
699
|
-
console.log(" Reorganizing \"question\" file: ".concat(questionOriginalFilePath, "\u2026"));
|
|
700
|
-
}
|
|
701
|
-
var questionOriginalJson = _fsExtra["default"].readFileSync(questionOriginalFilePath, {
|
|
702
|
-
encoding: "utf8"
|
|
703
|
-
});
|
|
704
|
-
var questionOriginal = validateRawData ? _questions.Convert.toQuestionWrapper(questionOriginalJson) : JSON.parse(questionOriginalJson);
|
|
705
|
-
var question = questionOriginal.question;
|
|
706
|
-
writeReorganizedJson(_datasetReorganizedDir5, question, _loaders.pathFromQuestionUid);
|
|
707
|
-
}
|
|
708
|
-
} catch (err) {
|
|
709
|
-
_iterator25.e(err);
|
|
710
|
-
} finally {
|
|
711
|
-
_iterator25.f();
|
|
712
|
-
}
|
|
713
|
-
}
|
|
714
|
-
break;
|
|
715
|
-
}
|
|
716
|
-
commitGit(_datasetReorganizedDir5, options);
|
|
717
|
-
}
|
|
718
|
-
} catch (err) {
|
|
719
|
-
_iterator24.e(err);
|
|
720
|
-
} finally {
|
|
721
|
-
_iterator24.f();
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
if (enabledDatasets & _datasets.EnabledDatasets.ComptesRendusSeances) {
|
|
725
|
-
var _iterator26 = _createForOfIteratorHelper(_datasets.datasets.comptesRendusSeances),
|
|
726
|
-
_step26;
|
|
727
|
-
try {
|
|
728
|
-
for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
|
|
729
|
-
var _dataset6 = _step26.value;
|
|
730
|
-
var _originalJsonDirectoryOrFilePath6 = _path["default"].join(dataDir, _dataset6.filename);
|
|
731
|
-
if (!options.silent) {
|
|
732
|
-
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath6));
|
|
733
|
-
}
|
|
734
|
-
var _datasetName6 = _path["default"].basename(_originalJsonDirectoryOrFilePath6, ".xml");
|
|
735
|
-
cloneGit(gitGroupUrl, _datasetName6, dataDir);
|
|
736
|
-
var _datasetReorganizedDir6 = _path["default"].join(dataDir, _datasetName6);
|
|
737
|
-
clearDirectory(_datasetReorganizedDir6);
|
|
738
|
-
switch (_dataset6.structure) {
|
|
739
|
-
case _datasets.DatasetStructure.SegmentedFiles:
|
|
740
|
-
{
|
|
741
|
-
var _iterator27 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath6)),
|
|
742
|
-
_step27;
|
|
743
|
-
try {
|
|
744
|
-
for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {
|
|
745
|
-
var compteRenduSeanceSplitPath = _step27.value;
|
|
746
|
-
var compteRenduSeanceFilename = compteRenduSeanceSplitPath[compteRenduSeanceSplitPath.length - 1];
|
|
747
|
-
if (!compteRenduSeanceFilename.endsWith(".json")) {
|
|
748
|
-
continue;
|
|
749
|
-
}
|
|
750
|
-
var compteRenduSeanceOriginalFilePath = _path["default"].join.apply(_path["default"], [_originalJsonDirectoryOrFilePath6].concat(_toConsumableArray(compteRenduSeanceSplitPath)));
|
|
751
|
-
if (options.verbose) {
|
|
752
|
-
console.log(" Reorganizing \"compteRenduSeance\" file: ".concat(compteRenduSeanceOriginalFilePath, "\u2026"));
|
|
753
|
-
}
|
|
754
|
-
var compteRenduSeanceOriginalJson = _fsExtra["default"].readFileSync(compteRenduSeanceOriginalFilePath, {
|
|
755
|
-
encoding: "utf8"
|
|
756
|
-
});
|
|
757
|
-
var compteRenduSeanceOriginal = validateRawData ? _debats.Convert.toCompteRenduWrapper(compteRenduSeanceOriginalJson) : JSON.parse(compteRenduSeanceOriginalJson);
|
|
758
|
-
var compteRenduSeance = compteRenduSeanceOriginal.compteRendu;
|
|
759
|
-
writeReorganizedJson(_datasetReorganizedDir6, compteRenduSeance, _loaders.pathFromCompteRenduUid);
|
|
760
|
-
}
|
|
761
|
-
} catch (err) {
|
|
762
|
-
_iterator27.e(err);
|
|
763
|
-
} finally {
|
|
764
|
-
_iterator27.f();
|
|
765
|
-
}
|
|
766
|
-
}
|
|
767
|
-
break;
|
|
768
|
-
}
|
|
769
|
-
commitGit(_datasetReorganizedDir6, options);
|
|
770
|
-
}
|
|
771
|
-
} catch (err) {
|
|
772
|
-
_iterator26.e(err);
|
|
773
|
-
} finally {
|
|
774
|
-
_iterator26.f();
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
|
|
778
|
-
// Restore standard conversion of dates to JSON.
|
|
779
|
-
Date.prototype.toJSON = _dates.existingDateToJson;
|
|
780
|
-
return exitCode;
|
|
781
|
-
}
|
|
782
|
-
function writeAmendementReorganizedJson(datasetReorganizedDir, amendement) {
|
|
783
|
-
var uidTexteLegislatif = amendement.texteLegislatifRef;
|
|
784
|
-
_assert["default"].notStrictEqual(uidTexteLegislatif, undefined);
|
|
785
|
-
var texteLegislatifDir = _path["default"].join(datasetReorganizedDir, uidTexteLegislatif);
|
|
786
|
-
_fsExtra["default"].ensureDirSync(texteLegislatifDir);
|
|
787
|
-
var reorganizedJsonFilePath = _path["default"].join(texteLegislatifDir, amendement.uid + ".json");
|
|
788
|
-
_fsExtra["default"].writeFileSync(reorganizedJsonFilePath, JSON.stringify(amendement, null, 2), {
|
|
789
|
-
encoding: "utf8"
|
|
790
|
-
});
|
|
791
|
-
}
|
|
792
|
-
function writeReorganizedJson(dir, obj, pathFromUid) {
|
|
793
|
-
var basename = pathFromUid(dir, obj.uid);
|
|
794
|
-
_fsExtra["default"].writeFileSync("".concat(basename, ".json"), JSON.stringify(obj, null, 2), {
|
|
795
|
-
encoding: "utf8"
|
|
796
|
-
});
|
|
797
|
-
}
|
|
798
|
-
function main(argv) {
|
|
799
|
-
var options = parseArgs(argv);
|
|
800
|
-
return reorganizeData(options);
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
/* istanbul ignore if */
|
|
804
|
-
if (process.argv[1].endsWith("reorganize_data.ts")) process.exit(main(process.argv));
|
|
805
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29tbWFuZExpbmVBcmdzIiwiX2ZzRXh0cmEiLCJfcGF0aCIsIl9kYXRhc2V0cyIsIl9kYXRlcyIsImdpdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2ZpbGVfc3lzdGVtcyIsIl9sb2FkZXJzIiwiX2FjdGV1cnNfZXRfb3JnYW5lcyIsIl9hZ2VuZGFzIiwiX2FtZW5kZW1lbnRzIiwiX2Rvc3NpZXJzX2xlZ2lzbGF0aWZzIiwiX3NjcnV0aW5zIiwiX3F1ZXN0aW9ucyIsIl9kZWJhdHMiLCJfY2xpX2hlbHBlcnMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiVHlwZUVycm9yIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwibyIsIm5leHQiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsInBhcnNlQXJncyIsImFyZ3YiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJjbG9uZU9wdGlvbiIsImNvbW1pdE9wdGlvbiIsImNhdGVnb3JpZXNPcHRpb24iLCJsZWdpc2xhdHVyZU9wdGlvbiIsInJlbW90ZU9wdGlvbiIsInNpbGVudE9wdGlvbiIsInZlcmJvc2VPcHRpb24iLCJkYXRhRGlyRGVmYXVsdE9wdGlvbiIsImZldGNoRG9jdW1lbnRzT3B0aW9uIiwicGFyc2VEb2N1bWVudHNPcHRpb24iLCJkb2N1bWVudEZvcm1hdE9wdGlvbiIsInB1bGxPcHRpb24iLCJhbGlhcyIsImhlbHAiLCJ0eXBlIiwiQm9vbGVhbiIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJjbGVhckRpcmVjdG9yeSIsImRpclBhdGgiLCJmcyIsImVuc3VyZURpclN5bmMiLCJfaXRlcmF0b3IiLCJyZWFkZGlyU3luYyIsIl9zdGVwIiwiZmlsZW5hbWUiLCJzdGFydHNXaXRoIiwicmVtb3ZlU3luYyIsInBhdGgiLCJqb2luIiwiZXJyIiwiY2xvbmVHaXQiLCJnaXRHcm91cFVybCIsImRhdGFzZXROYW1lIiwiZGF0YURpciIsImNsb25lIiwicmVvcmdhbml6ZURhdGEiLCJfb3B0aW9ucyRjbG9uZSIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImV4aXRDb2RlIiwiY29tbWl0IiwidHJpbSIsInJlcGxhY2UiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJlbmFibGVkRGF0YXNldHMiLCJnZXRFbmFibGVkRGF0YXNldHMiLCJjYXRlZ29yaWVzIiwiY2hvc2VuRGF0YXNldHMiLCJmaWx0ZXJCeUxlZ2lzbGF0dXJlIiwiZGF0YXNldHMiLCJsZWdpc2xhdHVyZSIsImNvbW1pdEdpdCIsImRhdGFzZXRSZW9yZ2FuaXplZERpciIsImVycm9yQ29kZSIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJFbmFibGVkRGF0YXNldHMiLCJBY3RldXJzRXRPcmdhbmVzIiwiX2l0ZXJhdG9yMiIsImFjdGV1cnNFdE9yZ2FuZXMiLCJfc3RlcDIiLCJkYXRhc2V0Iiwib3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJjb25jYXQiLCJiYXNlbmFtZSIsInB1bGwiLCJyZXNldEFuZFB1bGwiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJEYXRhc2V0U3RydWN0dXJlIiwiU2luZ2xlRmlsZSIsIm9yaWdpbmFsSnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwib3JpZ2luYWxEYXRhIiwiQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJKU09OIiwicGFyc2UiLCJfaXRlcmF0b3IzIiwiYWN0ZXVycyIsImFjdGV1ciIsIl9zdGVwMyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIl9pdGVyYXRvcjQiLCJvcmdhbmVzIiwib3JnYW5lIiwiX3N0ZXA0IiwiU2VnbWVudGVkRmlsZXMiLCJkZXBvcnRzQnlBY3RldXJVaWQiLCJleGlzdHNTeW5jIiwiX2l0ZXJhdG9yNSIsIndhbGtEaXIiLCJfc3RlcDUiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsImFwcGx5IiwidmVyYm9zZSIsImRlcG9ydE9yaWdpbmFsSnNvbiIsImRlcG9ydE9yaWdpbmFsIiwidG9EZXBvcnQiLCJkZXBvcnQiLCJkZXBvcnRzIiwiYWN0ZXVyUmVmIiwidW5kZWZpbmVkIiwicHVzaCIsIl9pIiwiX09iamVjdCR2YWx1ZXMiLCJ2YWx1ZXMiLCJzb3J0IiwiYiIsImxvY2FsZUNvbXBhcmUiLCJtYW5kYXRzQnlBY3RldXJVaWQiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJtYW5kYXRPcmlnaW5hbEZpbGVQYXRoIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdFdyYXBwZXIiLCJtYW5kYXQiLCJtYW5kYXRzIiwiX2kyIiwiX09iamVjdCR2YWx1ZXMyIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsImFjdGV1clNwbGl0UGF0aCIsImFjdGV1ckZpbGVuYW1lIiwiYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCIsImFjdGV1ck9yaWdpbmFsSnNvbiIsImFjdGV1ck9yaWdpbmFsIiwidG9BY3RldXIiLCJhY3RldXJVaWQiLCJhc3NlcnQiLCJzdHJpY3RFcXVhbCIsImFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lT3JpZ2luYWxGaWxlUGF0aCIsIm9yZ2FuZU9yaWdpbmFsSnNvbiIsIm9yZ2FuZU9yaWdpbmFsIiwidG9PcmdhbmUiLCJvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsIkFnZW5kYXMiLCJfaXRlcmF0b3I5IiwiYWdlbmRhcyIsIl9zdGVwOSIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwiX2l0ZXJhdG9yMTAiLCJyZXVuaW9ucyIsInJldW5pb24iLCJfc3RlcDEwIiwid3JpdGVSZW9yZ2FuaXplZEpzb24iLCJwYXRoRnJvbVJldW5pb25VaWQiLCJfaXRlcmF0b3IxMSIsIl9zdGVwMTEiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgiLCJyZXVuaW9uT3JpZ2luYWxKc29uIiwicmV1bmlvbk9yaWdpbmFsIiwidG9SZXVuaW9uIiwiQW1lbmRlbWVudHMiLCJfaXRlcmF0b3IxMiIsImFtZW5kZW1lbnRzIiwiX3N0ZXAxMiIsIkFtZW5kZW1lbnRzUmF3Q29udmVydCIsInRvQW1lbmRlbWVudHMiLCJfaXRlcmF0b3IxMyIsInRleHRlc0V0QW1lbmRlbWVudHMiLCJ0ZXh0ZWxlZyIsIl9zdGVwMTMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJfaXRlcmF0b3IxNCIsIl9zdGVwMTQiLCJhbWVuZGVtZW50Iiwid3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMTUiLCJfc3RlcDE1IiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiYW1lbmRlbWVudE9yaWdpbmFsSnNvbiIsImFtZW5kZW1lbnRPcmlnaW5hbCIsInRvQW1lbmRlbWVudFdyYXBwZXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiX2l0ZXJhdG9yMTYiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwiX3N0ZXAxNiIsImRvY3VtZW50c0RpciIsImRvc3NpZXJzRGlyIiwiRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJfaXRlcmF0b3IxNyIsInRleHRlc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJfc3RlcDE3IiwicGF0aEZyb21Eb2N1bWVudFVpZCIsIl9pdGVyYXRvcjE4IiwiZG9zc2llciIsIl9zdGVwMTgiLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsInBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQiLCJfaXRlcmF0b3IxOSIsIl9zdGVwMTkiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgiLCJkb2N1bWVudE9yaWdpbmFsSnNvbiIsImRvY3VtZW50T3JpZ2luYWwiLCJ0b0RvY3VtZW50IiwiX2l0ZXJhdG9yMjAiLCJfc3RlcDIwIiwiZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsIlNjcnV0aW5zIiwiX2l0ZXJhdG9yMjEiLCJzY3J1dGlucyIsIl9zdGVwMjEiLCJTY3J1dGluc1Jhd0NvbnZlcnQiLCJ0b1NjcnV0aW5zIiwiX2l0ZXJhdG9yMjIiLCJzY3J1dGluIiwiX3N0ZXAyMiIsInBhdGhGcm9tU2NydXRpblVpZCIsIl9pdGVyYXRvcjIzIiwiX3N0ZXAyMyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCIsInNjcnV0aW5PcmlnaW5hbEpzb24iLCJzY3J1dGluT3JpZ2luYWwiLCJ0b1NjcnV0aW5XcmFwcGVyIiwiUXVlc3Rpb25zIiwiX2l0ZXJhdG9yMjQiLCJxdWVzdGlvbnMiLCJfc3RlcDI0IiwiX2l0ZXJhdG9yMjUiLCJfc3RlcDI1IiwicXVlc3Rpb25TcGxpdFBhdGgiLCJxdWVzdGlvbkZpbGVuYW1lIiwicXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoIiwicXVlc3Rpb25PcmlnaW5hbEpzb24iLCJxdWVzdGlvbk9yaWdpbmFsIiwiUXVlc3Rpb25zUmF3Q29udmVydCIsInRvUXVlc3Rpb25XcmFwcGVyIiwicXVlc3Rpb24iLCJwYXRoRnJvbVF1ZXN0aW9uVWlkIiwiQ29tcHRlc1JlbmR1c1NlYW5jZXMiLCJfaXRlcmF0b3IyNiIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiX3N0ZXAyNiIsIl9pdGVyYXRvcjI3IiwiX3N0ZXAyNyIsImNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoIiwiY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uIiwiY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbCIsIkNvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IiwidG9Db21wdGVSZW5kdVdyYXBwZXIiLCJjb21wdGVSZW5kdVNlYW5jZSIsImNvbXB0ZVJlbmR1IiwicGF0aEZyb21Db21wdGVSZW5kdVVpZCIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsIm5vdFN0cmljdEVxdWFsIiwidGV4dGVMZWdpc2xhdGlmRGlyIiwiZGlyIiwib2JqIiwicGF0aEZyb21VaWQiLCJtYWluIiwicHJvY2VzcyIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZW9yZ2FuaXplX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IHtcbiAgZGF0YXNldHMsXG4gIERhdGFzZXRTdHJ1Y3R1cmUsXG4gIEVuYWJsZWREYXRhc2V0cyxcbiAgZ2V0RW5hYmxlZERhdGFzZXRzLFxuICBmaWx0ZXJCeUxlZ2lzbGF0dXJlLFxufSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgKiBhcyBnaXQgZnJvbSBcIi4uL2dpdFwiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbUNvbXB0ZVJlbmR1VWlkLFxuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVF1ZXN0aW9uVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3F1ZXN0aW9uc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kZWJhdHNcIlxuaW1wb3J0IHtcbiAgY2xvbmVPcHRpb24sXG4gIGNvbW1pdE9wdGlvbixcbiAgY2F0ZWdvcmllc09wdGlvbixcbiAgbGVnaXNsYXR1cmVPcHRpb24sXG4gIHJlbW90ZU9wdGlvbixcbiAgc2lsZW50T3B0aW9uLFxuICB2ZXJib3NlT3B0aW9uLFxuICBkYXRhRGlyRGVmYXVsdE9wdGlvbixcbiAgcHVsbE9wdGlvbixcbiAgZmV0Y2hEb2N1bWVudHNPcHRpb24sXG4gIHBhcnNlRG9jdW1lbnRzT3B0aW9uLFxuICBkb2N1bWVudEZvcm1hdE9wdGlvbixcbn0gZnJvbSBcIi4vc2hhcmVkL2NsaV9oZWxwZXJzXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIGNsb25lT3B0aW9uLFxuICAgIGNvbW1pdE9wdGlvbixcbiAgICBjYXRlZ29yaWVzT3B0aW9uLFxuICAgIGxlZ2lzbGF0dXJlT3B0aW9uLFxuICAgIHJlbW90ZU9wdGlvbixcbiAgICBzaWxlbnRPcHRpb24sXG4gICAgdmVyYm9zZU9wdGlvbixcbiAgICBkYXRhRGlyRGVmYXVsdE9wdGlvbixcbiAgICBmZXRjaERvY3VtZW50c09wdGlvbixcbiAgICBwYXJzZURvY3VtZW50c09wdGlvbixcbiAgICBkb2N1bWVudEZvcm1hdE9wdGlvbixcbiAgICBwdWxsT3B0aW9uLFxuICAgIHtcbiAgICAgIGFsaWFzOiBcIlZcIixcbiAgICAgIGhlbHA6IFwiZG9uJ3QgdmFsaWRhdGUgcmF3IGRhdGFcIixcbiAgICAgIG5hbWU6IFwibm8tdmFsaWRhdGUtcmF3XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMsIHtcbiAgICBhcmd2OiBhcmd2LFxuICB9KVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiBjbGVhckRpcmVjdG9yeShkaXJQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgZnMuZW5zdXJlRGlyU3luYyhkaXJQYXRoKVxuICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRpclBhdGgpKSB7XG4gICAgaWYgKCFmaWxlbmFtZS5zdGFydHNXaXRoKFwiLlwiKSkge1xuICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGlyUGF0aCwgZmlsZW5hbWUpKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9uZUdpdChcbiAgZ2l0R3JvdXBVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZGF0YXNldE5hbWU6IHN0cmluZyxcbiAgZGF0YURpcjogc3RyaW5nLFxuKTogdm9pZCB7XG4gIGdpdC5jbG9uZShnaXRHcm91cFVybCwgZGF0YXNldE5hbWUsIGRhdGFEaXIpXG59XG5cbmZ1bmN0aW9uIHJlb3JnYW5pemVEYXRhKG9wdGlvbnM6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cbiAgbGV0IGV4aXRDb2RlID0gb3B0aW9ucy5jb21taXQgPyAxMCA6IDBcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lPy50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICBjb25zdCB2YWxpZGF0ZVJhd0RhdGEgPSAhb3B0aW9uc1tcIm5vLXZhbGlkYXRlLXJhd1wiXVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBnZXRFbmFibGVkRGF0YXNldHMob3B0aW9ucy5jYXRlZ29yaWVzKVxuICBsZXQgY2hvc2VuRGF0YXNldHMgPSBmaWx0ZXJCeUxlZ2lzbGF0dXJlKGRhdGFzZXRzLCBvcHRpb25zLmxlZ2lzbGF0dXJlKVxuXG4gIGZ1bmN0aW9uIGNvbW1pdEdpdChkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZywgb3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICApXG4gICAgICBpZiAoXG4gICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgKSB7XG4gICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBjbG9uZUdpdChnaXRHcm91cFVybCwgZGF0YXNldE5hbWUsIGRhdGFEaXIpXG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGlmIChvcHRpb25zLnB1bGwpIHtcbiAgICAgICAgZ2l0LnJlc2V0QW5kUHVsbChkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICB9XG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG1hbmRhdE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXQgPSBtYW5kYXRPcmlnaW5hbC5tYW5kYXRcbiAgICAgICAgICAgICAgICBsZXQgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChtYW5kYXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYW5kYXRzLnB1c2gobWFuZGF0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRzIG9mIE9iamVjdC52YWx1ZXMobWFuZGF0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIG1hbmRhdHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImFjdGV1clwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhY3RldXJcIiBmaWxlOiAke2FjdGV1ck9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cihhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyID0gYWN0ZXVyT3JpZ2luYWwuYWN0ZXVyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clVpZCA9IGFjdGV1ci51aWRbXCIjdGV4dFwiXVxuICAgICAgICAgICAgICBjb25zdCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIuZGVwb3J0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5kZXBvcnRzID0geyBkZXBvcnQ6IGRlcG9ydHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFnZW5kYXNSYXdDb252ZXJ0LnRvQWdlbmRhcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBvcmlnaW5hbERhdGEucmV1bmlvbnMucmV1bmlvbikge1xuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgcmV1bmlvbixcbiAgICAgICAgICAgICAgICBwYXRoRnJvbVJldW5pb25VaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJyZXVuaW9uXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicmV1bmlvblwiIGZpbGU6ICR7cmV1bmlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJldW5pb25PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b1JldW5pb24ocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbiA9IHJldW5pb25PcmlnaW5hbC5yZXVuaW9uXG4gICAgICAgICAgICAgIHdyaXRlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICByZXVuaW9uLFxuICAgICAgICAgICAgICAgIHBhdGhGcm9tUmV1bmlvblVpZCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBjbG9uZUdpdChnaXRHcm91cFVybCwgZGF0YXNldE5hbWUsIGRhdGFEaXIpXG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNsZWFyRGlyZWN0b3J5KGRhdGFzZXRSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudHMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBvcmlnaW5hbERhdGEudGV4dGVzRXRBbWVuZGVtZW50c1xuICAgICAgICAgICAgICAudGV4dGVsZWcpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnQsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFtZW5kZW1lbnRcIiBmaWxlOiAke2FtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudFdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFtZW5kZW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBhbWVuZGVtZW50T3JpZ2luYWwuYW1lbmRlbWVudFxuICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBhbWVuZGVtZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9jdW1lbnRzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9jdW1lbnRzRGlyKVxuICAgICAgY29uc3QgZG9zc2llcnNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvc3NpZXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9zc2llcnNEaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC50ZXh0ZXNMZWdpc2xhdGlmc1xuICAgICAgICAgICAgICAuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudCwgcGF0aEZyb21Eb2N1bWVudFVpZClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlIH0gb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydFxuICAgICAgICAgICAgICAuZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICAgIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9jdW1lbnRcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb2N1bWVudFwiIGZpbGU6ICR7ZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gZG9jdW1lbnRPcmlnaW5hbC5kb2N1bWVudFxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50LCBwYXRoRnJvbURvY3VtZW50VWlkKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbW1pdEdpdChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMpXG4gICAgfVxuICB9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGxldCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBzY3J1dGluLFxuICAgICAgICAgICAgICAgIHBhdGhGcm9tU2NydXRpblVpZCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJzY3J1dGluXCIgZmlsZTogJHtzY3J1dGluT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5XcmFwcGVyKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW4gPSBzY3J1dGluT3JpZ2luYWwuc2NydXRpblxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgc2NydXRpbixcbiAgICAgICAgICAgICAgICBwYXRoRnJvbVNjcnV0aW5VaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBjbG9uZUdpdChnaXRHcm91cFVybCwgZGF0YXNldE5hbWUsIGRhdGFEaXIpXG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNsZWFyRGlyZWN0b3J5KGRhdGFzZXRSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBxdWVzdGlvblNwbGl0UGF0aFtxdWVzdGlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ucXVlc3Rpb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicXVlc3Rpb25cIiBmaWxlOiAke3F1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gUXVlc3Rpb25zUmF3Q29udmVydC50b1F1ZXN0aW9uV3JhcHBlcihxdWVzdGlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gcXVlc3Rpb25PcmlnaW5hbC5xdWVzdGlvblxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgcGF0aEZyb21RdWVzdGlvblVpZCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiLnhtbFwiKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiY29tcHRlUmVuZHVTZWFuY2VcIiBmaWxlOiAke2NvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0LnRvQ29tcHRlUmVuZHVXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2UgPSBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsLmNvbXB0ZVJlbmR1XG4gICAgICAgICAgICAgIHdyaXRlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZSxcbiAgICAgICAgICAgICAgICBwYXRoRnJvbUNvbXB0ZVJlbmR1VWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbW1pdEdpdChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBleGl0Q29kZVxufVxuXG5mdW5jdGlvbiB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRhdGFzZXRSZW9yZ2FuaXplZERpcjogc3RyaW5nLFxuICBhbWVuZGVtZW50OiB7XG4gICAgdWlkOiBzdHJpbmdcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZSZWY6IHN0cmluZ1xuICB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHVpZFRleHRlTGVnaXNsYXRpZiA9IGFtZW5kZW1lbnQudGV4dGVMZWdpc2xhdGlmUmVmXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbCh1aWRUZXh0ZUxlZ2lzbGF0aWYsIHVuZGVmaW5lZClcbiAgY29uc3QgdGV4dGVMZWdpc2xhdGlmRGlyID0gcGF0aC5qb2luKFxuICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICB1aWRUZXh0ZUxlZ2lzbGF0aWYsXG4gIClcbiAgZnMuZW5zdXJlRGlyU3luYyh0ZXh0ZUxlZ2lzbGF0aWZEaXIpXG4gIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgIHRleHRlTGVnaXNsYXRpZkRpcixcbiAgICBhbWVuZGVtZW50LnVpZCArIFwiLmpzb25cIixcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgIEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlUmVvcmdhbml6ZWRKc29uPFQgZXh0ZW5kcyB7IHVpZDogc3RyaW5nIH0+KFxuICBkaXI6IHN0cmluZyxcbiAgb2JqOiBULFxuICBwYXRoRnJvbVVpZDogKGRpcjogc3RyaW5nLCB1aWQ6IHN0cmluZykgPT4gc3RyaW5nLFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21VaWQoZGlyLCBvYmoudWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIHJldHVybiByZW9yZ2FuaXplRGF0YShvcHRpb25zKVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZW9yZ2FuaXplX2RhdGEudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEs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
|