@tricoteuses/assemblee 1.0.7 → 1.1.1

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 (134) hide show
  1. package/lib/api.js +3 -9
  2. package/lib/api.mjs +4 -5
  3. package/lib/bugs/acteur-00010/plugin.test.js +3 -50
  4. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  5. package/lib/bugs/acteur-00010.js +2 -57
  6. package/lib/bugs/acteur-00010.mjs +1 -6
  7. package/lib/bugs/agenda-00002/plugin.test.js +3 -53
  8. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
  9. package/lib/bugs/agenda-00002.js +3 -148
  10. package/lib/bugs/agenda-00002.mjs +1 -28
  11. package/lib/bugs/agenda-00008/plugin.test.js +3 -52
  12. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  13. package/lib/bugs/agenda-00008.js +2 -61
  14. package/lib/bugs/agenda-00008.mjs +1 -5
  15. package/lib/bugs/agenda-00011/plugin.test.js +5 -99
  16. package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
  17. package/lib/bugs/agenda-00011.js +4 -105
  18. package/lib/bugs/agenda-00011.mjs +3 -29
  19. package/lib/bugs.js +3 -164
  20. package/lib/bugs.mjs +1 -26
  21. package/lib/cleaners/actes_legislatifs.js +11 -115
  22. package/lib/cleaners/actes_legislatifs.mjs +7 -82
  23. package/lib/cleaners/acteurs.js +12 -92
  24. package/lib/cleaners/acteurs.mjs +7 -38
  25. package/lib/cleaners/amendements.js +10 -103
  26. package/lib/cleaners/amendements.mjs +4 -58
  27. package/lib/cleaners/documents.js +5 -67
  28. package/lib/cleaners/documents.mjs +1 -37
  29. package/lib/cleaners/dossiers_legislatifs.js +5 -61
  30. package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
  31. package/lib/cleaners/index.js +1 -9
  32. package/lib/cleaners/index.mjs +1 -1
  33. package/lib/cleaners/organes.js +1 -33
  34. package/lib/cleaners/organes.mjs +1 -17
  35. package/lib/cleaners/reunions.js +4 -119
  36. package/lib/cleaners/reunions.mjs +1 -64
  37. package/lib/cleaners/scrutins.js +10 -102
  38. package/lib/cleaners/scrutins.mjs +1 -48
  39. package/lib/cleaners/xml.js +8 -42
  40. package/lib/cleaners/xml.mjs +6 -8
  41. package/lib/datasets.js +14 -113
  42. package/lib/datasets.mjs +6 -46
  43. package/lib/dates.js +7 -37
  44. package/lib/dates.mjs +9 -14
  45. package/lib/dossiers_legislatifs.js +6 -68
  46. package/lib/dossiers_legislatifs.mjs +5 -36
  47. package/lib/file_systems.js +56 -139
  48. package/lib/file_systems.mjs +1 -9
  49. package/lib/git.js +4 -53
  50. package/lib/git.mjs +1 -12
  51. package/lib/index.js +1 -15
  52. package/lib/index.mjs +1 -1
  53. package/lib/inserters.js +23 -146
  54. package/lib/inserters.mjs +6 -87
  55. package/lib/loaders.js +44 -316
  56. package/lib/loaders.mjs +12 -135
  57. package/lib/organes.js +1 -7
  58. package/lib/organes.mjs +1 -4
  59. package/lib/parsers/documents.js +22 -151
  60. package/lib/parsers/documents.mjs +19 -81
  61. package/lib/parsers/index.js +1 -4
  62. package/lib/parsers/index.mjs +1 -1
  63. package/lib/parsers/recherche_amendements.js +302 -527
  64. package/lib/parsers/recherche_amendements.mjs +8 -31
  65. package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
  66. package/lib/raw_types/acteurs_et_organes.js +5 -124
  67. package/lib/raw_types/acteurs_et_organes.mjs +5 -105
  68. package/lib/raw_types/agendas.js +6 -89
  69. package/lib/raw_types/agendas.mjs +9 -65
  70. package/lib/raw_types/amendements.d.ts +2 -0
  71. package/lib/raw_types/amendements.js +10 -90
  72. package/lib/raw_types/amendements.mjs +11 -69
  73. package/lib/raw_types/dossiers_legislatifs.js +6 -96
  74. package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
  75. package/lib/raw_types/scrutins.js +6 -81
  76. package/lib/raw_types/scrutins.mjs +9 -57
  77. package/lib/scripts/bugs_helper.js +2 -181
  78. package/lib/scripts/bugs_helper.mjs +2 -39
  79. package/lib/scripts/clean_data.js +27 -143
  80. package/lib/scripts/clean_data.mjs +15 -34
  81. package/lib/scripts/clean_reorganized_data.js +76 -240
  82. package/lib/scripts/clean_reorganized_data.mjs +36 -99
  83. package/lib/scripts/diff_amendements.js +19 -79
  84. package/lib/scripts/diff_amendements.mjs +17 -35
  85. package/lib/scripts/document_dossiers_legislatifs.js +17 -142
  86. package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
  87. package/lib/scripts/get_today_reunions.js +4 -22
  88. package/lib/scripts/get_today_reunions.mjs +1 -7
  89. package/lib/scripts/merge_scrutins.js +3 -47
  90. package/lib/scripts/merge_scrutins.mjs +1 -9
  91. package/lib/scripts/parse_textes_lois.js +15 -44
  92. package/lib/scripts/parse_textes_lois.mjs +18 -19
  93. package/lib/scripts/raw_types_from_amendements.js +3 -95
  94. package/lib/scripts/raw_types_from_amendements.mjs +1 -16
  95. package/lib/scripts/reorganize_data.js +74 -294
  96. package/lib/scripts/reorganize_data.mjs +22 -133
  97. package/lib/scripts/retrieve_deputes_photos.js +6 -119
  98. package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
  99. package/lib/scripts/retrieve_documents.js +4 -192
  100. package/lib/scripts/retrieve_documents.mjs +2 -50
  101. package/lib/scripts/retrieve_open_data.js +44 -116
  102. package/lib/scripts/retrieve_open_data.mjs +14 -19
  103. package/lib/scripts/retrieve_pending_amendments.js +4 -98
  104. package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
  105. package/lib/scripts/retrieve_senateurs_photos.js +18 -114
  106. package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
  107. package/lib/scripts/retrieve_textes_lois.js +3 -122
  108. package/lib/scripts/retrieve_textes_lois.mjs +3 -21
  109. package/lib/scripts/test_load.js +2 -10
  110. package/lib/scripts/test_load.mjs +2 -1
  111. package/lib/scripts/test_load_big_files.js +2 -10
  112. package/lib/scripts/test_load_big_files.mjs +2 -1
  113. package/lib/scripts/validate_json.js +4 -119
  114. package/lib/scripts/validate_json.mjs +2 -36
  115. package/lib/shared_types/codes_actes.js +1 -24
  116. package/lib/shared_types/codes_actes.mjs +3 -10
  117. package/lib/strings.js +1 -5
  118. package/lib/strings.mjs +1 -1
  119. package/lib/types/acteurs_et_organes.js +9 -84
  120. package/lib/types/acteurs_et_organes.mjs +10 -63
  121. package/lib/types/agendas.js +8 -90
  122. package/lib/types/agendas.mjs +11 -66
  123. package/lib/types/amendements.d.ts +2 -0
  124. package/lib/types/amendements.js +12 -92
  125. package/lib/types/amendements.mjs +15 -70
  126. package/lib/types/dossiers_legislatifs.js +8 -96
  127. package/lib/types/dossiers_legislatifs.mjs +10 -72
  128. package/lib/types/legislatures.js +1 -3
  129. package/lib/types/legislatures.mjs +1 -2
  130. package/lib/types/scrutins.js +8 -82
  131. package/lib/types/scrutins.mjs +11 -58
  132. package/lib/urls.js +3 -27
  133. package/lib/urls.mjs +3 -21
  134. package/package.json +1 -1
package/lib/inserters.js CHANGED
@@ -1,31 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  require("core-js/modules/es.array.slice.js");
4
-
5
4
  require("core-js/modules/es.object.to-string.js");
6
-
7
5
  require("core-js/modules/es.function.name.js");
8
-
9
6
  require("core-js/modules/es.array.from.js");
10
-
11
7
  require("core-js/modules/es.string.iterator.js");
12
-
13
8
  require("core-js/modules/es.regexp.exec.js");
14
-
15
9
  require("core-js/modules/es.symbol.js");
16
-
17
10
  require("core-js/modules/es.symbol.description.js");
18
-
19
11
  require("core-js/modules/es.symbol.iterator.js");
20
-
21
12
  require("core-js/modules/es.array.iterator.js");
22
-
23
13
  require("core-js/modules/web.dom-collections.iterator.js");
24
-
25
14
  require("core-js/modules/es.array.is-array.js");
26
-
27
15
  require("core-js/modules/es.object.define-property.js");
28
-
29
16
  Object.defineProperty(exports, "__esModule", {
30
17
  value: true
31
18
  });
@@ -36,53 +23,40 @@ exports.insertDossierReferences = insertDossierReferences;
36
23
  exports.insertOrganeReferences = insertOrganeReferences;
37
24
  exports.insertReunionReferences = insertReunionReferences;
38
25
  exports.insertScrutinReferences = insertScrutinReferences;
39
-
40
26
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
41
-
42
27
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
43
-
44
28
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
45
-
46
29
  function insertActeLegislatifReferences(acte, data, visitedUids) {
47
30
  if (!visitedUids.has(acte.uid)) {
48
31
  visitedUids.add(acte.uid);
49
-
50
32
  if (data.documentByUid !== undefined && acte.depotInitialLectureDefinitiveRef !== undefined) {
51
33
  var document = data.documentByUid[acte.depotInitialLectureDefinitiveRef];
52
-
53
34
  if (document !== undefined) {
54
35
  acte.depotInitialLectureDefinitive = document;
55
36
  insertDocumentReferences(document, data, visitedUids);
56
37
  }
57
38
  }
58
-
59
39
  if (data.organeByUid !== undefined && acte.organeRef !== undefined) {
60
40
  var organe = data.organeByUid[acte.organeRef];
61
-
62
41
  if (organe !== undefined) {
63
42
  acte.organe = organe;
64
43
  insertOrganeReferences(organe, data, visitedUids);
65
44
  }
66
45
  }
67
-
68
46
  if (data.organeByUid !== undefined && acte.provenanceRef !== undefined) {
69
47
  var _organe = data.organeByUid[acte.provenanceRef];
70
-
71
48
  if (_organe !== undefined) {
72
49
  acte.provenance = _organe;
73
50
  insertOrganeReferences(_organe, data, visitedUids);
74
51
  }
75
52
  }
76
-
77
53
  if (data.acteurByUid !== undefined && acte.rapporteurs !== undefined) {
78
54
  var _iterator = _createForOfIteratorHelper(acte.rapporteurs),
79
- _step;
80
-
55
+ _step;
81
56
  try {
82
57
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
83
58
  var rapporteur = _step.value;
84
59
  var acteur = data.acteurByUid[rapporteur.acteurRef];
85
-
86
60
  if (acteur !== undefined) {
87
61
  rapporteur.acteur = acteur;
88
62
  insertActeurReferences(acteur, data, visitedUids);
@@ -94,25 +68,19 @@ function insertActeLegislatifReferences(acte, data, visitedUids) {
94
68
  _iterator.f();
95
69
  }
96
70
  }
97
-
98
71
  if (data.reunionByUid !== undefined && acte.reunionRef !== undefined) {
99
72
  var reunion = data.reunionByUid[acte.reunionRef];
100
-
101
73
  if (reunion !== undefined) {
102
74
  acte.reunion = reunion;
103
75
  insertReunionReferences(reunion, data, visitedUids);
104
-
105
76
  if (acte.odjRef !== undefined) {
106
77
  var odj = reunion.odj;
107
-
108
78
  if (odj !== undefined && odj.pointsOdj !== undefined) {
109
79
  var _iterator2 = _createForOfIteratorHelper(odj.pointsOdj),
110
- _step2;
111
-
80
+ _step2;
112
81
  try {
113
82
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
114
83
  var pointOdj = _step2.value;
115
-
116
84
  if (pointOdj.uid === acte.odjRef) {
117
85
  acte.odj = pointOdj;
118
86
  break;
@@ -127,34 +95,27 @@ function insertActeLegislatifReferences(acte, data, visitedUids) {
127
95
  }
128
96
  }
129
97
  }
130
-
131
98
  if (data.documentByUid !== undefined && acte.texteAdopteRef !== undefined) {
132
99
  var _document = data.documentByUid[acte.texteAdopteRef];
133
-
134
100
  if (_document !== undefined) {
135
101
  acte.texteAdopte = _document;
136
102
  insertDocumentReferences(_document, data, visitedUids);
137
103
  }
138
104
  }
139
-
140
105
  if (data.documentByUid !== undefined && acte.texteAssocieRef !== undefined) {
141
106
  var _document2 = data.documentByUid[acte.texteAssocieRef];
142
-
143
107
  if (_document2 !== undefined) {
144
108
  acte.texteAssocie = _document2;
145
109
  insertDocumentReferences(_document2, data, visitedUids);
146
110
  }
147
111
  }
148
-
149
112
  if (data.documentByUid !== undefined && acte.textesAssocies !== undefined) {
150
113
  var _iterator3 = _createForOfIteratorHelper(acte.textesAssocies),
151
- _step3;
152
-
114
+ _step3;
153
115
  try {
154
116
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
155
117
  var texteAssocie = _step3.value;
156
118
  var _document3 = data.documentByUid[texteAssocie.texteAssocieRef];
157
-
158
119
  if (_document3 !== undefined) {
159
120
  texteAssocie.texteAssocie = _document3;
160
121
  insertDocumentReferences(_document3, data, visitedUids);
@@ -166,18 +127,14 @@ function insertActeLegislatifReferences(acte, data, visitedUids) {
166
127
  _iterator3.f();
167
128
  }
168
129
  }
169
-
170
130
  if (data.scrutinByUid !== undefined && acte.voteRefs !== undefined) {
171
131
  var scrutins = [];
172
-
173
132
  var _iterator4 = _createForOfIteratorHelper(acte.voteRefs),
174
- _step4;
175
-
133
+ _step4;
176
134
  try {
177
135
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
178
136
  var voteRef = _step4.value;
179
137
  var scrutin = data.scrutinByUid[voteRef];
180
-
181
138
  if (scrutin !== undefined) {
182
139
  scrutins.push(scrutin);
183
140
  insertScrutinReferences(scrutin, data, visitedUids);
@@ -188,13 +145,10 @@ function insertActeLegislatifReferences(acte, data, visitedUids) {
188
145
  } finally {
189
146
  _iterator4.f();
190
147
  }
191
-
192
148
  acte.votes = scrutins;
193
149
  }
194
-
195
150
  var _iterator5 = _createForOfIteratorHelper(acte.actesLegislatifs || []),
196
- _step5;
197
-
151
+ _step5;
198
152
  try {
199
153
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
200
154
  var childActe = _step5.value;
@@ -206,31 +160,24 @@ function insertActeLegislatifReferences(acte, data, visitedUids) {
206
160
  _iterator5.f();
207
161
  }
208
162
  }
209
-
210
163
  return acte;
211
164
  }
212
-
213
165
  function insertActeurReferences(acteur, data, visitedUids) {
214
166
  if (!visitedUids.has(acteur.uid)) {
215
167
  visitedUids.add(acteur.uid);
216
-
217
168
  if (data.organeByUid !== undefined) {
218
169
  var _iterator6 = _createForOfIteratorHelper(acteur.mandats || []),
219
- _step6;
220
-
170
+ _step6;
221
171
  try {
222
172
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
223
173
  var mandat = _step6.value;
224
174
  var organes = [];
225
-
226
175
  var _iterator7 = _createForOfIteratorHelper(mandat.organesRefs),
227
- _step7;
228
-
176
+ _step7;
229
177
  try {
230
178
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
231
179
  var organeRef = _step7.value;
232
180
  var organe = data.organeByUid[organeRef];
233
-
234
181
  if (organe !== undefined) {
235
182
  organes.push(organe);
236
183
  insertOrganeReferences(organe, data, visitedUids);
@@ -241,7 +188,6 @@ function insertActeurReferences(acteur, data, visitedUids) {
241
188
  } finally {
242
189
  _iterator7.f();
243
190
  }
244
-
245
191
  mandat.organes = organes;
246
192
  }
247
193
  } catch (err) {
@@ -251,66 +197,51 @@ function insertActeurReferences(acteur, data, visitedUids) {
251
197
  }
252
198
  }
253
199
  }
254
-
255
200
  return acteur;
256
201
  }
257
-
258
202
  function insertAmendementReferences(amendement, data, visitedUids) {
259
203
  if (!visitedUids.has(amendement.uid)) {
260
204
  visitedUids.add(amendement.uid);
261
205
  var signataires = amendement.signataires;
262
206
  var auteur = signataires.auteur;
263
-
264
207
  if (data.acteurByUid !== undefined && auteur.acteurRef !== undefined) {
265
208
  var acteur = data.acteurByUid[auteur.acteurRef];
266
-
267
209
  if (acteur !== undefined) {
268
210
  auteur.acteur = acteur;
269
211
  insertActeurReferences(acteur, data, visitedUids);
270
212
  }
271
213
  }
272
-
273
214
  if (data.organeByUid !== undefined && auteur.auteurRapporteurOrganeRef !== undefined) {
274
215
  var auteurRapporteurOrgane = data.organeByUid[auteur.auteurRapporteurOrganeRef];
275
-
276
216
  if (auteurRapporteurOrgane !== undefined) {
277
217
  auteur.auteurRapporteurOrgane = auteurRapporteurOrgane;
278
218
  insertOrganeReferences(auteurRapporteurOrgane, data, visitedUids);
279
219
  }
280
220
  }
281
-
282
221
  if (data.organeByUid !== undefined && auteur.gouvernementRef !== undefined) {
283
222
  var gouvernement = data.organeByUid[auteur.gouvernementRef];
284
-
285
223
  if (gouvernement !== undefined) {
286
224
  auteur.gouvernement = gouvernement;
287
225
  insertOrganeReferences(gouvernement, data, visitedUids);
288
226
  }
289
227
  }
290
-
291
228
  if (data.organeByUid !== undefined && auteur.groupePolitiqueRef !== undefined) {
292
229
  var organe = data.organeByUid[auteur.groupePolitiqueRef];
293
-
294
230
  if (organe !== undefined) {
295
231
  auteur.groupePolitique = organe;
296
232
  insertOrganeReferences(organe, data, visitedUids);
297
233
  }
298
234
  }
299
-
300
235
  if (data.acteurByUid !== undefined) {
301
236
  var cosignatairesRefs = signataires.cosignatairesRefs;
302
-
303
237
  if (cosignatairesRefs !== undefined) {
304
238
  var cosignataires = [];
305
-
306
239
  var _iterator8 = _createForOfIteratorHelper(signataires.cosignatairesRefs || []),
307
- _step8;
308
-
240
+ _step8;
309
241
  try {
310
242
  for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
311
243
  var cosignataireRef = _step8.value;
312
244
  var cosignataire = data.acteurByUid[cosignataireRef];
313
-
314
245
  if (cosignataire !== undefined) {
315
246
  cosignataires.push(cosignataire);
316
247
  insertActeurReferences(cosignataire, data, visitedUids);
@@ -321,36 +252,28 @@ function insertAmendementReferences(amendement, data, visitedUids) {
321
252
  } finally {
322
253
  _iterator8.f();
323
254
  }
324
-
325
255
  signataires.cosignataires = cosignataires;
326
256
  }
327
257
  }
328
258
  }
329
-
330
259
  return amendement;
331
260
  }
332
-
333
261
  function insertDivisionReferences(division, data, visitedUids) {
334
262
  var _iterator9 = _createForOfIteratorHelper(division.auteurs),
335
- _step9;
336
-
263
+ _step9;
337
264
  try {
338
265
  for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
339
266
  var auteur = _step9.value;
340
267
  var acteurSummary = auteur.acteur;
341
-
342
268
  if (data.acteurByUid !== undefined && acteurSummary !== undefined) {
343
269
  var acteur = data.acteurByUid[acteurSummary.acteurRef];
344
-
345
270
  if (acteur !== undefined) {
346
271
  acteurSummary.acteur = acteur;
347
272
  insertActeurReferences(acteur, data, visitedUids);
348
273
  }
349
274
  }
350
-
351
275
  if (data.organeByUid !== undefined && auteur.organeRef !== undefined) {
352
276
  var organe = data.organeByUid[auteur.organeRef];
353
-
354
277
  if (organe !== undefined) {
355
278
  auteur.organe = organe;
356
279
  insertOrganeReferences(organe, data, visitedUids);
@@ -362,19 +285,15 @@ function insertDivisionReferences(division, data, visitedUids) {
362
285
  } finally {
363
286
  _iterator9.f();
364
287
  }
365
-
366
288
  if (data.dossierByUid !== undefined) {
367
289
  var dossier = data.dossierByUid[division.dossierRef];
368
-
369
290
  if (dossier !== undefined) {
370
291
  division.dossier = dossier;
371
292
  insertDossierReferences(dossier, data, visitedUids);
372
293
  }
373
294
  }
374
-
375
295
  var _iterator10 = _createForOfIteratorHelper(division.divisions || []),
376
- _step10;
377
-
296
+ _step10;
378
297
  try {
379
298
  for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
380
299
  var childDivision = _step10.value;
@@ -385,34 +304,26 @@ function insertDivisionReferences(division, data, visitedUids) {
385
304
  } finally {
386
305
  _iterator10.f();
387
306
  }
388
-
389
307
  return division;
390
308
  }
391
-
392
309
  function insertDocumentReferences(document, data, visitedUids) {
393
310
  if (!visitedUids.has(document.uid)) {
394
311
  visitedUids.add(document.uid);
395
-
396
312
  var _iterator11 = _createForOfIteratorHelper(document.auteurs),
397
- _step11;
398
-
313
+ _step11;
399
314
  try {
400
315
  for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
401
316
  var auteur = _step11.value;
402
317
  var acteurSummary = auteur.acteur;
403
-
404
318
  if (data.acteurByUid !== undefined && acteurSummary !== undefined) {
405
319
  var acteur = data.acteurByUid[acteurSummary.acteurRef];
406
-
407
320
  if (acteur !== undefined) {
408
321
  acteurSummary.acteur = acteur;
409
322
  insertActeurReferences(acteur, data, visitedUids);
410
323
  }
411
324
  }
412
-
413
325
  if (data.organeByUid !== undefined && auteur.organeRef !== undefined) {
414
326
  var organe = data.organeByUid[auteur.organeRef];
415
-
416
327
  if (organe !== undefined) {
417
328
  auteur.organe = organe;
418
329
  insertOrganeReferences(organe, data, visitedUids);
@@ -424,19 +335,15 @@ function insertDocumentReferences(document, data, visitedUids) {
424
335
  } finally {
425
336
  _iterator11.f();
426
337
  }
427
-
428
338
  if (data.dossierByUid !== undefined) {
429
339
  var dossier = data.dossierByUid[document.dossierRef];
430
-
431
340
  if (dossier !== undefined) {
432
341
  document.dossier = dossier;
433
342
  insertDossierReferences(dossier, data, visitedUids);
434
343
  }
435
344
  }
436
-
437
345
  var _iterator12 = _createForOfIteratorHelper(document.divisions || []),
438
- _step12;
439
-
346
+ _step12;
440
347
  try {
441
348
  for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
442
349
  var division = _step12.value;
@@ -448,19 +355,14 @@ function insertDocumentReferences(document, data, visitedUids) {
448
355
  _iterator12.f();
449
356
  }
450
357
  }
451
-
452
358
  return document;
453
359
  }
454
-
455
360
  function insertDossierReferences(dossier, data, visitedUids) {
456
361
  if (!visitedUids.has(dossier.uid)) {
457
362
  var _dossier$actesLegisla;
458
-
459
363
  visitedUids.add(dossier.uid);
460
-
461
364
  var _iterator13 = _createForOfIteratorHelper((_dossier$actesLegisla = dossier.actesLegislatifs) !== null && _dossier$actesLegisla !== void 0 ? _dossier$actesLegisla : []),
462
- _step13;
463
-
365
+ _step13;
464
366
  try {
465
367
  for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
466
368
  var acte = _step13.value;
@@ -471,32 +373,25 @@ function insertDossierReferences(dossier, data, visitedUids) {
471
373
  } finally {
472
374
  _iterator13.f();
473
375
  }
474
-
475
376
  var initiateur = dossier.initiateur;
476
-
477
377
  if (initiateur !== undefined) {
478
378
  if (data.acteurByUid !== undefined) {
479
379
  var _iterator14 = _createForOfIteratorHelper(initiateur.acteurs || []),
480
- _step14;
481
-
380
+ _step14;
482
381
  try {
483
382
  for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
484
383
  var acteurSummary = _step14.value;
485
384
  var acteur = data.acteurByUid[acteurSummary.acteurRef];
486
-
487
385
  if (acteur !== undefined) {
488
386
  acteurSummary.acteur = acteur;
489
387
  insertActeurReferences(acteur, data, visitedUids);
490
388
  }
491
-
492
389
  if (acteur !== undefined && acteurSummary.mandatRef !== undefined) {
493
390
  var _iterator15 = _createForOfIteratorHelper(acteur.mandats || []),
494
- _step15;
495
-
391
+ _step15;
496
392
  try {
497
393
  for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
498
394
  var mandat = _step15.value;
499
-
500
395
  if (mandat.uid === acteurSummary.mandatRef) {
501
396
  acteurSummary.mandat = mandat;
502
397
  break;
@@ -515,10 +410,8 @@ function insertDossierReferences(dossier, data, visitedUids) {
515
410
  _iterator14.f();
516
411
  }
517
412
  }
518
-
519
413
  if (data.organeByUid !== undefined && initiateur.organeRef !== undefined) {
520
414
  var organe = data.organeByUid[initiateur.organeRef];
521
-
522
415
  if (organe !== undefined) {
523
416
  initiateur.organe = organe;
524
417
  insertOrganeReferences(organe, data, visitedUids);
@@ -526,43 +419,36 @@ function insertDossierReferences(dossier, data, visitedUids) {
526
419
  }
527
420
  }
528
421
  }
529
-
530
422
  return dossier;
531
423
  }
532
-
533
424
  function insertOrganeReferences(organe, data, visitedUids) {
534
425
  if (!visitedUids.has(organe.uid)) {
535
426
  visitedUids.add(organe.uid);
536
-
537
427
  if (data.organeByUid !== undefined && organe.organeParentRef !== undefined) {
538
428
  var organeParent = data.organeByUid[organe.organeParentRef];
539
-
540
429
  if (organeParent !== undefined) {
541
430
  organe.organeParent = organeParent;
542
431
  insertOrganeReferences(organeParent, data, visitedUids);
543
432
  }
544
- } // TODO
433
+ }
545
434
 
435
+ // TODO
546
436
  }
547
437
 
548
438
  return organe;
549
439
  }
550
-
551
440
  function insertReunionReferences(reunion, data, visitedUids) {
552
441
  if (!visitedUids.has(reunion.uid)) {
553
442
  visitedUids.add(reunion.uid);
554
443
  var demandeurs = reunion.demandeurs;
555
-
556
444
  if (demandeurs !== undefined) {
557
445
  if (data.acteurByUid !== undefined) {
558
446
  var _iterator16 = _createForOfIteratorHelper(demandeurs.acteurs || []),
559
- _step16;
560
-
447
+ _step16;
561
448
  try {
562
449
  for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
563
450
  var acteurSummary = _step16.value;
564
451
  var acteur = data.acteurByUid[acteurSummary.acteurRef];
565
-
566
452
  if (acteur !== undefined) {
567
453
  acteurSummary.acteur = acteur;
568
454
  insertActeurReferences(acteur, data, visitedUids);
@@ -574,13 +460,10 @@ function insertReunionReferences(reunion, data, visitedUids) {
574
460
  _iterator16.f();
575
461
  }
576
462
  }
577
-
578
463
  if (data.organeByUid !== undefined) {
579
464
  var organeSummary = demandeurs.organe;
580
-
581
465
  if (organeSummary !== undefined) {
582
466
  var organe = data.organeByUid[organeSummary.organeRef];
583
-
584
467
  if (organe !== undefined) {
585
468
  organeSummary.organe = organe;
586
469
  insertOrganeReferences(organe, data, visitedUids);
@@ -588,28 +471,22 @@ function insertReunionReferences(reunion, data, visitedUids) {
588
471
  }
589
472
  }
590
473
  }
591
-
592
474
  if (data.organeByUid !== undefined && reunion.organeReuniRef !== undefined) {
593
475
  var organeReuni = data.organeByUid[reunion.organeReuniRef];
594
-
595
476
  if (organeReuni !== undefined) {
596
477
  reunion.organeReuni = organeReuni;
597
478
  insertOrganeReferences(organeReuni, data, visitedUids);
598
479
  }
599
480
  }
600
-
601
481
  if (data.acteurByUid !== undefined) {
602
482
  var participants = reunion.participants;
603
-
604
483
  if (participants !== undefined) {
605
484
  var _iterator17 = _createForOfIteratorHelper(participants.participantsInternes || []),
606
- _step17;
607
-
485
+ _step17;
608
486
  try {
609
487
  for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
610
488
  var participantInterne = _step17.value;
611
489
  var _acteur = data.acteurByUid[participantInterne.acteurRef];
612
-
613
490
  if (_acteur !== undefined) {
614
491
  participantInterne.acteur = _acteur;
615
492
  insertActeurReferences(_acteur, data, visitedUids);
@@ -623,15 +500,15 @@ function insertReunionReferences(reunion, data, visitedUids) {
623
500
  }
624
501
  }
625
502
  }
626
-
627
503
  return reunion;
628
504
  }
629
-
630
505
  function insertScrutinReferences(scrutin, _data, visitedUids) {
631
506
  if (!visitedUids.has(scrutin.uid)) {
632
- visitedUids.add(scrutin.uid); // TODO
507
+ visitedUids.add(scrutin.uid);
508
+
509
+ // TODO
633
510
  }
634
511
 
635
512
  return scrutin;
636
513
  }
637
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMiLCJhY3RlIiwiZGF0YSIsInZpc2l0ZWRVaWRzIiwiaGFzIiwidWlkIiwiYWRkIiwiZG9jdW1lbnRCeVVpZCIsInVuZGVmaW5lZCIsImRlcG90SW5pdGlhbExlY3R1cmVEZWZpbml0aXZlUmVmIiwiZG9jdW1lbnQiLCJkZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZSIsImluc2VydERvY3VtZW50UmVmZXJlbmNlcyIsIm9yZ2FuZUJ5VWlkIiwib3JnYW5lUmVmIiwib3JnYW5lIiwiaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyIsInByb3ZlbmFuY2VSZWYiLCJwcm92ZW5hbmNlIiwiYWN0ZXVyQnlVaWQiLCJyYXBwb3J0ZXVycyIsInJhcHBvcnRldXIiLCJhY3RldXIiLCJhY3RldXJSZWYiLCJpbnNlcnRBY3RldXJSZWZlcmVuY2VzIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvblJlZiIsInJldW5pb24iLCJpbnNlcnRSZXVuaW9uUmVmZXJlbmNlcyIsIm9kalJlZiIsIm9kaiIsInBvaW50c09kaiIsInBvaW50T2RqIiwidGV4dGVBZG9wdGVSZWYiLCJ0ZXh0ZUFkb3B0ZSIsInRleHRlQXNzb2NpZVJlZiIsInRleHRlQXNzb2NpZSIsInRleHRlc0Fzc29jaWVzIiwic2NydXRpbkJ5VWlkIiwidm90ZVJlZnMiLCJzY3J1dGlucyIsInZvdGVSZWYiLCJzY3J1dGluIiwicHVzaCIsImluc2VydFNjcnV0aW5SZWZlcmVuY2VzIiwidm90ZXMiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwiY2hpbGRBY3RlIiwibWFuZGF0cyIsIm1hbmRhdCIsIm9yZ2FuZXMiLCJvcmdhbmVzUmVmcyIsImluc2VydEFtZW5kZW1lbnRSZWZlcmVuY2VzIiwiYW1lbmRlbWVudCIsInNpZ25hdGFpcmVzIiwiYXV0ZXVyIiwiYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZVJlZiIsImF1dGV1clJhcHBvcnRldXJPcmdhbmUiLCJnb3V2ZXJuZW1lbnRSZWYiLCJnb3V2ZXJuZW1lbnQiLCJncm91cGVQb2xpdGlxdWVSZWYiLCJncm91cGVQb2xpdGlxdWUiLCJjb3NpZ25hdGFpcmVzUmVmcyIsImNvc2lnbmF0YWlyZXMiLCJjb3NpZ25hdGFpcmVSZWYiLCJjb3NpZ25hdGFpcmUiLCJpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMiLCJkaXZpc2lvbiIsImF1dGV1cnMiLCJhY3RldXJTdW1tYXJ5IiwiZG9zc2llckJ5VWlkIiwiZG9zc2llciIsImRvc3NpZXJSZWYiLCJpbnNlcnREb3NzaWVyUmVmZXJlbmNlcyIsImRpdmlzaW9ucyIsImNoaWxkRGl2aXNpb24iLCJpbml0aWF0ZXVyIiwiYWN0ZXVycyIsIm1hbmRhdFJlZiIsIm9yZ2FuZVBhcmVudFJlZiIsIm9yZ2FuZVBhcmVudCIsImRlbWFuZGV1cnMiLCJvcmdhbmVTdW1tYXJ5Iiwib3JnYW5lUmV1bmlSZWYiLCJvcmdhbmVSZXVuaSIsInBhcnRpY2lwYW50cyIsInBhcnRpY2lwYW50c0ludGVybmVzIiwicGFydGljaXBhbnRJbnRlcm5lIiwiX2RhdGEiXSwic291cmNlcyI6WyIuLi9zcmMvaW5zZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGV1ciwgT3JnYW5lIH0gZnJvbSBcIi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IFJldW5pb24gfSBmcm9tIFwiLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBBY3RlTGVnaXNsYXRpZixcbiAgRGl2aXNpb24sXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgU2NydXRpbiB9IGZyb20gXCIuL3R5cGVzL3NjcnV0aW5zXCJcblxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXREYXRhIHtcbiAgcmVhZG9ubHkgYWN0ZXVyQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZD86IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH1cbiAgcmVhZG9ubHkgZG9zc2llckJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfVxuICByZWFkb25seSBzY3J1dGluQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoXG4gIGFjdGU6IEFjdGVMZWdpc2xhdGlmLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoYWN0ZS51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGFjdGUudWlkKVxuXG4gICAgaWYgKFxuICAgICAgZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhLmRvY3VtZW50QnlVaWRbYWN0ZS5kZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmUgPSBkb2N1bWVudFxuICAgICAgICBpbnNlcnREb2N1bWVudFJlZmVyZW5jZXMoZG9jdW1lbnQsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUub3JnYW5lUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYWN0ZS5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucHJvdmVuYW5jZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2FjdGUucHJvdmVuYW5jZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3RlLnByb3ZlbmFuY2UgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucmFwcG9ydGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCByYXBwb3J0ZXVyIG9mIGFjdGUucmFwcG9ydGV1cnMpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFtyYXBwb3J0ZXVyLmFjdGV1clJlZl1cbiAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwcG9ydGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEucmV1bmlvbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS5yZXVuaW9uUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJldW5pb24gPSBkYXRhLnJldW5pb25CeVVpZFthY3RlLnJldW5pb25SZWZdXG4gICAgICBpZiAocmV1bmlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUucmV1bmlvbiA9IHJldW5pb25cbiAgICAgICAgaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMocmV1bmlvbiwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIGlmIChhY3RlLm9kalJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQgJiYgb2RqLnBvaW50c09kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGopIHtcbiAgICAgICAgICAgICAgaWYgKHBvaW50T2RqLnVpZCA9PT0gYWN0ZS5vZGpSZWYpIHtcbiAgICAgICAgICAgICAgICBhY3RlLm9kaiA9IHBvaW50T2RqXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS50ZXh0ZUFkb3B0ZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQWRvcHRlUmVmXVxuICAgICAgaWYgKGRvY3VtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS50ZXh0ZUFkb3B0ZSA9IGRvY3VtZW50XG4gICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhY3RlLnRleHRlQXNzb2NpZVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQXNzb2NpZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUudGV4dGVBc3NvY2llID0gZG9jdW1lbnRcbiAgICAgICAgaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKGRvY3VtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUudGV4dGVzQXNzb2NpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCB0ZXh0ZUFzc29jaWUgb2YgYWN0ZS50ZXh0ZXNBc3NvY2llcykge1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFt0ZXh0ZUFzc29jaWUudGV4dGVBc3NvY2llUmVmXVxuICAgICAgICBpZiAoZG9jdW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRleHRlQXNzb2NpZS50ZXh0ZUFzc29jaWUgPSBkb2N1bWVudFxuICAgICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuc2NydXRpbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS52b3RlUmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzY3J1dGlucyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHZvdGVSZWYgb2YgYWN0ZS52b3RlUmVmcykge1xuICAgICAgICBjb25zdCBzY3J1dGluID0gZGF0YS5zY3J1dGluQnlVaWRbdm90ZVJlZl1cbiAgICAgICAgaWYgKHNjcnV0aW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5zLnB1c2goc2NydXRpbilcbiAgICAgICAgICBpbnNlcnRTY3J1dGluUmVmZXJlbmNlcyhzY3J1dGluLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWN0ZS52b3RlcyA9IHNjcnV0aW5zXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZEFjdGUgb2YgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzIHx8IFtdKSB7XG4gICAgICBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoY2hpbGRBY3RlLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWN0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhcbiAgYWN0ZXVyOiBBY3RldXIsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhY3RldXIudWlkKSkge1xuICAgIHZpc2l0ZWRVaWRzLmFkZChhY3RldXIudWlkKVxuXG4gICAgaWYgKGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBtYW5kYXQgb2YgYWN0ZXVyLm1hbmRhdHMgfHwgW10pIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3Qgb3JnYW5lUmVmIG9mIG1hbmRhdC5vcmdhbmVzUmVmcykge1xuICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbb3JnYW5lUmVmXVxuICAgICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3JnYW5lcy5wdXNoKG9yZ2FuZSlcbiAgICAgICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWFuZGF0Lm9yZ2FuZXMgPSBvcmdhbmVzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFjdGV1clxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QW1lbmRlbWVudFJlZmVyZW5jZXMoXG4gIGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQoYW1lbmRlbWVudC51aWQpXG5cbiAgICBjb25zdCBzaWduYXRhaXJlcyA9IGFtZW5kZW1lbnQuc2lnbmF0YWlyZXNcbiAgICBjb25zdCBhdXRldXIgPSBzaWduYXRhaXJlcy5hdXRldXJcbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5hY3RldXJSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthdXRldXIuYWN0ZXVyUmVmXVxuICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF1dGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGF1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGF1dGV1clJhcHBvcnRldXJPcmdhbmUgPVxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmXVxuICAgICAgaWYgKGF1dGV1clJhcHBvcnRldXJPcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZSA9IGF1dGV1clJhcHBvcnRldXJPcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhhdXRldXJSYXBwb3J0ZXVyT3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ291dmVybmVtZW50UmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGdvdXZlcm5lbWVudCA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdvdXZlcm5lbWVudFJlZl1cbiAgICAgIGlmIChnb3V2ZXJuZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ291dmVybmVtZW50ID0gZ291dmVybmVtZW50XG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoZ291dmVybmVtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdyb3VwZVBvbGl0aXF1ZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlID0gb3JnYW5lXG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29zaWduYXRhaXJlc1JlZnMgPSBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmc1xuICAgICAgaWYgKGNvc2lnbmF0YWlyZXNSZWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY29zaWduYXRhaXJlcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3QgY29zaWduYXRhaXJlUmVmIG9mIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgY29zaWduYXRhaXJlID0gZGF0YS5hY3RldXJCeVVpZFtjb3NpZ25hdGFpcmVSZWZdXG4gICAgICAgICAgaWYgKGNvc2lnbmF0YWlyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb3NpZ25hdGFpcmVzLnB1c2goY29zaWduYXRhaXJlKVxuICAgICAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhjb3NpZ25hdGFpcmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzID0gY29zaWduYXRhaXJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbWVuZGVtZW50XG59XG5cbmZ1bmN0aW9uIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhcbiAgZGl2aXNpb246IERpdmlzaW9uLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgZm9yIChjb25zdCBhdXRldXIgb2YgZGl2aXNpb24uYXV0ZXVycykge1xuICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RldXJTdW1tYXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbYWN0ZXVyU3VtbWFyeS5hY3RldXJSZWZdXG4gICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYXV0ZXVyLm9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXV0ZXVyLm9yZ2FuZSA9IG9yZ2FuZVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEuZG9zc2llckJ5VWlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkb3NzaWVyID0gZGF0YS5kb3NzaWVyQnlVaWRbZGl2aXNpb24uZG9zc2llclJlZl1cbiAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkaXZpc2lvbi5kb3NzaWVyID0gZG9zc2llclxuICAgICAgaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoZG9zc2llciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZERpdmlzaW9uIG9mIGRpdmlzaW9uLmRpdmlzaW9ucyB8fCBbXSkge1xuICAgIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhjaGlsZERpdmlzaW9uLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgfVxuXG4gIHJldHVybiBkaXZpc2lvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKFxuICBkb2N1bWVudDogRG9jdW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhkb2N1bWVudC51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvY3VtZW50LnVpZClcblxuICAgIGZvciAoY29uc3QgYXV0ZXVyIG9mIGRvY3VtZW50LmF1dGV1cnMpIHtcbiAgICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJTdW1tYXJ5LmFjdGV1ciA9IGFjdGV1clxuICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGF1dGV1ci5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YS5kb3NzaWVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGRhdGEuZG9zc2llckJ5VWlkW2RvY3VtZW50LmRvc3NpZXJSZWZdXG4gICAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY3VtZW50LmRvc3NpZXIgPSBkb3NzaWVyXG4gICAgICAgIGluc2VydERvc3NpZXJSZWZlcmVuY2VzKGRvc3NpZXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGl2aXNpb24gb2YgZG9jdW1lbnQuZGl2aXNpb25zIHx8IFtdKSB7XG4gICAgICBpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMoZGl2aXNpb24sIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoXG4gIGRvc3NpZXI6IERvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoZG9zc2llci51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvc3NpZXIudWlkKVxuXG4gICAgZm9yIChjb25zdCBhY3RlIG9mIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyA/PyBbXSkge1xuICAgICAgaW5zZXJ0QWN0ZUxlZ2lzbGF0aWZSZWZlcmVuY2VzKGFjdGUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYXRldXIgPSBkb3NzaWVyLmluaXRpYXRldXJcbiAgICBpZiAoaW5pdGlhdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3VtbWFyeSBvZiBpbml0aWF0ZXVyLmFjdGV1cnMgfHwgW10pIHtcbiAgICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICAgIGlmIChhY3RldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkubWFuZGF0UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0IG9mIGFjdGV1ci5tYW5kYXRzIHx8IFtdKSB7XG4gICAgICAgICAgICAgIGlmIChtYW5kYXQudWlkID09PSBhY3RldXJTdW1tYXJ5Lm1hbmRhdFJlZikge1xuICAgICAgICAgICAgICAgIGFjdGV1clN1bW1hcnkubWFuZGF0ID0gbWFuZGF0XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgaW5pdGlhdGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbaW5pdGlhdGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluaXRpYXRldXIub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvc3NpZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoXG4gIG9yZ2FuZTogT3JnYW5lLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMob3JnYW5lLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQob3JnYW5lLnVpZClcblxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudFJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVQYXJlbnQgPSBkYXRhLm9yZ2FuZUJ5VWlkW29yZ2FuZS5vcmdhbmVQYXJlbnRSZWZdXG4gICAgICBpZiAob3JnYW5lUGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudCA9IG9yZ2FuZVBhcmVudFxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVBhcmVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIG9yZ2FuZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMoXG4gIHJldW5pb246IFJldW5pb24sXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhyZXVuaW9uLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQocmV1bmlvbi51aWQpXG5cbiAgICBjb25zdCBkZW1hbmRldXJzID0gcmV1bmlvbi5kZW1hbmRldXJzXG4gICAgaWYgKGRlbWFuZGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clN1bW1hcnkgb2YgZGVtYW5kZXVycy5hY3RldXJzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthY3RldXJTdW1tYXJ5LmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjdGV1clN1bW1hcnkuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZVN1bW1hcnkgPSBkZW1hbmRldXJzLm9yZ2FuZVxuICAgICAgICBpZiAob3JnYW5lU3VtbWFyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb3JnYW5lID0gZGF0YS5vcmdhbmVCeVVpZFtvcmdhbmVTdW1tYXJ5Lm9yZ2FuZVJlZl1cbiAgICAgICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9yZ2FuZVN1bW1hcnkub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmV1bmlvbi5vcmdhbmVSZXVuaVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVSZXVuaSA9IGRhdGEub3JnYW5lQnlVaWRbcmV1bmlvbi5vcmdhbmVSZXVuaVJlZl1cbiAgICAgIGlmIChvcmdhbmVSZXVuaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldW5pb24ub3JnYW5lUmV1bmkgPSBvcmdhbmVSZXVuaVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVJldW5pLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gcmV1bmlvbi5wYXJ0aWNpcGFudHNcbiAgICAgIGlmIChwYXJ0aWNpcGFudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnRpY2lwYW50SW50ZXJuZSBvZiBwYXJ0aWNpcGFudHMucGFydGljaXBhbnRzSW50ZXJuZXMgfHxcbiAgICAgICAgICBbXSkge1xuICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbcGFydGljaXBhbnRJbnRlcm5lLmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SW50ZXJuZS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV1bmlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U2NydXRpblJlZmVyZW5jZXMoXG4gIHNjcnV0aW46IFNjcnV0aW4sXG4gIF9kYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKHNjcnV0aW4udWlkKVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIHNjcnV0aW5cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLFNBQVNBLDhCQUFULENBQ0VDLElBREYsRUFFRUMsSUFGRixFQUdFQyxXQUhGLEVBSUU7RUFDQSxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsR0FBWixDQUFnQkgsSUFBSSxDQUFDSSxHQUFyQixDQUFMLEVBQWdDO0lBQzlCRixXQUFXLENBQUNHLEdBQVosQ0FBZ0JMLElBQUksQ0FBQ0ksR0FBckI7O0lBRUEsSUFDRUgsSUFBSSxDQUFDSyxhQUFMLEtBQXVCQyxTQUF2QixJQUNBUCxJQUFJLENBQUNRLGdDQUFMLEtBQTBDRCxTQUY1QyxFQUdFO01BQ0EsSUFBTUUsUUFBUSxHQUFHUixJQUFJLENBQUNLLGFBQUwsQ0FBbUJOLElBQUksQ0FBQ1EsZ0NBQXhCLENBQWpCOztNQUNBLElBQUlDLFFBQVEsS0FBS0YsU0FBakIsRUFBNEI7UUFDMUJQLElBQUksQ0FBQ1UsNkJBQUwsR0FBcUNELFFBQXJDO1FBQ0FFLHdCQUF3QixDQUFDRixRQUFELEVBQVdSLElBQVgsRUFBaUJDLFdBQWpCLENBQXhCO01BQ0Q7SUFDRjs7SUFDRCxJQUFJRCxJQUFJLENBQUNXLFdBQUwsS0FBcUJMLFNBQXJCLElBQWtDUCxJQUFJLENBQUNhLFNBQUwsS0FBbUJOLFNBQXpELEVBQW9FO01BQ2xFLElBQU1PLE1BQU0sR0FBR2IsSUFBSSxDQUFDVyxXQUFMLENBQWlCWixJQUFJLENBQUNhLFNBQXRCLENBQWY7O01BQ0EsSUFBSUMsTUFBTSxLQUFLUCxTQUFmLEVBQTBCO1FBQ3hCUCxJQUFJLENBQUNjLE1BQUwsR0FBY0EsTUFBZDtRQUNBQyxzQkFBc0IsQ0FBQ0QsTUFBRCxFQUFTYixJQUFULEVBQWVDLFdBQWYsQ0FBdEI7TUFDRDtJQUNGOztJQUNELElBQUlELElBQUksQ0FBQ1csV0FBTCxLQUFxQkwsU0FBckIsSUFBa0NQLElBQUksQ0FBQ2dCLGFBQUwsS0FBdUJULFNBQTdELEVBQXdFO01BQ3RFLElBQU1PLE9BQU0sR0FBR2IsSUFBSSxDQUFDVyxXQUFMLENBQWlCWixJQUFJLENBQUNnQixhQUF0QixDQUFmOztNQUNBLElBQUlGLE9BQU0sS0FBS1AsU0FBZixFQUEwQjtRQUN4QlAsSUFBSSxDQUFDaUIsVUFBTCxHQUFrQkgsT0FBbEI7UUFDQUMsc0JBQXNCLENBQUNELE9BQUQsRUFBU2IsSUFBVCxFQUFlQyxXQUFmLENBQXRCO01BQ0Q7SUFDRjs7SUFDRCxJQUFJRCxJQUFJLENBQUNpQixXQUFMLEtBQXFCWCxTQUFyQixJQUFrQ1AsSUFBSSxDQUFDbUIsV0FBTCxLQUFxQlosU0FBM0QsRUFBc0U7TUFBQSwyQ0FDM0NQLElBQUksQ0FBQ21CLFdBRHNDO01BQUE7O01BQUE7UUFDcEUsb0RBQTJDO1VBQUEsSUFBaENDLFVBQWdDO1VBQ3pDLElBQU1DLE1BQU0sR0FBR3BCLElBQUksQ0FBQ2lCLFdBQUwsQ0FBaUJFLFVBQVUsQ0FBQ0UsU0FBNUIsQ0FBZjs7VUFDQSxJQUFJRCxNQUFNLEtBQUtkLFNBQWYsRUFBMEI7WUFDeEJhLFVBQVUsQ0FBQ0MsTUFBWCxHQUFvQkEsTUFBcEI7WUFDQUUsc0JBQXNCLENBQUNGLE1BQUQsRUFBU3BCLElBQVQsRUFBZUMsV0FBZixDQUF0QjtVQUNEO1FBQ0Y7TUFQbUU7UUFBQTtNQUFBO1FBQUE7TUFBQTtJQVFyRTs7SUFDRCxJQUFJRCxJQUFJLENBQUN1QixZQUFMLEtBQXNCakIsU0FBdEIsSUFBbUNQLElBQUksQ0FBQ3lCLFVBQUwsS0FBb0JsQixTQUEzRCxFQUFzRTtNQUNwRSxJQUFNbUIsT0FBTyxHQUFHekIsSUFBSSxDQUFDdUIsWUFBTCxDQUFrQnhCLElBQUksQ0FBQ3lCLFVBQXZCLENBQWhCOztNQUNBLElBQUlDLE9BQU8sS0FBS25CLFNBQWhCLEVBQTJCO1FBQ3pCUCxJQUFJLENBQUMwQixPQUFMLEdBQWVBLE9BQWY7UUFDQUMsdUJBQXVCLENBQUNELE9BQUQsRUFBVXpCLElBQVYsRUFBZ0JDLFdBQWhCLENBQXZCOztRQUNBLElBQUlGLElBQUksQ0FBQzRCLE1BQUwsS0FBZ0JyQixTQUFwQixFQUErQjtVQUM3QixJQUFNc0IsR0FBRyxHQUFHSCxPQUFPLENBQUNHLEdBQXBCOztVQUNBLElBQUlBLEdBQUcsS0FBS3RCLFNBQVIsSUFBcUJzQixHQUFHLENBQUNDLFNBQUosS0FBa0J2QixTQUEzQyxFQUFzRDtZQUFBLDRDQUM3QnNCLEdBQUcsQ0FBQ0MsU0FEeUI7WUFBQTs7WUFBQTtjQUNwRCx1REFBc0M7Z0JBQUEsSUFBM0JDLFFBQTJCOztnQkFDcEMsSUFBSUEsUUFBUSxDQUFDM0IsR0FBVCxLQUFpQkosSUFBSSxDQUFDNEIsTUFBMUIsRUFBa0M7a0JBQ2hDNUIsSUFBSSxDQUFDNkIsR0FBTCxHQUFXRSxRQUFYO2tCQUNBO2dCQUNEO2NBQ0Y7WUFObUQ7Y0FBQTtZQUFBO2NBQUE7WUFBQTtVQU9yRDtRQUNGO01BQ0Y7SUFDRjs7SUFDRCxJQUFJOUIsSUFBSSxDQUFDSyxhQUFMLEtBQXVCQyxTQUF2QixJQUFvQ1AsSUFBSSxDQUFDZ0MsY0FBTCxLQUF3QnpCLFNBQWhFLEVBQTJFO01BQ3pFLElBQU1FLFNBQVEsR0FBR1IsSUFBSSxDQUFDSyxhQUFMLENBQW1CTixJQUFJLENBQUNnQyxjQUF4QixDQUFqQjs7TUFDQSxJQUFJdkIsU0FBUSxLQUFLRixTQUFqQixFQUE0QjtRQUMxQlAsSUFBSSxDQUFDaUMsV0FBTCxHQUFtQnhCLFNBQW5CO1FBQ0FFLHdCQUF3QixDQUFDRixTQUFELEVBQVdSLElBQVgsRUFBaUJDLFdBQWpCLENBQXhCO01BQ0Q7SUFDRjs7SUFDRCxJQUNFRCxJQUFJLENBQUNLLGFBQUwsS0FBdUJDLFNBQXZCLElBQ0FQLElBQUksQ0FBQ2tDLGVBQUwsS0FBeUIzQixTQUYzQixFQUdFO01BQ0EsSUFBTUUsVUFBUSxHQUFHUixJQUFJLENBQUNLLGFBQUwsQ0FBbUJOLElBQUksQ0FBQ2tDLGVBQXhCLENBQWpCOztNQUNBLElBQUl6QixVQUFRLEtBQUtGLFNBQWpCLEVBQTRCO1FBQzFCUCxJQUFJLENBQUNtQyxZQUFMLEdBQW9CMUIsVUFBcEI7UUFDQUUsd0JBQXdCLENBQUNGLFVBQUQsRUFBV1IsSUFBWCxFQUFpQkMsV0FBakIsQ0FBeEI7TUFDRDtJQUNGOztJQUNELElBQUlELElBQUksQ0FBQ0ssYUFBTCxLQUF1QkMsU0FBdkIsSUFBb0NQLElBQUksQ0FBQ29DLGNBQUwsS0FBd0I3QixTQUFoRSxFQUEyRTtNQUFBLDRDQUM5Q1AsSUFBSSxDQUFDb0MsY0FEeUM7TUFBQTs7TUFBQTtRQUN6RSx1REFBZ0Q7VUFBQSxJQUFyQ0QsWUFBcUM7VUFDOUMsSUFBTTFCLFVBQVEsR0FBR1IsSUFBSSxDQUFDSyxhQUFMLENBQW1CNkIsWUFBWSxDQUFDRCxlQUFoQyxDQUFqQjs7VUFDQSxJQUFJekIsVUFBUSxLQUFLRixTQUFqQixFQUE0QjtZQUMxQjRCLFlBQVksQ0FBQ0EsWUFBYixHQUE0QjFCLFVBQTVCO1lBQ0FFLHdCQUF3QixDQUFDRixVQUFELEVBQVdSLElBQVgsRUFBaUJDLFdBQWpCLENBQXhCO1VBQ0Q7UUFDRjtNQVB3RTtRQUFBO01BQUE7UUFBQTtNQUFBO0lBUTFFOztJQUNELElBQUlELElBQUksQ0FBQ29DLFlBQUwsS0FBc0I5QixTQUF0QixJQUFtQ1AsSUFBSSxDQUFDc0MsUUFBTCxLQUFrQi9CLFNBQXpELEVBQW9FO01BQ2xFLElBQU1nQyxRQUFRLEdBQUcsRUFBakI7O01BRGtFLDRDQUU1Q3ZDLElBQUksQ0FBQ3NDLFFBRnVDO01BQUE7O01BQUE7UUFFbEUsdURBQXFDO1VBQUEsSUFBMUJFLE9BQTBCO1VBQ25DLElBQU1DLE9BQU8sR0FBR3hDLElBQUksQ0FBQ29DLFlBQUwsQ0FBa0JHLE9BQWxCLENBQWhCOztVQUNBLElBQUlDLE9BQU8sS0FBS2xDLFNBQWhCLEVBQTJCO1lBQ3pCZ0MsUUFBUSxDQUFDRyxJQUFULENBQWNELE9BQWQ7WUFDQUUsdUJBQXVCLENBQUNGLE9BQUQsRUFBVXhDLElBQVYsRUFBZ0JDLFdBQWhCLENBQXZCO1VBQ0Q7UUFDRjtNQVJpRTtRQUFBO01BQUE7UUFBQTtNQUFBOztNQVNsRUYsSUFBSSxDQUFDNEMsS0FBTCxHQUFhTCxRQUFiO0lBQ0Q7O0lBMUY2Qiw0Q0E0Rk52QyxJQUFJLENBQUM2QyxnQkFBTCxJQUF5QixFQTVGbkI7SUFBQTs7SUFBQTtNQTRGOUIsdURBQXFEO1FBQUEsSUFBMUNDLFNBQTBDO1FBQ25EL0MsOEJBQThCLENBQUMrQyxTQUFELEVBQVk3QyxJQUFaLEVBQWtCQyxXQUFsQixDQUE5QjtNQUNEO0lBOUY2QjtNQUFBO0lBQUE7TUFBQTtJQUFBO0VBK0YvQjs7RUFFRCxPQUFPRixJQUFQO0FBQ0Q7O0FBRU0sU0FBU3VCLHNCQUFULENBQ0xGLE1BREssRUFFTHBCLElBRkssRUFHTEMsV0FISyxFQUlMO0VBQ0EsSUFBSSxDQUFDQSxXQUFXLENBQUNDLEdBQVosQ0FBZ0JrQixNQUFNLENBQUNqQixHQUF2QixDQUFMLEVBQWtDO0lBQ2hDRixXQUFXLENBQUNHLEdBQVosQ0FBZ0JnQixNQUFNLENBQUNqQixHQUF2Qjs7SUFFQSxJQUFJSCxJQUFJLENBQUNXLFdBQUwsS0FBcUJMLFNBQXpCLEVBQW9DO01BQUEsNENBQ2JjLE1BQU0sQ0FBQzBCLE9BQVAsSUFBa0IsRUFETDtNQUFBOztNQUFBO1FBQ2xDLHVEQUEyQztVQUFBLElBQWhDQyxNQUFnQztVQUN6QyxJQUFNQyxPQUFPLEdBQUcsRUFBaEI7O1VBRHlDLDRDQUVqQkQsTUFBTSxDQUFDRSxXQUZVO1VBQUE7O1VBQUE7WUFFekMsdURBQTRDO2NBQUEsSUFBakNyQyxTQUFpQztjQUMxQyxJQUFNQyxNQUFNLEdBQUdiLElBQUksQ0FBQ1csV0FBTCxDQUFpQkMsU0FBakIsQ0FBZjs7Y0FDQSxJQUFJQyxNQUFNLEtBQUtQLFNBQWYsRUFBMEI7Z0JBQ3hCMEMsT0FBTyxDQUFDUCxJQUFSLENBQWE1QixNQUFiO2dCQUNBQyxzQkFBc0IsQ0FBQ0QsTUFBRCxFQUFTYixJQUFULEVBQWVDLFdBQWYsQ0FBdEI7Y0FDRDtZQUNGO1VBUndDO1lBQUE7VUFBQTtZQUFBO1VBQUE7O1VBU3pDOEMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCQSxPQUFqQjtRQUNEO01BWGlDO1FBQUE7TUFBQTtRQUFBO01BQUE7SUFZbkM7RUFDRjs7RUFFRCxPQUFPNUIsTUFBUDtBQUNEOztBQUVNLFNBQVM4QiwwQkFBVCxDQUNMQyxVQURLLEVBRUxuRCxJQUZLLEVBR0xDLFdBSEssRUFJTDtFQUNBLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxHQUFaLENBQWdCaUQsVUFBVSxDQUFDaEQsR0FBM0IsQ0FBTCxFQUFzQztJQUNwQ0YsV0FBVyxDQUFDRyxHQUFaLENBQWdCK0MsVUFBVSxDQUFDaEQsR0FBM0I7SUFFQSxJQUFNaUQsV0FBVyxHQUFHRCxVQUFVLENBQUNDLFdBQS9CO0lBQ0EsSUFBTUMsTUFBTSxHQUFHRCxXQUFXLENBQUNDLE1BQTNCOztJQUNBLElBQUlyRCxJQUFJLENBQUNpQixXQUFMLEtBQXFCWCxTQUFyQixJQUFrQytDLE1BQU0sQ0FBQ2hDLFNBQVAsS0FBcUJmLFNBQTNELEVBQXNFO01BQ3BFLElBQU1jLE1BQU0sR0FBR3BCLElBQUksQ0FBQ2lCLFdBQUwsQ0FBaUJvQyxNQUFNLENBQUNoQyxTQUF4QixDQUFmOztNQUNBLElBQUlELE1BQU0sS0FBS2QsU0FBZixFQUEwQjtRQUN4QitDLE1BQU0sQ0FBQ2pDLE1BQVAsR0FBZ0JBLE1BQWhCO1FBQ0FFLHNCQUFzQixDQUFDRixNQUFELEVBQVNwQixJQUFULEVBQWVDLFdBQWYsQ0FBdEI7TUFDRDtJQUNGOztJQUNELElBQ0VELElBQUksQ0FBQ1csV0FBTCxLQUFxQkwsU0FBckIsSUFDQStDLE1BQU0sQ0FBQ0MseUJBQVAsS0FBcUNoRCxTQUZ2QyxFQUdFO01BQ0EsSUFBTWlELHNCQUFzQixHQUMxQnZELElBQUksQ0FBQ1csV0FBTCxDQUFpQjBDLE1BQU0sQ0FBQ0MseUJBQXhCLENBREY7O01BRUEsSUFBSUMsc0JBQXNCLEtBQUtqRCxTQUEvQixFQUEwQztRQUN4QytDLE1BQU0sQ0FBQ0Usc0JBQVAsR0FBZ0NBLHNCQUFoQztRQUNBekMsc0JBQXNCLENBQUN5QyxzQkFBRCxFQUF5QnZELElBQXpCLEVBQStCQyxXQUEvQixDQUF0QjtNQUNEO0lBQ0Y7O0lBQ0QsSUFDRUQsSUFBSSxDQUFDVyxXQUFMLEtBQXFCTCxTQUFyQixJQUNBK0MsTUFBTSxDQUFDRyxlQUFQLEtBQTJCbEQsU0FGN0IsRUFHRTtNQUNBLElBQU1tRCxZQUFZLEdBQUd6RCxJQUFJLENBQUNXLFdBQUwsQ0FBaUIwQyxNQUFNLENBQUNHLGVBQXhCLENBQXJCOztNQUNBLElBQUlDLFlBQVksS0FBS25ELFNBQXJCLEVBQWdDO1FBQzlCK0MsTUFBTSxDQUFDSSxZQUFQLEdBQXNCQSxZQUF0QjtRQUNBM0Msc0JBQXNCLENBQUMyQyxZQUFELEVBQWV6RCxJQUFmLEVBQXFCQyxXQUFyQixDQUF0QjtNQUNEO0lBQ0Y7O0lBQ0QsSUFDRUQsSUFBSSxDQUFDVyxXQUFMLEtBQXFCTCxTQUFyQixJQUNBK0MsTUFBTSxDQUFDSyxrQkFBUCxLQUE4QnBELFNBRmhDLEVBR0U7TUFDQSxJQUFNTyxNQUFNLEdBQUdiLElBQUksQ0FBQ1csV0FBTCxDQUFpQjBDLE1BQU0sQ0FBQ0ssa0JBQXhCLENBQWY7O01BQ0EsSUFBSTdDLE1BQU0sS0FBS1AsU0FBZixFQUEwQjtRQUN4QitDLE1BQU0sQ0FBQ00sZUFBUCxHQUF5QjlDLE1BQXpCO1FBQ0FDLHNCQUFzQixDQUFDRCxNQUFELEVBQVNiLElBQVQsRUFBZUMsV0FBZixDQUF0QjtNQUNEO0lBQ0Y7O0lBQ0QsSUFBSUQsSUFBSSxDQUFDaUIsV0FBTCxLQUFxQlgsU0FBekIsRUFBb0M7TUFDbEMsSUFBTXNELGlCQUFpQixHQUFHUixXQUFXLENBQUNRLGlCQUF0Qzs7TUFDQSxJQUFJQSxpQkFBaUIsS0FBS3RELFNBQTFCLEVBQXFDO1FBQ25DLElBQU11RCxhQUFhLEdBQUcsRUFBdEI7O1FBRG1DLDRDQUVMVCxXQUFXLENBQUNRLGlCQUFaLElBQWlDLEVBRjVCO1FBQUE7O1FBQUE7VUFFbkMsdURBQW1FO1lBQUEsSUFBeERFLGVBQXdEO1lBQ2pFLElBQU1DLFlBQVksR0FBRy9ELElBQUksQ0FBQ2lCLFdBQUwsQ0FBaUI2QyxlQUFqQixDQUFyQjs7WUFDQSxJQUFJQyxZQUFZLEtBQUt6RCxTQUFyQixFQUFnQztjQUM5QnVELGFBQWEsQ0FBQ3BCLElBQWQsQ0FBbUJzQixZQUFuQjtjQUNBekMsc0JBQXNCLENBQUN5QyxZQUFELEVBQWUvRCxJQUFmLEVBQXFCQyxXQUFyQixDQUF0QjtZQUNEO1VBQ0Y7UUFSa0M7VUFBQTtRQUFBO1VBQUE7UUFBQTs7UUFTbkNtRCxXQUFXLENBQUNTLGFBQVosR0FBNEJBLGFBQTVCO01BQ0Q7SUFDRjtFQUNGOztFQUVELE9BQU9WLFVBQVA7QUFDRDs7QUFFRCxTQUFTYSx3QkFBVCxDQUNFQyxRQURGLEVBRUVqRSxJQUZGLEVBR0VDLFdBSEYsRUFJRTtFQUFBLDRDQUNxQmdFLFFBQVEsQ0FBQ0MsT0FEOUI7RUFBQTs7RUFBQTtJQUNBLHVEQUF1QztNQUFBLElBQTVCYixNQUE0QjtNQUNyQyxJQUFNYyxhQUFhLEdBQUdkLE1BQU0sQ0FBQ2pDLE1BQTdCOztNQUNBLElBQUlwQixJQUFJLENBQUNpQixXQUFMLEtBQXFCWCxTQUFyQixJQUFrQzZELGFBQWEsS0FBSzdELFNBQXhELEVBQW1FO1FBQ2pFLElBQU1jLE1BQU0sR0FBR3BCLElBQUksQ0FBQ2lCLFdBQUwsQ0FBaUJrRCxhQUFhLENBQUM5QyxTQUEvQixDQUFmOztRQUNBLElBQUlELE1BQU0sS0FBS2QsU0FBZixFQUEwQjtVQUN4QjZELGFBQWEsQ0FBQy9DLE1BQWQsR0FBdUJBLE1BQXZCO1VBQ0FFLHNCQUFzQixDQUFDRixNQUFELEVBQVNwQixJQUFULEVBQWVDLFdBQWYsQ0FBdEI7UUFDRDtNQUNGOztNQUVELElBQUlELElBQUksQ0FBQ1csV0FBTCxLQUFxQkwsU0FBckIsSUFBa0MrQyxNQUFNLENBQUN6QyxTQUFQLEtBQXFCTixTQUEzRCxFQUFzRTtRQUNwRSxJQUFNTyxNQUFNLEdBQUdiLElBQUksQ0FBQ1csV0FBTCxDQUFpQjBDLE1BQU0sQ0FBQ3pDLFNBQXhCLENBQWY7O1FBQ0EsSUFBSUMsTUFBTSxLQUFLUCxTQUFmLEVBQTBCO1VBQ3hCK0MsTUFBTSxDQUFDeEMsTUFBUCxHQUFnQkEsTUFBaEI7VUFDQUMsc0JBQXNCLENBQUNELE1BQUQsRUFBU2IsSUFBVCxFQUFlQyxXQUFmLENBQXRCO1FBQ0Q7TUFDRjtJQUNGO0VBbEJEO0lBQUE7RUFBQTtJQUFBO0VBQUE7O0VBb0JBLElBQUlELElBQUksQ0FBQ29FLFlBQUwsS0FBc0I5RCxTQUExQixFQUFxQztJQUNuQyxJQUFNK0QsT0FBTyxHQUFHckUsSUFBSSxDQUFDb0UsWUFBTCxDQUFrQkgsUUFBUSxDQUFDSyxVQUEzQixDQUFoQjs7SUFDQSxJQUFJRCxPQUFPLEtBQUsvRCxTQUFoQixFQUEyQjtNQUN6QjJELFFBQVEsQ0FBQ0ksT0FBVCxHQUFtQkEsT0FBbkI7TUFDQUUsdUJBQXVCLENBQUNGLE9BQUQsRUFBVXJFLElBQVYsRUFBZ0JDLFdBQWhCLENBQXZCO0lBQ0Q7RUFDRjs7RUExQkQsNkNBNEI0QmdFLFFBQVEsQ0FBQ08sU0FBVCxJQUFzQixFQTVCbEQ7RUFBQTs7RUFBQTtJQTRCQSwwREFBc0Q7TUFBQSxJQUEzQ0MsYUFBMkM7TUFDcERULHdCQUF3QixDQUFDUyxhQUFELEVBQWdCekUsSUFBaEIsRUFBc0JDLFdBQXRCLENBQXhCO0lBQ0Q7RUE5QkQ7SUFBQTtFQUFBO0lBQUE7RUFBQTs7RUFnQ0EsT0FBT2dFLFFBQVA7QUFDRDs7QUFFTSxTQUFTdkQsd0JBQVQsQ0FDTEYsUUFESyxFQUVMUixJQUZLLEVBR0xDLFdBSEssRUFJTDtFQUNBLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxHQUFaLENBQWdCTSxRQUFRLENBQUNMLEdBQXpCLENBQUwsRUFBb0M7SUFDbENGLFdBQVcsQ0FBQ0csR0FBWixDQUFnQkksUUFBUSxDQUFDTCxHQUF6Qjs7SUFEa0MsNkNBR2JLLFFBQVEsQ0FBQzBELE9BSEk7SUFBQTs7SUFBQTtNQUdsQywwREFBdUM7UUFBQSxJQUE1QmIsTUFBNEI7UUFDckMsSUFBTWMsYUFBYSxHQUFHZCxNQUFNLENBQUNqQyxNQUE3Qjs7UUFDQSxJQUFJcEIsSUFBSSxDQUFDaUIsV0FBTCxLQUFxQlgsU0FBckIsSUFBa0M2RCxhQUFhLEtBQUs3RCxTQUF4RCxFQUFtRTtVQUNqRSxJQUFNYyxNQUFNLEdBQUdwQixJQUFJLENBQUNpQixXQUFMLENBQWlCa0QsYUFBYSxDQUFDOUMsU0FBL0IsQ0FBZjs7VUFDQSxJQUFJRCxNQUFNLEtBQUtkLFNBQWYsRUFBMEI7WUFDeEI2RCxhQUFhLENBQUMvQyxNQUFkLEdBQXVCQSxNQUF2QjtZQUNBRSxzQkFBc0IsQ0FBQ0YsTUFBRCxFQUFTcEIsSUFBVCxFQUFlQyxXQUFmLENBQXRCO1VBQ0Q7UUFDRjs7UUFFRCxJQUFJRCxJQUFJLENBQUNXLFdBQUwsS0FBcUJMLFNBQXJCLElBQWtDK0MsTUFBTSxDQUFDekMsU0FBUCxLQUFxQk4sU0FBM0QsRUFBc0U7VUFDcEUsSUFBTU8sTUFBTSxHQUFHYixJQUFJLENBQUNXLFdBQUwsQ0FBaUIwQyxNQUFNLENBQUN6QyxTQUF4QixDQUFmOztVQUNBLElBQUlDLE1BQU0sS0FBS1AsU0FBZixFQUEwQjtZQUN4QitDLE1BQU0sQ0FBQ3hDLE1BQVAsR0FBZ0JBLE1BQWhCO1lBQ0FDLHNCQUFzQixDQUFDRCxNQUFELEVBQVNiLElBQVQsRUFBZUMsV0FBZixDQUF0QjtVQUNEO1FBQ0Y7TUFDRjtJQXBCaUM7TUFBQTtJQUFBO01BQUE7SUFBQTs7SUFzQmxDLElBQUlELElBQUksQ0FBQ29FLFlBQUwsS0FBc0I5RCxTQUExQixFQUFxQztNQUNuQyxJQUFNK0QsT0FBTyxHQUFHckUsSUFBSSxDQUFDb0UsWUFBTCxDQUFrQjVELFFBQVEsQ0FBQzhELFVBQTNCLENBQWhCOztNQUNBLElBQUlELE9BQU8sS0FBSy9ELFNBQWhCLEVBQTJCO1FBQ3pCRSxRQUFRLENBQUM2RCxPQUFULEdBQW1CQSxPQUFuQjtRQUNBRSx1QkFBdUIsQ0FBQ0YsT0FBRCxFQUFVckUsSUFBVixFQUFnQkMsV0FBaEIsQ0FBdkI7TUFDRDtJQUNGOztJQTVCaUMsNkNBOEJYTyxRQUFRLENBQUNnRSxTQUFULElBQXNCLEVBOUJYO0lBQUE7O0lBQUE7TUE4QmxDLDBEQUFpRDtRQUFBLElBQXRDUCxRQUFzQztRQUMvQ0Qsd0JBQXdCLENBQUNDLFFBQUQsRUFBV2pFLElBQVgsRUFBaUJDLFdBQWpCLENBQXhCO01BQ0Q7SUFoQ2lDO01BQUE7SUFBQTtNQUFBO0lBQUE7RUFpQ25DOztFQUVELE9BQU9PLFFBQVA7QUFDRDs7QUFFTSxTQUFTK0QsdUJBQVQsQ0FDTEYsT0FESyxFQUVMckUsSUFGSyxFQUdMQyxXQUhLLEVBSUw7RUFDQSxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsR0FBWixDQUFnQm1FLE9BQU8sQ0FBQ2xFLEdBQXhCLENBQUwsRUFBbUM7SUFBQTs7SUFDakNGLFdBQVcsQ0FBQ0csR0FBWixDQUFnQmlFLE9BQU8sQ0FBQ2xFLEdBQXhCOztJQURpQyxzRUFHZGtFLE9BQU8sQ0FBQ3pCLGdCQUhNLHlFQUdjLEVBSGQ7SUFBQTs7SUFBQTtNQUdqQywwREFBbUQ7UUFBQSxJQUF4QzdDLElBQXdDO1FBQ2pERCw4QkFBOEIsQ0FBQ0MsSUFBRCxFQUFPQyxJQUFQLEVBQWFDLFdBQWIsQ0FBOUI7TUFDRDtJQUxnQztNQUFBO0lBQUE7TUFBQTtJQUFBOztJQU9qQyxJQUFNeUUsVUFBVSxHQUFHTCxPQUFPLENBQUNLLFVBQTNCOztJQUNBLElBQUlBLFVBQVUsS0FBS3BFLFNBQW5CLEVBQThCO01BQzVCLElBQUlOLElBQUksQ0FBQ2lCLFdBQUwsS0FBcUJYLFNBQXpCLEVBQW9DO1FBQUEsNkNBQ05vRSxVQUFVLENBQUNDLE9BQVgsSUFBc0IsRUFEaEI7UUFBQTs7UUFBQTtVQUNsQywwREFBc0Q7WUFBQSxJQUEzQ1IsYUFBMkM7WUFDcEQsSUFBTS9DLE1BQU0sR0FBR3BCLElBQUksQ0FBQ2lCLFdBQUwsQ0FBaUJrRCxhQUFhLENBQUM5QyxTQUEvQixDQUFmOztZQUNBLElBQUlELE1BQU0sS0FBS2QsU0FBZixFQUEwQjtjQUN4QjZELGFBQWEsQ0FBQy9DLE1BQWQsR0FBdUJBLE1BQXZCO2NBQ0FFLHNCQUFzQixDQUFDRixNQUFELEVBQVNwQixJQUFULEVBQWVDLFdBQWYsQ0FBdEI7WUFDRDs7WUFDRCxJQUFJbUIsTUFBTSxLQUFLZCxTQUFYLElBQXdCNkQsYUFBYSxDQUFDUyxTQUFkLEtBQTRCdEUsU0FBeEQsRUFBbUU7Y0FBQSw2Q0FDNUNjLE1BQU0sQ0FBQzBCLE9BQVAsSUFBa0IsRUFEMEI7Y0FBQTs7Y0FBQTtnQkFDakUsMERBQTJDO2tCQUFBLElBQWhDQyxNQUFnQzs7a0JBQ3pDLElBQUlBLE1BQU0sQ0FBQzVDLEdBQVAsS0FBZWdFLGFBQWEsQ0FBQ1MsU0FBakMsRUFBNEM7b0JBQzFDVCxhQUFhLENBQUNwQixNQUFkLEdBQXVCQSxNQUF2QjtvQkFDQTtrQkFDRDtnQkFDRjtjQU5nRTtnQkFBQTtjQUFBO2dCQUFBO2NBQUE7WUFPbEU7VUFDRjtRQWZpQztVQUFBO1FBQUE7VUFBQTtRQUFBO01BZ0JuQzs7TUFDRCxJQUNFL0MsSUFBSSxDQUFDVyxXQUFMLEtBQXFCTCxTQUFyQixJQUNBb0UsVUFBVSxDQUFDOUQsU0FBWCxLQUF5Qk4sU0FGM0IsRUFHRTtRQUNBLElBQU1PLE1BQU0sR0FBR2IsSUFBSSxDQUFDVyxXQUFMLENBQWlCK0QsVUFBVSxDQUFDOUQsU0FBNUIsQ0FBZjs7UUFDQSxJQUFJQyxNQUFNLEtBQUtQLFNBQWYsRUFBMEI7VUFDeEJvRSxVQUFVLENBQUM3RCxNQUFYLEdBQW9CQSxNQUFwQjtVQUNBQyxzQkFBc0IsQ0FBQ0QsTUFBRCxFQUFTYixJQUFULEVBQWVDLFdBQWYsQ0FBdEI7UUFDRDtNQUNGO0lBQ0Y7RUFDRjs7RUFFRCxPQUFPb0UsT0FBUDtBQUNEOztBQUVNLFNBQVN2RCxzQkFBVCxDQUNMRCxNQURLLEVBRUxiLElBRkssRUFHTEMsV0FISyxFQUlMO0VBQ0EsSUFBSSxDQUFDQSxXQUFXLENBQUNDLEdBQVosQ0FBZ0JXLE1BQU0sQ0FBQ1YsR0FBdkIsQ0FBTCxFQUFrQztJQUNoQ0YsV0FBVyxDQUFDRyxHQUFaLENBQWdCUyxNQUFNLENBQUNWLEdBQXZCOztJQUVBLElBQ0VILElBQUksQ0FBQ1csV0FBTCxLQUFxQkwsU0FBckIsSUFDQU8sTUFBTSxDQUFDZ0UsZUFBUCxLQUEyQnZFLFNBRjdCLEVBR0U7TUFDQSxJQUFNd0UsWUFBWSxHQUFHOUUsSUFBSSxDQUFDVyxXQUFMLENBQWlCRSxNQUFNLENBQUNnRSxlQUF4QixDQUFyQjs7TUFDQSxJQUFJQyxZQUFZLEtBQUt4RSxTQUFyQixFQUFnQztRQUM5Qk8sTUFBTSxDQUFDaUUsWUFBUCxHQUFzQkEsWUFBdEI7UUFDQWhFLHNCQUFzQixDQUFDZ0UsWUFBRCxFQUFlOUUsSUFBZixFQUFxQkMsV0FBckIsQ0FBdEI7TUFDRDtJQUNGLENBWitCLENBY2hDOztFQUNEOztFQUVELE9BQU9ZLE1BQVA7QUFDRDs7QUFFTSxTQUFTYSx1QkFBVCxDQUNMRCxPQURLLEVBRUx6QixJQUZLLEVBR0xDLFdBSEssRUFJTDtFQUNBLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxHQUFaLENBQWdCdUIsT0FBTyxDQUFDdEIsR0FBeEIsQ0FBTCxFQUFtQztJQUNqQ0YsV0FBVyxDQUFDRyxHQUFaLENBQWdCcUIsT0FBTyxDQUFDdEIsR0FBeEI7SUFFQSxJQUFNNEUsVUFBVSxHQUFHdEQsT0FBTyxDQUFDc0QsVUFBM0I7O0lBQ0EsSUFBSUEsVUFBVSxLQUFLekUsU0FBbkIsRUFBOEI7TUFDNUIsSUFBSU4sSUFBSSxDQUFDaUIsV0FBTCxLQUFxQlgsU0FBekIsRUFBb0M7UUFBQSw2Q0FDTnlFLFVBQVUsQ0FBQ0osT0FBWCxJQUFzQixFQURoQjtRQUFBOztRQUFBO1VBQ2xDLDBEQUFzRDtZQUFBLElBQTNDUixhQUEyQztZQUNwRCxJQUFNL0MsTUFBTSxHQUFHcEIsSUFBSSxDQUFDaUIsV0FBTCxDQUFpQmtELGFBQWEsQ0FBQzlDLFNBQS9CLENBQWY7O1lBQ0EsSUFBSUQsTUFBTSxLQUFLZCxTQUFmLEVBQTBCO2NBQ3hCNkQsYUFBYSxDQUFDL0MsTUFBZCxHQUF1QkEsTUFBdkI7Y0FDQUUsc0JBQXNCLENBQUNGLE1BQUQsRUFBU3BCLElBQVQsRUFBZUMsV0FBZixDQUF0QjtZQUNEO1VBQ0Y7UUFQaUM7VUFBQTtRQUFBO1VBQUE7UUFBQTtNQVFuQzs7TUFDRCxJQUFJRCxJQUFJLENBQUNXLFdBQUwsS0FBcUJMLFNBQXpCLEVBQW9DO1FBQ2xDLElBQU0wRSxhQUFhLEdBQUdELFVBQVUsQ0FBQ2xFLE1BQWpDOztRQUNBLElBQUltRSxhQUFhLEtBQUsxRSxTQUF0QixFQUFpQztVQUMvQixJQUFNTyxNQUFNLEdBQUdiLElBQUksQ0FBQ1csV0FBTCxDQUFpQnFFLGFBQWEsQ0FBQ3BFLFNBQS9CLENBQWY7O1VBQ0EsSUFBSUMsTUFBTSxLQUFLUCxTQUFmLEVBQTBCO1lBQ3hCMEUsYUFBYSxDQUFDbkUsTUFBZCxHQUF1QkEsTUFBdkI7WUFDQUMsc0JBQXNCLENBQUNELE1BQUQsRUFBU2IsSUFBVCxFQUFlQyxXQUFmLENBQXRCO1VBQ0Q7UUFDRjtNQUNGO0lBQ0Y7O0lBQ0QsSUFDRUQsSUFBSSxDQUFDVyxXQUFMLEtBQXFCTCxTQUFyQixJQUNBbUIsT0FBTyxDQUFDd0QsY0FBUixLQUEyQjNFLFNBRjdCLEVBR0U7TUFDQSxJQUFNNEUsV0FBVyxHQUFHbEYsSUFBSSxDQUFDVyxXQUFMLENBQWlCYyxPQUFPLENBQUN3RCxjQUF6QixDQUFwQjs7TUFDQSxJQUFJQyxXQUFXLEtBQUs1RSxTQUFwQixFQUErQjtRQUM3Qm1CLE9BQU8sQ0FBQ3lELFdBQVIsR0FBc0JBLFdBQXRCO1FBQ0FwRSxzQkFBc0IsQ0FBQ29FLFdBQUQsRUFBY2xGLElBQWQsRUFBb0JDLFdBQXBCLENBQXRCO01BQ0Q7SUFDRjs7SUFDRCxJQUFJRCxJQUFJLENBQUNpQixXQUFMLEtBQXFCWCxTQUF6QixFQUFvQztNQUNsQyxJQUFNNkUsWUFBWSxHQUFHMUQsT0FBTyxDQUFDMEQsWUFBN0I7O01BQ0EsSUFBSUEsWUFBWSxLQUFLN0UsU0FBckIsRUFBZ0M7UUFBQSw2Q0FDRzZFLFlBQVksQ0FBQ0Msb0JBQWIsSUFDL0IsRUFGNEI7UUFBQTs7UUFBQTtVQUM5QiwwREFDTTtZQUFBLElBREtDLGtCQUNMO1lBQ0osSUFBTWpFLE9BQU0sR0FBR3BCLElBQUksQ0FBQ2lCLFdBQUwsQ0FBaUJvRSxrQkFBa0IsQ0FBQ2hFLFNBQXBDLENBQWY7O1lBQ0EsSUFBSUQsT0FBTSxLQUFLZCxTQUFmLEVBQTBCO2NBQ3hCK0Usa0JBQWtCLENBQUNqRSxNQUFuQixHQUE0QkEsT0FBNUI7Y0FDQUUsc0JBQXNCLENBQUNGLE9BQUQsRUFBU3BCLElBQVQsRUFBZUMsV0FBZixDQUF0QjtZQUNEO1VBQ0Y7UUFSNkI7VUFBQTtRQUFBO1VBQUE7UUFBQTtNQVMvQjtJQUNGO0VBQ0Y7O0VBRUQsT0FBT3dCLE9BQVA7QUFDRDs7QUFFTSxTQUFTaUIsdUJBQVQsQ0FDTEYsT0FESyxFQUVMOEMsS0FGSyxFQUdMckYsV0FISyxFQUlMO0VBQ0EsSUFBSSxDQUFDQSxXQUFXLENBQUNDLEdBQVosQ0FBZ0JzQyxPQUFPLENBQUNyQyxHQUF4QixDQUFMLEVBQW1DO0lBQ2pDRixXQUFXLENBQUNHLEdBQVosQ0FBZ0JvQyxPQUFPLENBQUNyQyxHQUF4QixFQURpQyxDQUdqQztFQUNEOztFQUVELE9BQU9xQyxPQUFQO0FBQ0QifQ==
514
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMiLCJhY3RlIiwiZGF0YSIsInZpc2l0ZWRVaWRzIiwiaGFzIiwidWlkIiwiYWRkIiwiZG9jdW1lbnRCeVVpZCIsInVuZGVmaW5lZCIsImRlcG90SW5pdGlhbExlY3R1cmVEZWZpbml0aXZlUmVmIiwiZG9jdW1lbnQiLCJkZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZSIsImluc2VydERvY3VtZW50UmVmZXJlbmNlcyIsIm9yZ2FuZUJ5VWlkIiwib3JnYW5lUmVmIiwib3JnYW5lIiwiaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyIsInByb3ZlbmFuY2VSZWYiLCJwcm92ZW5hbmNlIiwiYWN0ZXVyQnlVaWQiLCJyYXBwb3J0ZXVycyIsInJhcHBvcnRldXIiLCJhY3RldXIiLCJhY3RldXJSZWYiLCJpbnNlcnRBY3RldXJSZWZlcmVuY2VzIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvblJlZiIsInJldW5pb24iLCJpbnNlcnRSZXVuaW9uUmVmZXJlbmNlcyIsIm9kalJlZiIsIm9kaiIsInBvaW50c09kaiIsInBvaW50T2RqIiwidGV4dGVBZG9wdGVSZWYiLCJ0ZXh0ZUFkb3B0ZSIsInRleHRlQXNzb2NpZVJlZiIsInRleHRlQXNzb2NpZSIsInRleHRlc0Fzc29jaWVzIiwic2NydXRpbkJ5VWlkIiwidm90ZVJlZnMiLCJzY3J1dGlucyIsInZvdGVSZWYiLCJzY3J1dGluIiwicHVzaCIsImluc2VydFNjcnV0aW5SZWZlcmVuY2VzIiwidm90ZXMiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwiY2hpbGRBY3RlIiwibWFuZGF0cyIsIm1hbmRhdCIsIm9yZ2FuZXMiLCJvcmdhbmVzUmVmcyIsImluc2VydEFtZW5kZW1lbnRSZWZlcmVuY2VzIiwiYW1lbmRlbWVudCIsInNpZ25hdGFpcmVzIiwiYXV0ZXVyIiwiYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZVJlZiIsImF1dGV1clJhcHBvcnRldXJPcmdhbmUiLCJnb3V2ZXJuZW1lbnRSZWYiLCJnb3V2ZXJuZW1lbnQiLCJncm91cGVQb2xpdGlxdWVSZWYiLCJncm91cGVQb2xpdGlxdWUiLCJjb3NpZ25hdGFpcmVzUmVmcyIsImNvc2lnbmF0YWlyZXMiLCJjb3NpZ25hdGFpcmVSZWYiLCJjb3NpZ25hdGFpcmUiLCJpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMiLCJkaXZpc2lvbiIsImF1dGV1cnMiLCJhY3RldXJTdW1tYXJ5IiwiZG9zc2llckJ5VWlkIiwiZG9zc2llciIsImRvc3NpZXJSZWYiLCJpbnNlcnREb3NzaWVyUmVmZXJlbmNlcyIsImRpdmlzaW9ucyIsImNoaWxkRGl2aXNpb24iLCJpbml0aWF0ZXVyIiwiYWN0ZXVycyIsIm1hbmRhdFJlZiIsIm9yZ2FuZVBhcmVudFJlZiIsIm9yZ2FuZVBhcmVudCIsImRlbWFuZGV1cnMiLCJvcmdhbmVTdW1tYXJ5Iiwib3JnYW5lUmV1bmlSZWYiLCJvcmdhbmVSZXVuaSIsInBhcnRpY2lwYW50cyIsInBhcnRpY2lwYW50c0ludGVybmVzIiwicGFydGljaXBhbnRJbnRlcm5lIiwiX2RhdGEiXSwic291cmNlcyI6WyIuLi9zcmMvaW5zZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGV1ciwgT3JnYW5lIH0gZnJvbSBcIi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IFJldW5pb24gfSBmcm9tIFwiLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBBY3RlTGVnaXNsYXRpZixcbiAgRGl2aXNpb24sXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgU2NydXRpbiB9IGZyb20gXCIuL3R5cGVzL3NjcnV0aW5zXCJcblxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXREYXRhIHtcbiAgcmVhZG9ubHkgYWN0ZXVyQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZD86IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH1cbiAgcmVhZG9ubHkgZG9zc2llckJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfVxuICByZWFkb25seSBzY3J1dGluQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoXG4gIGFjdGU6IEFjdGVMZWdpc2xhdGlmLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoYWN0ZS51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGFjdGUudWlkKVxuXG4gICAgaWYgKFxuICAgICAgZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhLmRvY3VtZW50QnlVaWRbYWN0ZS5kZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmUgPSBkb2N1bWVudFxuICAgICAgICBpbnNlcnREb2N1bWVudFJlZmVyZW5jZXMoZG9jdW1lbnQsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUub3JnYW5lUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYWN0ZS5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucHJvdmVuYW5jZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2FjdGUucHJvdmVuYW5jZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3RlLnByb3ZlbmFuY2UgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucmFwcG9ydGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCByYXBwb3J0ZXVyIG9mIGFjdGUucmFwcG9ydGV1cnMpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFtyYXBwb3J0ZXVyLmFjdGV1clJlZl1cbiAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwcG9ydGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEucmV1bmlvbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS5yZXVuaW9uUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJldW5pb24gPSBkYXRhLnJldW5pb25CeVVpZFthY3RlLnJldW5pb25SZWZdXG4gICAgICBpZiAocmV1bmlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUucmV1bmlvbiA9IHJldW5pb25cbiAgICAgICAgaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMocmV1bmlvbiwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIGlmIChhY3RlLm9kalJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQgJiYgb2RqLnBvaW50c09kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGopIHtcbiAgICAgICAgICAgICAgaWYgKHBvaW50T2RqLnVpZCA9PT0gYWN0ZS5vZGpSZWYpIHtcbiAgICAgICAgICAgICAgICBhY3RlLm9kaiA9IHBvaW50T2RqXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS50ZXh0ZUFkb3B0ZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQWRvcHRlUmVmXVxuICAgICAgaWYgKGRvY3VtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS50ZXh0ZUFkb3B0ZSA9IGRvY3VtZW50XG4gICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhY3RlLnRleHRlQXNzb2NpZVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQXNzb2NpZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUudGV4dGVBc3NvY2llID0gZG9jdW1lbnRcbiAgICAgICAgaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKGRvY3VtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUudGV4dGVzQXNzb2NpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCB0ZXh0ZUFzc29jaWUgb2YgYWN0ZS50ZXh0ZXNBc3NvY2llcykge1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFt0ZXh0ZUFzc29jaWUudGV4dGVBc3NvY2llUmVmXVxuICAgICAgICBpZiAoZG9jdW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRleHRlQXNzb2NpZS50ZXh0ZUFzc29jaWUgPSBkb2N1bWVudFxuICAgICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuc2NydXRpbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS52b3RlUmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzY3J1dGlucyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHZvdGVSZWYgb2YgYWN0ZS52b3RlUmVmcykge1xuICAgICAgICBjb25zdCBzY3J1dGluID0gZGF0YS5zY3J1dGluQnlVaWRbdm90ZVJlZl1cbiAgICAgICAgaWYgKHNjcnV0aW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5zLnB1c2goc2NydXRpbilcbiAgICAgICAgICBpbnNlcnRTY3J1dGluUmVmZXJlbmNlcyhzY3J1dGluLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWN0ZS52b3RlcyA9IHNjcnV0aW5zXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZEFjdGUgb2YgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzIHx8IFtdKSB7XG4gICAgICBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoY2hpbGRBY3RlLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWN0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhcbiAgYWN0ZXVyOiBBY3RldXIsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhY3RldXIudWlkKSkge1xuICAgIHZpc2l0ZWRVaWRzLmFkZChhY3RldXIudWlkKVxuXG4gICAgaWYgKGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBtYW5kYXQgb2YgYWN0ZXVyLm1hbmRhdHMgfHwgW10pIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3Qgb3JnYW5lUmVmIG9mIG1hbmRhdC5vcmdhbmVzUmVmcykge1xuICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbb3JnYW5lUmVmXVxuICAgICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3JnYW5lcy5wdXNoKG9yZ2FuZSlcbiAgICAgICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWFuZGF0Lm9yZ2FuZXMgPSBvcmdhbmVzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFjdGV1clxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QW1lbmRlbWVudFJlZmVyZW5jZXMoXG4gIGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQoYW1lbmRlbWVudC51aWQpXG5cbiAgICBjb25zdCBzaWduYXRhaXJlcyA9IGFtZW5kZW1lbnQuc2lnbmF0YWlyZXNcbiAgICBjb25zdCBhdXRldXIgPSBzaWduYXRhaXJlcy5hdXRldXJcbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5hY3RldXJSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthdXRldXIuYWN0ZXVyUmVmXVxuICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF1dGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGF1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGF1dGV1clJhcHBvcnRldXJPcmdhbmUgPVxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmXVxuICAgICAgaWYgKGF1dGV1clJhcHBvcnRldXJPcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZSA9IGF1dGV1clJhcHBvcnRldXJPcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhhdXRldXJSYXBwb3J0ZXVyT3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ291dmVybmVtZW50UmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGdvdXZlcm5lbWVudCA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdvdXZlcm5lbWVudFJlZl1cbiAgICAgIGlmIChnb3V2ZXJuZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ291dmVybmVtZW50ID0gZ291dmVybmVtZW50XG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoZ291dmVybmVtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdyb3VwZVBvbGl0aXF1ZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlID0gb3JnYW5lXG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29zaWduYXRhaXJlc1JlZnMgPSBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmc1xuICAgICAgaWYgKGNvc2lnbmF0YWlyZXNSZWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY29zaWduYXRhaXJlcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3QgY29zaWduYXRhaXJlUmVmIG9mIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgY29zaWduYXRhaXJlID0gZGF0YS5hY3RldXJCeVVpZFtjb3NpZ25hdGFpcmVSZWZdXG4gICAgICAgICAgaWYgKGNvc2lnbmF0YWlyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb3NpZ25hdGFpcmVzLnB1c2goY29zaWduYXRhaXJlKVxuICAgICAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhjb3NpZ25hdGFpcmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzID0gY29zaWduYXRhaXJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbWVuZGVtZW50XG59XG5cbmZ1bmN0aW9uIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhcbiAgZGl2aXNpb246IERpdmlzaW9uLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgZm9yIChjb25zdCBhdXRldXIgb2YgZGl2aXNpb24uYXV0ZXVycykge1xuICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RldXJTdW1tYXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbYWN0ZXVyU3VtbWFyeS5hY3RldXJSZWZdXG4gICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYXV0ZXVyLm9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXV0ZXVyLm9yZ2FuZSA9IG9yZ2FuZVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEuZG9zc2llckJ5VWlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkb3NzaWVyID0gZGF0YS5kb3NzaWVyQnlVaWRbZGl2aXNpb24uZG9zc2llclJlZl1cbiAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkaXZpc2lvbi5kb3NzaWVyID0gZG9zc2llclxuICAgICAgaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoZG9zc2llciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZERpdmlzaW9uIG9mIGRpdmlzaW9uLmRpdmlzaW9ucyB8fCBbXSkge1xuICAgIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhjaGlsZERpdmlzaW9uLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgfVxuXG4gIHJldHVybiBkaXZpc2lvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKFxuICBkb2N1bWVudDogRG9jdW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhkb2N1bWVudC51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvY3VtZW50LnVpZClcblxuICAgIGZvciAoY29uc3QgYXV0ZXVyIG9mIGRvY3VtZW50LmF1dGV1cnMpIHtcbiAgICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJTdW1tYXJ5LmFjdGV1ciA9IGFjdGV1clxuICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGF1dGV1ci5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YS5kb3NzaWVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGRhdGEuZG9zc2llckJ5VWlkW2RvY3VtZW50LmRvc3NpZXJSZWZdXG4gICAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY3VtZW50LmRvc3NpZXIgPSBkb3NzaWVyXG4gICAgICAgIGluc2VydERvc3NpZXJSZWZlcmVuY2VzKGRvc3NpZXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGl2aXNpb24gb2YgZG9jdW1lbnQuZGl2aXNpb25zIHx8IFtdKSB7XG4gICAgICBpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMoZGl2aXNpb24sIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoXG4gIGRvc3NpZXI6IERvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoZG9zc2llci51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvc3NpZXIudWlkKVxuXG4gICAgZm9yIChjb25zdCBhY3RlIG9mIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyA/PyBbXSkge1xuICAgICAgaW5zZXJ0QWN0ZUxlZ2lzbGF0aWZSZWZlcmVuY2VzKGFjdGUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYXRldXIgPSBkb3NzaWVyLmluaXRpYXRldXJcbiAgICBpZiAoaW5pdGlhdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3VtbWFyeSBvZiBpbml0aWF0ZXVyLmFjdGV1cnMgfHwgW10pIHtcbiAgICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICAgIGlmIChhY3RldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkubWFuZGF0UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0IG9mIGFjdGV1ci5tYW5kYXRzIHx8IFtdKSB7XG4gICAgICAgICAgICAgIGlmIChtYW5kYXQudWlkID09PSBhY3RldXJTdW1tYXJ5Lm1hbmRhdFJlZikge1xuICAgICAgICAgICAgICAgIGFjdGV1clN1bW1hcnkubWFuZGF0ID0gbWFuZGF0XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgaW5pdGlhdGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbaW5pdGlhdGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluaXRpYXRldXIub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvc3NpZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoXG4gIG9yZ2FuZTogT3JnYW5lLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMob3JnYW5lLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQob3JnYW5lLnVpZClcblxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudFJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVQYXJlbnQgPSBkYXRhLm9yZ2FuZUJ5VWlkW29yZ2FuZS5vcmdhbmVQYXJlbnRSZWZdXG4gICAgICBpZiAob3JnYW5lUGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudCA9IG9yZ2FuZVBhcmVudFxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVBhcmVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIG9yZ2FuZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMoXG4gIHJldW5pb246IFJldW5pb24sXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhyZXVuaW9uLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQocmV1bmlvbi51aWQpXG5cbiAgICBjb25zdCBkZW1hbmRldXJzID0gcmV1bmlvbi5kZW1hbmRldXJzXG4gICAgaWYgKGRlbWFuZGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clN1bW1hcnkgb2YgZGVtYW5kZXVycy5hY3RldXJzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthY3RldXJTdW1tYXJ5LmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjdGV1clN1bW1hcnkuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZVN1bW1hcnkgPSBkZW1hbmRldXJzLm9yZ2FuZVxuICAgICAgICBpZiAob3JnYW5lU3VtbWFyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb3JnYW5lID0gZGF0YS5vcmdhbmVCeVVpZFtvcmdhbmVTdW1tYXJ5Lm9yZ2FuZVJlZl1cbiAgICAgICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9yZ2FuZVN1bW1hcnkub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmV1bmlvbi5vcmdhbmVSZXVuaVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVSZXVuaSA9IGRhdGEub3JnYW5lQnlVaWRbcmV1bmlvbi5vcmdhbmVSZXVuaVJlZl1cbiAgICAgIGlmIChvcmdhbmVSZXVuaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldW5pb24ub3JnYW5lUmV1bmkgPSBvcmdhbmVSZXVuaVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVJldW5pLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gcmV1bmlvbi5wYXJ0aWNpcGFudHNcbiAgICAgIGlmIChwYXJ0aWNpcGFudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnRpY2lwYW50SW50ZXJuZSBvZiBwYXJ0aWNpcGFudHMucGFydGljaXBhbnRzSW50ZXJuZXMgfHxcbiAgICAgICAgICBbXSkge1xuICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbcGFydGljaXBhbnRJbnRlcm5lLmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SW50ZXJuZS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV1bmlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U2NydXRpblJlZmVyZW5jZXMoXG4gIHNjcnV0aW46IFNjcnV0aW4sXG4gIF9kYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKHNjcnV0aW4udWlkKVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIHNjcnV0aW5cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQSxTQUFTQSw4QkFBOEIsQ0FDckNDLElBQW9CLEVBQ3BCQyxJQUFnQixFQUNoQkMsV0FBd0IsRUFDeEI7RUFDQSxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsR0FBRyxDQUFDSCxJQUFJLENBQUNJLEdBQUcsQ0FBQyxFQUFFO0lBQzlCRixXQUFXLENBQUNHLEdBQUcsQ0FBQ0wsSUFBSSxDQUFDSSxHQUFHLENBQUM7SUFFekIsSUFDRUgsSUFBSSxDQUFDSyxhQUFhLEtBQUtDLFNBQVMsSUFDaENQLElBQUksQ0FBQ1EsZ0NBQWdDLEtBQUtELFNBQVMsRUFDbkQ7TUFDQSxJQUFNRSxRQUFRLEdBQUdSLElBQUksQ0FBQ0ssYUFBYSxDQUFDTixJQUFJLENBQUNRLGdDQUFnQyxDQUFDO01BQzFFLElBQUlDLFFBQVEsS0FBS0YsU0FBUyxFQUFFO1FBQzFCUCxJQUFJLENBQUNVLDZCQUE2QixHQUFHRCxRQUFRO1FBQzdDRSx3QkFBd0IsQ0FBQ0YsUUFBUSxFQUFFUixJQUFJLEVBQUVDLFdBQVcsQ0FBQztNQUN2RDtJQUNGO0lBQ0EsSUFBSUQsSUFBSSxDQUFDVyxXQUFXLEtBQUtMLFNBQVMsSUFBSVAsSUFBSSxDQUFDYSxTQUFTLEtBQUtOLFNBQVMsRUFBRTtNQUNsRSxJQUFNTyxNQUFNLEdBQUdiLElBQUksQ0FBQ1csV0FBVyxDQUFDWixJQUFJLENBQUNhLFNBQVMsQ0FBQztNQUMvQyxJQUFJQyxNQUFNLEtBQUtQLFNBQVMsRUFBRTtRQUN4QlAsSUFBSSxDQUFDYyxNQUFNLEdBQUdBLE1BQU07UUFDcEJDLHNCQUFzQixDQUFDRCxNQUFNLEVBQUViLElBQUksRUFBRUMsV0FBVyxDQUFDO01BQ25EO0lBQ0Y7SUFDQSxJQUFJRCxJQUFJ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