@loxia/mst-viewer 8.1.3-202511240252 → 8.1.3-202511241306

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 (196) hide show
  1. package/esm2022/generated/openapi/api/api.mjs +23 -0
  2. package/esm2022/generated/openapi/api/appConfigController.service.mjs +140 -0
  3. package/esm2022/generated/openapi/api/appConfigController.serviceInterface.mjs +2 -0
  4. package/esm2022/generated/openapi/api/bewegingController.service.mjs +155 -0
  5. package/esm2022/generated/openapi/api/bewegingController.serviceInterface.mjs +2 -0
  6. package/esm2022/generated/openapi/api/class0BuildProperties.service.mjs +140 -0
  7. package/esm2022/generated/openapi/api/class0BuildProperties.serviceInterface.mjs +2 -0
  8. package/esm2022/generated/openapi/api/connectorController.service.mjs +146 -0
  9. package/esm2022/generated/openapi/api/connectorController.serviceInterface.mjs +2 -0
  10. package/esm2022/generated/openapi/api/logController.service.mjs +150 -0
  11. package/esm2022/generated/openapi/api/logController.serviceInterface.mjs +2 -0
  12. package/esm2022/generated/openapi/api/p21Controller.service.mjs +236 -0
  13. package/esm2022/generated/openapi/api/p21Controller.serviceInterface.mjs +2 -0
  14. package/esm2022/generated/openapi/api/sbController.service.mjs +203 -0
  15. package/esm2022/generated/openapi/api/sbController.serviceInterface.mjs +2 -0
  16. package/esm2022/generated/openapi/api.module.mjs +40 -0
  17. package/esm2022/generated/openapi/configuration.mjs +99 -0
  18. package/esm2022/generated/openapi/encoder.mjs +19 -0
  19. package/esm2022/generated/openapi/index.mjs +7 -0
  20. package/esm2022/generated/openapi/model/actieDto.mjs +13 -0
  21. package/esm2022/generated/openapi/model/algemeneRitDto.mjs +13 -0
  22. package/esm2022/generated/openapi/model/bewegingDto.mjs +2 -0
  23. package/esm2022/generated/openapi/model/frontendKeycloakConfig.mjs +13 -0
  24. package/esm2022/generated/openapi/model/frontendProperties.mjs +2 -0
  25. package/esm2022/generated/openapi/model/logDto.mjs +2 -0
  26. package/esm2022/generated/openapi/model/models.mjs +9 -0
  27. package/esm2022/generated/openapi/model/ritRequestDto.mjs +2 -0
  28. package/esm2022/generated/openapi/model/signaleringsbeeldDto.mjs +13 -0
  29. package/esm2022/generated/openapi/param.mjs +2 -0
  30. package/esm2022/generated/openapi/variables.mjs +9 -0
  31. package/esm2022/lib/atomic-components/message/message.component.mjs +3 -3
  32. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.entity.mjs +7 -4
  33. package/esm2022/lib/components/carousel-controls/carousel-controls.component.mjs +5 -6
  34. package/esm2022/lib/components/mstviewer/mstviewer.component.mjs +13 -7
  35. package/esm2022/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +18 -12
  36. package/esm2022/lib/components/rpe/rpe.component.mjs +6 -2
  37. package/esm2022/lib/components/svg-visualisatie/svg-visualisatie.component.mjs +8 -7
  38. package/esm2022/lib/components/viewer-controls/viewer-controls.component.mjs +16 -13
  39. package/esm2022/lib/model/km-range.mjs +2 -2
  40. package/esm2022/lib/model/nieuwe-route.mjs +2 -2
  41. package/esm2022/lib/model/ritdeel.mjs +10 -10
  42. package/esm2022/lib/mst-viewer.module.mjs +6 -5
  43. package/esm2022/lib/resources/mstlogging.resource.mjs +12 -145
  44. package/esm2022/lib/resources/signaleringsbeeldinfo.resource.mjs +16 -33
  45. package/esm2022/lib/services/base-rest.service.mjs +3 -1
  46. package/esm2022/lib/services/beweging-utils.service.mjs +6 -6
  47. package/esm2022/lib/services/debug.service.mjs +3 -3
  48. package/esm2022/lib/services/editor.service.mjs +3 -1
  49. package/esm2022/lib/services/print-beweging.service.mjs +23 -20
  50. package/esm2022/lib/services/rit-lezer.service.mjs +4 -4
  51. package/esm2022/lib/services/signalerings-beeld-manager.service.mjs +1 -1
  52. package/esm2022/lib/services/viewer-control.service.mjs +10 -9
  53. package/esm2022/lib/state/actions/actions.mjs +2 -5
  54. package/esm2022/lib/state/actions/ritdelen.actions.mjs +4 -4
  55. package/esm2022/lib/state/effect/bepaal-ongeplande-acties.effect.mjs +8 -7
  56. package/esm2022/lib/state/effect/bepaal-sb-infos.effect.mjs +2 -2
  57. package/esm2022/lib/state/effect/beweging-invoegen.effect.mjs +1 -1
  58. package/esm2022/lib/state/effect/delete-ongeplande-actie.effect.mjs +1 -1
  59. package/esm2022/lib/state/effect/focus-effect.mjs +2 -2
  60. package/esm2022/lib/state/effect/laad-route-files.effect.mjs +8 -8
  61. package/esm2022/lib/state/effect/laad-signaleringsbeelden.effect.mjs +25 -27
  62. package/esm2022/lib/state/effect/ritdelen.effect.mjs +26 -25
  63. package/esm2022/lib/state/mst-editor-state.mjs +11 -15
  64. package/esm2022/lib/state/reducer/rit-delen.reducer.mjs +1 -1
  65. package/esm2022/lib/util/actie-helper.mjs +29 -25
  66. package/esm2022/lib/util/actie-popover-bepaler.mjs +2 -2
  67. package/esm2022/lib/util/logging-helper.mjs +37 -50
  68. package/esm2022/lib/util/multi-map.mjs +2 -3
  69. package/esm2022/lib/util/utils.mjs +5 -5
  70. package/esm2022/lib/util/zone-util.mjs +2 -1
  71. package/esm2022/src/generated/openapi/api/api.mjs +23 -0
  72. package/esm2022/src/generated/openapi/api/appConfigController.service.mjs +140 -0
  73. package/esm2022/src/generated/openapi/api/appConfigController.serviceInterface.mjs +2 -0
  74. package/esm2022/src/generated/openapi/api/bewegingController.service.mjs +155 -0
  75. package/esm2022/src/generated/openapi/api/bewegingController.serviceInterface.mjs +2 -0
  76. package/esm2022/src/generated/openapi/api/class0BuildProperties.service.mjs +140 -0
  77. package/esm2022/src/generated/openapi/api/class0BuildProperties.serviceInterface.mjs +2 -0
  78. package/esm2022/src/generated/openapi/api/connectorController.service.mjs +146 -0
  79. package/esm2022/src/generated/openapi/api/connectorController.serviceInterface.mjs +2 -0
  80. package/esm2022/src/generated/openapi/api/logController.service.mjs +150 -0
  81. package/esm2022/src/generated/openapi/api/logController.serviceInterface.mjs +2 -0
  82. package/esm2022/src/generated/openapi/api/p21Controller.service.mjs +236 -0
  83. package/esm2022/src/generated/openapi/api/p21Controller.serviceInterface.mjs +2 -0
  84. package/esm2022/src/generated/openapi/api/sbController.service.mjs +203 -0
  85. package/esm2022/src/generated/openapi/api/sbController.serviceInterface.mjs +2 -0
  86. package/esm2022/src/generated/openapi/api.module.mjs +40 -0
  87. package/esm2022/src/generated/openapi/configuration.mjs +99 -0
  88. package/esm2022/src/generated/openapi/encoder.mjs +19 -0
  89. package/esm2022/src/generated/openapi/index.mjs +7 -0
  90. package/esm2022/src/generated/openapi/loxia-mst-viewer-src-generated-openapi.mjs +5 -0
  91. package/esm2022/src/generated/openapi/model/actieDto.mjs +13 -0
  92. package/esm2022/src/generated/openapi/model/algemeneRitDto.mjs +13 -0
  93. package/esm2022/src/generated/openapi/model/bewegingDto.mjs +2 -0
  94. package/esm2022/src/generated/openapi/model/frontendKeycloakConfig.mjs +13 -0
  95. package/esm2022/src/generated/openapi/model/frontendProperties.mjs +2 -0
  96. package/esm2022/src/generated/openapi/model/logDto.mjs +2 -0
  97. package/esm2022/src/generated/openapi/model/models.mjs +9 -0
  98. package/esm2022/src/generated/openapi/model/ritRequestDto.mjs +2 -0
  99. package/esm2022/src/generated/openapi/model/signaleringsbeeldDto.mjs +13 -0
  100. package/esm2022/src/generated/openapi/param.mjs +2 -0
  101. package/esm2022/src/generated/openapi/variables.mjs +9 -0
  102. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs +1330 -0
  103. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs.map +1 -0
  104. package/fesm2022/loxia-mst-viewer.mjs +1868 -676
  105. package/fesm2022/loxia-mst-viewer.mjs.map +1 -1
  106. package/generated/openapi/api/api.d.ts +22 -0
  107. package/generated/openapi/api/appConfigController.service.d.ts +38 -0
  108. package/generated/openapi/api/appConfigController.serviceInterface.d.ts +24 -0
  109. package/generated/openapi/api/bewegingController.service.d.ts +40 -0
  110. package/generated/openapi/api/bewegingController.serviceInterface.d.ts +27 -0
  111. package/generated/openapi/api/class0BuildProperties.service.d.ts +36 -0
  112. package/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +23 -0
  113. package/generated/openapi/api/connectorController.service.d.ts +38 -0
  114. package/generated/openapi/api/connectorController.serviceInterface.d.ts +25 -0
  115. package/generated/openapi/api/logController.service.d.ts +38 -0
  116. package/generated/openapi/api/logController.serviceInterface.d.ts +25 -0
  117. package/generated/openapi/api/p21Controller.service.d.ts +62 -0
  118. package/generated/openapi/api/p21Controller.serviceInterface.d.ts +30 -0
  119. package/generated/openapi/api/sbController.service.d.ts +60 -0
  120. package/generated/openapi/api/sbController.serviceInterface.d.ts +32 -0
  121. package/generated/openapi/api.module.d.ts +11 -0
  122. package/generated/openapi/configuration.d.ts +104 -0
  123. package/generated/openapi/encoder.d.ts +11 -0
  124. package/generated/openapi/index.d.ts +6 -0
  125. package/generated/openapi/model/actieDto.d.ts +35 -0
  126. package/generated/openapi/model/algemeneRitDto.d.ts +20 -0
  127. package/generated/openapi/model/bewegingDto.d.ts +37 -0
  128. package/generated/openapi/model/frontendKeycloakConfig.d.ts +16 -0
  129. package/generated/openapi/model/frontendProperties.d.ts +15 -0
  130. package/generated/openapi/model/logDto.d.ts +22 -0
  131. package/generated/openapi/model/models.d.ts +8 -0
  132. package/generated/openapi/model/ritRequestDto.d.ts +17 -0
  133. package/generated/openapi/model/signaleringsbeeldDto.d.ts +16 -0
  134. package/generated/openapi/param.d.ts +37 -0
  135. package/generated/openapi/variables.d.ts +8 -0
  136. package/lib/atomic-components/message/message.component.d.ts +2 -2
  137. package/lib/atomic-components/progress-indicator/progress-indicator.entity.d.ts +1 -1
  138. package/lib/components/carousel-controls/carousel-controls.component.d.ts +1 -3
  139. package/lib/components/mstviewer/mstviewer.component.d.ts +2 -2
  140. package/lib/components/ritdelen-lijst/ritdelen-lijst.component.d.ts +2 -2
  141. package/lib/components/rpe/rpe.component.d.ts +1 -1
  142. package/lib/components/svg-visualisatie/svg-visualisatie.component.d.ts +1 -1
  143. package/lib/components/viewer-controls/viewer-controls.component.d.ts +3 -4
  144. package/lib/model/km-range.d.ts +1 -1
  145. package/lib/model/nieuwe-route.d.ts +2 -2
  146. package/lib/model/ritdeel.d.ts +11 -10
  147. package/lib/resources/mstlogging.resource.d.ts +6 -95
  148. package/lib/resources/signaleringsbeeldinfo.resource.d.ts +8 -23
  149. package/lib/services/editor.service.d.ts +2 -2
  150. package/lib/services/print-beweging.service.d.ts +4 -6
  151. package/lib/services/rit-lezer.service.d.ts +1 -1
  152. package/lib/services/signalerings-beeld-manager.service.d.ts +2 -2
  153. package/lib/services/viewer-control.service.d.ts +0 -2
  154. package/lib/state/actions/actions.d.ts +17 -24
  155. package/lib/state/actions/ritdelen.actions.d.ts +3 -7
  156. package/lib/state/effect/bepaal-ongeplande-acties.effect.d.ts +2 -1
  157. package/lib/state/effect/delete-ongeplande-actie.effect.d.ts +1 -1
  158. package/lib/state/effect/laad-route-files.effect.d.ts +4 -5
  159. package/lib/state/effect/laad-signaleringsbeelden.effect.d.ts +13 -13
  160. package/lib/state/effect/ritdelen.effect.d.ts +7 -6
  161. package/lib/state/mst-editor-state.d.ts +27 -91
  162. package/lib/util/actie-helper.d.ts +4 -4
  163. package/lib/util/logging-helper.d.ts +5 -8
  164. package/lib/util/utils.d.ts +0 -1
  165. package/package.json +7 -1
  166. package/src/generated/openapi/README.md +226 -0
  167. package/src/generated/openapi/api/api.d.ts +22 -0
  168. package/src/generated/openapi/api/appConfigController.service.d.ts +38 -0
  169. package/src/generated/openapi/api/appConfigController.serviceInterface.d.ts +24 -0
  170. package/src/generated/openapi/api/bewegingController.service.d.ts +40 -0
  171. package/src/generated/openapi/api/bewegingController.serviceInterface.d.ts +27 -0
  172. package/src/generated/openapi/api/class0BuildProperties.service.d.ts +36 -0
  173. package/src/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +23 -0
  174. package/src/generated/openapi/api/connectorController.service.d.ts +38 -0
  175. package/src/generated/openapi/api/connectorController.serviceInterface.d.ts +25 -0
  176. package/src/generated/openapi/api/logController.service.d.ts +38 -0
  177. package/src/generated/openapi/api/logController.serviceInterface.d.ts +25 -0
  178. package/src/generated/openapi/api/p21Controller.service.d.ts +62 -0
  179. package/src/generated/openapi/api/p21Controller.serviceInterface.d.ts +30 -0
  180. package/src/generated/openapi/api/sbController.service.d.ts +60 -0
  181. package/src/generated/openapi/api/sbController.serviceInterface.d.ts +32 -0
  182. package/src/generated/openapi/api.module.d.ts +11 -0
  183. package/src/generated/openapi/configuration.d.ts +104 -0
  184. package/src/generated/openapi/encoder.d.ts +11 -0
  185. package/src/generated/openapi/index.d.ts +6 -0
  186. package/src/generated/openapi/model/actieDto.d.ts +35 -0
  187. package/src/generated/openapi/model/algemeneRitDto.d.ts +20 -0
  188. package/src/generated/openapi/model/bewegingDto.d.ts +37 -0
  189. package/src/generated/openapi/model/frontendKeycloakConfig.d.ts +16 -0
  190. package/src/generated/openapi/model/frontendProperties.d.ts +15 -0
  191. package/src/generated/openapi/model/logDto.d.ts +22 -0
  192. package/src/generated/openapi/model/models.d.ts +8 -0
  193. package/src/generated/openapi/model/ritRequestDto.d.ts +17 -0
  194. package/src/generated/openapi/model/signaleringsbeeldDto.d.ts +16 -0
  195. package/src/generated/openapi/param.d.ts +37 -0
  196. package/src/generated/openapi/variables.d.ts +8 -0
@@ -1,5 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { JsJavaUtil } from '@loxia/rijwegen';
3
+ import { tap } from 'rxjs/operators';
3
4
  import { KmRange } from '../model/km-range';
4
5
  import { WisselKantCode } from '../model/wissel-kant-code';
5
6
  import { MeldingBuilder } from './melding-builder';
@@ -105,6 +106,7 @@ export class ActieHelper {
105
106
  this.messagesService = messagesService;
106
107
  this.store = store;
107
108
  this.loggingHelper = loggingHelper;
109
+ this.debug = false;
108
110
  this.store.select('debug').subscribe(debug => this.debug = debug);
109
111
  }
110
112
  static getActieTopoElements(ritDeel, sbmService) {
@@ -138,10 +140,10 @@ export class ActieHelper {
138
140
  }
139
141
  }
140
142
  static actieComparator(actie1, actie2) {
141
- if (actie1.vanKilometrering !== actie2.vanKilometrering) {
143
+ if (actie1.vanKilometrering && actie2.vanKilometrering && actie1.vanKilometrering !== actie2.vanKilometrering) {
142
144
  return actie1.vanKilometrering > actie2.vanKilometrering ? 1 : -1;
143
145
  }
144
- if (actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
146
+ if (actie1.ritActieTypeOmschrijving && actie2.ritActieTypeOmschrijving && actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
145
147
  return actie1.ritActieTypeOmschrijving > actie2.ritActieTypeOmschrijving ? 1 : -1;
146
148
  }
147
149
  if (actie1.wisselNaam !== actie2.wisselNaam) {
@@ -181,9 +183,9 @@ export class ActieHelper {
181
183
  // make sure the elems are sorted in ascending order
182
184
  static sorteerTopoElementen(topoElems) {
183
185
  const topoElementen = topoElems.slice();
184
- let lint = null;
185
- let first = null;
186
- let second = null;
186
+ let lint = undefined;
187
+ let first;
188
+ let second;
187
189
  for (const topoElement of topoElementen) {
188
190
  let kilometreringen = null;
189
191
  const kms = JsJavaUtil.listToArray(topoElement.getKilometreringen());
@@ -215,11 +217,11 @@ export class ActieHelper {
215
217
  if (!totKilometreringen && vanKilometreringen) {
216
218
  totKilometreringen = [new MstKilometrering(vanKilometreringen[0].getKmLint(), 100000)];
217
219
  }
218
- if (vanKilometreringen[0] > totKilometreringen[0]) {
220
+ if (vanKilometreringen && totKilometreringen && vanKilometreringen[0] > totKilometreringen[0]) {
219
221
  kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen, -1), this.addKm(totKilometreringen, 1)));
220
222
  }
221
223
  else {
222
- kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen, 1), this.addKm(totKilometreringen, -1)));
224
+ kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen ?? [], 1), this.addKm(totKilometreringen ?? [], -1)));
223
225
  }
224
226
  });
225
227
  }
@@ -310,21 +312,23 @@ export class ActieHelper {
310
312
  else {
311
313
  const puics = [];
312
314
  kmRanges.forEach(kmRange => {
313
- let vanKilometrering = new MstKilometrering(actie.vanKilometerlint, actie.vanKilometrering);
314
- let totKilometrering = new MstKilometrering(actie.totKilometerlint, actie.totKilometrering);
315
- if (actie.vanKilometrering > actie.totKilometrering) {
316
- const temp = { van: vanKilometrering, tot: totKilometrering };
317
- vanKilometrering = temp.tot;
318
- totKilometrering = temp.van;
319
- }
320
- if (kmRange.heeftOverlap(vanKilometrering, totKilometrering)) {
321
- puics.push(kmRange.topologyElement.getPuic());
315
+ if (actie.vanKilometrering && actie.vanKilometerlint && actie.totKilometrering && actie.totKilometerlint) {
316
+ let vanKilometrering = new MstKilometrering(actie.vanKilometerlint, actie.vanKilometrering);
317
+ let totKilometrering = new MstKilometrering(actie.totKilometerlint, actie.totKilometrering);
318
+ if (actie.vanKilometrering > actie.totKilometrering) {
319
+ const temp = { van: vanKilometrering, tot: totKilometrering };
320
+ vanKilometrering = temp.tot;
321
+ totKilometrering = temp.van;
322
+ }
323
+ if (kmRange.heeftOverlap(vanKilometrering, totKilometrering)) {
324
+ puics.push(kmRange.topologyElement.getPuic());
325
+ }
322
326
  }
323
327
  });
324
328
  if (puics.length === 0) {
325
329
  actieZonderElementen.push(actie.id);
326
330
  const melding = MeldingBuilder.actieHighlightError(actieZonderElementen);
327
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
331
+ this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(dto => logMeldingDTOs.push(dto))).subscribe();
328
332
  }
329
333
  retval.putAll(actie, puics);
330
334
  }
@@ -332,15 +336,15 @@ export class ActieHelper {
332
336
  this.logLegeMeldingDto(logMeldingDTOs);
333
337
  return retval;
334
338
  }
335
- logLegeMeldingDto(logMeldingDTOs) {
336
- if (logMeldingDTOs.length > 0) {
337
- this.mstLogResource.logErrorMessages(logMeldingDTOs);
339
+ logLegeMeldingDto(logDto) {
340
+ if (logDto.length > 0) {
341
+ return this.mstLogResource.logMessages(logDto);
338
342
  }
339
343
  }
340
344
  verwerkTopoElementen(topoElementen) {
341
345
  const kmRanges = [];
342
346
  let topoElementenZonderKms = [];
343
- let laatstePuntKms = null;
347
+ let laatstePuntKms = undefined;
344
348
  topoElementen.forEach(elem => {
345
349
  const kms = JsJavaUtil.listToArray(elem.getKilometreringen());
346
350
  if (kms.length > 0) {
@@ -354,7 +358,7 @@ export class ActieHelper {
354
358
  }
355
359
  });
356
360
  if (topoElementenZonderKms.length > 0 && laatstePuntKms) {
357
- ActieHelper.corrigeerTopoElementenZonderKms(topoElementenZonderKms, laatstePuntKms, null, kmRanges);
361
+ ActieHelper.corrigeerTopoElementenZonderKms(topoElementenZonderKms, laatstePuntKms, undefined, kmRanges);
358
362
  }
359
363
  return kmRanges;
360
364
  }
@@ -417,14 +421,14 @@ export class ActieHelper {
417
421
  if (ActieHelper.isKantCodeLinks(kantcode)) {
418
422
  return wissel.getLeft();
419
423
  }
420
- return null;
424
+ return undefined;
421
425
  }
422
426
  bepaalPuicVoorWisselSlijpenActie(actie) {
423
427
  const storingsSymboolPuic = this.sbmService.getSBWissel(actie.wisselNaam, actie.pplgNaam)?.getStoringSymboolPuic();
424
428
  if (!storingsSymboolPuic && this.debug) {
425
429
  const melding = MeldingBuilder.actieHighlightError([actie.id]);
426
430
  this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
427
- this.mstLogResource.logErrorMessages([this.loggingHelper.maakLogDTO(melding, actie)]);
431
+ this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(logDto => this.mstLogResource.logMessages([logDto]))).subscribe();
428
432
  }
429
433
  return storingsSymboolPuic ? [storingsSymboolPuic] : [];
430
434
  }
@@ -434,4 +438,4 @@ export class ActieHelper {
434
438
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActieHelper, decorators: [{
435
439
  type: Injectable
436
440
  }], ctorParameters: () => [{ type: i1.SignaleringsBeeldManagerService }, { type: i2.MstLoggingResource }, { type: i3.MessagesService }, { type: i4.Store }, { type: i5.LoggingHelper }] });
437
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aWUtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3V0aWwvYWN0aWUtaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBR3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUc1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFNM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7O0FBSTVDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUNoQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLEVBQUUsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO0FBQ25E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UUFBUSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksV0FBVyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sZ0NBQWdDLENBQUMsS0FBWTtRQUNqRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLENBQUM7UUFDbkgsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBaUIsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUQsQ0FBQzs4R0F2WVEsV0FBVztrSEFBWCxXQUFXOzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSnNKYXZhVXRpbCwgc2JibGFkIH0gZnJvbSAnQGxveGlhL3JpandlZ2VuJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgTWVzc2FnZXNTZXJ2aWNlIH0gZnJvbSAnLi4vYXRvbWljLWNvbXBvbmVudHMvc2VydmljZXMvbWVzc2FnZXMuc2VydmljZSc7XG5pbXBvcnQgeyBLbVJhbmdlIH0gZnJvbSAnLi4vbW9kZWwva20tcmFuZ2UnO1xuaW1wb3J0IHsgTWVsZGluZ0V2ZW50IH0gZnJvbSAnLi4vbW9kZWwvbWVsZGluZy1ldmVudCc7XG5pbXBvcnQgeyBSaXRkZWVsIH0gZnJvbSAnLi4vbW9kZWwvcml0ZGVlbCc7XG5pbXBvcnQgeyBXaXNzZWxLYW50Q29kZSB9IGZyb20gJy4uL21vZGVsL3dpc3NlbC1rYW50LWNvZGUnO1xuaW1wb3J0IHsgQWN0aWUgfSBmcm9tICcuLi9vcHRpbW8nO1xuaW1wb3J0IHsgTXN0TG9nZ2luZ0R0bywgTXN0TG9nZ2luZ1Jlc291cmNlIH0gZnJvbSAnLi4vcmVzb3VyY2VzL21zdGxvZ2dpbmcucmVzb3VyY2UnO1xuaW1wb3J0IHsgU2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NpZ25hbGVyaW5ncy1iZWVsZC1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXN0RWRpdG9yU3RhdGUgfSBmcm9tICcuLi9zdGF0ZS9tc3QtZWRpdG9yLXN0YXRlJztcbmltcG9ydCB7IExvZ2dpbmdIZWxwZXIgfSBmcm9tICcuL2xvZ2dpbmctaGVscGVyJztcbmltcG9ydCB7IE1lbGRpbmdCdWlsZGVyIH0gZnJvbSAnLi9tZWxkaW5nLWJ1aWxkZXInO1xuaW1wb3J0IHsgTWVzc2FnZUJ1aWxkZXIgfSBmcm9tICcuL21lc3NhZ2UtYnVpbGRlcic7XG5pbXBvcnQgeyBBcnJheU11bHRpbWFwIH0gZnJvbSAnLi9tdWx0aS1tYXAnO1xuaW1wb3J0IEtpbG9tZXRyZXJpbmcgPSBzYmJsYWQuS2lsb21ldHJlcmluZztcbmltcG9ydCBUb3BvbG9neUVsZW1lbnQgPSBzYmJsYWQuVG9wb2xvZ3lFbGVtZW50O1xuXG4vKipcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfMSA9IDE7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fVklBRFVDVF9LTEVJTiA9IDI7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fQk9PRyA9IDM7XG4gKi9cbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfS0xFSU4gPSA0O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF9HUk9PVCA9IDU7XG4vKipcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9PVkVSV0VHID0gNjtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9CUlVHX0dST09UID0gNztcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9CUlVHX0tMRUlOID0gODtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9TUE9PUlRBSyA9IDk7XG4gKi9cbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfVlNUID0gMTA7XG4vKipcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfQlZMQkxEX1QgPSAxMTtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9WSUFEVUNUX0dST09UID0gMTI7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1BBTlRDT05UX1QgPSAxMztcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfUklKRFJMSUdfVCA9IDE0O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TUFNUTEFQUl9UID0gMTU7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NQU1RPUFBERUZfVCA9IDE2O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TUFNUT1BQQkxEX1QgPSAxNztcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU1BTVERFRl9UID0gMTg7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NQU1REV1BSX1QgPSAxOTtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfQkFBTkJMRF9UID0gMjA7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NQR0VPTV9UID0gMjE7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFXzIyID0gMjI7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFXzIzID0gMjM7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1JJSkRSRElLX1QgPSAyNDtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9UVU5ORUwgPSAyNTtcbiAqL1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzJfS09NTUFfNSA9IDI2O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzI5ID0gMjc7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMjAgPSAyODtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xOF9LT01NQV81ID0gMjk7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMTggPSAzMDtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xNSA9IDMxO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzEyID0gMzI7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMTAgPSAzMztcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8zNF9LT01NQV83ID0gMzQ7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfOSA9IDM1O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzdfS09NTUFfNSA9IDM2O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzcgPSAzNztcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF82ID0gMzg7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfNSA9IDM5O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzRfS09NTUFfNSA9IDQwO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzQgPSA0MTtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8zX0tPTU1BXzUgPSA0MjtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF84ID0gNDM7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMzlfS09NTUFfMSA9IDQ0O1xuXG5leHBvcnQgY2xhc3MgTXN0S2lsb21ldHJlcmluZyBpbXBsZW1lbnRzIHNiYmxhZC5LaWxvbWV0cmVyaW5nIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGttTGludDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IGttV2FhcmRlOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICBnZXRLbUxpbnQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua21MaW50O1xuICAgIH1cblxuICAgIGdldEttV2FhcmRlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmttV2FhcmRlO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFjdGllSGVscGVyIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgSEFMRl9FTkdFTFNfV0lTU0VMID0gJ0hhbHZlRW5nZWxzZVdpc3NlbCc7XG4gICAgc3RhdGljIHJlYWRvbmx5IEVOR0VMU19XSVNTRUwgPSAnRW5nZWxzZVdpc3NlbCc7XG4gICAgc3RhdGljIHJlYWRvbmx5IFNMSUpQRU5fV0lTU0VMX0FDVElFUyA9IFtcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMX0tMRUlOLFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfR1JPT1QsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzJfS09NTUFfNSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMjksXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzIwLFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xOF9LT01NQV81LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xOCxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMTUsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzEyLFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xMCxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMzRfS09NTUFfNyxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfOSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfN19LT01NQV81LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF83LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF82LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF81LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF80X0tPTU1BXzUsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzQsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzNfS09NTUFfNSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfOCxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMzlfS09NTUFfMV07XG5cbiAgICBwcml2YXRlIGRlYnVnOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzYm1TZXJ2aWNlOiBTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbXN0TG9nUmVzb3VyY2U6IE1zdExvZ2dpbmdSZXNvdXJjZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VzU2VydmljZTogTWVzc2FnZXNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IFN0b3JlPE1zdEVkaXRvclN0YXRlPixcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dpbmdIZWxwZXI6IExvZ2dpbmdIZWxwZXIpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2RlYnVnJykuc3Vic2NyaWJlKGRlYnVnID0+IHRoaXMuZGVidWcgPSBkZWJ1Zyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRBY3RpZVRvcG9FbGVtZW50cyhyaXREZWVsOiBSaXRkZWVsLCBzYm1TZXJ2aWNlOiBTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlKTogVG9wb2xvZ3lFbGVtZW50W10ge1xuICAgICAgICBjb25zdCBhY3RpZVRvcG9FbGVtZW50cyA9IHJpdERlZWwuZ2V0VG9wb2xvZ2llRWxlbWVudGVuKCkuc2xpY2UoKTtcbiAgICAgICAgY29uc3QgZXh0cmFUb3BvRWxlbWVudCA9IEFjdGllSGVscGVyLmdldFZvb3JTZWN0aWVWYW5CZWdpblNlaW4ocml0RGVlbCwgc2JtU2VydmljZSk7XG4gICAgICAgIGlmIChleHRyYVRvcG9FbGVtZW50KSB7XG4gICAgICAgICAgICBhY3RpZVRvcG9FbGVtZW50cy5zcGxpY2UoMCwgMCwgZXh0cmFUb3BvRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGllVG9wb0VsZW1lbnRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc1ZTVEFjdGllKGFjdGllKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhY3RpZS5yaXRBY3RpZVR5cGVJZCA9PT0gUklUX0FDVElFX1ZTVDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNXaXNzZWxTbGlqcGVuQWN0aWUoYWN0aWUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuU0xJSlBFTl9XSVNTRUxfQUNUSUVTLmluZGV4T2YoYWN0aWUucml0QWN0aWVUeXBlSWQpID49IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGJlcGFhbFRha0lkKGFjdGllKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGFjdGllLnBwbGdOYWFtICsgJy0nICsgYWN0aWUud2lzc2VsTmFhbSArICctJyArIGFjdGllLndpc3NlbEthbnRDb2RlO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc0hlZWxPZkhhbGZFbmdlbHNXaXNzZWxBY3RpZShhY3RpZTogQWN0aWUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGFjdGllLmluZnJhT2JqZWN0VHlwZSA9PT0gdGhpcy5IQUxGX0VOR0VMU19XSVNTRUwgfHwgYWN0aWUuaW5mcmFPYmplY3RUeXBlID09PSB0aGlzLkVOR0VMU19XSVNTRUw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFZTVEFjdGllT21zY2hyaWp2aW5nKGFjdGllOiBBY3RpZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5nZWxzZVdpc3NlbChhY3RpZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpc3NlbE5hbWVuID0gdGhpcy5nZXRXaXNzZWxEZWxlbihhY3RpZS53aXNzZWxOYWFtKTtcbiAgICAgICAgICAgIGNvbnN0IGthbnRDb2RlcyA9IHRoaXMuZ2V0S2FudENvZGVzKGFjdGllLndpc3NlbEthbnRDb2RlKTtcbiAgICAgICAgICAgIHJldHVybiBgVlNUICR7IHdpc3NlbE5hbWVuWzBdIH0gJHsga2FudENvZGVzWzBdIH0gLSAkeyB3aXNzZWxOYW1lblsxXSB9ICR7IGthbnRDb2Rlc1sxXSB9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgVlNUICR7IGFjdGllLndpc3NlbE5hYW0gfSAkeyBBY3RpZUhlbHBlci5nZXRLYW50Y29kZVRla3N0KGFjdGllLndpc3NlbEthbnRDb2RlKSB9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWN0aWVDb21wYXJhdG9yKGFjdGllMTogQWN0aWUsIGFjdGllMjogQWN0aWUpOiBudW1iZXIge1xuICAgICAgICBpZiAoYWN0aWUxLnZhbktpbG9tZXRyZXJpbmcgIT09IGFjdGllMi52YW5LaWxvbWV0cmVyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aWUxLnZhbktpbG9tZXRyZXJpbmcgPiBhY3RpZTIudmFuS2lsb21ldHJlcmluZyA/IDEgOiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aWUxLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZyAhPT0gYWN0aWUyLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGllMS5yaXRBY3RpZVR5cGVPbXNjaHJpanZpbmcgPiBhY3RpZTIucml0QWN0aWVUeXBlT21zY2hyaWp2aW5nID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3RpZTEud2lzc2VsTmFhbSAhPT0gYWN0aWUyLndpc3NlbE5hYW0pIHtcbiAgICAgICAgICAgIHJldHVybiBhY3RpZTEud2lzc2VsTmFhbSA+IGFjdGllMi53aXNzZWxOYWFtID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3RpZTEud2lzc2VsS2FudENvZGUgIT09IGFjdGllMi53aXNzZWxLYW50Q29kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGllMS53aXNzZWxLYW50Q29kZSA+IGFjdGllMi53aXNzZWxLYW50Q29kZSA/IDEgOiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0V2lzc2VsS2FudENvZGVzKGFjdGllOiBBY3RpZSk6IFdpc3NlbEthbnRDb2RlW10ge1xuICAgICAgICBjb25zdCB3aXNzZWxLYW50Q29kZXM6IFdpc3NlbEthbnRDb2RlW10gPSBbXTtcblxuICAgICAgICBjb25zdCBuYW1lbiA9IHRoaXMuZ2V0V2lzc2VsRGVsZW4oYWN0aWUud2lzc2VsTmFhbSk7XG4gICAgICAgIGNvbnN0IGthbnRDb2RlcyA9IHRoaXMuZ2V0S2FudENvZGVzKGFjdGllLndpc3NlbEthbnRDb2RlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgd2lzc2VsS2FudENvZGVzLnB1c2gobmV3IFdpc3NlbEthbnRDb2RlKG5hbWVuW2ldLCBrYW50Q29kZXNbaV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aXNzZWxLYW50Q29kZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFdpc3NlbERlbGVuKHdpc3NlbE5hYW06IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHdpc3NlbE5hYW0uc3BsaXQoJ3wnKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0S2FudENvZGVzKGthbnRDb2Rlczogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoa2FudENvZGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIFtrYW50Q29kZXMuY2hhckF0KDApLCBrYW50Q29kZXMuY2hhckF0KDEpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2thbnRDb2Rlc107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Vm9vclNlY3RpZVZhbkJlZ2luU2VpbihyaXREZWVsOiBSaXRkZWVsLCBzYm1TZXJ2aWNlOiBTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlKTogVG9wb2xvZ3lFbGVtZW50IHtcbiAgICAgICAgLy8gUlBFIHRvb250IGVlbiByaWp3ZWcgdmFuYWYgZGUgc2VjdGllc2NoZWlkaW5nIGJlaG9yZW5kIGJpaiBoZXQgYmVnaW5zZWluLiBNU1QgbGV2ZXJ0IGJld2VnaW5nZW4gd2FhcmJpaiBhY3RpZXMgZ2VkYWFuIG1vZXRlblxuICAgICAgICAvLyB3b3JkZW4gdHVzc2VuIGhldCBiZWdpbnNlaW4gZW4gZGUgZ2Vub2VtZGUgc2VjdGllc2NoZWlkaW5nLiBPbSBkZXplIHRlIGt1bm5lbiB0b25lbiB2b2VnZW4gd2UgZGUgdm9vcnNlY3RpZSB2YW4gaGV0IGJlZ2luc2VpblxuICAgICAgICAvLyB0b2UgYWFuIGRlIGxpanN0IG1ldCByb3V0ZSBlbGVtZW50ZW4uXG4gICAgICAgIGNvbnN0IGJlZ2luUm91dGVTZWluID0gcml0RGVlbC5nZXRSb3V0ZSgpLmdldEJlZ2luU2VpbigpO1xuICAgICAgICBjb25zdCBzYlNlaW4gPSBzYm1TZXJ2aWNlLmdldFNCU2VpbihiZWdpblJvdXRlU2Vpbik7XG4gICAgICAgIHJldHVybiBzYlNlaW4gPyBzYlNlaW4uZ2V0Vm9vclNlY3RpZSgpIDogbnVsbDtcbiAgICB9XG5cbi8vIG1ha2Ugc3VyZSB0aGUgZWxlbXMgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgICBwcml2YXRlIHN0YXRpYyBzb3J0ZWVyVG9wb0VsZW1lbnRlbih0b3BvRWxlbXM6IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSk6IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSB7XG4gICAgICAgIGNvbnN0IHRvcG9FbGVtZW50ZW4gPSB0b3BvRWxlbXMuc2xpY2UoKTtcbiAgICAgICAgbGV0IGxpbnQgPSBudWxsO1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsO1xuICAgICAgICBsZXQgc2Vjb25kID0gbnVsbDtcblxuICAgICAgICBmb3IgKGNvbnN0IHRvcG9FbGVtZW50IG9mIHRvcG9FbGVtZW50ZW4pIHtcbiAgICAgICAgICAgIGxldCBraWxvbWV0cmVyaW5nZW4gPSBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBrbXMgPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KHRvcG9FbGVtZW50LmdldEtpbG9tZXRyZXJpbmdlbigpKTtcbiAgICAgICAgICAgIGlmIChrbXMgIT09IG51bGwgJiYga21zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBraWxvbWV0cmVyaW5nZW4gPSBrbXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChraWxvbWV0cmVyaW5nZW4gJiYgIWZpcnN0KSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBraWxvbWV0cmVyaW5nZW5bMF0uZ2V0S21XYWFyZGUoKTtcbiAgICAgICAgICAgICAgICBsaW50ID0ga2lsb21ldHJlcmluZ2VuWzBdLmdldEttTGludCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChraWxvbWV0cmVyaW5nZW4gJiYgZmlyc3QgJiYgIXNlY29uZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGttID0gS21SYW5nZS5nZXRLaWxvbWV0cmVyaW5nKGxpbnQsIGtpbG9tZXRyZXJpbmdlbik7XG4gICAgICAgICAgICAgICAgaWYgKGttKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZCA9IGttLmdldEttV2FhcmRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0ICYmIHNlY29uZCAmJiBmaXJzdCA+IHNlY29uZCkge1xuICAgICAgICAgICAgICAgIHRvcG9FbGVtZW50ZW4ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3BvRWxlbWVudGVuO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvcnJpZ2VlclRvcG9FbGVtZW50ZW5ab25kZXJLbXModG9wb0VsZW1lbnRlblpvbmRlckttcywgdmFuS2lsb21ldHJlcmluZ2VuOiBzYmJsYWQuS2lsb21ldHJlcmluZ1tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90S2lsb21ldHJlcmluZ2VuOiBzYmJsYWQuS2lsb21ldHJlcmluZ1tdLCBrbVJhbmdlczogS21SYW5nZVtdKTogdm9pZCB7XG4gICAgICAgIHRvcG9FbGVtZW50ZW5ab25kZXJLbXMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgIGlmICghdmFuS2lsb21ldHJlcmluZ2VuICYmIHRvdEtpbG9tZXRyZXJpbmdlbikge1xuICAgICAgICAgICAgICAgIHZhbktpbG9tZXRyZXJpbmdlbiA9IFtuZXcgTXN0S2lsb21ldHJlcmluZyh0b3RLaWxvbWV0cmVyaW5nZW5bMF0uZ2V0S21MaW50KCksIC0xMDAwMDApXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdG90S2lsb21ldHJlcmluZ2VuICYmIHZhbktpbG9tZXRyZXJpbmdlbikge1xuICAgICAgICAgICAgICAgIHRvdEtpbG9tZXRyZXJpbmdlbiA9IFtuZXcgTXN0S2lsb21ldHJlcmluZyh2YW5LaWxvbWV0cmVyaW5nZW5bMF0uZ2V0S21MaW50KCksIDEwMDAwMCldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFuS2lsb21ldHJlcmluZ2VuWzBdID4gdG90S2lsb21ldHJlcmluZ2VuWzBdKSB7XG4gICAgICAgICAgICAgICAga21SYW5nZXMucHVzaChLbVJhbmdlLnJhbmdlVm9vclN0cmVrT2JqZWN0KGUsIHRoaXMuYWRkS20odmFuS2lsb21ldHJlcmluZ2VuLCAtMSksIHRoaXMuYWRkS20odG90S2lsb21ldHJlcmluZ2VuLCAxKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBrbVJhbmdlcy5wdXNoKEttUmFuZ2UucmFuZ2VWb29yU3RyZWtPYmplY3QoZSwgdGhpcy5hZGRLbSh2YW5LaWxvbWV0cmVyaW5nZW4sIDEpLCB0aGlzLmFkZEttKHRvdEtpbG9tZXRyZXJpbmdlbiwgLTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZEttKGttczogS2lsb21ldHJlcmluZ1tdLCBhYW50YWw6IG51bWJlcik6IEtpbG9tZXRyZXJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHJldHZhbCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGttIG9mIGttcykge1xuICAgICAgICAgICAgcmV0dmFsLnB1c2gobmV3IE1zdEtpbG9tZXRyZXJpbmcoa20uZ2V0S21MaW50KCksIGttLmdldEttV2FhcmRlKCkgKyBhYW50YWwpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0dmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGthbkFjdGllc0JlcGFsZW4ocml0ZGVlbDogUml0ZGVlbCk6IEFjdGllW10ge1xuICAgICAgICByZXR1cm4gcml0ZGVlbC5pc1ppY2h0YmFhcigpICYmIHJpdGRlZWwuYWN0aWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGlzS2lsb21ldHJlcmluZ0FhbndlemlnKGZyYWdtZW50ZW46IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgYWFud2V6aWcgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudGVuKSB7XG4gICAgICAgICAgICBjb25zdCBrbXMgPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KGZyYWdtZW50LmdldEtpbG9tZXRyZXJpbmdlbigpKTtcbiAgICAgICAgICAgIGlmIChrbXMgIT09IG51bGwgJiYga21zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhYW53ZXppZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFhbndlemlnO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGJlcGFhbFNwb29ydGFrRnJhZ21lbnRlbihzcG9vcnRhazogc2JibGFkLlNwb29ydGFrKTogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdIHtcbiAgICAgICAgcmV0dXJuIEpzSmF2YVV0aWwubGlzdFRvQXJyYXkoc3Bvb3J0YWsuZ2V0VGFrRWxlbWVudGVuKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGJlcGFhbFNwb29ydGFrRnJhZ21lbnRlblB1aWNzKGZyYWdtZW50ZW46IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgcHVpY3MgPSBbXTtcbiAgICAgICAgZnJhZ21lbnRlbi5mb3JFYWNoKGRlZWwgPT4gcHVpY3MucHVzaChkZWVsLmdldFB1aWMoKSkpO1xuICAgICAgICByZXR1cm4gcHVpY3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNFbmdlbHNlV2lzc2VsKGFjdGllOiBBY3RpZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gYWN0aWUud2lzc2VsTmFhbS5pbmNsdWRlcygnfCcpICYmIGFjdGllLndpc3NlbEthbnRDb2RlLmxlbmd0aCA9PT0gMjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRLYW50Y29kZVRla3N0KGthbnRjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdGVrc3QgPSAnVm9vcic7XG4gICAgICAgIGlmICh0aGlzLmlzS2FudENvZGVMaW5rcyhrYW50Y29kZSkpIHtcbiAgICAgICAgICAgIHRla3N0ID0gJ0xpbmtzJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzS2FudENvZGVSZWNodHMoa2FudGNvZGUpKSB7XG4gICAgICAgICAgICB0ZWtzdCA9ICdSZWNodHMnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZWtzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBpc0thbnRDb2RlUmVjaHRzKGthbnRjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGthbnRjb2RlID09PSAnUic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNLYW50Q29kZUxpbmtzKGthbnRjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGthbnRjb2RlID09PSAnTCc7XG4gICAgfVxuXG4gICAgYmVwYWFsUHVpY3NWb29yQWN0aWUoYWN0aWU6IEFjdGllKTogc3RyaW5nW10ge1xuICAgICAgICBsZXQgcHVpY3M7XG4gICAgICAgIGlmIChBY3RpZUhlbHBlci5pc1ZTVEFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgcHVpY3MgPSB0aGlzLmJlcGFhbFB1aWNzVm9vclZTVEFjdGllKGFjdGllKTtcbiAgICAgICAgfSBlbHNlIGlmIChBY3RpZUhlbHBlci5pc1dpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSkpIHtcbiAgICAgICAgICAgIHB1aWNzID0gdGhpcy5iZXBhYWxQdWljVm9vcldpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdWljcyA9IHRoaXMuYmVwYWFsQWN0aWVQdWljc1Zvb3JTcG9vcnRhayhhY3RpZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1aWNzO1xuICAgIH1cblxuICAgIGJlcGFhbEFjdGllUHVpY3NVaXRSaXRkZWVsKHJpdERlZWwpOiBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+IHsvLyB2b29yIGhpZ2hsaWdodHNcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4oKTtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmthbkFjdGllc0JlcGFsZW4ocml0RGVlbCkpIHtcbiAgICAgICAgICAgIHJpdERlZWwuYWN0aWVzLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbWFwLnB1dEFsbChhLCB0aGlzLmJlcGFhbFB1aWNzVm9vckFjdGllKGEpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuXG4gICAgYmVwYWFsQWN0aWVzUHVpY3MoYWN0aWVzOiBBY3RpZVtdLCB0b3BvRWxlbTogVG9wb2xvZ3lFbGVtZW50W10pOiBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgdG9wb0VsZW1lbnRlbiA9IEFjdGllSGVscGVyLnNvcnRlZXJUb3BvRWxlbWVudGVuKHRvcG9FbGVtKTtcblxuICAgICAgICBjb25zdCBrbVJhbmdlcyA9IHRoaXMudmVyd2Vya1RvcG9FbGVtZW50ZW4odG9wb0VsZW1lbnRlbik7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcndlcmtBY3RpZXMoYWN0aWVzLCBrbVJhbmdlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJ3ZXJrQWN0aWVzKGFjdGllczogQWN0aWVbXSwga21SYW5nZXM6IEttUmFuZ2VbXSk6IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4ge1xuICAgICAgICBjb25zdCBhY3RpZVpvbmRlckVsZW1lbnRlbjogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgY29uc3QgbG9nTWVsZGluZ0RUT3M6IE1zdExvZ2dpbmdEdG9bXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHJldHZhbCA9IG5ldyBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+KCk7XG4gICAgICAgIGFjdGllcy5mb3JFYWNoKGFjdGllID0+IHtcbiAgICAgICAgICAgIGlmIChBY3RpZUhlbHBlci5pc1dpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWljQXJyYXkgPSB0aGlzLmJlcGFhbFB1aWNWb29yV2lzc2VsU2xpanBlbkFjdGllKGFjdGllKTtcbiAgICAgICAgICAgICAgICByZXR2YWwucHV0QWxsKGFjdGllLCBwdWljQXJyYXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWljcyA9IFtdO1xuICAgICAgICAgICAgICAgIGttUmFuZ2VzLmZvckVhY2goa21SYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YW5LaWxvbWV0cmVyaW5nID0gbmV3IE1zdEtpbG9tZXRyZXJpbmcoYWN0aWUudmFuS2lsb21ldGVybGludCwgYWN0aWUudmFuS2lsb21ldHJlcmluZyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0b3RLaWxvbWV0cmVyaW5nID0gbmV3IE1zdEtpbG9tZXRyZXJpbmcoYWN0aWUudG90S2lsb21ldGVybGludCwgYWN0aWUudG90S2lsb21ldHJlcmluZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3RpZS52YW5LaWxvbWV0cmVyaW5nID4gYWN0aWUudG90S2lsb21ldHJlcmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcCA9IHsgdmFuOiB2YW5LaWxvbWV0cmVyaW5nLCB0b3Q6IHRvdEtpbG9tZXRyZXJpbmcgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbktpbG9tZXRyZXJpbmcgPSB0ZW1wLnRvdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdEtpbG9tZXRyZXJpbmcgPSB0ZW1wLnZhbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoa21SYW5nZS5oZWVmdE92ZXJsYXAodmFuS2lsb21ldHJlcmluZywgdG90S2lsb21ldHJlcmluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1aWNzLnB1c2goa21SYW5nZS50b3BvbG9neUVsZW1lbnQuZ2V0UHVpYygpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChwdWljcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aWVab25kZXJFbGVtZW50ZW4ucHVzaChhY3RpZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lbGRpbmc6IE1lbGRpbmdFdmVudCA9IE1lbGRpbmdCdWlsZGVyLmFjdGllSGlnaGxpZ2h0RXJyb3IoYWN0aWVab25kZXJFbGVtZW50ZW4pO1xuICAgICAgICAgICAgICAgICAgICBsb2dNZWxkaW5nRFRPcy5wdXNoKHRoaXMubG9nZ2luZ0hlbHBlci5tYWFrTG9nRFRPKG1lbGRpbmcsIGFjdGllKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHZhbC5wdXRBbGwoYWN0aWUsIHB1aWNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9nTGVnZU1lbGRpbmdEdG8obG9nTWVsZGluZ0RUT3MpO1xuICAgICAgICByZXR1cm4gcmV0dmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9nTGVnZU1lbGRpbmdEdG8obG9nTWVsZGluZ0RUT3M6IE1zdExvZ2dpbmdEdG9bXSk6IHZvaWQge1xuICAgICAgICBpZiAobG9nTWVsZGluZ0RUT3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5tc3RMb2dSZXNvdXJjZS5sb2dFcnJvck1lc3NhZ2VzKGxvZ01lbGRpbmdEVE9zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmVyd2Vya1RvcG9FbGVtZW50ZW4odG9wb0VsZW1lbnRlbjogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdKTogS21SYW5nZVtdIHtcbiAgICAgICAgY29uc3Qga21SYW5nZXM6IEttUmFuZ2VbXSA9IFtdO1xuXG4gICAgICAgIGxldCB0b3BvRWxlbWVudGVuWm9uZGVyS21zID0gW107XG4gICAgICAgIGxldCBsYWF0c3RlUHVudEttczogS2lsb21ldHJlcmluZ1tdID0gbnVsbDtcbiAgICAgICAgdG9wb0VsZW1lbnRlbi5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgICAgICAgY29uc3Qga21zOiBLaWxvbWV0cmVyaW5nW10gPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KGVsZW0uZ2V0S2lsb21ldHJlcmluZ2VuKCkpO1xuICAgICAgICAgICAgaWYgKGttcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgQWN0aWVIZWxwZXIuY29ycmlnZWVyVG9wb0VsZW1lbnRlblpvbmRlckttcyh0b3BvRWxlbWVudGVuWm9uZGVyS21zLCBsYWF0c3RlUHVudEttcywga21zLCBrbVJhbmdlcyk7XG4gICAgICAgICAgICAgICAgdG9wb0VsZW1lbnRlblpvbmRlckttcyA9IFtdO1xuICAgICAgICAgICAgICAgIGttUmFuZ2VzLnB1c2goS21SYW5nZS5yYW5nZVZvb3JQdW50T2JqZWN0KGVsZW0pKTtcbiAgICAgICAgICAgICAgICBsYWF0c3RlUHVudEttcyA9IGttcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9wb0VsZW1lbnRlblpvbmRlckttcy5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRvcG9FbGVtZW50ZW5ab25kZXJLbXMubGVuZ3RoID4gMCAmJiBsYWF0c3RlUHVudEttcykge1xuICAgICAgICAgICAgQWN0aWVIZWxwZXIuY29ycmlnZWVyVG9wb0VsZW1lbnRlblpvbmRlckttcyh0b3BvRWxlbWVudGVuWm9uZGVyS21zLCBsYWF0c3RlUHVudEttcywgbnVsbCwga21SYW5nZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrbVJhbmdlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbEFjdGllUHVpY3NWb29yU3Bvb3J0YWsoYWN0aWU6IEFjdGllKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBzcG9vcnRhayA9IHRoaXMuc2JtU2VydmljZS5nZXRTYlNwb29ydGFrKEFjdGllSGVscGVyLmJlcGFhbFRha0lkKGFjdGllKSk7XG5cbiAgICAgICAgbGV0IHB1aWNzID0gW107XG4gICAgICAgIGlmICghc3Bvb3J0YWspIHtcbiAgICAgICAgICAgIHJldHVybiBwdWljcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcmFnbWVudGVuID0gQWN0aWVIZWxwZXIuYmVwYWFsU3Bvb3J0YWtGcmFnbWVudGVuKHNwb29ydGFrKTtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2lsb21ldHJlcmluZ0FhbndlemlnKGZyYWdtZW50ZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSB0aGlzLmJlcGFhbEFjdGllc1B1aWNzKFthY3RpZV0sIGZyYWdtZW50ZW4pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgQXJyYXkuZnJvbShtYXAua2V5cygpKSkge1xuICAgICAgICAgICAgICAgIG1hcC5nZXQoa2V5KS5mb3JFYWNoKHggPT4gcHVpY3MucHVzaCh4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdWljcyA9IEFjdGllSGVscGVyLmJlcGFhbFNwb29ydGFrRnJhZ21lbnRlblB1aWNzKGZyYWdtZW50ZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwdWljcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbFB1aWNzVm9vclZTVEFjdGllKGFjdGllOiBBY3RpZSk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzSGVlbE9mSGFsZkVuZ2Vsc1dpc3NlbEFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0dmFsID0gW107XG4gICAgICAgICAgICBjb25zdCB3aXNzZWxEZWxlbiA9IEFjdGllSGVscGVyLmdldFdpc3NlbERlbGVuKGFjdGllLndpc3NlbE5hYW0pO1xuICAgICAgICAgICAgY29uc3QgcHVpY3NFZXJzdGVXaXNzZWwgPSB0aGlzLmJlcGFhbFdpc3NlbFB1aWNzKHdpc3NlbERlbGVuWzBdLCBhY3RpZS5wcGxnTmFhbSwgYWN0aWUud2lzc2VsS2FudENvZGVbMF0pO1xuICAgICAgICAgICAgY29uc3QgcHVpY3NUd2VlZGVXaXNzZWwgPSB0aGlzLmJlcGFhbFdpc3NlbFB1aWNzKHdpc3NlbERlbGVuWzFdLCBhY3RpZS5wcGxnTmFhbSwgYWN0aWUud2lzc2VsS2FudENvZGVbMV0pO1xuXG4gICAgICAgICAgICBjb25zdCBwdWljMSA9IHRoaXMuc2JtU2VydmljZS5nZXRFZXJzdGVWZXJiaW5kaW5nUHVpY1Zvb3JTcGxpdEVuZ2Vsc2VXaXNzZWwod2lzc2VsRGVsZW5bMF0sIGFjdGllLndpc3NlbEthbnRDb2RlWzBdKTtcbiAgICAgICAgICAgIGlmIChwdWljMSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR2YWwucHVzaChwdWljMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwdWljMiA9IHRoaXMuc2JtU2VydmljZS5nZXRFZXJzdGVWZXJiaW5kaW5nUHVpY1Zvb3JTcGxpdEVuZ2Vsc2VXaXNzZWwod2lzc2VsRGVsZW5bMV0sIGFjdGllLndpc3NlbEthbnRDb2RlWzFdKTtcbiAgICAgICAgICAgIGlmIChwdWljMiAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR2YWwucHVzaChwdWljMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR2YWwucHVzaCguLi5wdWljc0VlcnN0ZVdpc3NlbCk7XG4gICAgICAgICAgICByZXR2YWwucHVzaCguLi5wdWljc1R3ZWVkZVdpc3NlbCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmVwYWFsV2lzc2VsUHVpY3MoYWN0aWUud2lzc2VsTmFhbSwgYWN0aWUucHBsZ05hYW0sIGFjdGllLndpc3NlbEthbnRDb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsV2lzc2VsUHVpY3Mod2lzc2VsTmFhbTogc3RyaW5nLCBwcGxnTmFhbTogc3RyaW5nLCBrYW50Y29kZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCB3aXNzZWwgPSB0aGlzLnNibVNlcnZpY2UuZ2V0U0JXaXNzZWwod2lzc2VsTmFhbSwgcHBsZ05hYW0pO1xuICAgICAgICBpZiAoIXdpc3NlbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGthbnRFbGVtZW50ID0gdGhpcy5iZXBhYWxLYW50RWxlbWVudChrYW50Y29kZSwgd2lzc2VsKTtcbiAgICAgICAgaWYgKCFrYW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3JpbmdTeW1ib29sUHVpYyA9IHdpc3NlbC5nZXRTdG9yaW5nU3ltYm9vbFB1aWMoKTtcblxuICAgICAgICByZXR1cm4gW3N0b3JpbmdTeW1ib29sUHVpYywga2FudEVsZW1lbnQuZ2V0UHVpYygpXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbEthbnRFbGVtZW50KGthbnRjb2RlOiBzdHJpbmcsIHdpc3NlbDogc2JibGFkLldpc3NlbCk6IHNiYmxhZC5TcG9vcnRha0ZyYWdtZW50IHtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2FudENvZGVSZWNodHMoa2FudGNvZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gd2lzc2VsLmdldFJpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2FudENvZGVMaW5rcyhrYW50Y29kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXNzZWwuZ2V0TGVmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsUHVpY1Zvb3JXaXNzZWxTbGlqcGVuQWN0aWUoYWN0aWU6IEFjdGllKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBzdG9yaW5nc1N5bWJvb2xQdWljID0gdGhpcy5zYm1TZXJ2aWNlLmdldFNCV2lzc2VsKGFjdGllLndpc3NlbE5hYW0sIGFjdGllLnBwbGdOYWFtKT8uZ2V0U3RvcmluZ1N5bWJvb2xQdWljKCk7XG4gICAgICAgIGlmICghc3RvcmluZ3NTeW1ib29sUHVpYyAmJiB0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zdCBtZWxkaW5nOiBNZWxkaW5nRXZlbnQgPSBNZWxkaW5nQnVpbGRlci5hY3RpZUhpZ2hsaWdodEVycm9yKFthY3RpZS5pZF0pO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlc1NlcnZpY2Uuc2hvd01lc3NhZ2UoTWVzc2FnZUJ1aWxkZXIuYWN0aWVIaWdobGlnaHRFcnJvcihbYWN0aWUuaWRdKSk7XG4gICAgICAgICAgICB0aGlzLm1zdExvZ1Jlc291cmNlLmxvZ0Vycm9yTWVzc2FnZXMoW3RoaXMubG9nZ2luZ0hlbHBlci5tYWFrTG9nRFRPKG1lbGRpbmcsIGFjdGllKV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdG9yaW5nc1N5bWJvb2xQdWljID8gW3N0b3JpbmdzU3ltYm9vbFB1aWNdIDogW107XG4gICAgfVxufVxuXG5cbiJdfQ==
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aWUtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3V0aWwvYWN0aWUtaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBTTNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7OztBQUk1Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLENBQUMsQ0FBQztBQUNoRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDaEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRyxFQUFFLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBRyxFQUFFLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO0FBQ25E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QUFDO1lBRWpGLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQzlDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUMzRCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWxCLENBQUM7UUFDRCxPQUFPLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1RCxDQUFDOzhHQWhaUSxXQUFXO2tIQUFYLFdBQVc7OzJGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKc0phdmFVdGlsLCBzYmJsYWQgfSBmcm9tICdAbG94aWEvcmlqd2VnZW4nO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2dEdG8gfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvb3BlbmFwaSc7XG5pbXBvcnQgeyBNZXNzYWdlc1NlcnZpY2UgfSBmcm9tICcuLi9hdG9taWMtY29tcG9uZW50cy9zZXJ2aWNlcy9tZXNzYWdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IEttUmFuZ2UgfSBmcm9tICcuLi9tb2RlbC9rbS1yYW5nZSc7XG5pbXBvcnQgeyBNZWxkaW5nRXZlbnQgfSBmcm9tICcuLi9tb2RlbC9tZWxkaW5nLWV2ZW50JztcbmltcG9ydCB7IFJpdGRlZWwgfSBmcm9tICcuLi9tb2RlbC9yaXRkZWVsJztcbmltcG9ydCB7IFdpc3NlbEthbnRDb2RlIH0gZnJvbSAnLi4vbW9kZWwvd2lzc2VsLWthbnQtY29kZSc7XG5pbXBvcnQgeyBBY3RpZSB9IGZyb20gJy4uL29wdGltbyc7XG5pbXBvcnQgeyBNc3RMb2dnaW5nUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZXMvbXN0bG9nZ2luZy5yZXNvdXJjZSc7XG5pbXBvcnQgeyBTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2lnbmFsZXJpbmdzLWJlZWxkLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNc3RFZGl0b3JTdGF0ZSB9IGZyb20gJy4uL3N0YXRlL21zdC1lZGl0b3Itc3RhdGUnO1xuaW1wb3J0IHsgTG9nZ2luZ0hlbHBlciB9IGZyb20gJy4vbG9nZ2luZy1oZWxwZXInO1xuaW1wb3J0IHsgTWVsZGluZ0J1aWxkZXIgfSBmcm9tICcuL21lbGRpbmctYnVpbGRlcic7XG5pbXBvcnQgeyBNZXNzYWdlQnVpbGRlciB9IGZyb20gJy4vbWVzc2FnZS1idWlsZGVyJztcbmltcG9ydCB7IEFycmF5TXVsdGltYXAgfSBmcm9tICcuL211bHRpLW1hcCc7XG5pbXBvcnQgS2lsb21ldHJlcmluZyA9IHNiYmxhZC5LaWxvbWV0cmVyaW5nO1xuaW1wb3J0IFRvcG9sb2d5RWxlbWVudCA9IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnQ7XG5cbi8qKlxuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV8xID0gMTtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9WSUFEVUNUX0tMRUlOID0gMjtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9CT09HID0gMztcbiAqL1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF9LTEVJTiA9IDQ7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMX0dST09UID0gNTtcbi8qKlxuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX09WRVJXRUcgPSA2O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX0JSVUdfR1JPT1QgPSA3O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX0JSVUdfS0xFSU4gPSA4O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1NQT09SVEFLID0gOTtcbiAqL1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9WU1QgPSAxMDtcbi8qKlxuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9CVkxCTERfVCA9IDExO1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1ZJQURVQ1RfR1JPT1QgPSAxMjtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfUEFOVENPTlRfVCA9IDEzO1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9SSUpEUkxJR19UID0gMTQ7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NQU1RMQVBSX1QgPSAxNTtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU1BTVE9QUERFRl9UID0gMTY7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NQU1RPUFBCTERfVCA9IDE3O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TUFNUREVGX1QgPSAxODtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU1BTVERXUFJfVCA9IDE5O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9CQUFOQkxEX1QgPSAyMDtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU1BHRU9NX1QgPSAyMTtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfMjIgPSAyMjtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfMjMgPSAyMztcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfUklKRFJESUtfVCA9IDI0O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1RVTk5FTCA9IDI1O1xuICovXG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMl9LT01NQV81ID0gMjY7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMjkgPSAyNztcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8yMCA9IDI4O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzE4X0tPTU1BXzUgPSAyOTtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xOCA9IDMwO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzE1ID0gMzE7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMTIgPSAzMjtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xMCA9IDMzO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzM0X0tPTU1BXzcgPSAzNDtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF85ID0gMzU7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfN19LT01NQV81ID0gMzY7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfNyA9IDM3O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzYgPSAzODtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF81ID0gMzk7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfNF9LT01NQV81ID0gNDA7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfNCA9IDQxO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzNfS09NTUFfNSA9IDQyO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzggPSA0MztcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8zOV9LT01NQV8xID0gNDQ7XG5cbmV4cG9ydCBjbGFzcyBNc3RLaWxvbWV0cmVyaW5nIGltcGxlbWVudHMgc2JibGFkLktpbG9tZXRyZXJpbmcge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkga21MaW50OiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkga21XYWFyZGU6IG51bWJlcikge1xuICAgIH1cblxuICAgIGdldEttTGludCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5rbUxpbnQ7XG4gICAgfVxuXG4gICAgZ2V0S21XYWFyZGUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua21XYWFyZGU7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWN0aWVIZWxwZXIge1xuICAgIHN0YXRpYyByZWFkb25seSBIQUxGX0VOR0VMU19XSVNTRUwgPSAnSGFsdmVFbmdlbHNlV2lzc2VsJztcbiAgICBzdGF0aWMgcmVhZG9ubHkgRU5HRUxTX1dJU1NFTCA9ICdFbmdlbHNlV2lzc2VsJztcbiAgICBzdGF0aWMgcmVhZG9ubHkgU0xJSlBFTl9XSVNTRUxfQUNUSUVTID0gW1xuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfS0xFSU4sXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF9HUk9PVCxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMl9LT01NQV81LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8yOSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMjAsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzE4X0tPTU1BXzUsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzE4LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xNSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMTIsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzEwLFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8zNF9LT01NQV83LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF85LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF83X0tPTU1BXzUsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzcsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzYsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzUsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzRfS09NTUFfNSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfNCxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfM19LT01NQV81LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF84LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8zOV9LT01NQV8xXTtcblxuICAgIHByaXZhdGUgZGVidWcgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2JtU2VydmljZTogU2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1zdExvZ1Jlc291cmNlOiBNc3RMb2dnaW5nUmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlc1NlcnZpY2U6IE1lc3NhZ2VzU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBTdG9yZTxNc3RFZGl0b3JTdGF0ZT4sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2dnaW5nSGVscGVyOiBMb2dnaW5nSGVscGVyKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdkZWJ1ZycpLnN1YnNjcmliZShkZWJ1ZyA9PiB0aGlzLmRlYnVnID0gZGVidWcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QWN0aWVUb3BvRWxlbWVudHMocml0RGVlbDogUml0ZGVlbCwgc2JtU2VydmljZTogU2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSk6IFRvcG9sb2d5RWxlbWVudFtdIHtcbiAgICAgICAgY29uc3QgYWN0aWVUb3BvRWxlbWVudHMgPSByaXREZWVsLmdldFRvcG9sb2dpZUVsZW1lbnRlbigpLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IGV4dHJhVG9wb0VsZW1lbnQgPSBBY3RpZUhlbHBlci5nZXRWb29yU2VjdGllVmFuQmVnaW5TZWluKHJpdERlZWwsIHNibVNlcnZpY2UpO1xuICAgICAgICBpZiAoZXh0cmFUb3BvRWxlbWVudCkge1xuICAgICAgICAgICAgYWN0aWVUb3BvRWxlbWVudHMuc3BsaWNlKDAsIDAsIGV4dHJhVG9wb0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3RpZVRvcG9FbGVtZW50cztcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNWU1RBY3RpZShhY3RpZTogQWN0aWUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGFjdGllLnJpdEFjdGllVHlwZUlkID09PSBSSVRfQUNUSUVfVlNUO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc1dpc3NlbFNsaWpwZW5BY3RpZShhY3RpZTogQWN0aWUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuU0xJSlBFTl9XSVNTRUxfQUNUSUVTLmluZGV4T2YoYWN0aWUucml0QWN0aWVUeXBlSWQpID49IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGJlcGFhbFRha0lkKGFjdGllOiBBY3RpZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBhY3RpZS5wcGxnTmFhbSArICctJyArIGFjdGllLndpc3NlbE5hYW0gKyAnLScgKyBhY3RpZS53aXNzZWxLYW50Q29kZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNIZWVsT2ZIYWxmRW5nZWxzV2lzc2VsQWN0aWUoYWN0aWU6IEFjdGllKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhY3RpZS5pbmZyYU9iamVjdFR5cGUgPT09IHRoaXMuSEFMRl9FTkdFTFNfV0lTU0VMIHx8IGFjdGllLmluZnJhT2JqZWN0VHlwZSA9PT0gdGhpcy5FTkdFTFNfV0lTU0VMO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRWU1RBY3RpZU9tc2NocmlqdmluZyhhY3RpZTogQWN0aWUpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5pc0VuZ2Vsc2VXaXNzZWwoYWN0aWUpKSB7XG4gICAgICAgICAgICBjb25zdCB3aXNzZWxOYW1lbiA9IHRoaXMuZ2V0V2lzc2VsRGVsZW4oYWN0aWUud2lzc2VsTmFhbSk7XG4gICAgICAgICAgICBjb25zdCBrYW50Q29kZXMgPSB0aGlzLmdldEthbnRDb2RlcyhhY3RpZS53aXNzZWxLYW50Q29kZSk7XG4gICAgICAgICAgICByZXR1cm4gYFZTVCAkeyB3aXNzZWxOYW1lblswXSB9ICR7IGthbnRDb2Rlc1swXSB9IC0gJHsgd2lzc2VsTmFtZW5bMV0gfSAkeyBrYW50Q29kZXNbMV0gfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYFZTVCAkeyBhY3RpZS53aXNzZWxOYWFtIH0gJHsgQWN0aWVIZWxwZXIuZ2V0S2FudGNvZGVUZWtzdChhY3RpZS53aXNzZWxLYW50Q29kZSkgfWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFjdGllQ29tcGFyYXRvcihhY3RpZTE6IEFjdGllLCBhY3RpZTI6IEFjdGllKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGFjdGllMS52YW5LaWxvbWV0cmVyaW5nICYmIGFjdGllMi52YW5LaWxvbWV0cmVyaW5nICYmIGFjdGllMS52YW5LaWxvbWV0cmVyaW5nICE9PSBhY3RpZTIudmFuS2lsb21ldHJlcmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGllMS52YW5LaWxvbWV0cmVyaW5nID4gYWN0aWUyLnZhbktpbG9tZXRyZXJpbmcgPyAxIDogLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGllMS5yaXRBY3RpZVR5cGVPbXNjaHJpanZpbmcgJiYgYWN0aWUyLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZyAmJiBhY3RpZTEucml0QWN0aWVUeXBlT21zY2hyaWp2aW5nICE9PSBhY3RpZTIucml0QWN0aWVUeXBlT21zY2hyaWp2aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aWUxLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZyA+IGFjdGllMi5yaXRBY3RpZVR5cGVPbXNjaHJpanZpbmcgPyAxIDogLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGllMS53aXNzZWxOYWFtICE9PSBhY3RpZTIud2lzc2VsTmFhbSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGllMS53aXNzZWxOYWFtID4gYWN0aWUyLndpc3NlbE5hYW0gPyAxIDogLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGllMS53aXNzZWxLYW50Q29kZSAhPT0gYWN0aWUyLndpc3NlbEthbnRDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aWUxLndpc3NlbEthbnRDb2RlID4gYWN0aWUyLndpc3NlbEthbnRDb2RlID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRXaXNzZWxLYW50Q29kZXMoYWN0aWU6IEFjdGllKTogV2lzc2VsS2FudENvZGVbXSB7XG4gICAgICAgIGNvbnN0IHdpc3NlbEthbnRDb2RlczogV2lzc2VsS2FudENvZGVbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IG5hbWVuID0gdGhpcy5nZXRXaXNzZWxEZWxlbihhY3RpZS53aXNzZWxOYWFtKTtcbiAgICAgICAgY29uc3Qga2FudENvZGVzID0gdGhpcy5nZXRLYW50Q29kZXMoYWN0aWUud2lzc2VsS2FudENvZGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB3aXNzZWxLYW50Q29kZXMucHVzaChuZXcgV2lzc2VsS2FudENvZGUobmFtZW5baV0sIGthbnRDb2Rlc1tpXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdpc3NlbEthbnRDb2RlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0V2lzc2VsRGVsZW4od2lzc2VsTmFhbTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gd2lzc2VsTmFhbS5zcGxpdCgnfCcpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRLYW50Q29kZXMoa2FudENvZGVzOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmIChrYW50Q29kZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gW2thbnRDb2Rlcy5jaGFyQXQoMCksIGthbnRDb2Rlcy5jaGFyQXQoMSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBba2FudENvZGVzXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRWb29yU2VjdGllVmFuQmVnaW5TZWluKHJpdERlZWw6IFJpdGRlZWwsIHNibVNlcnZpY2U6IFNpZ25hbGVyaW5nc0JlZWxkTWFuYWdlclNlcnZpY2UpOiBUb3BvbG9neUVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgLy8gUlBFIHRvb250IGVlbiByaWp3ZWcgdmFuYWYgZGUgc2VjdGllc2NoZWlkaW5nIGJlaG9yZW5kIGJpaiBoZXQgYmVnaW5zZWluLiBNU1QgbGV2ZXJ0IGJld2VnaW5nZW4gd2FhcmJpaiBhY3RpZXMgZ2VkYWFuIG1vZXRlblxuICAgICAgICAvLyB3b3JkZW4gdHVzc2VuIGhldCBiZWdpbnNlaW4gZW4gZGUgZ2Vub2VtZGUgc2VjdGllc2NoZWlkaW5nLiBPbSBkZXplIHRlIGt1bm5lbiB0b25lbiB2b2VnZW4gd2UgZGUgdm9vcnNlY3RpZSB2YW4gaGV0IGJlZ2luc2VpblxuICAgICAgICAvLyB0b2UgYWFuIGRlIGxpanN0IG1ldCByb3V0ZSBlbGVtZW50ZW4uXG4gICAgICAgIGNvbnN0IGJlZ2luUm91dGVTZWluID0gcml0RGVlbC5nZXRSb3V0ZSgpLmdldEJlZ2luU2VpbigpO1xuICAgICAgICBjb25zdCBzYlNlaW4gPSBzYm1TZXJ2aWNlLmdldFNCU2VpbihiZWdpblJvdXRlU2Vpbik7XG4gICAgICAgIHJldHVybiBzYlNlaW4gPyBzYlNlaW4uZ2V0Vm9vclNlY3RpZSgpIDogbnVsbDtcbiAgICB9XG5cbi8vIG1ha2Ugc3VyZSB0aGUgZWxlbXMgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgICBwcml2YXRlIHN0YXRpYyBzb3J0ZWVyVG9wb0VsZW1lbnRlbih0b3BvRWxlbXM6IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSk6IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSB7XG4gICAgICAgIGNvbnN0IHRvcG9FbGVtZW50ZW4gPSB0b3BvRWxlbXMuc2xpY2UoKTtcbiAgICAgICAgbGV0IGxpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGZpcnN0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBzZWNvbmQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgICAgICBmb3IgKGNvbnN0IHRvcG9FbGVtZW50IG9mIHRvcG9FbGVtZW50ZW4pIHtcbiAgICAgICAgICAgIGxldCBraWxvbWV0cmVyaW5nZW4gPSBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBrbXM6IHNiYmxhZC5LaWxvbWV0cmVyaW5nW10gPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KHRvcG9FbGVtZW50LmdldEtpbG9tZXRyZXJpbmdlbigpKTtcbiAgICAgICAgICAgIGlmIChrbXMgIT09IG51bGwgJiYga21zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBraWxvbWV0cmVyaW5nZW4gPSBrbXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChraWxvbWV0cmVyaW5nZW4gJiYgIWZpcnN0KSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBraWxvbWV0cmVyaW5nZW5bMF0uZ2V0S21XYWFyZGUoKTtcbiAgICAgICAgICAgICAgICBsaW50ID0ga2lsb21ldHJlcmluZ2VuWzBdLmdldEttTGludCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChraWxvbWV0cmVyaW5nZW4gJiYgZmlyc3QgJiYgIXNlY29uZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGttID0gS21SYW5nZS5nZXRLaWxvbWV0cmVyaW5nKGxpbnQsIGtpbG9tZXRyZXJpbmdlbik7XG4gICAgICAgICAgICAgICAgaWYgKGttKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZCA9IGttLmdldEttV2FhcmRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0ICYmIHNlY29uZCAmJiBmaXJzdCA+IHNlY29uZCkge1xuICAgICAgICAgICAgICAgIHRvcG9FbGVtZW50ZW4ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3BvRWxlbWVudGVuO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvcnJpZ2VlclRvcG9FbGVtZW50ZW5ab25kZXJLbXModG9wb0VsZW1lbnRlblpvbmRlckttczogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdLCB2YW5LaWxvbWV0cmVyaW5nZW46IHNiYmxhZC5LaWxvbWV0cmVyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RLaWxvbWV0cmVyaW5nZW46IHNiYmxhZC5LaWxvbWV0cmVyaW5nW10gfCB1bmRlZmluZWQsIGttUmFuZ2VzOiBLbVJhbmdlW10pOiB2b2lkIHtcbiAgICAgICAgdG9wb0VsZW1lbnRlblpvbmRlckttcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgaWYgKCF2YW5LaWxvbWV0cmVyaW5nZW4gJiYgdG90S2lsb21ldHJlcmluZ2VuKSB7XG4gICAgICAgICAgICAgICAgdmFuS2lsb21ldHJlcmluZ2VuID0gW25ldyBNc3RLaWxvbWV0cmVyaW5nKHRvdEtpbG9tZXRyZXJpbmdlblswXS5nZXRLbUxpbnQoKSwgLTEwMDAwMCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0b3RLaWxvbWV0cmVyaW5nZW4gJiYgdmFuS2lsb21ldHJlcmluZ2VuKSB7XG4gICAgICAgICAgICAgICAgdG90S2lsb21ldHJlcmluZ2VuID0gW25ldyBNc3RLaWxvbWV0cmVyaW5nKHZhbktpbG9tZXRyZXJpbmdlblswXS5nZXRLbUxpbnQoKSwgMTAwMDAwKV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YW5LaWxvbWV0cmVyaW5nZW4gJiYgdG90S2lsb21ldHJlcmluZ2VuICYmIHZhbktpbG9tZXRyZXJpbmdlblswXSA+IHRvdEtpbG9tZXRyZXJpbmdlblswXSkge1xuICAgICAgICAgICAgICAgIGttUmFuZ2VzLnB1c2goS21SYW5nZS5yYW5nZVZvb3JTdHJla09iamVjdChlLCB0aGlzLmFkZEttKHZhbktpbG9tZXRyZXJpbmdlbiwgLTEpLCB0aGlzLmFkZEttKHRvdEtpbG9tZXRyZXJpbmdlbiwgMSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga21SYW5nZXMucHVzaChLbVJhbmdlLnJhbmdlVm9vclN0cmVrT2JqZWN0KGUsIHRoaXMuYWRkS20odmFuS2lsb21ldHJlcmluZ2VuID8/IFtdLCAxKSwgdGhpcy5hZGRLbSh0b3RLaWxvbWV0cmVyaW5nZW4gPz8gW10sIC0xKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhZGRLbShrbXM6IEtpbG9tZXRyZXJpbmdbXSwgYWFudGFsOiBudW1iZXIpOiBLaWxvbWV0cmVyaW5nW10ge1xuICAgICAgICBjb25zdCByZXR2YWwgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrbSBvZiBrbXMpIHtcbiAgICAgICAgICAgIHJldHZhbC5wdXNoKG5ldyBNc3RLaWxvbWV0cmVyaW5nKGttLmdldEttTGludCgpLCBrbS5nZXRLbVdhYXJkZSgpICsgYWFudGFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBrYW5BY3RpZXNCZXBhbGVuKHJpdGRlZWw6IFJpdGRlZWwpOiBib29sZWFuIHwgQWN0aWVbXSB7XG4gICAgICAgIHJldHVybiByaXRkZWVsLmlzWmljaHRiYWFyKCkgJiYgcml0ZGVlbC5hY3RpZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNLaWxvbWV0cmVyaW5nQWFud2V6aWcoZnJhZ21lbnRlbjogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBhYW53ZXppZyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50ZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGttcyA9IEpzSmF2YVV0aWwubGlzdFRvQXJyYXkoZnJhZ21lbnQuZ2V0S2lsb21ldHJlcmluZ2VuKCkpO1xuICAgICAgICAgICAgaWYgKGttcyAhPT0gbnVsbCAmJiBrbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFhbndlemlnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWFud2V6aWc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYmVwYWFsU3Bvb3J0YWtGcmFnbWVudGVuKHNwb29ydGFrOiBzYmJsYWQuU3Bvb3J0YWspOiBzYmJsYWQuVG9wb2xvZ3lFbGVtZW50W10ge1xuICAgICAgICByZXR1cm4gSnNKYXZhVXRpbC5saXN0VG9BcnJheShzcG9vcnRhay5nZXRUYWtFbGVtZW50ZW4oKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYmVwYWFsU3Bvb3J0YWtGcmFnbWVudGVuUHVpY3MoZnJhZ21lbnRlbjogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBwdWljczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZnJhZ21lbnRlbi5mb3JFYWNoKGRlZWwgPT4gcHVpY3MucHVzaChkZWVsLmdldFB1aWMoKSkpO1xuICAgICAgICByZXR1cm4gcHVpY3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNFbmdlbHNlV2lzc2VsKGFjdGllOiBBY3RpZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gYWN0aWUud2lzc2VsTmFhbS5pbmNsdWRlcygnfCcpICYmIGFjdGllLndpc3NlbEthbnRDb2RlLmxlbmd0aCA9PT0gMjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRLYW50Y29kZVRla3N0KGthbnRjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdGVrc3QgPSAnVm9vcic7XG4gICAgICAgIGlmICh0aGlzLmlzS2FudENvZGVMaW5rcyhrYW50Y29kZSkpIHtcbiAgICAgICAgICAgIHRla3N0ID0gJ0xpbmtzJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzS2FudENvZGVSZWNodHMoa2FudGNvZGUpKSB7XG4gICAgICAgICAgICB0ZWtzdCA9ICdSZWNodHMnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZWtzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBpc0thbnRDb2RlUmVjaHRzKGthbnRjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGthbnRjb2RlID09PSAnUic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNLYW50Q29kZUxpbmtzKGthbnRjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGthbnRjb2RlID09PSAnTCc7XG4gICAgfVxuXG4gICAgYmVwYWFsUHVpY3NWb29yQWN0aWUoYWN0aWU6IEFjdGllKTogc3RyaW5nW10ge1xuICAgICAgICBsZXQgcHVpY3M7XG4gICAgICAgIGlmIChBY3RpZUhlbHBlci5pc1ZTVEFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgcHVpY3MgPSB0aGlzLmJlcGFhbFB1aWNzVm9vclZTVEFjdGllKGFjdGllKTtcbiAgICAgICAgfSBlbHNlIGlmIChBY3RpZUhlbHBlci5pc1dpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSkpIHtcbiAgICAgICAgICAgIHB1aWNzID0gdGhpcy5iZXBhYWxQdWljVm9vcldpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdWljcyA9IHRoaXMuYmVwYWFsQWN0aWVQdWljc1Zvb3JTcG9vcnRhayhhY3RpZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1aWNzO1xuICAgIH1cblxuICAgIGJlcGFhbEFjdGllUHVpY3NVaXRSaXRkZWVsKHJpdERlZWw6IFJpdGRlZWwpOiBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+IHsvLyB2b29yIGhpZ2hsaWdodHNcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4oKTtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmthbkFjdGllc0JlcGFsZW4ocml0RGVlbCkpIHtcbiAgICAgICAgICAgIHJpdERlZWwuYWN0aWVzLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbWFwLnB1dEFsbChhLCB0aGlzLmJlcGFhbFB1aWNzVm9vckFjdGllKGEpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuXG4gICAgYmVwYWFsQWN0aWVzUHVpY3MoYWN0aWVzOiBBY3RpZVtdLCB0b3BvRWxlbTogVG9wb2xvZ3lFbGVtZW50W10pOiBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgdG9wb0VsZW1lbnRlbiA9IEFjdGllSGVscGVyLnNvcnRlZXJUb3BvRWxlbWVudGVuKHRvcG9FbGVtKTtcblxuICAgICAgICBjb25zdCBrbVJhbmdlcyA9IHRoaXMudmVyd2Vya1RvcG9FbGVtZW50ZW4odG9wb0VsZW1lbnRlbik7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcndlcmtBY3RpZXMoYWN0aWVzLCBrbVJhbmdlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJ3ZXJrQWN0aWVzKGFjdGllczogQWN0aWVbXSwga21SYW5nZXM6IEttUmFuZ2VbXSk6IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4ge1xuICAgICAgICBjb25zdCBhY3RpZVpvbmRlckVsZW1lbnRlbjogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgY29uc3QgbG9nTWVsZGluZ0RUT3M6IExvZ0R0b1tdID0gW107XG5cbiAgICAgICAgY29uc3QgcmV0dmFsID0gbmV3IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4oKTtcbiAgICAgICAgYWN0aWVzLmZvckVhY2goYWN0aWUgPT4ge1xuICAgICAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzV2lzc2VsU2xpanBlbkFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1aWNBcnJheSA9IHRoaXMuYmVwYWFsUHVpY1Zvb3JXaXNzZWxTbGlqcGVuQWN0aWUoYWN0aWUpO1xuICAgICAgICAgICAgICAgIHJldHZhbC5wdXRBbGwoYWN0aWUsIHB1aWNBcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1aWNzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGttUmFuZ2VzLmZvckVhY2goa21SYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggYWN0aWUudmFuS2lsb21ldHJlcmluZyAmJiBhY3RpZS52YW5LaWxvbWV0ZXJsaW50ICYmIGFjdGllLnRvdEtpbG9tZXRyZXJpbmcgJiYgYWN0aWUudG90S2lsb21ldGVybGludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbktpbG9tZXRyZXJpbmcgPSBuZXcgTXN0S2lsb21ldHJlcmluZyhhY3RpZS52YW5LaWxvbWV0ZXJsaW50LCBhY3RpZS52YW5LaWxvbWV0cmVyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b3RLaWxvbWV0cmVyaW5nID0gbmV3IE1zdEtpbG9tZXRyZXJpbmcoYWN0aWUudG90S2lsb21ldGVybGludCwgYWN0aWUudG90S2lsb21ldHJlcmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aWUudmFuS2lsb21ldHJlcmluZyA+IGFjdGllLnRvdEtpbG9tZXRyZXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wID0ge3ZhbjogdmFuS2lsb21ldHJlcmluZywgdG90OiB0b3RLaWxvbWV0cmVyaW5nfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW5LaWxvbWV0cmVyaW5nID0gdGVtcC50b3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90S2lsb21ldHJlcmluZyA9IHRlbXAudmFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa21SYW5nZS5oZWVmdE92ZXJsYXAodmFuS2lsb21ldHJlcmluZywgdG90S2lsb21ldHJlcmluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWljcy5wdXNoKGttUmFuZ2UudG9wb2xvZ3lFbGVtZW50LmdldFB1aWMoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocHVpY3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGllWm9uZGVyRWxlbWVudGVuLnB1c2goYWN0aWUuaWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZWxkaW5nOiBNZWxkaW5nRXZlbnQgPSBNZWxkaW5nQnVpbGRlci5hY3RpZUhpZ2hsaWdodEVycm9yKGFjdGllWm9uZGVyRWxlbWVudGVuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnaW5nSGVscGVyLm1hYWtMb2dEVE8obWVsZGluZywgYWN0aWUpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXAoZHRvID0+IGxvZ01lbGRpbmdEVE9zLnB1c2goZHRvKSlcbiAgICAgICAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dmFsLnB1dEFsbChhY3RpZSwgcHVpY3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2dMZWdlTWVsZGluZ0R0byhsb2dNZWxkaW5nRFRPcyk7XG4gICAgICAgIHJldHVybiByZXR2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2dMZWdlTWVsZGluZ0R0byhsb2dEdG86IExvZ0R0b1tdKTogdm9pZCB7XG4gICAgICAgIGlmIChsb2dEdG8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubXN0TG9nUmVzb3VyY2UubG9nTWVzc2FnZXMobG9nRHRvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmVyd2Vya1RvcG9FbGVtZW50ZW4odG9wb0VsZW1lbnRlbjogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdKTogS21SYW5nZVtdIHtcbiAgICAgICAgY29uc3Qga21SYW5nZXM6IEttUmFuZ2VbXSA9IFtdO1xuXG4gICAgICAgIGxldCB0b3BvRWxlbWVudGVuWm9uZGVyS21zOiBUb3BvbG9neUVsZW1lbnRbXSA9IFtdO1xuICAgICAgICBsZXQgbGFhdHN0ZVB1bnRLbXM6IEtpbG9tZXRyZXJpbmdbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdG9wb0VsZW1lbnRlbi5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgICAgICAgY29uc3Qga21zOiBLaWxvbWV0cmVyaW5nW10gPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KGVsZW0uZ2V0S2lsb21ldHJlcmluZ2VuKCkpO1xuICAgICAgICAgICAgaWYgKGttcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgQWN0aWVIZWxwZXIuY29ycmlnZWVyVG9wb0VsZW1lbnRlblpvbmRlckttcyh0b3BvRWxlbWVudGVuWm9uZGVyS21zLCBsYWF0c3RlUHVudEttcywga21zLCBrbVJhbmdlcyk7XG4gICAgICAgICAgICAgICAgdG9wb0VsZW1lbnRlblpvbmRlckttcyA9IFtdO1xuICAgICAgICAgICAgICAgIGttUmFuZ2VzLnB1c2goS21SYW5nZS5yYW5nZVZvb3JQdW50T2JqZWN0KGVsZW0pKTtcbiAgICAgICAgICAgICAgICBsYWF0c3RlUHVudEttcyA9IGttcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9wb0VsZW1lbnRlblpvbmRlckttcy5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRvcG9FbGVtZW50ZW5ab25kZXJLbXMubGVuZ3RoID4gMCAmJiBsYWF0c3RlUHVudEttcykge1xuICAgICAgICAgICAgQWN0aWVIZWxwZXIuY29ycmlnZWVyVG9wb0VsZW1lbnRlblpvbmRlckttcyh0b3BvRWxlbWVudGVuWm9uZGVyS21zLCBsYWF0c3RlUHVudEttcywgdW5kZWZpbmVkLCBrbVJhbmdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGttUmFuZ2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsQWN0aWVQdWljc1Zvb3JTcG9vcnRhayhhY3RpZTogQWN0aWUpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHNwb29ydGFrID0gdGhpcy5zYm1TZXJ2aWNlLmdldFNiU3Bvb3J0YWsoQWN0aWVIZWxwZXIuYmVwYWFsVGFrSWQoYWN0aWUpKTtcblxuICAgICAgICBsZXQgcHVpY3M6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmICghc3Bvb3J0YWspIHtcbiAgICAgICAgICAgIHJldHVybiBwdWljcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcmFnbWVudGVuID0gQWN0aWVIZWxwZXIuYmVwYWFsU3Bvb3J0YWtGcmFnbWVudGVuKHNwb29ydGFrKTtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2lsb21ldHJlcmluZ0FhbndlemlnKGZyYWdtZW50ZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSB0aGlzLmJlcGFhbEFjdGllc1B1aWNzKFthY3RpZV0sIGZyYWdtZW50ZW4pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgQXJyYXkuZnJvbShtYXAua2V5cygpKSkge1xuICAgICAgICAgICAgICAgIG1hcC5nZXQoa2V5KS5mb3JFYWNoKHggPT4gcHVpY3MucHVzaCh4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdWljcyA9IEFjdGllSGVscGVyLmJlcGFhbFNwb29ydGFrRnJhZ21lbnRlblB1aWNzKGZyYWdtZW50ZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwdWljcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbFB1aWNzVm9vclZTVEFjdGllKGFjdGllOiBBY3RpZSk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzSGVlbE9mSGFsZkVuZ2Vsc1dpc3NlbEFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0dmFsID0gW107XG4gICAgICAgICAgICBjb25zdCB3aXNzZWxEZWxlbiA9IEFjdGllSGVscGVyLmdldFdpc3NlbERlbGVuKGFjdGllLndpc3NlbE5hYW0pO1xuICAgICAgICAgICAgY29uc3QgcHVpY3NFZXJzdGVXaXNzZWwgPSB0aGlzLmJlcGFhbFdpc3NlbFB1aWNzKHdpc3NlbERlbGVuWzBdLCBhY3RpZS5wcGxnTmFhbSwgYWN0aWUud2lzc2VsS2FudENvZGVbMF0pO1xuICAgICAgICAgICAgY29uc3QgcHVpY3NUd2VlZGVXaXNzZWwgPSB0aGlzLmJlcGFhbFdpc3NlbFB1aWNzKHdpc3NlbERlbGVuWzFdLCBhY3RpZS5wcGxnTmFhbSwgYWN0aWUud2lzc2VsS2FudENvZGVbMV0pO1xuXG4gICAgICAgICAgICBjb25zdCBwdWljMSA9IHRoaXMuc2JtU2VydmljZS5nZXRFZXJzdGVWZXJiaW5kaW5nUHVpY1Zvb3JTcGxpdEVuZ2Vsc2VXaXNzZWwod2lzc2VsRGVsZW5bMF0sIGFjdGllLndpc3NlbEthbnRDb2RlWzBdKTtcbiAgICAgICAgICAgIGlmIChwdWljMSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR2YWwucHVzaChwdWljMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwdWljMiA9IHRoaXMuc2JtU2VydmljZS5nZXRFZXJzdGVWZXJiaW5kaW5nUHVpY1Zvb3JTcGxpdEVuZ2Vsc2VXaXNzZWwod2lzc2VsRGVsZW5bMV0sIGFjdGllLndpc3NlbEthbnRDb2RlWzFdKTtcbiAgICAgICAgICAgIGlmIChwdWljMiAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR2YWwucHVzaChwdWljMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR2YWwucHVzaCguLi5wdWljc0VlcnN0ZVdpc3NlbCk7XG4gICAgICAgICAgICByZXR2YWwucHVzaCguLi5wdWljc1R3ZWVkZVdpc3NlbCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmVwYWFsV2lzc2VsUHVpY3MoYWN0aWUud2lzc2VsTmFhbSwgYWN0aWUucHBsZ05hYW0sIGFjdGllLndpc3NlbEthbnRDb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsV2lzc2VsUHVpY3Mod2lzc2VsTmFhbTogc3RyaW5nLCBwcGxnTmFhbTogc3RyaW5nLCBrYW50Y29kZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCB3aXNzZWwgPSB0aGlzLnNibVNlcnZpY2UuZ2V0U0JXaXNzZWwod2lzc2VsTmFhbSwgcHBsZ05hYW0pO1xuICAgICAgICBpZiAoIXdpc3NlbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGthbnRFbGVtZW50ID0gdGhpcy5iZXBhYWxLYW50RWxlbWVudChrYW50Y29kZSwgd2lzc2VsKTtcbiAgICAgICAgaWYgKCFrYW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3JpbmdTeW1ib29sUHVpYyA9IHdpc3NlbC5nZXRTdG9yaW5nU3ltYm9vbFB1aWMoKTtcblxuICAgICAgICByZXR1cm4gW3N0b3JpbmdTeW1ib29sUHVpYywga2FudEVsZW1lbnQuZ2V0UHVpYygpXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbEthbnRFbGVtZW50KGthbnRjb2RlOiBzdHJpbmcsIHdpc3NlbDogc2JibGFkLldpc3NlbCk6IHNiYmxhZC5TcG9vcnRha0ZyYWdtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2FudENvZGVSZWNodHMoa2FudGNvZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gd2lzc2VsLmdldFJpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2FudENvZGVMaW5rcyhrYW50Y29kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXNzZWwuZ2V0TGVmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZXBhYWxQdWljVm9vcldpc3NlbFNsaWpwZW5BY3RpZShhY3RpZTogQWN0aWUpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHN0b3JpbmdzU3ltYm9vbFB1aWMgPSB0aGlzLnNibVNlcnZpY2UuZ2V0U0JXaXNzZWwoYWN0aWUud2lzc2VsTmFhbSwgYWN0aWUucHBsZ05hYW0pPy5nZXRTdG9yaW5nU3ltYm9vbFB1aWMoKTtcbiAgICAgICAgaWYgKCFzdG9yaW5nc1N5bWJvb2xQdWljICYmIHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbGRpbmc6IE1lbGRpbmdFdmVudCA9IE1lbGRpbmdCdWlsZGVyLmFjdGllSGlnaGxpZ2h0RXJyb3IoW2FjdGllLmlkXSk7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzU2VydmljZS5zaG93TWVzc2FnZShNZXNzYWdlQnVpbGRlci5hY3RpZUhpZ2hsaWdodEVycm9yKFthY3RpZS5pZF0pKTtcblxuICAgICAgICAgICAgdGhpcy5sb2dnaW5nSGVscGVyLm1hYWtMb2dEVE8obWVsZGluZywgYWN0aWUpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKGxvZ0R0byA9PiB0aGlzLm1zdExvZ1Jlc291cmNlLmxvZ01lc3NhZ2VzKFtsb2dEdG9dKSlcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RvcmluZ3NTeW1ib29sUHVpYyA/IFtzdG9yaW5nc1N5bWJvb2xQdWljXSA6IFtdO1xuICAgIH1cbn1cblxuXG4iXX0=
@@ -35,7 +35,7 @@ export class ActiePopoverBepaler {
35
35
  ongeplandeActies.entries.forEach(entry => {
36
36
  const treinNummerActieInfos = puicNaarOngeplandeActieMap.get(entry.key);
37
37
  if (!treinNummerActieInfos?.map(({ actie }) => actie).includes(entry.value.actie)) {
38
- puicNaarOngeplandeActieMap.put(entry.key, { treinNummer: undefined, actie: entry.value.actie });
38
+ puicNaarOngeplandeActieMap.put(entry.key, { actie: entry.value.actie });
39
39
  }
40
40
  });
41
41
  }
@@ -87,4 +87,4 @@ export class ActiePopoverBepaler {
87
87
  return retval;
88
88
  }
89
89
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aWUtcG9wb3Zlci1iZXBhbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3V0aWwvYWN0aWUtcG9wb3Zlci1iZXBhbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUloRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQU81QyxNQUFNLE9BQU8sbUJBQW1CO0lBQzVCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFtQixFQUFFLGlCQUErQyxFQUNwRSxnQkFBd0Q7UUFDOUUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbEYsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUzRixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSw0QkFBNEIsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFD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Q0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9wb3ZlckluZm8gfSBmcm9tICdAbG94aWEvaW14LXZpZXdlcic7XG5pbXBvcnQgeyBPbmdlcGxhbmRlQWN0aWUgfSBmcm9tICcuLi9tb2RlbC9vbmdlcGxhbmRlLWFjdGllJztcbmltcG9ydCB7IFJpdGRlZWwgfSBmcm9tICcuLi9tb2RlbC9yaXRkZWVsJztcbmltcG9ydCB7IEFjdGllIH0gZnJvbSAnLi4vb3B0aW1vJztcbmltcG9ydCB7IEFjdGllSGVscGVyIH0gZnJvbSAnLi9hY3RpZS1oZWxwZXInO1xuaW1wb3J0IHsgQXJyYXlNdWx0aW1hcCB9IGZyb20gJy4vbXVsdGktbWFwJztcblxuaW50ZXJmYWNlIFRyZWluTnVtbWVyQWN0aWVJbmZvIHtcbiAgICB0cmVpbk51bW1lcjogbnVtYmVyO1xuICAgIGFjdGllOiBBY3RpZTtcbn1cblxuZXhwb3J0IGNsYXNzIEFjdGllUG9wb3ZlckJlcGFsZXIge1xuICAgIHN0YXRpYyBiZXBhYWxQb3BvdmVySW5mb3Mocml0RGVsZW46IFJpdGRlZWxbXSwgcml0QWN0aWVUb3BvUHVpY3M6IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmdlcGxhbmRlQWN0aWVzOiBBcnJheU11bHRpbWFwPHN0cmluZywgT25nZXBsYW5kZUFjdGllPik6IFBvcG92ZXJJbmZvW10ge1xuICAgICAgICBjb25zdCBwdWljTmFhckFjdGllTWFwID0gdGhpcy5iZXBhYWxQdWljTmFhckFjdGllTWFwKHJpdERlbGVuLCByaXRBY3RpZVRvcG9QdWljcyk7XG4gICAgICAgIGNvbnN0IHB1aWNOYWFyT25nZXBsYW5kZUFjdGllTWFwID0gdGhpcy5iZXBhYWxQdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcChvbmdlcGxhbmRlQWN0aWVzKTtcblxuICAgICAgICBjb25zdCBwdWljcyA9IHB1aWNOYWFyQWN0aWVNYXAua2V5cygpO1xuICAgICAgICBwdWljcy5wdXNoKC4uLnB1aWNOYWFyT25nZXBsYW5kZUFjdGllTWFwLmtleXMoKS5maWx0ZXIocCA9PiAhcHVpY3MuaW5jbHVkZXMocCkpKTtcblxuICAgICAgICBjb25zdCBpbmZvcyA9IFtdO1xuICAgICAgICBwdWljcy5mb3JFYWNoKHB1aWMgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSAnJztcbiAgICAgICAgICAgIGNvbnN0IHRyZWluTnVtbWVyQWN0aWVJbmZvc0dlcGxhbmQgPSBwdWljTmFhckFjdGllTWFwLmdldChwdWljKS5zb3J0KHRoaXMuc29ydFRyZWluTnVtbWVyQWN0aWVJbmZvKCkpO1xuICAgICAgICAgICAgY29uc3QgdHJlaW5OdW1tZXJBY3RpZUluZm9zT25nZXBsYW5kID0gcHVpY05hYXJPbmdlcGxhbmRlQWN0aWVNYXAuZ2V0KHB1aWMpLnNvcnQodGhpcy5zb3J0VHJlaW5OdW1tZXJBY3RpZUluZm8oKSk7XG4gICAgICAgICAgICBjb25zdCBzaG93VHJlaW5OdW1tZXIgPSB0cmVpbk51bW1lckFjdGllSW5mb3NHZXBsYW5kLnNvbWUoaSA9PiAhIWkudHJlaW5OdW1tZXIpXG4gICAgICAgICAgICAgICAgfHwgdHJlaW5OdW1tZXJBY3RpZUluZm9zT25nZXBsYW5kLnNvbWUoaSA9PiAhIWkudHJlaW5OdW1tZXIpO1xuICAgICAgICAgICAgdHJlaW5OdW1tZXJBY3RpZUluZm9zR2VwbGFuZC5mb3JFYWNoKGEgPT4gY29udGVudCA9IHRoaXMudnVsUG9wb3ZlckNvbnRlbnQoY29udGVudCwgYSwgJ3BvcG92ZXJ0ZWtzdC1nZXBsYW5kJywgc2hvd1RyZWluTnVtbWVyKSk7XG4gICAgICAgICAgICB0cmVpbk51bW1lckFjdGllSW5mb3NPbmdlcGxhbmQuZm9yRWFjaChhID0+IGNvbnRlbnQgPSB0aGlzLnZ1bFBvcG92ZXJDb250ZW50KGNvbnRlbnQsIGEsICdwb3BvdmVydGVrc3Qtb25nZXBsYW5kJywgc2hvd1RyZWluTnVtbWVyKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmNyZWF0ZVBvcG92ZXJJbmZvKGNvbnRlbnQsIHB1aWMsIHNob3dUcmVpbk51bW1lcik7XG4gICAgICAgICAgICBpbmZvcy5wdXNoKGluZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGluZm9zO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZVBvcG92ZXJJbmZvKGNvbnRlbnQ6IHN0cmluZywgcHVpYzogc3RyaW5nLCBzaG93VHJlaW5OdW1tZXI6IGJvb2xlYW4pOiBQb3BvdmVySW5mbyB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBuZXcgUG9wb3ZlckluZm8oW3B1aWNdLCBjb250ZW50KTtcbiAgICAgICAgaW5mby5wb3BvdmVyVGl0bGVDb250ZW50ID0gc2hvd1RyZWluTnVtbWVyID8gJzxzcGFuIGNsYXNzPVwidHJlaW5udW1tZXJcIj5UcmVpbiAjPC9zcGFuPjxzcGFuPkFjdGllczwvc3Bhbj4nIDogJ0FjdGllcyc7XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNvcnRUcmVpbk51bW1lckFjdGllSW5mbygpOiAoYTogVHJlaW5OdW1tZXJBY3RpZUluZm8sIGI6IFRyZWluTnVtbWVyQWN0aWVJbmZvKSA9PiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKGExLCBhMik6IG51bWJlciA9PiBBY3RpZUhlbHBlci5hY3RpZUNvbXBhcmF0b3IoYTEuYWN0aWUsIGEyLmFjdGllKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBiZXBhYWxQdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcChvbmdlcGxhbmRlQWN0aWVzOiBBcnJheU11bHRpbWFwPHN0cmluZywgT25nZXBsYW5kZUFjdGllPik6IEFycmF5TXVsdGltYXA8c3RyaW5nLCBUcmVpbk51bW1lckFjdGllSW5mbz4ge1xuICAgICAgICBjb25zdCBwdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcCA9IG5ldyBBcnJheU11bHRpbWFwPHN0cmluZywgVHJlaW5OdW1tZXJBY3RpZUluZm8+KCk7XG4gICAgICAgIGlmIChvbmdlcGxhbmRlQWN0aWVzLnNpemUoKSA+IDApIHtcbiAgICAgICAgICAgIG9uZ2VwbGFuZGVBY3RpZXMuZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmVpbk51bW1lckFjdGllSW5mb3MgPSBwdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcC5nZXQoZW50cnkua2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIXRyZWluTnVtbWVyQWN0aWVJbmZvcz8ubWFwKCh7IGFjdGllIH0pID0+IGFjdGllKS5pbmNsdWRlcyhlbnRyeS52YWx1ZS5hY3RpZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVpY05hYXJPbmdlcGxhbmRlQWN0aWVNYXAucHV0KGVudHJ5LmtleSwgeyB0cmVpbk51bW1lcjogdW5kZWZpbmVkLCBhY3RpZTogZW50cnkudmFsdWUuYWN0aWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1aWNOYWFyT25nZXBsYW5kZUFjdGllTWFwO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGJlcGFhbFB1aWNOYWFyQWN0aWVNYXAocml0RGVsZW46IFJpdGRlZWxbXSwgcml0QWN0aWVUb3BvUHVpY3M6IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4pOiBBcnJheU11bHRpbWFwPHN0cmluZywgVHJlaW5OdW1tZXJBY3RpZUluZm8+IHtcbiAgICAgICAgY29uc3QgcHVpY05hYXJBY3RpZU1hcCA9IG5ldyBBcnJheU11bHRpbWFwPHN0cmluZywgVHJlaW5OdW1tZXJBY3RpZUluZm8+KCk7XG4gICAgICAgIHJpdERlbGVuLmZvckVhY2gocml0RGVlbCA9PiB7XG4gICAgICAgICAgICBpZiAocml0RGVlbC5pc1ppY2h0YmFhcigpICYmIHJpdERlZWwuYWN0aWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJpdERlZWwuYWN0aWVzLmZvckVhY2gocml0QWN0aWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwdWljcyA9IHJpdEFjdGllVG9wb1B1aWNzLmdldChyaXRBY3RpZSk7XG4gICAgICAgICAgICAgICAgICAgIHB1aWNzLmZvckVhY2gocHVpYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvUHVpY05hYXJBY3RpZU1hcElmTm90RXhpc3RzKHB1aWNOYWFyQWN0aWVNYXAsIHB1aWMsIHJpdEFjdGllLCByaXREZWVsLmJld2VnaW5nPy50cmVpbk51bW1lcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHB1aWNOYWFyQWN0aWVNYXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYWRkVG9QdWljTmFhckFjdGllTWFwSWZOb3RFeGlzdHMocHVpY05hYXJBY3RpZU1hcDogQXJyYXlNdWx0aW1hcDxzdHJpbmcsIFRyZWluTnVtbWVyQWN0aWVJbmZvPiwgcHVpYzogc3RyaW5nLCByaXRBY3RpZTogQWN0aWUsIHRyZWluTnVtbWVyOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdHJlaW5OdW1tZXJBY3RpZUluZm9zID0gcHVpY05hYXJBY3RpZU1hcC5nZXQocHVpYyk7XG4gICAgICAgIGlmICghKHRyZWluTnVtbWVyQWN0aWVJbmZvcz8uZmluZCgoeyBhY3RpZSB9KSA9PiBhY3RpZSA9PT0gcml0QWN0aWUpKSkge1xuICAgICAgICAgICAgY29uc3QgYWN0aWVJbmZvOiBUcmVpbk51bW1lckFjdGllSW5mbyA9IHsgdHJlaW5OdW1tZXIsIGFjdGllOiByaXRBY3RpZSB9O1xuICAgICAgICAgICAgcHVpY05hYXJBY3RpZU1hcC5wdXQocHVpYywgYWN0aWVJbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHZ1bFBvcG92ZXJDb250ZW50KGNvbnRlbnQ6IHN0cmluZywgeyB0cmVpbk51bW1lciwgYWN0aWUgfTogVHJlaW5OdW1tZXJBY3RpZUluZm8sIGNsYXp6OiBzdHJpbmcsIHNob3dUcmVpbk51bW1lcjogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXR2YWwgPSBjb250ZW50O1xuICAgICAgICBjb25zdCB0cmVpbm51bW1lckNsYXNzID0gc2hvd1RyZWluTnVtbWVyID8gJ2NsYXNzPVwidHJlaW5udW1tZXJcIicgOiAnY2xhc3M9XCJuby10cmVpbm51bW1lclwiJztcblxuICAgICAgICByZXR2YWwgKz0gJzxkaXYgY2xhc3M9XCJub3dyYXAgJyArIGNsYXp6ICsgJ1wiPic7XG4gICAgICAgIHJldHZhbCArPSBgPHNwYW4gJHsgdHJlaW5udW1tZXJDbGFzcyB9PiR7IHRyZWluTnVtbWVyIHx8ICctJyB9PC9zcGFuPmA7XG5cbiAgICAgICAgbGV0IGFjdGllT21zY2hyaWp2aW5nID0gJyc7XG4gICAgICAgIGlmIChBY3RpZUhlbHBlci5pc1ZTVEFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgYWN0aWVPbXNjaHJpanZpbmcgKz0gQWN0aWVIZWxwZXIuZ2V0VlNUQWN0aWVPbXNjaHJpanZpbmcoYWN0aWUpO1xuICAgICAgICB9IGVsc2UgaWYgKEFjdGllSGVscGVyLmlzV2lzc2VsU2xpanBlbkFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgYWN0aWVPbXNjaHJpanZpbmcgKz0gYCR7IGFjdGllLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZyB9ICR7IGFjdGllLndpc3NlbE5hYW0gfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY3RpZU9tc2NocmlqdmluZyArPSBgJHsgYWN0aWUucml0QWN0aWVUeXBlT21zY2hyaWp2aW5nIH0gJHsgYWN0aWUudmFuS2lsb21ldGVybGludCB9ICR7IGFjdGllLnZhbktpbG9tZXRyZXJpbmcgfWA7XG4gICAgICAgICAgICBhY3RpZU9tc2NocmlqdmluZyArPSAnLSc7XG4gICAgICAgICAgICBpZiAoYWN0aWUudG90S2lsb21ldGVybGludCAhPT0gYWN0aWUudmFuS2lsb21ldGVybGludCkge1xuICAgICAgICAgICAgICAgIGFjdGllT21zY2hyaWp2aW5nICs9IGFjdGllLnRvdEtpbG9tZXRlcmxpbnQ7XG4gICAgICAgICAgICAgICAgYWN0aWVPbXNjaHJpanZpbmcgKz0gJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aWVPbXNjaHJpanZpbmcgKz0gYWN0aWUudG90S2lsb21ldHJlcmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR2YWwgKz0gYDxzcGFuPiR7IGFjdGllT21zY2hyaWp2aW5nIH08L3NwYW4+PC9kaXY+YDtcbiAgICAgICAgcmV0dXJuIHJldHZhbDtcbiAgICB9XG59XG4iXX0=
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aWUtcG9wb3Zlci1iZXBhbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3V0aWwvYWN0aWUtcG9wb3Zlci1iZXBhbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUloRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQU81QyxNQUFNLE9BQU8sbUJBQW1CO0lBQzVCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFtQixFQUFFLGlCQUErQyxFQUNwRSxnQkFBd0Q7UUFDOUUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbEYsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUzRixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRixNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sNEJBQTRCLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FB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Q29udGVudCI6WyJpbXBvcnQgeyBQb3BvdmVySW5mbyB9IGZyb20gJ0Bsb3hpYS9pbXgtdmlld2VyJztcbmltcG9ydCB7IE9uZ2VwbGFuZGVBY3RpZSB9IGZyb20gJy4uL21vZGVsL29uZ2VwbGFuZGUtYWN0aWUnO1xuaW1wb3J0IHsgUml0ZGVlbCB9IGZyb20gJy4uL21vZGVsL3JpdGRlZWwnO1xuaW1wb3J0IHsgQWN0aWUgfSBmcm9tICcuLi9vcHRpbW8nO1xuaW1wb3J0IHsgQWN0aWVIZWxwZXIgfSBmcm9tICcuL2FjdGllLWhlbHBlcic7XG5pbXBvcnQgeyBBcnJheU11bHRpbWFwIH0gZnJvbSAnLi9tdWx0aS1tYXAnO1xuXG5pbnRlcmZhY2UgVHJlaW5OdW1tZXJBY3RpZUluZm8ge1xuICAgIHRyZWluTnVtbWVyPzogbnVtYmVyO1xuICAgIGFjdGllOiBBY3RpZTtcbn1cblxuZXhwb3J0IGNsYXNzIEFjdGllUG9wb3ZlckJlcGFsZXIge1xuICAgIHN0YXRpYyBiZXBhYWxQb3BvdmVySW5mb3Mocml0RGVsZW46IFJpdGRlZWxbXSwgcml0QWN0aWVUb3BvUHVpY3M6IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmdlcGxhbmRlQWN0aWVzOiBBcnJheU11bHRpbWFwPHN0cmluZywgT25nZXBsYW5kZUFjdGllPik6IFBvcG92ZXJJbmZvW10ge1xuICAgICAgICBjb25zdCBwdWljTmFhckFjdGllTWFwID0gdGhpcy5iZXBhYWxQdWljTmFhckFjdGllTWFwKHJpdERlbGVuLCByaXRBY3RpZVRvcG9QdWljcyk7XG4gICAgICAgIGNvbnN0IHB1aWNOYWFyT25nZXBsYW5kZUFjdGllTWFwID0gdGhpcy5iZXBhYWxQdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcChvbmdlcGxhbmRlQWN0aWVzKTtcblxuICAgICAgICBjb25zdCBwdWljcyA9IHB1aWNOYWFyQWN0aWVNYXAua2V5cygpO1xuICAgICAgICBwdWljcy5wdXNoKC4uLnB1aWNOYWFyT25nZXBsYW5kZUFjdGllTWFwLmtleXMoKS5maWx0ZXIocCA9PiAhcHVpY3MuaW5jbHVkZXMocCkpKTtcblxuICAgICAgICBjb25zdCBpbmZvczogUG9wb3ZlckluZm9bXSA9IFtdO1xuICAgICAgICBwdWljcy5mb3JFYWNoKHB1aWMgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSAnJztcbiAgICAgICAgICAgIGNvbnN0IHRyZWluTnVtbWVyQWN0aWVJbmZvc0dlcGxhbmQgPSBwdWljTmFhckFjdGllTWFwLmdldChwdWljKS5zb3J0KHRoaXMuc29ydFRyZWluTnVtbWVyQWN0aWVJbmZvKCkpO1xuICAgICAgICAgICAgY29uc3QgdHJlaW5OdW1tZXJBY3RpZUluZm9zT25nZXBsYW5kID0gcHVpY05hYXJPbmdlcGxhbmRlQWN0aWVNYXAuZ2V0KHB1aWMpLnNvcnQodGhpcy5zb3J0VHJlaW5OdW1tZXJBY3RpZUluZm8oKSk7XG4gICAgICAgICAgICBjb25zdCBzaG93VHJlaW5OdW1tZXIgPSB0cmVpbk51bW1lckFjdGllSW5mb3NHZXBsYW5kLnNvbWUoaSA9PiAhIWkudHJlaW5OdW1tZXIpXG4gICAgICAgICAgICAgICAgfHwgdHJlaW5OdW1tZXJBY3RpZUluZm9zT25nZXBsYW5kLnNvbWUoaSA9PiAhIWkudHJlaW5OdW1tZXIpO1xuICAgICAgICAgICAgdHJlaW5OdW1tZXJBY3RpZUluZm9zR2VwbGFuZC5mb3JFYWNoKGEgPT4gY29udGVudCA9IHRoaXMudnVsUG9wb3ZlckNvbnRlbnQoY29udGVudCwgYSwgJ3BvcG92ZXJ0ZWtzdC1nZXBsYW5kJywgc2hvd1RyZWluTnVtbWVyKSk7XG4gICAgICAgICAgICB0cmVpbk51bW1lckFjdGllSW5mb3NPbmdlcGxhbmQuZm9yRWFjaChhID0+IGNvbnRlbnQgPSB0aGlzLnZ1bFBvcG92ZXJDb250ZW50KGNvbnRlbnQsIGEsICdwb3BvdmVydGVrc3Qtb25nZXBsYW5kJywgc2hvd1RyZWluTnVtbWVyKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmNyZWF0ZVBvcG92ZXJJbmZvKGNvbnRlbnQsIHB1aWMsIHNob3dUcmVpbk51bW1lcik7XG4gICAgICAgICAgICBpbmZvcy5wdXNoKGluZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGluZm9zO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZVBvcG92ZXJJbmZvKGNvbnRlbnQ6IHN0cmluZywgcHVpYzogc3RyaW5nLCBzaG93VHJlaW5OdW1tZXI6IGJvb2xlYW4pOiBQb3BvdmVySW5mbyB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBuZXcgUG9wb3ZlckluZm8oW3B1aWNdLCBjb250ZW50KTtcbiAgICAgICAgaW5mby5wb3BvdmVyVGl0bGVDb250ZW50ID0gc2hvd1RyZWluTnVtbWVyID8gJzxzcGFuIGNsYXNzPVwidHJlaW5udW1tZXJcIj5UcmVpbiAjPC9zcGFuPjxzcGFuPkFjdGllczwvc3Bhbj4nIDogJ0FjdGllcyc7XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNvcnRUcmVpbk51bW1lckFjdGllSW5mbygpOiAoYTogVHJlaW5OdW1tZXJBY3RpZUluZm8sIGI6IFRyZWluTnVtbWVyQWN0aWVJbmZvKSA9PiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKGExLCBhMik6IG51bWJlciA9PiBBY3RpZUhlbHBlci5hY3RpZUNvbXBhcmF0b3IoYTEuYWN0aWUsIGEyLmFjdGllKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBiZXBhYWxQdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcChvbmdlcGxhbmRlQWN0aWVzOiBBcnJheU11bHRpbWFwPHN0cmluZywgT25nZXBsYW5kZUFjdGllPik6IEFycmF5TXVsdGltYXA8c3RyaW5nLCBUcmVpbk51bW1lckFjdGllSW5mbz4ge1xuICAgICAgICBjb25zdCBwdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcCA9IG5ldyBBcnJheU11bHRpbWFwPHN0cmluZywgVHJlaW5OdW1tZXJBY3RpZUluZm8+KCk7XG4gICAgICAgIGlmIChvbmdlcGxhbmRlQWN0aWVzLnNpemUoKSA+IDApIHtcbiAgICAgICAgICAgIG9uZ2VwbGFuZGVBY3RpZXMuZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmVpbk51bW1lckFjdGllSW5mb3MgPSBwdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcC5nZXQoZW50cnkua2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIXRyZWluTnVtbWVyQWN0aWVJbmZvcz8ubWFwKCh7IGFjdGllIH0pID0+IGFjdGllKS5pbmNsdWRlcyhlbnRyeS52YWx1ZS5hY3RpZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVpY05hYXJPbmdlcGxhbmRlQWN0aWVNYXAucHV0KGVudHJ5LmtleSwgeyBhY3RpZTogZW50cnkudmFsdWUuYWN0aWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1aWNOYWFyT25nZXBsYW5kZUFjdGllTWFwO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGJlcGFhbFB1aWNOYWFyQWN0aWVNYXAocml0RGVsZW46IFJpdGRlZWxbXSwgcml0QWN0aWVUb3BvUHVpY3M6IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4pOiBBcnJheU11bHRpbWFwPHN0cmluZywgVHJlaW5OdW1tZXJBY3RpZUluZm8+IHtcbiAgICAgICAgY29uc3QgcHVpY05hYXJBY3RpZU1hcCA9IG5ldyBBcnJheU11bHRpbWFwPHN0cmluZywgVHJlaW5OdW1tZXJBY3RpZUluZm8+KCk7XG4gICAgICAgIHJpdERlbGVuLmZvckVhY2gocml0RGVlbCA9PiB7XG4gICAgICAgICAgICBpZiAocml0RGVlbC5pc1ppY2h0YmFhcigpICYmIHJpdERlZWwuYWN0aWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJpdERlZWwuYWN0aWVzLmZvckVhY2gocml0QWN0aWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwdWljcyA9IHJpdEFjdGllVG9wb1B1aWNzLmdldChyaXRBY3RpZSk7XG4gICAgICAgICAgICAgICAgICAgIHB1aWNzLmZvckVhY2gocHVpYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvUHVpY05hYXJBY3RpZU1hcElmTm90RXhpc3RzKHB1aWNOYWFyQWN0aWVNYXAsIHB1aWMsIHJpdEFjdGllLCByaXREZWVsLmJld2VnaW5nPy50cmVpbk51bW1lcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHB1aWNOYWFyQWN0aWVNYXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYWRkVG9QdWljTmFhckFjdGllTWFwSWZOb3RFeGlzdHMocHVpY05hYXJBY3RpZU1hcDogQXJyYXlNdWx0aW1hcDxzdHJpbmcsIFRyZWluTnVtbWVyQWN0aWVJbmZvPiwgcHVpYzogc3RyaW5nLCByaXRBY3RpZTogQWN0aWUsIHRyZWluTnVtbWVyPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyZWluTnVtbWVyQWN0aWVJbmZvcyA9IHB1aWNOYWFyQWN0aWVNYXAuZ2V0KHB1aWMpO1xuICAgICAgICBpZiAoISh0cmVpbk51bW1lckFjdGllSW5mb3M/LmZpbmQoKHsgYWN0aWUgfSkgPT4gYWN0aWUgPT09IHJpdEFjdGllKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGllSW5mbzogVHJlaW5OdW1tZXJBY3RpZUluZm8gPSB7IHRyZWluTnVtbWVyLCBhY3RpZTogcml0QWN0aWUgfTtcbiAgICAgICAgICAgIHB1aWNOYWFyQWN0aWVNYXAucHV0KHB1aWMsIGFjdGllSW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB2dWxQb3BvdmVyQ29udGVudChjb250ZW50OiBzdHJpbmcsIHsgdHJlaW5OdW1tZXIsIGFjdGllIH06IFRyZWluTnVtbWVyQWN0aWVJbmZvLCBjbGF6ejogc3RyaW5nLCBzaG93VHJlaW5OdW1tZXI6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmV0dmFsID0gY29udGVudDtcbiAgICAgICAgY29uc3QgdHJlaW5udW1tZXJDbGFzcyA9IHNob3dUcmVpbk51bW1lciA/ICdjbGFzcz1cInRyZWlubnVtbWVyXCInIDogJ2NsYXNzPVwibm8tdHJlaW5udW1tZXJcIic7XG5cbiAgICAgICAgcmV0dmFsICs9ICc8ZGl2IGNsYXNzPVwibm93cmFwICcgKyBjbGF6eiArICdcIj4nO1xuICAgICAgICByZXR2YWwgKz0gYDxzcGFuICR7IHRyZWlubnVtbWVyQ2xhc3MgfT4keyB0cmVpbk51bW1lciB8fCAnLScgfTwvc3Bhbj5gO1xuXG4gICAgICAgIGxldCBhY3RpZU9tc2NocmlqdmluZyA9ICcnO1xuICAgICAgICBpZiAoQWN0aWVIZWxwZXIuaXNWU1RBY3RpZShhY3RpZSkpIHtcbiAgICAgICAgICAgIGFjdGllT21zY2hyaWp2aW5nICs9IEFjdGllSGVscGVyLmdldFZTVEFjdGllT21zY2hyaWp2aW5nKGFjdGllKTtcbiAgICAgICAgfSBlbHNlIGlmIChBY3RpZUhlbHBlci5pc1dpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSkpIHtcbiAgICAgICAgICAgIGFjdGllT21zY2hyaWp2aW5nICs9IGAkeyBhY3RpZS5yaXRBY3RpZVR5cGVPbXNjaHJpanZpbmcgfSAkeyBhY3RpZS53aXNzZWxOYWFtIH1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWN0aWVPbXNjaHJpanZpbmcgKz0gYCR7IGFjdGllLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZyB9ICR7IGFjdGllLnZhbktpbG9tZXRlcmxpbnQgfSAkeyBhY3RpZS52YW5LaWxvbWV0cmVyaW5nIH1gO1xuICAgICAgICAgICAgYWN0aWVPbXNjaHJpanZpbmcgKz0gJy0nO1xuICAgICAgICAgICAgaWYgKGFjdGllLnRvdEtpbG9tZXRlcmxpbnQgIT09IGFjdGllLnZhbktpbG9tZXRlcmxpbnQpIHtcbiAgICAgICAgICAgICAgICBhY3RpZU9tc2NocmlqdmluZyArPSBhY3RpZS50b3RLaWxvbWV0ZXJsaW50O1xuICAgICAgICAgICAgICAgIGFjdGllT21zY2hyaWp2aW5nICs9ICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGllT21zY2hyaWp2aW5nICs9IGFjdGllLnRvdEtpbG9tZXRyZXJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dmFsICs9IGA8c3Bhbj4keyBhY3RpZU9tc2NocmlqdmluZyB9PC9zcGFuPjwvZGl2PmA7XG4gICAgICAgIHJldHVybiByZXR2YWw7XG4gICAgfVxufVxuIl19
@@ -1,61 +1,48 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { take } from 'rxjs/operators';
3
- import { ActieDto, MstLoggingDto } from '../resources/mstlogging.resource';
2
+ import { map, take } from 'rxjs/operators';
3
+ import { combineLatest } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
5
- import * as i1 from "../services/signalerings-beeld-manager.service";
6
- import * as i2 from "@ngrx/store";
5
+ import * as i1 from "@ngrx/store";
7
6
  export class LoggingHelper {
8
- constructor(sbmService, store) {
9
- this.sbmService = sbmService;
7
+ constructor(store) {
10
8
  this.store = store;
11
9
  }
12
10
  maakLogDTO(melding, actie) {
13
- let iaVersie = '';
14
- let algemeneRitInfoDto = null;
15
- let actieDto = null;
16
- this.store.select('algemeneRitInfoDto').pipe(take(1)).subscribe(dto => {
17
- algemeneRitInfoDto = dto;
18
- });
19
- this.store.select('iaVersie').pipe(take(1)).subscribe(ia => {
20
- iaVersie = ia.versie;
21
- });
22
- if (actie) {
23
- actieDto = new ActieDto({
24
- pplgNaam: actie.pplgNaam,
25
- ritActieTypeOmschrijving: actie.ritActieTypeOmschrijving,
26
- ritActieStatus: actie.ritActieStatus,
27
- bewegingId: actie.bewegingId,
28
- wisselType: actie.wisselType,
29
- wisselNaam: actie.wisselNaam,
30
- wisselKantCode: actie.wisselKantCode,
31
- vanKilometerlint: actie.vanKilometerlint,
32
- vanKilometrering: actie.vanKilometrering,
33
- totKilometerlint: actie.totKilometerlint,
34
- totKilometrering: actie.totKilometrering
35
- });
36
- }
37
- return new MstLoggingDto({
38
- iaVersie,
39
- meldingLevel: melding.meldingLevel,
40
- meldingMessage: melding.meldingMessage,
41
- actieDto,
42
- algemeneRitInfoDto,
43
- sbinfoDtos: this.getSbInfoDtos()
44
- });
11
+ return combineLatest([
12
+ this.store.select('algemeneRitInfoDto'),
13
+ this.store.select('iaVersie'),
14
+ this.store.select('visibleSbInfoDtos')
15
+ ]).pipe(take(1), map(([algemeneRitInfoDto, iaVersie, visibleSbInfoDtos]) => {
16
+ let actieDto = null;
17
+ if (actie) {
18
+ actieDto = {
19
+ pplgNaam: actie.pplgNaam,
20
+ ritActieTypeOmschrijving: actie.ritActieTypeOmschrijving,
21
+ ritActieStatus: actie.ritActieStatus,
22
+ bewegingId: actie.bewegingId,
23
+ wisselType: actie.wisselType,
24
+ wisselNaam: actie.wisselNaam,
25
+ wisselKantCode: actie.wisselKantCode,
26
+ vanKilometerlint: actie.vanKilometerlint,
27
+ vanKilometrering: actie.vanKilometrering,
28
+ totKilometerlint: actie.totKilometerlint,
29
+ totKilometrering: actie.totKilometrering
30
+ };
31
+ }
32
+ return {
33
+ iaVersie: iaVersie.versie,
34
+ meldingLevel: melding.meldingLevel,
35
+ meldingMessage: melding.meldingMessage,
36
+ actieDto,
37
+ algemeneRitInfoDto,
38
+ sbinfoDtos: visibleSbInfoDtos
39
+ };
40
+ }));
45
41
  }
46
- getSbInfoDtos() {
47
- const sbInfoDtos = [];
48
- this.store.select('visibleSbInfoDtos').pipe(take(1)).subscribe(dtos => {
49
- dtos.forEach(d => {
50
- sbInfoDtos.push(d);
51
- });
52
- });
53
- return sbInfoDtos;
54
- }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LoggingHelper, deps: [{ token: i1.SignaleringsBeeldManagerService }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LoggingHelper, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
56
43
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LoggingHelper }); }
57
44
  }
58
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LoggingHelper, decorators: [{
59
46
  type: Injectable
60
- }], ctorParameters: () => [{ type: i1.SignaleringsBeeldManagerService }, { type: i2.Store }] });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tc3Qtdmlld2VyL3NyYy9saWIvdXRpbC9sb2dnaW5nLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsUUFBUSxFQUFzQixhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7OztBQU0vRixNQUFNLE9BQU8sYUFBYTtJQUV0QixZQUFvQixVQUEyQyxFQUMzQyxLQUE0QjtRQUQ1QixlQUFVLEdBQVYsVUFBVSxDQUFpQztRQUMzQyxVQUFLLEdBQUwsS0FBSyxDQUF1QjtJQUNoRCxDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQXFCLEVBQUUsS0FBWTtRQUNqRCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxrQkFBa0IsR0FBdUIsSUFBSSxDQUFDO1FBQ2xELElBQUksUUFBUSxHQUFhLElBQUksQ0FBQztRQUU5QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEUsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN2RCxRQUFRLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUM7Z0JBQ3BCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtnQkFDeEIsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLHdCQUF3QjtnQkFDeEQsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO2dCQUNwQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzVCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDNUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO2dCQUM1QixjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7Z0JBQ3BDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ3hDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ3hDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ3hDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7YUFDM0MsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELE9BQU8sSUFBSSxhQUFhLENBQUM7WUFDckIsUUFBUTtZQUNSLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7WUFDdEMsUUFBUTtZQUNSLGtCQUFrQjtZQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtTQUNuQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sYUFBYTtRQUNoQixNQUFNLFVBQVUsR0FBK0IsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNiLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBNkIsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDOzhHQW5EUSxhQUFhO2tIQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZWxkaW5nRXZlbnQgfSBmcm9tICcuLi9tb2RlbC9tZWxkaW5nLWV2ZW50JztcbmltcG9ydCB7IEFjdGllIH0gZnJvbSAnLi4vb3B0aW1vJztcbmltcG9ydCB7IEFjdGllRHRvLCBBbGdlbWVuZVJpdEluZm9EdG8sIE1zdExvZ2dpbmdEdG8gfSBmcm9tICcuLi9yZXNvdXJjZXMvbXN0bG9nZ2luZy5yZXNvdXJjZSc7XG5pbXBvcnQgeyBTaWduYWxlcmluZ3NiZWVsZEluZm9EdG8gfSBmcm9tICcuLi9yZXNvdXJjZXMvc2lnbmFsZXJpbmdzYmVlbGRpbmZvLnJlc291cmNlJztcbmltcG9ydCB7IFNpZ25hbGVyaW5nc0JlZWxkTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zaWduYWxlcmluZ3MtYmVlbGQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1zdEVkaXRvclN0YXRlIH0gZnJvbSAnLi4vc3RhdGUvbXN0LWVkaXRvci1zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2dnaW5nSGVscGVyIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2JtU2VydmljZTogU2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxNc3RFZGl0b3JTdGF0ZT4pIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFha0xvZ0RUTyhtZWxkaW5nOiBNZWxkaW5nRXZlbnQsIGFjdGllOiBBY3RpZSk6IE1zdExvZ2dpbmdEdG8ge1xuICAgICAgICBsZXQgaWFWZXJzaWUgPSAnJztcbiAgICAgICAgbGV0IGFsZ2VtZW5lUml0SW5mb0R0bzogQWxnZW1lbmVSaXRJbmZvRHRvID0gbnVsbDtcbiAgICAgICAgbGV0IGFjdGllRHRvOiBBY3RpZUR0byA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2FsZ2VtZW5lUml0SW5mb0R0bycpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGR0byA9PiB7XG4gICAgICAgICAgICBhbGdlbWVuZVJpdEluZm9EdG8gPSBkdG87XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnaWFWZXJzaWUnKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShpYSA9PiB7XG4gICAgICAgICAgICBpYVZlcnNpZSA9IGlhLnZlcnNpZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGFjdGllKSB7XG4gICAgICAgICAgICBhY3RpZUR0byA9IG5ldyBBY3RpZUR0byh7XG4gICAgICAgICAgICAgICAgcHBsZ05hYW06IGFjdGllLnBwbGdOYWFtLFxuICAgICAgICAgICAgICAgIHJpdEFjdGllVHlwZU9tc2NocmlqdmluZzogYWN0aWUucml0QWN0aWVUeXBlT21zY2hyaWp2aW5nLFxuICAgICAgICAgICAgICAgIHJpdEFjdGllU3RhdHVzOiBhY3RpZS5yaXRBY3RpZVN0YXR1cyxcbiAgICAgICAgICAgICAgICBiZXdlZ2luZ0lkOiBhY3RpZS5iZXdlZ2luZ0lkLFxuICAgICAgICAgICAgICAgIHdpc3NlbFR5cGU6IGFjdGllLndpc3NlbFR5cGUsXG4gICAgICAgICAgICAgICAgd2lzc2VsTmFhbTogYWN0aWUud2lzc2VsTmFhbSxcbiAgICAgICAgICAgICAgICB3aXNzZWxLYW50Q29kZTogYWN0aWUud2lzc2VsS2FudENvZGUsXG4gICAgICAgICAgICAgICAgdmFuS2lsb21ldGVybGludDogYWN0aWUudmFuS2lsb21ldGVybGludCxcbiAgICAgICAgICAgICAgICB2YW5LaWxvbWV0cmVyaW5nOiBhY3RpZS52YW5LaWxvbWV0cmVyaW5nLFxuICAgICAgICAgICAgICAgIHRvdEtpbG9tZXRlcmxpbnQ6IGFjdGllLnRvdEtpbG9tZXRlcmxpbnQsXG4gICAgICAgICAgICAgICAgdG90S2lsb21ldHJlcmluZzogYWN0aWUudG90S2lsb21ldHJlcmluZ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNc3RMb2dnaW5nRHRvKHtcbiAgICAgICAgICAgIGlhVmVyc2llLFxuICAgICAgICAgICAgbWVsZGluZ0xldmVsOiBtZWxkaW5nLm1lbGRpbmdMZXZlbCxcbiAgICAgICAgICAgIG1lbGRpbmdNZXNzYWdlOiBtZWxkaW5nLm1lbGRpbmdNZXNzYWdlLFxuICAgICAgICAgICAgYWN0aWVEdG8sXG4gICAgICAgICAgICBhbGdlbWVuZVJpdEluZm9EdG8sXG4gICAgICAgICAgICBzYmluZm9EdG9zOiB0aGlzLmdldFNiSW5mb0R0b3MoKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2JJbmZvRHRvcygpOiBTaWduYWxlcmluZ3NiZWVsZEluZm9EdG9bXSB7XG4gICAgICAgIGNvbnN0IHNiSW5mb0R0b3M6IFNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b1tdID0gW107XG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCd2aXNpYmxlU2JJbmZvRHRvcycpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGR0b3MgPT4ge1xuICAgICAgICAgICAgZHRvcy5mb3JFYWNoKGQgPT4ge1xuICAgICAgICAgICAgICAgIHNiSW5mb0R0b3MucHVzaChkIGFzIFNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0byk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzYkluZm9EdG9zO1xuICAgIH1cbn1cblxuXG4iXX0=
47
+ }], ctorParameters: () => [{ type: i1.Store }] });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tc3Qtdmlld2VyL3NyYy9saWIvdXRpbC9sb2dnaW5nLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7O0FBT2pELE1BQU0sT0FBTyxhQUFhO0lBRXRCLFlBQTZCLEtBQTRCO1FBQTVCLFVBQUssR0FBTCxLQUFLLENBQXVCO0lBQ3pELENBQUM7SUFFTSxVQUFVLENBQUMsT0FBcUIsRUFBRSxLQUFZO1FBQ2pELE9BQU8sYUFBYSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztTQUN6QyxDQUFDLENBQUMsSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsQ0FBdUQsRUFBRSxFQUFFO1lBQzVHLElBQUksUUFBUSxHQUFvQixJQUFJLENBQUM7WUFDckMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDUixRQUFRLEdBQUc7b0JBQ1AsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUN4Qix3QkFBd0IsRUFBRSxLQUFLLENBQUMsd0JBQXdCO29CQUN4RCxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7b0JBQ3BDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtvQkFDNUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO29CQUM1QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7b0JBQzVCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztvQkFDcEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtvQkFDeEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtvQkFDeEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtvQkFDeEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtpQkFDL0IsQ0FBQztZQUNsQixDQUFDO1lBQ0QsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU07Z0JBQ3pCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO2dCQUN0QyxRQUFRO2dCQUNSLGtCQUFrQjtnQkFDbEIsVUFBVSxFQUFFLGlCQUFpQjthQUN0QixDQUFDO1FBRWhCLENBQUMsQ0FDSixDQUFDLENBQUM7SUFDUCxDQUFDOzhHQXhDUSxhQUFhO2tIQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGllRHRvLCBBbGdlbWVuZVJpdER0bywgTG9nRHRvLCBTaWduYWxlcmluZ3NiZWVsZER0byB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC9vcGVuYXBpJztcbmltcG9ydCB7IE1lbGRpbmdFdmVudCB9IGZyb20gJy4uL21vZGVsL21lbGRpbmctZXZlbnQnO1xuaW1wb3J0IHsgQWN0aWUsIEluZnJhTW9kZWwgfSBmcm9tICcuLi9vcHRpbW8nO1xuaW1wb3J0IHsgTXN0RWRpdG9yU3RhdGUgfSBmcm9tICcuLi9zdGF0ZS9tc3QtZWRpdG9yLXN0YXRlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvZ2dpbmdIZWxwZXIge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdG9yZTogU3RvcmU8TXN0RWRpdG9yU3RhdGU+KSB7XG4gICAgfVxuXG4gICAgcHVibGljIG1hYWtMb2dEVE8obWVsZGluZzogTWVsZGluZ0V2ZW50LCBhY3RpZTogQWN0aWUpOiBPYnNlcnZhYmxlPExvZ0R0bz4ge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnYWxnZW1lbmVSaXRJbmZvRHRvJyksXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnaWFWZXJzaWUnKSxcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCd2aXNpYmxlU2JJbmZvRHRvcycpXG4gICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgbWFwKChbYWxnZW1lbmVSaXRJbmZvRHRvLCBpYVZlcnNpZSwgdmlzaWJsZVNiSW5mb0R0b3NdOiBbQWxnZW1lbmVSaXREdG8sIEluZnJhTW9kZWwsIFNpZ25hbGVyaW5nc2JlZWxkRHRvW11dKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGFjdGllRHRvOiBBY3RpZUR0byB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChhY3RpZSkge1xuICAgICAgICAgICAgICAgICAgICBhY3RpZUR0byA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBwbGdOYWFtOiBhY3RpZS5wcGxnTmFhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpdEFjdGllVHlwZU9tc2NocmlqdmluZzogYWN0aWUucml0QWN0aWVUeXBlT21zY2hyaWp2aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcml0QWN0aWVTdGF0dXM6IGFjdGllLnJpdEFjdGllU3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmV3ZWdpbmdJZDogYWN0aWUuYmV3ZWdpbmdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpc3NlbFR5cGU6IGFjdGllLndpc3NlbFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXNzZWxOYWFtOiBhY3RpZS53aXNzZWxOYWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lzc2VsS2FudENvZGU6IGFjdGllLndpc3NlbEthbnRDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFuS2lsb21ldGVybGludDogYWN0aWUudmFuS2lsb21ldGVybGludCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbktpbG9tZXRyZXJpbmc6IGFjdGllLnZhbktpbG9tZXRyZXJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RLaWxvbWV0ZXJsaW50OiBhY3RpZS50b3RLaWxvbWV0ZXJsaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgdG90S2lsb21ldHJlcmluZzogYWN0aWUudG90S2lsb21ldHJlcmluZ1xuICAgICAgICAgICAgICAgICAgICB9IGFzIEFjdGllRHRvO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpYVZlcnNpZTogaWFWZXJzaWUudmVyc2llLFxuICAgICAgICAgICAgICAgICAgICBtZWxkaW5nTGV2ZWw6IG1lbGRpbmcubWVsZGluZ0xldmVsLFxuICAgICAgICAgICAgICAgICAgICBtZWxkaW5nTWVzc2FnZTogbWVsZGluZy5tZWxkaW5nTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aWVEdG8sXG4gICAgICAgICAgICAgICAgICAgIGFsZ2VtZW5lUml0SW5mb0R0byxcbiAgICAgICAgICAgICAgICAgICAgc2JpbmZvRHRvczogdmlzaWJsZVNiSW5mb0R0b3NcbiAgICAgICAgICAgICAgICB9IGFzIExvZ0R0bztcblxuICAgICAgICAgICAgfVxuICAgICAgICApKTtcbiAgICB9XG59XG4iXX0=
@@ -1,4 +1,3 @@
1
- import Utils from './utils';
2
1
  /**
3
2
  * https://gist.github.com/jordanluyke/609a4fffb69d1ebafdadd313ee2ee804
4
3
  *
@@ -62,7 +61,7 @@ export class ArrayMultimap {
62
61
  return Array.from(new Set(this._entries.map(entry => entry.key)));
63
62
  }
64
63
  values() {
65
- return Utils.flatMap(this._entries, x => x.value);
64
+ return this._entries.reduce((acc, x) => acc.concat(x.value), []);
66
65
  }
67
66
  put(key, value) {
68
67
  this._entries.push(new MultimapEntry(key, value));
@@ -73,4 +72,4 @@ export class ArrayMultimap {
73
72
  return this._entries;
74
73
  }
75
74
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3V0aWwvbXVsdGktbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLFNBQVMsQ0FBQztBQUU1Qjs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGFBQWE7SUFDdEIsWUFBcUIsR0FBTSxFQUFXLEtBQVE7UUFBekIsUUFBRyxHQUFILEdBQUcsQ0FBRztRQUFXLFVBQUssR0FBTCxLQUFLLENBQUc7SUFDOUMsQ0FBQztDQUNKO0FBMEJELE1BQU0sT0FBTyxhQUFhO0lBSXRCLFlBQVksR0FBb0I7UUFGeEIsYUFBUSxHQUEwQixFQUFFLENBQUM7UUFHekMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUVNLElBQUk7UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVNLEtBQUs7UUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sV0FBVyxDQUFDLEdBQU07UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUTthQUNSLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDO2FBQ3pDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFRO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFFBQVE7YUFDUixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQzthQUM3QyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFTSxhQUFhLENBQUMsR0FBTSxFQUFFLEtBQVE7UUFDakMsT0FBTyxJQUFJLENBQUMsUUFBUTthQUNSLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDO2FBQ2xFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFNLEVBQUUsS0FBUztRQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7YUFDUixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDWixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNSLE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUM7WUFDdEQsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFNO1FBQ2IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7YUFDUixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQzthQUNsQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsT0FBTyxRQUFRLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxJQUFJO1FBQ1AsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sTUFBTTtRQUNULE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxHQUFHLENBQUMsR0FBTSxFQUFFLEtBQVE7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBTSxFQUFFLE1BQVc7UUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qb3JkYW5sdXlrZS82MDlhNGZmZmI2OWQxZWJhZmRhZGQzMTNlZTJlZTgwNFxuICpcbiAqIEBhdXRob3IgSm9yZGFuIEx1eWtlIDxqb3JkYW5sdXlrZUBnbWFpbC5jb20+XG4gKi9cblxuZXhwb3J0IGNsYXNzIE11bHRpbWFwRW50cnk8SywgVj4ge1xuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGtleTogSywgcmVhZG9ubHkgdmFsdWU6IFYpIHtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGltYXA8SywgVj4ge1xuICAgIGVudHJpZXM6IE11bHRpbWFwRW50cnk8SywgVj5bXTtcblxuICAgIGNsZWFyKCk6IHZvaWQ7XG5cbiAgICBjb250YWluc0tleShrZXk6IEspOiBib29sZWFuO1xuXG4gICAgY29udGFpbnNWYWx1ZSh2YWx1ZTogVik6IGJvb2xlYW47XG5cbiAgICBjb250YWluc0VudHJ5KGtleTogSywgdmFsdWU6IFYpOiBib29sZWFuO1xuXG4gICAgZGVsZXRlKGtleTogSywgdmFsdWU/OiBWKTogYm9vbGVhbjtcblxuICAgIGdldChrZXk6IEspOiBWW107XG5cbiAgICBrZXlzKCk6IEtbXTtcblxuICAgIHZhbHVlcygpOiBWW107XG5cbiAgICBwdXQoa2V5OiBLLCB2YWx1ZTogVik6IE11bHRpbWFwRW50cnk8SywgVj5bXTtcblxuICAgIHNpemUoKTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXJyYXlNdWx0aW1hcDxLLCBWPiBpbXBsZW1lbnRzIE11bHRpbWFwPEssIFY+IHtcblxuICAgIHByaXZhdGUgX2VudHJpZXM6IE11bHRpbWFwRW50cnk8SywgVj5bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IobWFwPzogTXVsdGltYXA8SywgVj4pIHtcbiAgICAgICAgaWYgKG1hcCkge1xuICAgICAgICAgICAgdGhpcy5fZW50cmllcyA9IG1hcC5lbnRyaWVzLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5rZXlzKCkubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZW50cmllcyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250YWluc0tleShrZXk6IEspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudHJpZXNcbiAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LmtleSA9PT0ga2V5KVxuICAgICAgICAgICAgLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnRhaW5zVmFsdWUodmFsdWU6IFYpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudHJpZXNcbiAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIC5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250YWluc0VudHJ5KGtleTogSywgdmFsdWU6IFYpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudHJpZXNcbiAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIC5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUoa2V5OiBLLCB2YWx1ZT86IFYpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IHRoaXMuX2VudHJpZXM7XG4gICAgICAgIHRoaXMuX2VudHJpZXMgPSB0aGlzLl9lbnRyaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihlbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmtleSAhPT0ga2V5IHx8IGVudHJ5LnZhbHVlICE9PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkua2V5ICE9PSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0ZW1wLmxlbmd0aCAhPT0gdGhpcy5fZW50cmllcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnRyaWVzKCk6IE11bHRpbWFwRW50cnk8SywgVj5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnRyaWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQoa2V5OiBLKTogVltdIHtcbiAgICAgICAgY29uc3QgdmFsdWVNYXAgPSB0aGlzLl9lbnRyaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZW50cnkgPT4gZW50cnkua2V5ID09PSBrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZW50cnkgPT4gZW50cnkudmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWVNYXAgfHwgW107XG4gICAgfVxuXG4gICAgcHVibGljIGtleXMoKTogS1tdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh0aGlzLl9lbnRyaWVzLm1hcChlbnRyeSA9PiBlbnRyeS5rZXkpKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlcygpOiBWW10ge1xuICAgICAgICByZXR1cm4gVXRpbHMuZmxhdE1hcCh0aGlzLl9lbnRyaWVzLCB4ID0+IHgudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwdXQoa2V5OiBLLCB2YWx1ZTogVik6IE11bHRpbWFwRW50cnk8SywgVj5bXSB7XG4gICAgICAgIHRoaXMuX2VudHJpZXMucHVzaChuZXcgTXVsdGltYXBFbnRyeShrZXksIHZhbHVlKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnRyaWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBwdXRBbGwoa2V5OiBLLCB2YWx1ZXM6IFZbXSk6IE11bHRpbWFwRW50cnk8SywgVj5bXSB7XG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHRoaXMuX2VudHJpZXMucHVzaChuZXcgTXVsdGltYXBFbnRyeShrZXksIHZhbHVlKSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZW50cmllcztcbiAgICB9XG59XG4iXX0=
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3V0aWwvbXVsdGktbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sYUFBYTtJQUN0QixZQUFxQixHQUFNLEVBQVcsS0FBUTtRQUF6QixRQUFHLEdBQUgsR0FBRyxDQUFHO1FBQVcsVUFBSyxHQUFMLEtBQUssQ0FBRztJQUM5QyxDQUFDO0NBQ0o7QUEwQkQsTUFBTSxPQUFPLGFBQWE7SUFJdEIsWUFBWSxHQUFvQjtRQUZ4QixhQUFRLEdBQTBCLEVBQUUsQ0FBQztRQUd6QyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0lBRU0sSUFBSTtRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBRU0sS0FBSztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxXQUFXLENBQUMsR0FBTTtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRO2FBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUM7YUFDekMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQVE7UUFDekIsT0FBTyxJQUFJLENBQUMsUUFBUTthQUNSLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDO2FBQzdDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxHQUFNLEVBQUUsS0FBUTtRQUNqQyxPQUFPLElBQUksQ0FBQyxRQUFRO2FBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUM7YUFDbEUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQU0sRUFBRSxLQUFTO1FBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUTthQUNSLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNaLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1IsT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQztZQUN0RCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRU0sR0FBRyxDQUFDLEdBQU07UUFDYixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUTthQUNSLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDO2FBQ2xDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxPQUFPLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLElBQUk7UUFDUCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTSxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQVMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxHQUFHLENBQUMsR0FBTSxFQUFFLEtBQVE7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBTSxFQUFFLE1BQVc7UUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qb3JkYW5sdXlrZS82MDlhNGZmZmI2OWQxZWJhZmRhZGQzMTNlZTJlZTgwNFxuICpcbiAqIEBhdXRob3IgSm9yZGFuIEx1eWtlIDxqb3JkYW5sdXlrZUBnbWFpbC5jb20+XG4gKi9cblxuZXhwb3J0IGNsYXNzIE11bHRpbWFwRW50cnk8SywgVj4ge1xuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGtleTogSywgcmVhZG9ubHkgdmFsdWU6IFYpIHtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGltYXA8SywgVj4ge1xuICAgIGVudHJpZXM6IE11bHRpbWFwRW50cnk8SywgVj5bXTtcblxuICAgIGNsZWFyKCk6IHZvaWQ7XG5cbiAgICBjb250YWluc0tleShrZXk6IEspOiBib29sZWFuO1xuXG4gICAgY29udGFpbnNWYWx1ZSh2YWx1ZTogVik6IGJvb2xlYW47XG5cbiAgICBjb250YWluc0VudHJ5KGtleTogSywgdmFsdWU6IFYpOiBib29sZWFuO1xuXG4gICAgZGVsZXRlKGtleTogSywgdmFsdWU/OiBWKTogYm9vbGVhbjtcblxuICAgIGdldChrZXk6IEspOiBWW107XG5cbiAgICBrZXlzKCk6IEtbXTtcblxuICAgIHZhbHVlcygpOiBWW107XG5cbiAgICBwdXQoa2V5OiBLLCB2YWx1ZTogVik6IE11bHRpbWFwRW50cnk8SywgVj5bXTtcblxuICAgIHNpemUoKTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXJyYXlNdWx0aW1hcDxLLCBWPiBpbXBsZW1lbnRzIE11bHRpbWFwPEssIFY+IHtcblxuICAgIHByaXZhdGUgX2VudHJpZXM6IE11bHRpbWFwRW50cnk8SywgVj5bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IobWFwPzogTXVsdGltYXA8SywgVj4pIHtcbiAgICAgICAgaWYgKG1hcCkge1xuICAgICAgICAgICAgdGhpcy5fZW50cmllcyA9IG1hcC5lbnRyaWVzLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5rZXlzKCkubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZW50cmllcyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250YWluc0tleShrZXk6IEspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudHJpZXNcbiAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LmtleSA9PT0ga2V5KVxuICAgICAgICAgICAgLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnRhaW5zVmFsdWUodmFsdWU6IFYpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudHJpZXNcbiAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIC5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250YWluc0VudHJ5KGtleTogSywgdmFsdWU6IFYpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudHJpZXNcbiAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIC5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUoa2V5OiBLLCB2YWx1ZT86IFYpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IHRoaXMuX2VudHJpZXM7XG4gICAgICAgIHRoaXMuX2VudHJpZXMgPSB0aGlzLl9lbnRyaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihlbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmtleSAhPT0ga2V5IHx8IGVudHJ5LnZhbHVlICE9PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkua2V5ICE9PSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0ZW1wLmxlbmd0aCAhPT0gdGhpcy5fZW50cmllcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnRyaWVzKCk6IE11bHRpbWFwRW50cnk8SywgVj5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnRyaWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQoa2V5OiBLKTogVltdIHtcbiAgICAgICAgY29uc3QgdmFsdWVNYXAgPSB0aGlzLl9lbnRyaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZW50cnkgPT4gZW50cnkua2V5ID09PSBrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZW50cnkgPT4gZW50cnkudmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWVNYXAgfHwgW107XG4gICAgfVxuXG4gICAgcHVibGljIGtleXMoKTogS1tdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh0aGlzLl9lbnRyaWVzLm1hcChlbnRyeSA9PiBlbnRyeS5rZXkpKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlcygpOiBWW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW50cmllcy5yZWR1Y2UoKGFjYywgeCkgPT4gYWNjLmNvbmNhdCh4LnZhbHVlKSwgW10gYXMgVltdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHV0KGtleTogSywgdmFsdWU6IFYpOiBNdWx0aW1hcEVudHJ5PEssIFY+W10ge1xuICAgICAgICB0aGlzLl9lbnRyaWVzLnB1c2gobmV3IE11bHRpbWFwRW50cnkoa2V5LCB2YWx1ZSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZW50cmllcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcHV0QWxsKGtleTogSywgdmFsdWVzOiBWW10pOiBNdWx0aW1hcEVudHJ5PEssIFY+W10ge1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB0aGlzLl9lbnRyaWVzLnB1c2gobmV3IE11bHRpbWFwRW50cnkoa2V5LCB2YWx1ZSkpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudHJpZXM7XG4gICAgfVxufVxuIl19