@tricoteuses/assemblee 1.10.4 → 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.
Files changed (275) hide show
  1. package/README.md +8 -1
  2. package/lib/amendements-79bwpkvR.js +154 -0
  3. package/lib/amendements-CV3s5a0M.js +667 -0
  4. package/lib/cleaners/index.d.ts +9 -9
  5. package/lib/cleaners.js +564 -0
  6. package/lib/datasets.d.ts +3 -3
  7. package/lib/dossiers_legislatifs.d.ts +2 -2
  8. package/lib/index.d.ts +17 -22
  9. package/lib/index.js +1542 -314
  10. package/lib/inserters.d.ts +5 -5
  11. package/lib/loaders-9mHdTl9L.js +4158 -0
  12. package/lib/loaders.d.ts +12 -12
  13. package/lib/loaders.js +29 -1689
  14. package/lib/organes.d.ts +1 -1
  15. package/lib/parse-Ccs6wcUg.js +2512 -0
  16. package/lib/parsers/index.d.ts +2 -3
  17. package/lib/parsers/plf.d.ts +1 -0
  18. package/lib/parsers/recherche_amendements.d.ts +2 -2
  19. package/lib/parsers/textes_lois.d.ts +1 -23
  20. package/lib/parsers.js +398 -0
  21. package/lib/raw_types/acteurs_et_organes.d.ts +4 -2
  22. package/lib/raw_types/debats.d.ts +2 -2
  23. package/lib/raw_types/dossiers_legislatifs.d.ts +1 -1
  24. package/lib/schemas/acteurs_et_organes.json +1166 -0
  25. package/lib/schemas/agendas.json +1745 -0
  26. package/lib/schemas/amendements.json +2085 -0
  27. package/lib/schemas/debats.json +842 -0
  28. package/lib/schemas/dossiers_legislatifs.json +3874 -0
  29. package/lib/schemas/legislatures.json +17 -0
  30. package/lib/schemas/questions.json +704 -0
  31. package/lib/schemas/scrutins.json +701 -0
  32. package/lib/scripts/retrieve_deputes_photos.d.ts +1 -1
  33. package/lib/types/acteurs_et_organes.d.ts +344 -2
  34. package/lib/types/agendas.d.ts +236 -10
  35. package/lib/types/amendements.d.ts +276 -1
  36. package/lib/types/debats.d.ts +52 -2
  37. package/lib/types/dossiers_legislatifs.d.ts +403 -9
  38. package/lib/types/questions.d.ts +99 -2
  39. package/lib/types/scrutins.d.ts +101 -0
  40. package/lib/urls.d.ts +2 -2
  41. package/package.json +33 -95
  42. package/lib/api.js +0 -52
  43. package/lib/api.mjs +0 -45
  44. package/lib/bugs/acteur-00010/plugin.test.js +0 -90
  45. package/lib/bugs/acteur-00010/plugin.test.mjs +0 -33
  46. package/lib/bugs/acteur-00010.d.ts +0 -7
  47. package/lib/bugs/acteur-00010.js +0 -116
  48. package/lib/bugs/acteur-00010.mjs +0 -26
  49. package/lib/bugs/agenda-00002/plugin.test.js +0 -124
  50. package/lib/bugs/agenda-00002/plugin.test.mjs +0 -50
  51. package/lib/bugs/agenda-00002.d.ts +0 -15
  52. package/lib/bugs/agenda-00002.js +0 -406
  53. package/lib/bugs/agenda-00002.mjs +0 -172
  54. package/lib/bugs/agenda-00008/plugin.test.js +0 -92
  55. package/lib/bugs/agenda-00008/plugin.test.mjs +0 -31
  56. package/lib/bugs/agenda-00008.d.ts +0 -7
  57. package/lib/bugs/agenda-00008.js +0 -123
  58. package/lib/bugs/agenda-00008.mjs +0 -26
  59. package/lib/bugs/agenda-00011/plugin.test.d.ts +0 -1
  60. package/lib/bugs/agenda-00011/plugin.test.js +0 -263
  61. package/lib/bugs/agenda-00011/plugin.test.mjs +0 -152
  62. package/lib/bugs/agenda-00011.d.ts +0 -16
  63. package/lib/bugs/agenda-00011.js +0 -333
  64. package/lib/bugs/agenda-00011.mjs +0 -125
  65. package/lib/bugs.d.ts +0 -21
  66. package/lib/bugs.js +0 -452
  67. package/lib/bugs.mjs +0 -70
  68. package/lib/cleaners/actes_legislatifs.js +0 -315
  69. package/lib/cleaners/actes_legislatifs.mjs +0 -253
  70. package/lib/cleaners/acteurs.js +0 -265
  71. package/lib/cleaners/acteurs.mjs +0 -180
  72. package/lib/cleaners/amendements.js +0 -294
  73. package/lib/cleaners/amendements.mjs +0 -227
  74. package/lib/cleaners/debats.js +0 -12
  75. package/lib/cleaners/debats.mjs +0 -5
  76. package/lib/cleaners/documents.js +0 -205
  77. package/lib/cleaners/documents.mjs +0 -133
  78. package/lib/cleaners/dossiers_legislatifs.js +0 -131
  79. package/lib/cleaners/dossiers_legislatifs.mjs +0 -70
  80. package/lib/cleaners/index.js +0 -70
  81. package/lib/cleaners/index.mjs +0 -10
  82. package/lib/cleaners/organes.js +0 -65
  83. package/lib/cleaners/organes.mjs +0 -48
  84. package/lib/cleaners/questions.js +0 -12
  85. package/lib/cleaners/questions.mjs +0 -5
  86. package/lib/cleaners/reunions.js +0 -312
  87. package/lib/cleaners/reunions.mjs +0 -255
  88. package/lib/cleaners/scrutins.js +0 -340
  89. package/lib/cleaners/scrutins.mjs +0 -221
  90. package/lib/cleaners/xml.js +0 -95
  91. package/lib/cleaners/xml.mjs +0 -58
  92. package/lib/datasets.js +0 -837
  93. package/lib/datasets.mjs +0 -755
  94. package/lib/dates.js +0 -124
  95. package/lib/dates.mjs +0 -100
  96. package/lib/dossiers_legislatifs.js +0 -346
  97. package/lib/dossiers_legislatifs.mjs +0 -208
  98. package/lib/file_systems.js +0 -162
  99. package/lib/file_systems.mjs +0 -62
  100. package/lib/git.js +0 -223
  101. package/lib/git.mjs +0 -151
  102. package/lib/index.mjs +0 -17
  103. package/lib/inserters.js +0 -521
  104. package/lib/inserters.mjs +0 -337
  105. package/lib/loaders.mjs +0 -886
  106. package/lib/logger.js +0 -35
  107. package/lib/logger.mjs +0 -26
  108. package/lib/organes.js +0 -22
  109. package/lib/organes.mjs +0 -15
  110. package/lib/parsers/documents.d.ts +0 -62
  111. package/lib/parsers/documents.js +0 -453
  112. package/lib/parsers/documents.mjs +0 -370
  113. package/lib/parsers/index.js +0 -40
  114. package/lib/parsers/index.mjs +0 -4
  115. package/lib/parsers/recherche_amendements.js +0 -403
  116. package/lib/parsers/recherche_amendements.mjs +0 -167
  117. package/lib/parsers/textes_lois.js +0 -307
  118. package/lib/parsers/textes_lois.mjs +0 -264
  119. package/lib/raw_types/acteurs_et_organes.js +0 -1213
  120. package/lib/raw_types/acteurs_et_organes.mjs +0 -1146
  121. package/lib/raw_types/agendas.js +0 -777
  122. package/lib/raw_types/agendas.mjs +0 -724
  123. package/lib/raw_types/amendements.js +0 -1052
  124. package/lib/raw_types/amendements.mjs +0 -993
  125. package/lib/raw_types/debats.js +0 -630
  126. package/lib/raw_types/debats.mjs +0 -573
  127. package/lib/raw_types/dossiers_legislatifs.js +0 -1529
  128. package/lib/raw_types/dossiers_legislatifs.mjs +0 -1471
  129. package/lib/raw_types/questions.js +0 -469
  130. package/lib/raw_types/questions.mjs +0 -416
  131. package/lib/raw_types/scrutins.js +0 -651
  132. package/lib/raw_types/scrutins.mjs +0 -598
  133. package/lib/schemas/acteur/Acteur.json +0 -56
  134. package/lib/schemas/acteur/AdresseElectronique.json +0 -52
  135. package/lib/schemas/acteur/AdressePostale.json +0 -75
  136. package/lib/schemas/acteur/Civ.json +0 -14
  137. package/lib/schemas/acteur/Collaborateur.json +0 -29
  138. package/lib/schemas/acteur/EtatCivil.json +0 -51
  139. package/lib/schemas/acteur/Ident.json +0 -40
  140. package/lib/schemas/acteur/Lieu.json +0 -66
  141. package/lib/schemas/acteur/Mandat.json +0 -192
  142. package/lib/schemas/acteur/Profession.json +0 -46
  143. package/lib/schemas/agenda/Agenda.json +0 -318
  144. package/lib/schemas/agenda/CycleDeVie.json +0 -45
  145. package/lib/schemas/agenda/PointOdj.json +0 -82
  146. package/lib/schemas/amendement/Amendement.json +0 -246
  147. package/lib/schemas/amendement/Diff.json +0 -25
  148. package/lib/schemas/amendement/DispositifAmdtCredit.json +0 -85
  149. package/lib/schemas/amendement/Identifiant.json +0 -62
  150. package/lib/schemas/amendement/PointeurFragmentTexte.json +0 -127
  151. package/lib/schemas/amendement/Representation.json +0 -67
  152. package/lib/schemas/amendement/Total.json +0 -26
  153. package/lib/schemas/converted_from_type/acteurs_et_organes.json +0 -666
  154. package/lib/schemas/converted_from_type/agendas.json +0 -1100
  155. package/lib/schemas/converted_from_type/amendements.json +0 -3191
  156. package/lib/schemas/converted_from_type/debats.json +0 -682
  157. package/lib/schemas/converted_from_type/deputes.json +0 -26
  158. package/lib/schemas/converted_from_type/dossiers_legislatifs.json +0 -2918
  159. package/lib/schemas/converted_from_type/legislatures.json +0 -16
  160. package/lib/schemas/converted_from_type/questions.json +0 -328
  161. package/lib/schemas/converted_from_type/scrutins.json +0 -393
  162. package/lib/schemas/debat/Contenu.json +0 -75
  163. package/lib/schemas/debat/Debat.json +0 -40
  164. package/lib/schemas/debat/Metadonnees.json +0 -75
  165. package/lib/schemas/debat/Orateur.json +0 -60
  166. package/lib/schemas/debat/Point.json +0 -169
  167. package/lib/schemas/debat/Sommaire.json +0 -71
  168. package/lib/schemas/debat/SommaireElement.json +0 -108
  169. package/lib/schemas/debat/Texte.json +0 -34
  170. package/lib/schemas/document/CodeLibelle.json +0 -25
  171. package/lib/schemas/document/Document.json +0 -385
  172. package/lib/schemas/document/Indexation.json +0 -38
  173. package/lib/schemas/dossier/ActeLegislatif.json +0 -211
  174. package/lib/schemas/dossier/ActeLegislatifBase.json +0 -62
  175. package/lib/schemas/dossier/Agenda.json +0 -23
  176. package/lib/schemas/dossier/ConseilConstitutionnel.json +0 -35
  177. package/lib/schemas/dossier/Decision.json +0 -25
  178. package/lib/schemas/dossier/Dossier.json +0 -124
  179. package/lib/schemas/dossier/EtudeImpact.json +0 -29
  180. package/lib/schemas/dossier/EtudePlf.json +0 -105
  181. package/lib/schemas/dossier/Europe.json +0 -42
  182. package/lib/schemas/dossier/FamCodeLibelle.json +0 -25
  183. package/lib/schemas/dossier/InfoJO.json +0 -23
  184. package/lib/schemas/dossier/Initiateur.json +0 -36
  185. package/lib/schemas/dossier/Motion.json +0 -27
  186. package/lib/schemas/dossier/Promulgation.json +0 -62
  187. package/lib/schemas/dossier/Rapporteur.json +0 -36
  188. package/lib/schemas/dossier/Texte.json +0 -47
  189. package/lib/schemas/organe/CodeTypeOrgane.json +0 -43
  190. package/lib/schemas/organe/Organe.json +0 -136
  191. package/lib/schemas/organe/ViMoDe.json +0 -28
  192. package/lib/schemas/question/Auteur.json +0 -58
  193. package/lib/schemas/question/Cloture.json +0 -28
  194. package/lib/schemas/question/InfoJO.json +0 -40
  195. package/lib/schemas/question/MinAttribElement.json +0 -30
  196. package/lib/schemas/question/Question.json +0 -172
  197. package/lib/schemas/question/Renouvellement.json +0 -17
  198. package/lib/schemas/question/Signalement.json +0 -21
  199. package/lib/schemas/question/Texte.json +0 -24
  200. package/lib/schemas/scrutin/DecompteVoix.json +0 -35
  201. package/lib/schemas/scrutin/Dysfonctionnement.json +0 -50
  202. package/lib/schemas/scrutin/MiseAuPoint.json +0 -53
  203. package/lib/schemas/scrutin/OrganeVotant.json +0 -88
  204. package/lib/schemas/scrutin/Scrutin.json +0 -187
  205. package/lib/schemas/scrutin/Votant.json +0 -37
  206. package/lib/scripts/bugs_helper.d.ts +0 -13
  207. package/lib/scripts/bugs_helper.js +0 -595
  208. package/lib/scripts/bugs_helper.mjs +0 -251
  209. package/lib/scripts/clean_reorganized_data.js +0 -610
  210. package/lib/scripts/clean_reorganized_data.mjs +0 -273
  211. package/lib/scripts/diff_amendements.js +0 -249
  212. package/lib/scripts/diff_amendements.mjs +0 -202
  213. package/lib/scripts/document_dossiers_legislatifs.js +0 -655
  214. package/lib/scripts/document_dossiers_legislatifs.mjs +0 -414
  215. package/lib/scripts/get_today_reunions.js +0 -37
  216. package/lib/scripts/get_today_reunions.mjs +0 -31
  217. package/lib/scripts/merge_scrutins.js +0 -97
  218. package/lib/scripts/merge_scrutins.mjs +0 -47
  219. package/lib/scripts/parse_textes_lois.d.ts +0 -1
  220. package/lib/scripts/parse_textes_lois.js +0 -171
  221. package/lib/scripts/parse_textes_lois.mjs +0 -140
  222. package/lib/scripts/process_open_dataset.js +0 -301
  223. package/lib/scripts/process_open_dataset.mjs +0 -134
  224. package/lib/scripts/raw_types_from_amendements.js +0 -135
  225. package/lib/scripts/raw_types_from_amendements.mjs +0 -134
  226. package/lib/scripts/reorganize_data.js +0 -805
  227. package/lib/scripts/reorganize_data.mjs +0 -517
  228. package/lib/scripts/retrieve_deputes_photos.js +0 -310
  229. package/lib/scripts/retrieve_deputes_photos.mjs +0 -158
  230. package/lib/scripts/retrieve_documents.js +0 -547
  231. package/lib/scripts/retrieve_documents.mjs +0 -242
  232. package/lib/scripts/retrieve_open_data.js +0 -107
  233. package/lib/scripts/retrieve_open_data.mjs +0 -26
  234. package/lib/scripts/retrieve_pending_amendments.js +0 -206
  235. package/lib/scripts/retrieve_pending_amendments.mjs +0 -57
  236. package/lib/scripts/retrieve_senateurs_photos.js +0 -234
  237. package/lib/scripts/retrieve_senateurs_photos.mjs +0 -116
  238. package/lib/scripts/retrieve_textes_lois.d.ts +0 -1
  239. package/lib/scripts/retrieve_textes_lois.js +0 -240
  240. package/lib/scripts/retrieve_textes_lois.mjs +0 -85
  241. package/lib/scripts/shared/cli_helpers.js +0 -89
  242. package/lib/scripts/shared/cli_helpers.mjs +0 -81
  243. package/lib/scripts/test_iter_load.js +0 -155
  244. package/lib/scripts/test_iter_load.mjs +0 -72
  245. package/lib/scripts/test_load.js +0 -26
  246. package/lib/scripts/test_load.mjs +0 -16
  247. package/lib/scripts/test_load_big_files.js +0 -26
  248. package/lib/scripts/test_load_big_files.mjs +0 -16
  249. package/lib/scripts/validate_json.js +0 -353
  250. package/lib/scripts/validate_json.mjs +0 -184
  251. package/lib/shared_types/codes_actes.js +0 -231
  252. package/lib/shared_types/codes_actes.mjs +0 -224
  253. package/lib/strings.js +0 -16
  254. package/lib/strings.mjs +0 -7
  255. package/lib/types/acteurs_et_organes.js +0 -963
  256. package/lib/types/acteurs_et_organes.mjs +0 -904
  257. package/lib/types/agendas.js +0 -628
  258. package/lib/types/agendas.mjs +0 -575
  259. package/lib/types/amendements.js +0 -899
  260. package/lib/types/amendements.mjs +0 -842
  261. package/lib/types/debats.js +0 -619
  262. package/lib/types/debats.mjs +0 -562
  263. package/lib/types/dossiers_legislatifs.js +0 -1188
  264. package/lib/types/dossiers_legislatifs.mjs +0 -1130
  265. package/lib/types/legislatures.js +0 -17
  266. package/lib/types/legislatures.mjs +0 -10
  267. package/lib/types/questions.js +0 -454
  268. package/lib/types/questions.mjs +0 -401
  269. package/lib/types/scrutins.js +0 -556
  270. package/lib/types/scrutins.mjs +0 -503
  271. package/lib/urls.js +0 -325
  272. package/lib/urls.mjs +0 -258
  273. /package/lib/{bugs/acteur-00010/plugin.test.d.ts → scripts/add_links_to_documents.d.ts} +0 -0
  274. /package/lib/{bugs/agenda-00002/plugin.test.d.ts → scripts/copy-schemas.d.ts} +0 -0
  275. /package/lib/{bugs/agenda-00008/plugin.test.d.ts → scripts/generate-json-schemas.d.ts} +0 -0
@@ -1,655 +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.symbol.to-primitive.js");
8
- require("core-js/modules/es.array.is-array.js");
9
- require("core-js/modules/es.array.slice.js");
10
- require("core-js/modules/es.date.to-primitive.js");
11
- require("core-js/modules/es.date.to-string.js");
12
- require("core-js/modules/es.function.bind.js");
13
- require("core-js/modules/es.number.constructor.js");
14
- require("core-js/modules/es.object.create.js");
15
- require("core-js/modules/es.object.define-property.js");
16
- require("core-js/modules/es.object.get-prototype-of.js");
17
- require("core-js/modules/es.object.set-prototype-of.js");
18
- require("core-js/modules/es.reflect.construct.js");
19
- require("core-js/modules/es.array.concat.js");
20
- require("core-js/modules/es.array.from.js");
21
- require("core-js/modules/es.array.iterator.js");
22
- require("core-js/modules/es.array.join.js");
23
- require("core-js/modules/es.array.map.js");
24
- require("core-js/modules/es.function.name.js");
25
- require("core-js/modules/es.map.js");
26
- require("core-js/modules/es.object.assign.js");
27
- require("core-js/modules/es.object.entries.js");
28
- require("core-js/modules/es.object.keys.js");
29
- require("core-js/modules/es.object.to-string.js");
30
- require("core-js/modules/es.regexp.constructor.js");
31
- require("core-js/modules/es.regexp.exec.js");
32
- require("core-js/modules/es.regexp.to-string.js");
33
- require("core-js/modules/es.set.js");
34
- require("core-js/modules/es.string.ends-with.js");
35
- require("core-js/modules/es.string.iterator.js");
36
- require("core-js/modules/es.string.match.js");
37
- require("core-js/modules/es.string.replace.js");
38
- require("core-js/modules/es.string.starts-with.js");
39
- require("core-js/modules/web.dom-collections.iterator.js");
40
- var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
41
- var _commandLineUsage = _interopRequireDefault(require("command-line-usage"));
42
- var _assert = _interopRequireDefault(require("assert"));
43
- var _file_systems = require("../file_systems");
44
- var _LectureMapping;
45
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
46
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
47
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
48
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
49
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
50
- function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
51
- 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."); }
52
- function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
53
- function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
54
- function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
55
- function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
56
- function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
57
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
58
- function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
59
- function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
60
- function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
61
- function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
62
- function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
63
- function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
64
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
65
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
66
- function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
67
- 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; } } }; }
68
- 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; } }
69
- 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; }
70
- function parseArgs(argv) {
71
- var optionsDefinitions = [{
72
- description: "pathname to a JSON file or a glob pattern to JSON files",
73
- defaultOption: true,
74
- multiple: true,
75
- name: "data",
76
- type: String
77
- }, {
78
- name: "no-sanity-checks",
79
- type: Boolean,
80
- description: "Do not perform sanity checks."
81
- }, {
82
- name: "verbose",
83
- type: Boolean,
84
- description: "increase verbosity"
85
- }, {
86
- name: "help",
87
- description: "Print this usage guide."
88
- }];
89
- var sections = [{
90
- header: "Aide à la documentation du dossier législatif",
91
- content: "Génère une hiérarchie des actes législatifs"
92
- }, {
93
- header: "Options",
94
- optionList: optionsDefinitions
95
- }];
96
- var options = (0, _commandLineArgs["default"])(optionsDefinitions, {
97
- argv: argv
98
- });
99
- if (!("help" in options) && !("data" in options)) {
100
- console.error("--data is mandatory");
101
- options.help = true;
102
- }
103
- if ("help" in options) {
104
- var usage = (0, _commandLineUsage["default"])(sections);
105
- console.warn(usage);
106
- return null;
107
- }
108
- return options;
109
- }
110
- function eqSet(as, bs) {
111
- if (as.size !== bs.size) return false;
112
- var _iterator = _createForOfIteratorHelper(as),
113
- _step;
114
- try {
115
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
116
- var a = _step.value;
117
- if (!bs.has(a)) return false;
118
- }
119
- } catch (err) {
120
- _iterator.e(err);
121
- } finally {
122
- _iterator.f();
123
- }
124
- return true;
125
- }
126
- var Code2Pattern = /*#__PURE__*/_createClass(function Code2Pattern(pattern, children) {
127
- _classCallCheck(this, Code2Pattern);
128
- _defineProperty(this, "_pattern_", void 0);
129
- _defineProperty(this, "_match_count_", void 0);
130
- this._pattern_ = pattern;
131
- this._match_count_ = 0;
132
- Object.assign(this, children);
133
- });
134
- var Code2PatternComFond = /*#__PURE__*/function (_Code2Pattern2) {
135
- function Code2PatternComFond() {
136
- _classCallCheck(this, Code2PatternComFond);
137
- return _callSuper(this, Code2PatternComFond, ["^/SAISIE/(/NOMIN/)*(/REUNION/)*(/RAPPORT/)*$", {}]);
138
- }
139
- _inherits(Code2PatternComFond, _Code2Pattern2);
140
- return _createClass(Code2PatternComFond);
141
- }(Code2Pattern);
142
- var LectureMapping = /*#__PURE__*/function () {
143
- function LectureMapping() {
144
- _classCallCheck(this, LectureMapping);
145
- _defineProperty(this, "libelle", {});
146
- _defineProperty(this, "codes", new Set());
147
- }
148
- return _createClass(LectureMapping, [{
149
- key: "add",
150
- value: function add(acte) {
151
- this.codes.add(acte.codeActe);
152
- var type = LectureMapping.getType(acte);
153
- if (!(acte.libelleActe.nomCanonique in this.libelle)) this.libelle[acte.libelleActe.nomCanonique] = new Set();
154
- this.libelle[acte.libelleActe.nomCanonique].add(type);
155
- }
156
- }, {
157
- key: "remap",
158
- value: function remap(acte, codeActe) {
159
- acte.codeActe = codeActe;
160
- var types = this.libelle[acte.libelleActe.nomCanonique];
161
- if (!(types.has("SN") && types.has("AN"))) {
162
- if (types.has("SN")) acte.libelleActe.nomCanonique += " (Sénat)";else if (types.has("AN")) acte.libelleActe.nomCanonique += " (Assemblée Nationale)";
163
- }
164
- }
165
- }, {
166
- key: "mergeCodes",
167
- value: function mergeCodes(codes) {
168
- for (var _i = 0, _Array$from = Array.from(this.codes); _i < _Array$from.length; _i++) {
169
- var c = _Array$from[_i];
170
- codes.add(c);
171
- }
172
- }
173
- }, {
174
- key: "printAnchors",
175
- value: function printAnchors() {
176
- for (var _i2 = 0, _Array$from2 = Array.from(this.codes); _i2 < _Array$from2.length; _i2++) {
177
- var code = _Array$from2[_i2];
178
- console.log(".. _".concat(code, ":"));
179
- }
180
- }
181
- }, {
182
- key: "getCodes",
183
- value: function getCodes() {
184
- return Array.from(this.codes).join(",");
185
- }
186
- }], [{
187
- key: "isLecture",
188
- value: function isLecture(acte) {
189
- return acte.codeActe.match(LectureMapping.codes_lecture_regexp);
190
- }
191
- }, {
192
- key: "getType",
193
- value: function getType(acte) {
194
- if (acte.codeActe.match(/^AN/)) return "AN";else if (acte.codeActe.match(/^SN/)) return "SN";else throw Error("".concat(acte.codeActe, " does not start with AN or SN"));
195
- }
196
- }, {
197
- key: "map",
198
- value: function map(codeActe) {
199
- return codeActe.replace(LectureMapping.codes_lecture_regexp, "lecture$1");
200
- }
201
- }, {
202
- key: "getCodeActe",
203
- value: function getCodeActe(acte) {
204
- if (!LectureMapping.isLecture(acte)) return;
205
- return LectureMapping.map(acte.codeActe);
206
- }
207
- }]);
208
- }();
209
- _LectureMapping = LectureMapping;
210
- _defineProperty(LectureMapping, "codes_lecture", ["AN1", "SN1", "ANNLEC", "SNNLEC", "ANLDEF", "AN2", "SN2", "SN3"]);
211
- _defineProperty(LectureMapping, "codes_lecture_regexp", new RegExp("^(?:" + _LectureMapping.codes_lecture.join("|") + ")(-.*)?$"));
212
- var LectureMapper = /*#__PURE__*/function () {
213
- function LectureMapper() {
214
- _classCallCheck(this, LectureMapper);
215
- _defineProperty(this, "mapping", {});
216
- }
217
- return _createClass(LectureMapper, [{
218
- key: "has",
219
- value: function has(codeActe) {
220
- return codeActe in this.mapping;
221
- }
222
- }, {
223
- key: "collect",
224
- value: function collect(acte) {
225
- var codeActe = LectureMapping.getCodeActe(acte);
226
- if (codeActe != undefined) {
227
- var lectures = this.mapping;
228
- if (!(codeActe in lectures)) lectures[codeActe] = new LectureMapping();
229
- lectures[codeActe].add(acte);
230
- }
231
- }
232
- }, {
233
- key: "remap",
234
- value: function remap(acte) {
235
- var codeActe = LectureMapping.getCodeActe(acte);
236
- if (codeActe != undefined) this.mapping[codeActe].remap(acte, codeActe);
237
- }
238
- }, {
239
- key: "mergeCodes",
240
- value: function mergeCodes(codes, codeActe) {
241
- this.mapping[codeActe].mergeCodes(codes);
242
- }
243
- }, {
244
- key: "printAnchors",
245
- value: function printAnchors(codeActe) {
246
- this.mapping[codeActe].printAnchors();
247
- }
248
- }, {
249
- key: "getCodes",
250
- value: function getCodes(codeActe) {
251
- return this.mapping[codeActe].getCodes();
252
- }
253
- }]);
254
- }();
255
- var ActesDocumentation = /*#__PURE__*/function () {
256
- function ActesDocumentation(sanityChecks) {
257
- var verbose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
258
- _classCallCheck(this, ActesDocumentation);
259
- _defineProperty(this, "verbose", void 0);
260
- _defineProperty(this, "sanityChecks", void 0);
261
- _defineProperty(this, "lectureMapper", new LectureMapper());
262
- _defineProperty(this, "remappedProcedures", {});
263
- _defineProperty(this, "anchorsPrinted", {});
264
- _defineProperty(this, "anchors", new Set());
265
- _defineProperty(this, "codes", {});
266
- _defineProperty(this, "procedures", null);
267
- _defineProperty(this, "code2pattern", new Code2Pattern(null, {
268
- "Procédure législative": new Code2Pattern("^(((/lecture/)+)|((/lecture/)+/CMP/(/lecture/)*))(/CC/)?(/PROM/)?(/AN-APPLI/)?$", {
269
- lecture: new Code2Pattern("^(/DEPOT/)?(/DPTLETTRECT/)?(/ETI/)?(/AVCE/)?(/DGVT/)?(/ACIN/)?(/MOTION/)*(/PROCACC/)?(/COM/)?((/DEBATS/)+)?(/RTRINI/)?$", {
270
- "lecture-COM": new Code2Pattern("^(/FOND/|/AVIS/)+$", {
271
- "lecture-COM-FOND": new Code2PatternComFond(),
272
- "lecture-COM-AVIS": new Code2PatternComFond()
273
- }),
274
- "lecture-DEBATS": new Code2Pattern("^(/SEANCE/)*((/MOTION/)?(/MOTION-VOTE/)+)?(/DEC/)?$", {})
275
- }),
276
- CMP: new Code2Pattern("^(/DEPOT/|/SAISIE/){1,2}(/COM/)?(/DEC/)?(/DEBATS-AN//DEBATS-SN/)?", {
277
- "CMP-COM": new Code2Pattern("^(/NOMIN/)?(/RAPPORT-AN/|/RAPPORT-SN/){2}$", {}),
278
- "CMP-DEBATS-AN": new Code2Pattern("^(/SEANCE/)*(/DEC/)?$", {}),
279
- "CMP-DEBATS-SN": new Code2Pattern("^(/SEANCE/)*(/DEC/)?$", {})
280
- }),
281
- CC: new Code2Pattern("^(/SAISIE/)+(/CONCLUSION/)?$", {}),
282
- PROM: new Code2Pattern("^(/PUB/)?$", {}),
283
- "AN-APPLI": new Code2Pattern("^(/RAPPORT/)?$", {})
284
- }),
285
- "Allocution du Président de l'Assemblée nationale": new Code2Pattern("^/AN21/$", {
286
- AN21: new Code2Pattern("^(/APAN/)?$", {})
287
- }),
288
- "Résolution Article 34-1": new Code2Pattern("^(/ANLUNI/)?$", {
289
- ANLUNI: new Code2Pattern("^(/DEPOT/)?(/DEBATS/)?(/RTRINI/)?$", {
290
- "ANLUNI-DEBATS": new Code2Pattern("^(/SEANCE/)+(/DEC/)?$", {})
291
- })
292
- }),
293
- Résolution: new Code2Pattern("^(/ANLUNI/)?(/CC/)?$", {
294
- ANLUNI: new Code2Pattern("^(/DEPOT/)?(/COM/)?(/DEBATS/|/RTRINI/)?$", {
295
- "ANLUNI-COM": new Code2Pattern("^(/CAE/)?(/FOND/)?$", {
296
- "ANLUNI-COM-FOND": new Code2PatternComFond(),
297
- "ANLUNI-COM-CAE": new Code2Pattern("^(/SAISIE/)?(/NOMIN/)?(/REUNION/)?(/RAPPORT/)?(/DEC/)?$", {})
298
- }),
299
- "ANLUNI-DEBATS": new Code2Pattern("^(/SEANCE/)*(/DEC/)?$", {})
300
- }),
301
- CC: new Code2Pattern("^(/SAISIE/)?(/CONCLUSION/)?$", {})
302
- }),
303
- "Rapport d'information sans mission": new Code2Pattern("^(/AN20/)?(/EU/)?$", {
304
- AN20: new Code2Pattern("^(/RAPPORT/)?$", {}),
305
- EU: new Code2Pattern("^(/DEC/)+$", {})
306
- }),
307
- "Mission d'information": new Code2Pattern("^(/AN20/)?$", {
308
- AN20: new Code2Pattern("^(/MISINF/)?$", {
309
- "AN20-MISINF": new Code2Pattern("^(/CREA/)?(/NOMIN/)?(/RAPPORT/)?$", {})
310
- })
311
- }),
312
- "Commission d'enquête": new Code2Pattern("^(/AN20/)?$", {
313
- AN20: new Code2Pattern("^(/COMENQ/)?$", {
314
- "AN20-COMENQ": new Code2Pattern("^(/CREA/)?(/NOMIN/)?(/RAPPORT/)?$", {})
315
- })
316
- }),
317
- "Engagement de la responsabilité gouvernementale": new Code2Pattern("^/AN21/$", {
318
- AN21: new Code2Pattern("^(((/MOTION/)*/DEBATS/)|(/DGVT/)){1,2}$", {
319
- "AN21-DEBATS": new Code2Pattern("^(/SEANCE/)*(/MOTION-VOTE/)*$", {})
320
- })
321
- }),
322
- "Motion référendaire": new Code2Pattern("^(/lecture/)+$", {
323
- lecture: new Code2Pattern("^(/DEPOT/)?(/COM/)?(/DEBATS/)?$", {
324
- "lecture-COM": new Code2Pattern("^(/FOND/)?$", {
325
- "lecture-COM-FOND": new Code2Pattern("^(/SAISIE/)?(/NOMIN/)*(/RAPPORT/)*$", {})
326
- }),
327
- "lecture-DEBATS": new Code2Pattern("^(/DEC/)?$", {})
328
- })
329
- }),
330
- Immunité: new Code2Pattern("^(/ANLUNI/)+$", {
331
- ANLUNI: new Code2Pattern("^(/DEPOT/)?(/COM/)?(/DEBATS/)?(/RTRINI/)?$", {
332
- "ANLUNI-COM": new Code2Pattern("^(/FOND/)?$", {
333
- "ANLUNI-COM-FOND": new Code2Pattern("^(/SAISIE/)?(/NOMIN/)*(/RAPPORT/)*$", {})
334
- }),
335
- "ANLUNI-DEBATS": new Code2Pattern("^(/SEANCE/)?(/DEC/)$", {})
336
- })
337
- }),
338
- "Responsabilité pénale du président de la république": new Code2Pattern("^/lecture/$", {
339
- lecture: new Code2Pattern("^(/DEPOT/)?(/RECBUREAU/)?$", {})
340
- }),
341
- "Proposition de loi présentée en application de l'article 11 de la Constitution": new Code2Pattern("^/lecture/$", {
342
- lecture: new Code2Pattern("^(/DEPOT/)?$", {})
343
- })
344
- }));
345
- this.verbose = verbose;
346
- this.sanityChecks = sanityChecks;
347
- this.procedures = {};
348
- this.code2pattern._match_count_++;
349
- }
350
- return _createClass(ActesDocumentation, [{
351
- key: "walkFiles",
352
- value: function walkFiles(data, action) {
353
- var _iterator2 = _createForOfIteratorHelper((0, _file_systems.getFiles)(data)),
354
- _step2;
355
- try {
356
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
357
- var file = _step2.value;
358
- var dossier = (0, _file_systems.load)(file);
359
- var procedure = this.remapProcedure(dossier.procedureParlementaire.libelle);
360
- if (!(procedure in this.procedures)) this.procedures[procedure] = {};
361
- action(this.procedures[procedure], dossier.actesLegislatifs, this.code2pattern[procedure], null);
362
- }
363
- } catch (err) {
364
- _iterator2.e(err);
365
- } finally {
366
- _iterator2.f();
367
- }
368
- }
369
- }, {
370
- key: "collectFiles",
371
- value: function collectFiles(data) {
372
- var _this = this;
373
- this.walkFiles(data, function (_actes, actesLegislatifs, _c2p, _parent) {
374
- _this.collect(actesLegislatifs);
375
- });
376
- }
377
- }, {
378
- key: "processFiles",
379
- value: function processFiles(data) {
380
- var _this2 = this;
381
- this.walkFiles(data, function (actes, actesLegislatifs, c2p, parent) {
382
- _this2.merge(actes, actesLegislatifs, c2p, parent);
383
- });
384
- if (this.sanityChecks) this.validate();
385
- }
386
- }, {
387
- key: "remapActes",
388
- value: function remapActes(actes) {
389
- var results = [];
390
- var _iterator3 = _createForOfIteratorHelper(actes),
391
- _step3;
392
- try {
393
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
394
- var acte = _step3.value;
395
- this.lectureMapper.remap(acte);
396
-
397
- // CC-SAISIE- suffix does not imply a hierarchy
398
- acte.codeActe = acte.codeActe.replace(/^CC-SAISIE.*/, "CC-SAISIE");
399
- results.push(acte);
400
- }
401
- } catch (err) {
402
- _iterator3.e(err);
403
- } finally {
404
- _iterator3.f();
405
- }
406
- return results;
407
- }
408
- }, {
409
- key: "collectActes",
410
- value: function collectActes(actes) {
411
- var results = [];
412
- var _iterator4 = _createForOfIteratorHelper(actes),
413
- _step4;
414
- try {
415
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
416
- var acte = _step4.value;
417
- this.lectureMapper.collect(acte);
418
- results.push(acte);
419
- }
420
- } catch (err) {
421
- _iterator4.e(err);
422
- } finally {
423
- _iterator4.f();
424
- }
425
- return results;
426
- }
427
- }, {
428
- key: "remapProcedure",
429
- value: function remapProcedure(procedure) {
430
- var merge_procedures = new Map([["Proposition de loi ordinaire", "Procédure législative"], ["Projet de loi ordinaire", "Procédure législative"], ["Projet de ratification des traités et conventions", "Procédure législative"], ["Projet ou proposition de loi organique", "Procédure législative"], ["Projet ou proposition de loi constitutionnelle", "Procédure législative"], ["Projet de loi de finances de l'année", "Procédure législative"], ["Projet de loi de finances rectificative", "Procédure législative"], ["Projet de loi de financement de la sécurité sociale", "Procédure législative"]]);
431
- if (merge_procedures.has(procedure)) {
432
- this.remappedProcedures[procedure] = null;
433
- return merge_procedures.get(procedure);
434
- } else {
435
- return procedure;
436
- }
437
- }
438
-
439
- // return the codeActes in the same order they appear in the regexp
440
- }, {
441
- key: "orderedCodes",
442
- value: function orderedCodes(codes, c2p, parent) {
443
- codes = new Set(codes);
444
- if (!this.sanityChecks) return codes;
445
- var ordered = c2p["_pattern_"].match(new RegExp("/.*?/", "g"));
446
- ordered = ordered.map(function (x) {
447
- return x.replace(new RegExp("/(.*)/"), "$1");
448
- });
449
- if (parent != null) ordered = ordered.map(function (x) {
450
- return "".concat(parent, "-").concat(x);
451
- });
452
- ordered = new Set(ordered);
453
- (0, _assert["default"])(eqSet(ordered, codes), "".concat(_toConsumableArray(ordered), " != ").concat(_toConsumableArray(codes)));
454
- return ordered;
455
- }
456
- }, {
457
- key: "validateChronology",
458
- value: function validateChronology(actesLegislatifs, c2p, parent) {
459
- var pattern = c2p["_pattern_"];
460
- var sequence = actesLegislatifs.map(function (x) {
461
- return "/".concat(x.codeActe, "/").replace("/".concat(parent, "-"), "/");
462
- }).join("");
463
- (0, _assert["default"])(sequence.match(new RegExp(pattern)), "".concat(pattern, " does not match ").concat(sequence));
464
- c2p._match_count_++;
465
- }
466
- }, {
467
- key: "mergeActe",
468
- value: function mergeActe(actes, acte, c2p, parent) {
469
- var code = acte.codeActe;
470
- var shortCode = code.replace(new RegExp("^".concat(parent, "-")), "");
471
- shortCode = shortCode.replace(/-(AN|SN)$/, "");
472
- this.codes[shortCode] = null;
473
- var name = acte.libelleActe.nomCanonique;
474
- if (!(code in actes)) {
475
- actes[code] = {
476
- type: acte.xsiType,
477
- name: new Set([name]),
478
- shortCode: shortCode,
479
- actes: {}
480
- };
481
- } else {
482
- actes[code].name.add(name);
483
- }
484
- if ("actesLegislatifs" in acte) this.merge(actes[code].actes, acte.actesLegislatifs, c2p[code], code);
485
- }
486
- }, {
487
- key: "merge",
488
- value: function merge(actes, actesLegislatifs, c2p, parent) {
489
- var l = this.remapActes(actesLegislatifs);
490
- this.validateChronology(l, c2p, parent);
491
- var _iterator5 = _createForOfIteratorHelper(l),
492
- _step5;
493
- try {
494
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
495
- var acte = _step5.value;
496
- this.mergeActe(actes, acte, c2p, parent);
497
- }
498
- } catch (err) {
499
- _iterator5.e(err);
500
- } finally {
501
- _iterator5.f();
502
- }
503
- }
504
- }, {
505
- key: "collect",
506
- value: function collect(actesLegislatifs) {
507
- var _iterator6 = _createForOfIteratorHelper(this.collectActes(actesLegislatifs)),
508
- _step6;
509
- try {
510
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
511
- var acte = _step6.value;
512
- if ("actesLegislatifs" in acte) this.collect(acte.actesLegislatifs);
513
- }
514
- } catch (err) {
515
- _iterator6.e(err);
516
- } finally {
517
- _iterator6.f();
518
- }
519
- }
520
- }, {
521
- key: "validateLevel",
522
- value: function validateLevel(c2p, path) {
523
- (0, _assert["default"])(c2p._match_count_ > 0, "".concat(path, " is never used"));
524
- for (var _i3 = 0, _arr = Object.entries(c2p); _i3 < _arr.length; _i3++) {
525
- var _arr$_i = _slicedToArray(_arr[_i3], 2),
526
- key = _arr$_i[0],
527
- value = _arr$_i[1];
528
- if (value != null && value.constructor.name == "Code2Pattern") this.validateLevel(value, path.concat([key]));
529
- }
530
- }
531
- }, {
532
- key: "validate",
533
- value: function validate() {
534
- this.validateLevel(this.code2pattern, []);
535
- }
536
- }, {
537
- key: "printEntry",
538
- value: function printEntry(sections, entry, codes) {
539
- var title = "`".concat(entry, "`__");
540
- console.log(title);
541
- var underline = new Array(title.length + 1).join(sections[0]);
542
- console.log(underline);
543
- console.log(codes);
544
- }
545
- }, {
546
- key: "addAnchors",
547
- value: function addAnchors(key) {
548
- if (key in this.anchorsPrinted) return;
549
- if (this.lectureMapper.has(key)) this.lectureMapper.mergeCodes(this.anchors, key);else this.anchors.add(key);
550
- }
551
- }, {
552
- key: "printAnchors",
553
- value: function printAnchors(key) {
554
- if (key in this.anchorsPrinted) return;
555
- this.anchorsPrinted[key] = null;
556
- if (this.lectureMapper.has(key)) this.lectureMapper.printAnchors(key);else console.log(".. _".concat(key, ":"));
557
- }
558
- }, {
559
- key: "getCodes",
560
- value: function getCodes(key, shortCode) {
561
- if (key in this.anchorsPrinted) return "cf \\*".concat(shortCode, "\\*");
562
- if (this.lectureMapper.has(key)) return this.lectureMapper.getCodes(key);else return key;
563
- }
564
- }, {
565
- key: "renameCMP",
566
- value: function renameCMP(key, name) {
567
- if (key.startsWith("CMP")) {
568
- if (key.endsWith("-SN")) return "".concat(name, " (S\xE9nat)");else if (key.endsWith("-AN")) return "".concat(name, " (Assembl\xE9e Nationale)");else return name;
569
- } else return name;
570
- }
571
- }, {
572
- key: "printLevel",
573
- value: function printLevel(actes, sections, c2p, parent) {
574
- var keys = this.orderedCodes(Object.keys(actes), c2p, parent);
575
- var _iterator7 = _createForOfIteratorHelper(keys),
576
- _step7;
577
- try {
578
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
579
- var key = _step7.value;
580
- var value = actes[key];
581
- var name = Array.from(value.name).join(", ");
582
- name = this.renameCMP(key, name);
583
- var codes = this.getCodes(key, value.shortCode);
584
- this.addAnchors(key);
585
- this.printAnchors(key);
586
- console.log("");
587
- this.printEntry(sections, "".concat(name, " <").concat(value.shortCode, "TOC_>"), codes);
588
- console.log("");
589
- if (Object.keys(value.actes).length > 0) this.printLevel(value.actes, sections.substring(1), c2p[key], key);
590
- }
591
- } catch (err) {
592
- _iterator7.e(err);
593
- } finally {
594
- _iterator7.f();
595
- }
596
- }
597
- }, {
598
- key: "printCodes",
599
- value: function printCodes() {
600
- for (var _i4 = 0, _Object$keys = Object.keys(this.codes); _i4 < _Object$keys.length; _i4++) {
601
- var key = _Object$keys[_i4];
602
- console.log(".. _".concat(key, "TOC: http://"));
603
- }
604
- }
605
- }, {
606
- key: "printAnchorsIndex",
607
- value: function printAnchorsIndex() {
608
- for (var _i5 = 0, _Array$from3 = Array.from(this.anchors); _i5 < _Array$from3.length; _i5++) {
609
- var code = _Array$from3[_i5];
610
- console.log("* :ref:`".concat(code, " <").concat(code, ">`"));
611
- }
612
- }
613
- }, {
614
- key: "getAggregated",
615
- value: function getAggregated(procedure) {
616
- if (procedure == "Procédure législative") {
617
- var remapped = Object.keys(this.remappedProcedures).join(", ");
618
- return " (agr\xE9gation de ".concat(remapped, ")");
619
- } else return "";
620
- }
621
- }, {
622
- key: "print",
623
- value: function print() {
624
- this.anchorsPrinted = {};
625
- for (var _i6 = 0, _arr2 = Object.entries(this.procedures); _i6 < _arr2.length; _i6++) {
626
- var _arr2$_i = _slicedToArray(_arr2[_i6], 2),
627
- key = _arr2$_i[0],
628
- actes = _arr2$_i[1];
629
- var code = key.replace(/ +/g, "_");
630
- this.codes[code] = null;
631
- var aggregated = this.getAggregated(key);
632
- var title = "`".concat(key, " <").concat(code, "TOC_>`__").concat(aggregated);
633
- console.log(title);
634
- var underline = new Array(title.length + 1).join("=");
635
- console.log(underline);
636
- this.printLevel(actes, "-~.'", this.code2pattern[key], null);
637
- }
638
- this.printCodes();
639
- this.printAnchorsIndex();
640
- }
641
- }]);
642
- }();
643
- function main(argv) {
644
- var options = parseArgs(argv);
645
- if (options === null) return 1;
646
- var doc = new ActesDocumentation(!options["no-sanity-checks"], options.verbose);
647
- doc.collectFiles(options.data);
648
- doc.processFiles(options.data);
649
- doc.print();
650
- return 0;
651
- }
652
-
653
- /* istanbul ignore if */
654
- if (process.argv[1].endsWith("document_dossiers_legislatifs.ts")) process.exit(main(process.argv));
655
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tbWFuZExpbmVBcmdzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29tbWFuZExpbmVVc2FnZSIsIl9hc3NlcnQiLCJfZmlsZV9zeXN0ZW1zIiwiX0xlY3R1cmVNYXBwaW5nIiwiZSIsIl9fZXNNb2R1bGUiLCJfc2xpY2VkVG9BcnJheSIsInIiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwibCIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIm4iLCJpIiwidSIsImEiLCJmIiwibyIsImNhbGwiLCJuZXh0IiwiT2JqZWN0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImxlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJmcm9tIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJfdHlwZW9mIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiYmluZCIsIl9fcHJvdG9fXyIsIl9pbmhlcml0cyIsImNyZWF0ZSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJfc2V0UHJvdG90eXBlT2YiLCJfZGVmaW5lUHJvcGVydGllcyIsImVudW1lcmFibGUiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfbiIsIkYiLCJzIiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJ0ZXN0IiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdE9wdGlvbiIsIm11bHRpcGxlIiwidHlwZSIsInNlY3Rpb25zIiwiaGVhZGVyIiwiY29udGVudCIsIm9wdGlvbkxpc3QiLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwiY29uc29sZSIsImVycm9yIiwiaGVscCIsInVzYWdlIiwiY29tbWFuZExpbmVVc2FnZSIsIndhcm4iLCJlcVNldCIsImFzIiwiYnMiLCJzaXplIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJoYXMiLCJlcnIiLCJDb2RlMlBhdHRlcm4iLCJwYXR0ZXJuIiwiY2hpbGRyZW4iLCJfcGF0dGVybl8iLCJfbWF0Y2hfY291bnRfIiwiYXNzaWduIiwiQ29kZTJQYXR0ZXJuQ29tRm9uZCIsIl9Db2RlMlBhdHRlcm4yIiwiTGVjdHVyZU1hcHBpbmciLCJTZXQiLCJhZGQiLCJhY3RlIiwiY29kZXMiLCJjb2RlQWN0ZSIsImdldFR5cGUiLCJsaWJlbGxlQWN0ZSIsIm5vbUNhbm9uaXF1ZSIsImxpYmVsbGUiLCJyZW1hcCIsInR5cGVzIiwibWVyZ2VDb2RlcyIsIl9pIiwiX0FycmF5JGZyb20iLCJjIiwicHJpbnRBbmNob3JzIiwiX2kyIiwiX0FycmF5JGZyb20yIiwiY29kZSIsImxvZyIsImNvbmNhdCIsImdldENvZGVzIiwiam9pbiIsImlzTGVjdHVyZSIsIm1hdGNoIiwiY29kZXNfbGVjdHVyZV9yZWdleHAiLCJFcnJvciIsIm1hcCIsInJlcGxhY2UiLCJnZXRDb2RlQWN0ZSIsIlJlZ0V4cCIsImNvZGVzX2xlY3R1cmUiLCJMZWN0dXJlTWFwcGVyIiwibWFwcGluZyIsImNvbGxlY3QiLCJ1bmRlZmluZWQiLCJsZWN0dXJlcyIsIkFjdGVzRG9jdW1lbnRhdGlvbiIsInNhbml0eUNoZWNrcyIsInZlcmJvc2UiLCJhcmd1bWVudHMiLCJsZWN0dXJlIiwiQ01QIiwiQ0MiLCJQUk9NIiwiQU4yMSIsIkFOTFVOSSIsIlLDqXNvbHV0aW9uIiwiQU4yMCIsIkVVIiwiSW1tdW5pdMOpIiwicHJvY2VkdXJlcyIsImNvZGUycGF0dGVybiIsIndhbGtGaWxlcyIsImRhdGEiLCJhY3Rpb24iLCJfaXRlcmF0b3IyIiwiZ2V0RmlsZXMiLCJfc3RlcDIiLCJmaWxlIiwiZG9zc2llciIsImxvYWQiLCJwcm9jZWR1cmUiLCJyZW1hcFByb2NlZHVyZSIsInByb2NlZHVyZVBhcmxlbWVudGFpcmUiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwiY29sbGVjdEZpbGVzIiwiX3RoaXMiLCJfYWN0ZXMiLCJfYzJwIiwiX3BhcmVudCIsInByb2Nlc3NGaWxlcyIsIl90aGlzMiIsImFjdGVzIiwiYzJwIiwicGFyZW50IiwibWVyZ2UiLCJ2YWxpZGF0ZSIsInJlbWFwQWN0ZXMiLCJyZXN1bHRzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImxlY3R1cmVNYXBwZXIiLCJjb2xsZWN0QWN0ZXMiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwibWVyZ2VfcHJvY2VkdXJlcyIsIk1hcCIsInJlbWFwcGVkUHJvY2VkdXJlcyIsImdldCIsIm9yZGVyZWRDb2RlcyIsIm9yZGVyZWQiLCJ4IiwiYXNzZXJ0IiwidmFsaWRhdGVDaHJvbm9sb2d5Iiwic2VxdWVuY2UiLCJtZXJnZUFjdGUiLCJzaG9ydENvZGUiLCJ4c2lUeXBlIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJ2YWxpZGF0ZUxldmVsIiwicGF0aCIsIl9pMyIsIl9hcnIiLCJlbnRyaWVzIiwiX2FyciRfaSIsInByaW50RW50cnkiLCJlbnRyeSIsInRpdGxlIiwidW5kZXJsaW5lIiwiYWRkQW5jaG9ycyIsImFuY2hvcnNQcmludGVkIiwiYW5jaG9ycyIsInJlbmFtZUNNUCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInByaW50TGV2ZWwiLCJrZXlzIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsInN1YnN0cmluZyIsInByaW50Q29kZXMiLCJfaTQiLCJfT2JqZWN0JGtleXMiLCJwcmludEFuY2hvcnNJbmRleCIsIl9pNSIsIl9BcnJheSRmcm9tMyIsImdldEFnZ3JlZ2F0ZWQiLCJyZW1hcHBlZCIsInByaW50IiwiX2k2IiwiX2FycjIiLCJfYXJyMiRfaSIsImFnZ3JlZ2F0ZWQiLCJtYWluIiwiZG9jIiwicHJvY2VzcyIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9kb2N1bWVudF9kb3NzaWVyc19sZWdpc2xhdGlmcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgY29tbWFuZExpbmVVc2FnZSBmcm9tIFwiY29tbWFuZC1saW5lLXVzYWdlXCJcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBsb2FkLCBnZXRGaWxlcyB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwicGF0aG5hbWUgdG8gYSBKU09OIGZpbGUgb3IgYSBnbG9iIHBhdHRlcm4gdG8gSlNPTiBmaWxlc1wiLFxuICAgICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJkYXRhXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm5vLXNhbml0eS1jaGVja3NcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZXNjcmlwdGlvbjogXCJEbyBub3QgcGVyZm9ybSBzYW5pdHkgY2hlY2tzLlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVzY3JpcHRpb246IFwiaW5jcmVhc2UgdmVyYm9zaXR5XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImhlbHBcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlByaW50IHRoaXMgdXNhZ2UgZ3VpZGUuXCIsXG4gICAgfSxcbiAgXVxuICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiQWlkZSDDoCBsYSBkb2N1bWVudGF0aW9uIGR1IGRvc3NpZXIgbMOpZ2lzbGF0aWZcIixcbiAgICAgIGNvbnRlbnQ6IFwiR8OpbsOocmUgdW5lIGhpw6lyYXJjaGllIGRlcyBhY3RlcyBsw6lnaXNsYXRpZnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlYWRlcjogXCJPcHRpb25zXCIsXG4gICAgICBvcHRpb25MaXN0OiBvcHRpb25zRGVmaW5pdGlvbnMsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIGlmICghKFwiaGVscFwiIGluIG9wdGlvbnMpICYmICEoXCJkYXRhXCIgaW4gb3B0aW9ucykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiLS1kYXRhIGlzIG1hbmRhdG9yeVwiKVxuICAgIG9wdGlvbnMuaGVscCA9IHRydWVcbiAgfVxuICBpZiAoXCJoZWxwXCIgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IHVzYWdlID0gY29tbWFuZExpbmVVc2FnZShzZWN0aW9ucylcbiAgICBjb25zb2xlLndhcm4odXNhZ2UpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiBlcVNldChhczogU2V0PHN0cmluZz4sIGJzOiBTZXQ8c3RyaW5nPik6IGJvb2xlYW4ge1xuICBpZiAoYXMuc2l6ZSAhPT0gYnMuc2l6ZSkgcmV0dXJuIGZhbHNlXG4gIGZvciAodmFyIGEgb2YgYXMpIGlmICghYnMuaGFzKGEpKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIHRydWVcbn1cblxuY2xhc3MgQ29kZTJQYXR0ZXJuIHtcbiAgX3BhdHRlcm5fOiBhbnlcbiAgX21hdGNoX2NvdW50XzogbnVtYmVyXG4gIGNvbnN0cnVjdG9yKHBhdHRlcm46IGFueSwgY2hpbGRyZW46IGFueSkge1xuICAgIHRoaXMuX3BhdHRlcm5fID0gcGF0dGVyblxuICAgIHRoaXMuX21hdGNoX2NvdW50XyA9IDBcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNoaWxkcmVuKVxuICB9XG59XG5cbmNsYXNzIENvZGUyUGF0dGVybkNvbUZvbmQgZXh0ZW5kcyBDb2RlMlBhdHRlcm4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIl4vU0FJU0lFLygvTk9NSU4vKSooL1JFVU5JT04vKSooL1JBUFBPUlQvKSokXCIsIHt9KVxuICB9XG59XG5cbmNsYXNzIExlY3R1cmVNYXBwaW5nIHtcbiAgbGliZWxsZTogYW55ID0ge31cbiAgY29kZXM6IGFueSA9IG5ldyBTZXQoKVxuXG4gIHN0YXRpYyBjb2Rlc19sZWN0dXJlOiBzdHJpbmdbXSA9IFtcbiAgICBcIkFOMVwiLFxuICAgIFwiU04xXCIsXG4gICAgXCJBTk5MRUNcIixcbiAgICBcIlNOTkxFQ1wiLFxuICAgIFwiQU5MREVGXCIsXG4gICAgXCJBTjJcIixcbiAgICBcIlNOMlwiLFxuICAgIFwiU04zXCIsXG4gIF1cbiAgc3RhdGljIGNvZGVzX2xlY3R1cmVfcmVnZXhwOiBhbnkgPSBuZXcgUmVnRXhwKFxuICAgIFwiXig/OlwiICsgTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZS5qb2luKFwifFwiKSArIFwiKSgtLiopPyRcIixcbiAgKVxuXG4gIHN0YXRpYyBpc0xlY3R1cmUoYWN0ZTogYW55KSB7XG4gICAgcmV0dXJuIGFjdGUuY29kZUFjdGUubWF0Y2goTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZV9yZWdleHApXG4gIH1cblxuICBzdGF0aWMgZ2V0VHlwZShhY3RlOiBhbnkpIHtcbiAgICBpZiAoYWN0ZS5jb2RlQWN0ZS5tYXRjaCgvXkFOLykpIHJldHVybiBcIkFOXCJcbiAgICBlbHNlIGlmIChhY3RlLmNvZGVBY3RlLm1hdGNoKC9eU04vKSkgcmV0dXJuIFwiU05cIlxuICAgIGVsc2UgdGhyb3cgRXJyb3IoYCR7YWN0ZS5jb2RlQWN0ZX0gZG9lcyBub3Qgc3RhcnQgd2l0aCBBTiBvciBTTmApXG4gIH1cblxuICBzdGF0aWMgbWFwKGNvZGVBY3RlOiBhbnkpIHtcbiAgICByZXR1cm4gY29kZUFjdGUucmVwbGFjZShMZWN0dXJlTWFwcGluZy5jb2Rlc19sZWN0dXJlX3JlZ2V4cCwgYGxlY3R1cmUkMWApXG4gIH1cblxuICBzdGF0aWMgZ2V0Q29kZUFjdGUoYWN0ZTogYW55KSB7XG4gICAgaWYgKCFMZWN0dXJlTWFwcGluZy5pc0xlY3R1cmUoYWN0ZSkpIHJldHVyblxuXG4gICAgcmV0dXJuIExlY3R1cmVNYXBwaW5nLm1hcChhY3RlLmNvZGVBY3RlKVxuICB9XG5cbiAgYWRkKGFjdGU6IGFueSkge1xuICAgIHRoaXMuY29kZXMuYWRkKGFjdGUuY29kZUFjdGUpXG5cbiAgICBjb25zdCB0eXBlID0gTGVjdHVyZU1hcHBpbmcuZ2V0VHlwZShhY3RlKVxuXG4gICAgaWYgKCEoYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWUgaW4gdGhpcy5saWJlbGxlKSlcbiAgICAgIHRoaXMubGliZWxsZVthY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZV0gPSBuZXcgU2V0KClcbiAgICB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdLmFkZCh0eXBlKVxuICB9XG5cbiAgcmVtYXAoYWN0ZTogYW55LCBjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgYWN0ZS5jb2RlQWN0ZSA9IGNvZGVBY3RlXG5cbiAgICBsZXQgdHlwZXMgPSB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdXG4gICAgaWYgKCEodHlwZXMuaGFzKFwiU05cIikgJiYgdHlwZXMuaGFzKFwiQU5cIikpKSB7XG4gICAgICBpZiAodHlwZXMuaGFzKFwiU05cIikpIGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlICs9IFwiIChTw6luYXQpXCJcbiAgICAgIGVsc2UgaWYgKHR5cGVzLmhhcyhcIkFOXCIpKVxuICAgICAgICBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZSArPSBcIiAoQXNzZW1ibMOpZSBOYXRpb25hbGUpXCJcbiAgICB9XG4gIH1cblxuICBtZXJnZUNvZGVzKGNvZGVzOiBhbnkpIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgQXJyYXkuZnJvbSh0aGlzLmNvZGVzKSkgY29kZXMuYWRkKGMpXG4gIH1cblxuICBwcmludEFuY2hvcnMoKSB7XG4gICAgZm9yIChjb25zdCBjb2RlIG9mIEFycmF5LmZyb20odGhpcy5jb2RlcykpIGNvbnNvbGUubG9nKGAuLiBfJHtjb2RlfTpgKVxuICB9XG5cbiAgZ2V0Q29kZXMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jb2Rlcykuam9pbihcIixcIilcbiAgfVxufVxuXG5jbGFzcyBMZWN0dXJlTWFwcGVyIHtcbiAgbWFwcGluZzogYW55ID0ge31cblxuICBoYXMoY29kZUFjdGU6IHN0cmluZykge1xuICAgIHJldHVybiBjb2RlQWN0ZSBpbiB0aGlzLm1hcHBpbmdcbiAgfVxuXG4gIGNvbGxlY3QoYWN0ZTogYW55KSB7XG4gICAgY29uc3QgY29kZUFjdGUgPSBMZWN0dXJlTWFwcGluZy5nZXRDb2RlQWN0ZShhY3RlKVxuICAgIGlmIChjb2RlQWN0ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBsZWN0dXJlcyA9IHRoaXMubWFwcGluZ1xuICAgICAgaWYgKCEoY29kZUFjdGUgaW4gbGVjdHVyZXMpKSBsZWN0dXJlc1tjb2RlQWN0ZV0gPSBuZXcgTGVjdHVyZU1hcHBpbmcoKVxuICAgICAgbGVjdHVyZXNbY29kZUFjdGVdLmFkZChhY3RlKVxuICAgIH1cbiAgfVxuXG4gIHJlbWFwKGFjdGU6IGFueSkge1xuICAgIGNvbnN0IGNvZGVBY3RlID0gTGVjdHVyZU1hcHBpbmcuZ2V0Q29kZUFjdGUoYWN0ZSlcbiAgICBpZiAoY29kZUFjdGUgIT0gdW5kZWZpbmVkKSB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLnJlbWFwKGFjdGUsIGNvZGVBY3RlKVxuICB9XG5cbiAgbWVyZ2VDb2Rlcyhjb2RlczogYW55LCBjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5tZXJnZUNvZGVzKGNvZGVzKVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKGNvZGVBY3RlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLnByaW50QW5jaG9ycygpXG4gIH1cblxuICBnZXRDb2Rlcyhjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwcGluZ1tjb2RlQWN0ZV0uZ2V0Q29kZXMoKVxuICB9XG59XG5cbmNsYXNzIEFjdGVzRG9jdW1lbnRhdGlvbiB7XG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgc2FuaXR5Q2hlY2tzOiBib29sZWFuXG4gIGxlY3R1cmVNYXBwZXI6IGFueSA9IG5ldyBMZWN0dXJlTWFwcGVyKClcbiAgcmVtYXBwZWRQcm9jZWR1cmVzOiBhbnkgPSB7fVxuICBhbmNob3JzUHJpbnRlZDogYW55ID0ge31cbiAgYW5jaG9yczogYW55ID0gbmV3IFNldCgpXG4gIGNvZGVzOiBhbnkgPSB7fVxuICBwcm9jZWR1cmVzOiBhbnkgPSBudWxsXG4gIGNvZGUycGF0dGVybjogYW55ID0gbmV3IENvZGUyUGF0dGVybihudWxsLCB7XG4gICAgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeKCgoL2xlY3R1cmUvKSspfCgoL2xlY3R1cmUvKSsvQ01QLygvbGVjdHVyZS8pKikpKC9DQy8pPygvUFJPTS8pPygvQU4tQVBQTEkvKT8kXCIsXG4gICAgICB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgXCJeKC9ERVBPVC8pPygvRFBUTEVUVFJFQ1QvKT8oL0VUSS8pPygvQVZDRS8pPygvREdWVC8pPygvQUNJTi8pPygvTU9USU9OLykqKC9QUk9DQUNDLyk/KC9DT00vKT8oKC9ERUJBVFMvKSspPygvUlRSSU5JLyk/JFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwibGVjdHVyZS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvfC9BVklTLykrJFwiLCB7XG4gICAgICAgICAgICAgIFwibGVjdHVyZS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuQ29tRm9uZCgpLFxuICAgICAgICAgICAgICBcImxlY3R1cmUtQ09NLUFWSVNcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXCJsZWN0dXJlLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgICAgICBcIl4oL1NFQU5DRS8pKigoL01PVElPTi8pPygvTU9USU9OLVZPVEUvKSspPygvREVDLyk/JFwiLFxuICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICAgQ01QOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvREVQT1QvfC9TQUlTSUUvKXsxLDJ9KC9DT00vKT8oL0RFQy8pPygvREVCQVRTLUFOLy9ERUJBVFMtU04vKT9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIkNNUC1DT01cIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgICAgXCJeKC9OT01JTi8pPygvUkFQUE9SVC1BTi98L1JBUFBPUlQtU04vKXsyfSRcIixcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgXCJDTVAtREVCQVRTLUFOXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL0RFQy8pPyRcIiwge30pLFxuICAgICAgICAgICAgXCJDTVAtREVCQVRTLVNOXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL0RFQy8pPyRcIiwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIENDOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0FJU0lFLykrKC9DT05DTFVTSU9OLyk/JFwiLCB7fSksXG4gICAgICAgIFBST006IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9QVUIvKT8kXCIsIHt9KSxcbiAgICAgICAgXCJBTi1BUFBMSVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUkFQUE9SVC8pPyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiQWxsb2N1dGlvbiBkdSBQcsOpc2lkZW50IGRlIGwnQXNzZW1ibMOpZSBuYXRpb25hbGVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXi9BTjIxLyRcIixcbiAgICAgIHtcbiAgICAgICAgQU4yMTogbmV3IENvZGUyUGF0dGVybihcIl4oL0FQQU4vKT8kXCIsIHt9KSxcbiAgICAgIH0sXG4gICAgKSxcbiAgICBcIlLDqXNvbHV0aW9uIEFydGljbGUgMzQtMVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLyk/JFwiLCB7XG4gICAgICBBTkxVTkk6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvREVCQVRTLyk/KC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSsoL0RFQy8pPyRcIiwge30pLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgUsOpc29sdXRpb246IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BTkxVTkkvKT8oL0NDLyk/JFwiLCB7XG4gICAgICBBTkxVTkk6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvQ09NLyk/KC9ERUJBVFMvfC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9DQUUvKT8oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcIkFOTFVOSS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuQ29tRm9uZCgpLFxuICAgICAgICAgIFwiQU5MVU5JLUNPTS1DQUVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pPygvUkVVTklPTi8pPygvUkFQUE9SVC8pPygvREVDLyk/JFwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgICAgQ0M6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TQUlTSUUvKT8oL0NPTkNMVVNJT04vKT8kXCIsIHt9KSxcbiAgICB9KSxcbiAgICBcIlJhcHBvcnQgZCdpbmZvcm1hdGlvbiBzYW5zIG1pc3Npb25cIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXigvQU4yMC8pPygvRVUvKT8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9SQVBQT1JULyk/JFwiLCB7fSksXG4gICAgICAgIEVVOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVDLykrJFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJNaXNzaW9uIGQnaW5mb3JtYXRpb25cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOMjAvKT8kXCIsIHtcbiAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9NSVNJTkYvKT8kXCIsIHtcbiAgICAgICAgXCJBTjIwLU1JU0lORlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvQ1JFQS8pPygvTk9NSU4vKT8oL1JBUFBPUlQvKT8kXCIsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgICBcIkNvbW1pc3Npb24gZCdlbnF1w6p0ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU4yMC8pPyRcIiwge1xuICAgICAgQU4yMDogbmV3IENvZGUyUGF0dGVybihcIl4oL0NPTUVOUS8pPyRcIiwge1xuICAgICAgICBcIkFOMjAtQ09NRU5RXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgXCJeKC9DUkVBLyk/KC9OT01JTi8pPygvUkFQUE9SVC8pPyRcIixcbiAgICAgICAgICB7fSxcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFwiRW5nYWdlbWVudCBkZSBsYSByZXNwb25zYWJpbGl0w6kgZ291dmVybmVtZW50YWxlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vQU4yMS8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjE6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKCgoL01PVElPTi8pKi9ERUJBVFMvKXwoL0RHVlQvKSl7MSwyfSRcIiwge1xuICAgICAgICAgIFwiQU4yMS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pKigvTU9USU9OLVZPVEUvKSokXCIsIHt9KSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJNb3Rpb24gcsOpZsOpcmVuZGFpcmVcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL2xlY3R1cmUvKSskXCIsIHtcbiAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvQ09NLyk/KC9ERUJBVFMvKT8kXCIsIHtcbiAgICAgICAgXCJsZWN0dXJlLUNPTVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvRk9ORC8pPyRcIiwge1xuICAgICAgICAgIFwibGVjdHVyZS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgICAgXCJeKC9TQUlTSUUvKT8oL05PTUlOLykqKC9SQVBQT1JULykqJFwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIFwibGVjdHVyZS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFQy8pPyRcIiwge30pLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgSW1tdW5pdMOpOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLykrJFwiLCB7XG4gICAgICBBTkxVTkk6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvQ09NLyk/KC9ERUJBVFMvKT8oL1JUUklOSS8pPyRcIiwge1xuICAgICAgICBcIkFOTFVOSS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcIkFOTFVOSS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgICAgXCJeKC9TQUlTSUUvKT8oL05PTUlOLykqKC9SQVBQT1JULykqJFwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLyk/KC9ERUMvKSRcIiwge30pLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgXCJSZXNwb25zYWJpbGl0w6kgcMOpbmFsZSBkdSBwcsOpc2lkZW50IGRlIGxhIHLDqXB1YmxpcXVlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vbGVjdHVyZS8kXCIsXG4gICAgICB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvUkVDQlVSRUFVLyk/JFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJQcm9wb3NpdGlvbiBkZSBsb2kgcHLDqXNlbnTDqWUgZW4gYXBwbGljYXRpb24gZGUgbCdhcnRpY2xlIDExIGRlIGxhIENvbnN0aXR1dGlvblwiOlxuICAgICAgbmV3IENvZGUyUGF0dGVybihcIl4vbGVjdHVyZS8kXCIsIHtcbiAgICAgICAgbGVjdHVyZTogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFUE9ULyk/JFwiLCB7fSksXG4gICAgICB9KSxcbiAgfSlcblxuICBjb25zdHJ1Y3RvcihzYW5pdHlDaGVja3M6IGJvb2xlYW4sIHZlcmJvc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2VcbiAgICB0aGlzLnNhbml0eUNoZWNrcyA9IHNhbml0eUNoZWNrc1xuICAgIHRoaXMucHJvY2VkdXJlcyA9IHt9XG4gICAgdGhpcy5jb2RlMnBhdHRlcm4uX21hdGNoX2NvdW50XysrXG4gIH1cblxuICB3YWxrRmlsZXMoZGF0YTogc3RyaW5nW10sIGFjdGlvbjogYW55KSB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGdldEZpbGVzKGRhdGEpKSB7XG4gICAgICBjb25zdCBkb3NzaWVyID0gbG9hZChmaWxlKVxuICAgICAgbGV0IHByb2NlZHVyZTogc3RyaW5nID0gdGhpcy5yZW1hcFByb2NlZHVyZShcbiAgICAgICAgZG9zc2llci5wcm9jZWR1cmVQYXJsZW1lbnRhaXJlLmxpYmVsbGUsXG4gICAgICApXG4gICAgICBpZiAoIShwcm9jZWR1cmUgaW4gdGhpcy5wcm9jZWR1cmVzKSkgdGhpcy5wcm9jZWR1cmVzW3Byb2NlZHVyZV0gPSB7fVxuICAgICAgYWN0aW9uKFxuICAgICAgICB0aGlzLnByb2NlZHVyZXNbcHJvY2VkdXJlXSxcbiAgICAgICAgZG9zc2llci5hY3Rlc0xlZ2lzbGF0aWZzLFxuICAgICAgICB0aGlzLmNvZGUycGF0dGVybltwcm9jZWR1cmVdLFxuICAgICAgICBudWxsLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGNvbGxlY3RGaWxlcyhkYXRhOiBzdHJpbmdbXSkge1xuICAgIHRoaXMud2Fsa0ZpbGVzKFxuICAgICAgZGF0YSxcbiAgICAgIChfYWN0ZXM6IGFueSwgYWN0ZXNMZWdpc2xhdGlmczogYW55LCBfYzJwOiBhbnksIF9wYXJlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmNvbGxlY3QoYWN0ZXNMZWdpc2xhdGlmcylcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgcHJvY2Vzc0ZpbGVzKGRhdGE6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy53YWxrRmlsZXMoXG4gICAgICBkYXRhLFxuICAgICAgKGFjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubWVyZ2UoYWN0ZXMsIGFjdGVzTGVnaXNsYXRpZnMsIGMycCwgcGFyZW50KVxuICAgICAgfSxcbiAgICApXG4gICAgaWYgKHRoaXMuc2FuaXR5Q2hlY2tzKSB0aGlzLnZhbGlkYXRlKClcbiAgfVxuXG4gIHJlbWFwQWN0ZXMoYWN0ZXM6IGFueSk6IGFueSB7XG4gICAgbGV0IHJlc3VsdHMgPSBbXVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBhY3Rlcykge1xuICAgICAgdGhpcy5sZWN0dXJlTWFwcGVyLnJlbWFwKGFjdGUpXG5cbiAgICAgIC8vIENDLVNBSVNJRS0gc3VmZml4IGRvZXMgbm90IGltcGx5IGEgaGllcmFyY2h5XG4gICAgICBhY3RlLmNvZGVBY3RlID0gYWN0ZS5jb2RlQWN0ZS5yZXBsYWNlKC9eQ0MtU0FJU0lFLiovLCBcIkNDLVNBSVNJRVwiKVxuXG4gICAgICByZXN1bHRzLnB1c2goYWN0ZSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIGNvbGxlY3RBY3RlcyhhY3RlczogYW55KTogYW55IHtcbiAgICBsZXQgcmVzdWx0cyA9IFtdXG4gICAgZm9yIChjb25zdCBhY3RlIG9mIGFjdGVzKSB7XG4gICAgICB0aGlzLmxlY3R1cmVNYXBwZXIuY29sbGVjdChhY3RlKVxuXG4gICAgICByZXN1bHRzLnB1c2goYWN0ZSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIHJlbWFwUHJvY2VkdXJlKHByb2NlZHVyZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXJnZV9wcm9jZWR1cmVzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcChbXG4gICAgICBbXCJQcm9wb3NpdGlvbiBkZSBsb2kgb3JkaW5haXJlXCIsIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIl0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIG9yZGluYWlyZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1xuICAgICAgICBcIlByb2pldCBkZSByYXRpZmljYXRpb24gZGVzIHRyYWl0w6lzIGV0IGNvbnZlbnRpb25zXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgICBbXCJQcm9qZXQgb3UgcHJvcG9zaXRpb24gZGUgbG9pIG9yZ2FuaXF1ZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1xuICAgICAgICBcIlByb2pldCBvdSBwcm9wb3NpdGlvbiBkZSBsb2kgY29uc3RpdHV0aW9ubmVsbGVcIixcbiAgICAgICAgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiLFxuICAgICAgXSxcbiAgICAgIFtcIlByb2pldCBkZSBsb2kgZGUgZmluYW5jZXMgZGUgbCdhbm7DqWVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcIlByb2pldCBkZSBsb2kgZGUgZmluYW5jZXMgcmVjdGlmaWNhdGl2ZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1xuICAgICAgICBcIlByb2pldCBkZSBsb2kgZGUgZmluYW5jZW1lbnQgZGUgbGEgc8OpY3VyaXTDqSBzb2NpYWxlXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgXSlcbiAgICBpZiAobWVyZ2VfcHJvY2VkdXJlcy5oYXMocHJvY2VkdXJlKSkge1xuICAgICAgdGhpcy5yZW1hcHBlZFByb2NlZHVyZXNbcHJvY2VkdXJlXSA9IG51bGxcbiAgICAgIHJldHVybiBtZXJnZV9wcm9jZWR1cmVzLmdldChwcm9jZWR1cmUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcm9jZWR1cmVcbiAgICB9XG4gIH1cblxuICAvLyByZXR1cm4gdGhlIGNvZGVBY3RlcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgcmVnZXhwXG4gIG9yZGVyZWRDb2Rlcyhjb2RlczogYW55LCBjMnA6IGFueSwgcGFyZW50OiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gICAgY29kZXMgPSBuZXcgU2V0KGNvZGVzKVxuICAgIGlmICghdGhpcy5zYW5pdHlDaGVja3MpIHJldHVybiBjb2Rlc1xuICAgIGxldCBvcmRlcmVkID0gYzJwW1wiX3BhdHRlcm5fXCJdLm1hdGNoKG5ldyBSZWdFeHAoXCIvLio/L1wiLCBcImdcIikpXG4gICAgb3JkZXJlZCA9IG9yZGVyZWQubWFwKCh4OiBzdHJpbmcpID0+IHgucmVwbGFjZShuZXcgUmVnRXhwKFwiLyguKikvXCIpLCBcIiQxXCIpKVxuICAgIGlmIChwYXJlbnQgIT0gbnVsbCkgb3JkZXJlZCA9IG9yZGVyZWQubWFwKCh4OiBzdHJpbmcpID0+IGAke3BhcmVudH0tJHt4fWApXG4gICAgb3JkZXJlZCA9IG5ldyBTZXQob3JkZXJlZClcbiAgICBhc3NlcnQoZXFTZXQob3JkZXJlZCwgY29kZXMpLCBgJHtbLi4ub3JkZXJlZF19ICE9ICR7Wy4uLmNvZGVzXX1gKVxuICAgIHJldHVybiBvcmRlcmVkXG4gIH1cblxuICB2YWxpZGF0ZUNocm9ub2xvZ3koYWN0ZXNMZWdpc2xhdGlmczogYW55LCBjMnA6IGFueSwgcGFyZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gYzJwW1wiX3BhdHRlcm5fXCJdXG4gICAgY29uc3Qgc2VxdWVuY2UgPSBhY3Rlc0xlZ2lzbGF0aWZzXG4gICAgICAubWFwKCh4OiBhbnkpID0+IGAvJHt4LmNvZGVBY3RlfS9gLnJlcGxhY2UoYC8ke3BhcmVudH0tYCwgXCIvXCIpKVxuICAgICAgLmpvaW4oXCJcIilcbiAgICBhc3NlcnQoXG4gICAgICBzZXF1ZW5jZS5tYXRjaChuZXcgUmVnRXhwKHBhdHRlcm4pKSxcbiAgICAgIGAke3BhdHRlcm59IGRvZXMgbm90IG1hdGNoICR7c2VxdWVuY2V9YCxcbiAgICApXG4gICAgYzJwLl9tYXRjaF9jb3VudF8rK1xuICB9XG5cbiAgbWVyZ2VBY3RlKGFjdGVzOiBhbnksIGFjdGU6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGNvZGU6IHN0cmluZyA9IGFjdGUuY29kZUFjdGVcbiAgICBsZXQgc2hvcnRDb2RlOiBzdHJpbmcgPSBjb2RlLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cGFyZW50fS1gKSwgXCJcIilcbiAgICBzaG9ydENvZGUgPSBzaG9ydENvZGUucmVwbGFjZSgvLShBTnxTTikkLywgXCJcIilcbiAgICB0aGlzLmNvZGVzW3Nob3J0Q29kZV0gPSBudWxsXG4gICAgbGV0IG5hbWU6IHN0cmluZyA9IGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXG4gICAgaWYgKCEoY29kZSBpbiBhY3RlcykpIHtcbiAgICAgIGFjdGVzW2NvZGVdID0ge1xuICAgICAgICB0eXBlOiBhY3RlLnhzaVR5cGUsXG4gICAgICAgIG5hbWU6IG5ldyBTZXQoW25hbWVdKSxcbiAgICAgICAgc2hvcnRDb2RlOiBzaG9ydENvZGUsXG4gICAgICAgIGFjdGVzOiB7fSxcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWN0ZXNbY29kZV0ubmFtZS5hZGQobmFtZSlcbiAgICB9XG4gICAgaWYgKFwiYWN0ZXNMZWdpc2xhdGlmc1wiIGluIGFjdGUpXG4gICAgICB0aGlzLm1lcmdlKGFjdGVzW2NvZGVdLmFjdGVzLCBhY3RlLmFjdGVzTGVnaXNsYXRpZnMsIGMycFtjb2RlXSwgY29kZSlcbiAgfVxuXG4gIG1lcmdlKGFjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgbCA9IHRoaXMucmVtYXBBY3RlcyhhY3Rlc0xlZ2lzbGF0aWZzKVxuICAgIHRoaXMudmFsaWRhdGVDaHJvbm9sb2d5KGwsIGMycCwgcGFyZW50KVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBsKSB0aGlzLm1lcmdlQWN0ZShhY3RlcywgYWN0ZSwgYzJwLCBwYXJlbnQpXG4gIH1cblxuICBjb2xsZWN0KGFjdGVzTGVnaXNsYXRpZnM6IGFueSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYWN0ZSBvZiB0aGlzLmNvbGxlY3RBY3RlcyhhY3Rlc0xlZ2lzbGF0aWZzKSlcbiAgICAgIGlmIChcImFjdGVzTGVnaXNsYXRpZnNcIiBpbiBhY3RlKSB0aGlzLmNvbGxlY3QoYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzKVxuICB9XG5cbiAgdmFsaWRhdGVMZXZlbChjMnA6IGFueSwgcGF0aDogYW55KSB7XG4gICAgYXNzZXJ0KGMycC5fbWF0Y2hfY291bnRfID4gMCwgYCR7cGF0aH0gaXMgbmV2ZXIgdXNlZGApXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYzJwKSBhcyBbc3RyaW5nLCBhbnldW10pIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT0gXCJDb2RlMlBhdHRlcm5cIilcbiAgICAgICAgdGhpcy52YWxpZGF0ZUxldmVsKHZhbHVlLCBwYXRoLmNvbmNhdChba2V5XSkpXG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdGhpcy52YWxpZGF0ZUxldmVsKHRoaXMuY29kZTJwYXR0ZXJuLCBbXSlcbiAgfVxuXG4gIHByaW50RW50cnkoc2VjdGlvbnM6IHN0cmluZywgZW50cnk6IHN0cmluZywgY29kZXM6IHN0cmluZykge1xuICAgIGNvbnN0IHRpdGxlID0gYFxcYCR7ZW50cnl9XFxgX19gXG4gICAgY29uc29sZS5sb2codGl0bGUpXG4gICAgY29uc3QgdW5kZXJsaW5lID0gbmV3IEFycmF5KHRpdGxlLmxlbmd0aCArIDEpLmpvaW4oc2VjdGlvbnNbMF0pXG4gICAgY29uc29sZS5sb2codW5kZXJsaW5lKVxuICAgIGNvbnNvbGUubG9nKGNvZGVzKVxuICB9XG5cbiAgYWRkQW5jaG9ycyhrZXk6IHN0cmluZykge1xuICAgIGlmIChrZXkgaW4gdGhpcy5hbmNob3JzUHJpbnRlZCkgcmV0dXJuXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSlcbiAgICAgIHRoaXMubGVjdHVyZU1hcHBlci5tZXJnZUNvZGVzKHRoaXMuYW5jaG9ycywga2V5KVxuICAgIGVsc2UgdGhpcy5hbmNob3JzLmFkZChrZXkpXG4gIH1cblxuICBwcmludEFuY2hvcnMoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVyblxuICAgIHRoaXMuYW5jaG9yc1ByaW50ZWRba2V5XSA9IG51bGxcbiAgICBpZiAodGhpcy5sZWN0dXJlTWFwcGVyLmhhcyhrZXkpKSB0aGlzLmxlY3R1cmVNYXBwZXIucHJpbnRBbmNob3JzKGtleSlcbiAgICBlbHNlIGNvbnNvbGUubG9nKGAuLiBfJHtrZXl9OmApXG4gIH1cblxuICBnZXRDb2RlcyhrZXk6IHN0cmluZywgc2hvcnRDb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVybiBgY2YgXFxcXCoke3Nob3J0Q29kZX1cXFxcKmBcbiAgICBpZiAodGhpcy5sZWN0dXJlTWFwcGVyLmhhcyhrZXkpKSByZXR1cm4gdGhpcy5sZWN0dXJlTWFwcGVyLmdldENvZGVzKGtleSlcbiAgICBlbHNlIHJldHVybiBrZXlcbiAgfVxuXG4gIHJlbmFtZUNNUChrZXk6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKFwiQ01QXCIpKSB7XG4gICAgICBpZiAoa2V5LmVuZHNXaXRoKFwiLVNOXCIpKSByZXR1cm4gYCR7bmFtZX0gKFPDqW5hdClgXG4gICAgICBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCItQU5cIikpIHJldHVybiBgJHtuYW1lfSAoQXNzZW1ibMOpZSBOYXRpb25hbGUpYFxuICAgICAgZWxzZSByZXR1cm4gbmFtZVxuICAgIH0gZWxzZSByZXR1cm4gbmFtZVxuICB9XG5cbiAgcHJpbnRMZXZlbChhY3RlczogYW55LCBzZWN0aW9uczogc3RyaW5nLCBjMnA6IGFueSwgcGFyZW50OiBhbnkpIHtcbiAgICBjb25zdCBrZXlzOiBTZXQ8c3RyaW5nPiA9IHRoaXMub3JkZXJlZENvZGVzKE9iamVjdC5rZXlzKGFjdGVzKSwgYzJwLCBwYXJlbnQpXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3QgdmFsdWUgPSBhY3Rlc1trZXldXG4gICAgICBsZXQgbmFtZSA9IEFycmF5LmZyb20odmFsdWUubmFtZSkuam9pbihcIiwgXCIpXG4gICAgICBuYW1lID0gdGhpcy5yZW5hbWVDTVAoa2V5LCBuYW1lKVxuICAgICAgY29uc3QgY29kZXMgPSB0aGlzLmdldENvZGVzKGtleSwgdmFsdWUuc2hvcnRDb2RlKVxuICAgICAgdGhpcy5hZGRBbmNob3JzKGtleSlcbiAgICAgIHRoaXMucHJpbnRBbmNob3JzKGtleSlcbiAgICAgIGNvbnNvbGUubG9nKFwiXCIpXG4gICAgICB0aGlzLnByaW50RW50cnkoc2VjdGlvbnMsIGAke25hbWV9IDwke3ZhbHVlLnNob3J0Q29kZX1UT0NfPmAsIGNvZGVzKVxuICAgICAgY29uc29sZS5sb2coXCJcIilcbiAgICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZS5hY3RlcykubGVuZ3RoID4gMClcbiAgICAgICAgdGhpcy5wcmludExldmVsKHZhbHVlLmFjdGVzLCBzZWN0aW9ucy5zdWJzdHJpbmcoMSksIGMycFtrZXldLCBrZXkpXG4gICAgfVxuICB9XG5cbiAgcHJpbnRDb2RlcygpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmNvZGVzKSlcbiAgICAgIGNvbnNvbGUubG9nKGAuLiBfJHtrZXl9VE9DOiBodHRwOi8vYClcbiAgfVxuXG4gIHByaW50QW5jaG9yc0luZGV4KCkge1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBBcnJheS5mcm9tKHRoaXMuYW5jaG9ycykpXG4gICAgICBjb25zb2xlLmxvZyhgKiA6cmVmOlxcYCR7Y29kZX0gPCR7Y29kZX0+XFxgYClcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZWQocHJvY2VkdXJlOiBzdHJpbmcpIHtcbiAgICBpZiAocHJvY2VkdXJlID09IFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIikge1xuICAgICAgY29uc3QgcmVtYXBwZWQgPSBPYmplY3Qua2V5cyh0aGlzLnJlbWFwcGVkUHJvY2VkdXJlcykuam9pbihcIiwgXCIpXG4gICAgICByZXR1cm4gYCAoYWdyw6lnYXRpb24gZGUgJHtyZW1hcHBlZH0pYFxuICAgIH0gZWxzZSByZXR1cm4gXCJcIlxuICB9XG5cbiAgcHJpbnQoKTogdm9pZCB7XG4gICAgdGhpcy5hbmNob3JzUHJpbnRlZCA9IHt9XG4gICAgZm9yIChjb25zdCBba2V5LCBhY3Rlc10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5wcm9jZWR1cmVzKSBhcyBbXG4gICAgICBzdHJpbmcsXG4gICAgICBhbnksXG4gICAgXVtdKSB7XG4gICAgICBjb25zdCBjb2RlID0ga2V5LnJlcGxhY2UoLyArL2csIFwiX1wiKVxuICAgICAgdGhpcy5jb2Rlc1tjb2RlXSA9IG51bGxcbiAgICAgIGNvbnN0IGFnZ3JlZ2F0ZWQgPSB0aGlzLmdldEFnZ3JlZ2F0ZWQoa2V5KVxuICAgICAgY29uc3QgdGl0bGUgPSBgXFxgJHtrZXl9IDwke2NvZGV9VE9DXz5cXGBfXyR7YWdncmVnYXRlZH1gXG4gICAgICBjb25zb2xlLmxvZyh0aXRsZSlcbiAgICAgIGNvbnN0IHVuZGVybGluZSA9IG5ldyBBcnJheSh0aXRsZS5sZW5ndGggKyAxKS5qb2luKFwiPVwiKVxuICAgICAgY29uc29sZS5sb2codW5kZXJsaW5lKVxuICAgICAgdGhpcy5wcmludExldmVsKGFjdGVzLCBcIi1+LidcIiwgdGhpcy5jb2RlMnBhdHRlcm5ba2V5XSwgbnVsbClcbiAgICB9XG4gICAgdGhpcy5wcmludENvZGVzKClcbiAgICB0aGlzLnByaW50QW5jaG9yc0luZGV4KClcbiAgfVxufVxuXG5mdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHJldHVybiAxXG4gIGxldCBkb2MgPSBuZXcgQWN0ZXNEb2N1bWVudGF0aW9uKFxuICAgICFvcHRpb25zW1wibm8tc2FuaXR5LWNoZWNrc1wiXSxcbiAgICBvcHRpb25zLnZlcmJvc2UsXG4gIClcbiAgZG9jLmNvbGxlY3RGaWxlcyhvcHRpb25zLmRhdGEpXG4gIGRvYy5wcm9jZXNzRmlsZXMob3B0aW9ucy5kYXRhKVxuICBkb2MucHJpbnQoKVxuICByZXR1cm4gMFxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJkb2N1bWVudF9kb3NzaWVyc19sZWdpc2xhdGlmcy50c1wiKSlcbiAgcHJvY2Vzcy5leGl0KG1haW4ocHJvY2Vzcy5hcmd2KSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENB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