@loxia/mst-viewer 8.1.3-202512160534 → 8.1.3-202512161203

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 (261) hide show
  1. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs +25 -25
  2. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs.map +1 -1
  3. package/fesm2022/loxia-mst-viewer.mjs +154 -154
  4. package/fesm2022/loxia-mst-viewer.mjs.map +1 -1
  5. package/index.d.ts +1079 -3
  6. package/package.json +6 -10
  7. package/src/generated/openapi/index.d.ts +825 -6
  8. package/tailwind.scss +1 -5
  9. package/esm2022/generated/openapi/api/api.mjs +0 -23
  10. package/esm2022/generated/openapi/api/appConfigController.service.mjs +0 -140
  11. package/esm2022/generated/openapi/api/appConfigController.serviceInterface.mjs +0 -2
  12. package/esm2022/generated/openapi/api/bewegingController.service.mjs +0 -155
  13. package/esm2022/generated/openapi/api/bewegingController.serviceInterface.mjs +0 -2
  14. package/esm2022/generated/openapi/api/class0BuildProperties.service.mjs +0 -140
  15. package/esm2022/generated/openapi/api/class0BuildProperties.serviceInterface.mjs +0 -2
  16. package/esm2022/generated/openapi/api/connectorController.service.mjs +0 -146
  17. package/esm2022/generated/openapi/api/connectorController.serviceInterface.mjs +0 -2
  18. package/esm2022/generated/openapi/api/logController.service.mjs +0 -150
  19. package/esm2022/generated/openapi/api/logController.serviceInterface.mjs +0 -2
  20. package/esm2022/generated/openapi/api/p21Controller.service.mjs +0 -236
  21. package/esm2022/generated/openapi/api/p21Controller.serviceInterface.mjs +0 -2
  22. package/esm2022/generated/openapi/api/sbController.service.mjs +0 -202
  23. package/esm2022/generated/openapi/api/sbController.serviceInterface.mjs +0 -2
  24. package/esm2022/generated/openapi/api.module.mjs +0 -40
  25. package/esm2022/generated/openapi/configuration.mjs +0 -99
  26. package/esm2022/generated/openapi/encoder.mjs +0 -19
  27. package/esm2022/generated/openapi/index.mjs +0 -7
  28. package/esm2022/generated/openapi/model/actieDto.mjs +0 -13
  29. package/esm2022/generated/openapi/model/algemeneRitDto.mjs +0 -13
  30. package/esm2022/generated/openapi/model/bewegingDto.mjs +0 -2
  31. package/esm2022/generated/openapi/model/frontendKeycloakConfig.mjs +0 -13
  32. package/esm2022/generated/openapi/model/frontendProperties.mjs +0 -2
  33. package/esm2022/generated/openapi/model/logDto.mjs +0 -2
  34. package/esm2022/generated/openapi/model/models.mjs +0 -10
  35. package/esm2022/generated/openapi/model/ritRequestDto.mjs +0 -2
  36. package/esm2022/generated/openapi/model/signaleringsbeeldDto.mjs +0 -13
  37. package/esm2022/generated/openapi/model/signaleringsbeeldRequestDto.mjs +0 -13
  38. package/esm2022/generated/openapi/param.mjs +0 -2
  39. package/esm2022/generated/openapi/variables.mjs +0 -9
  40. package/esm2022/generated.version.mjs +0 -2
  41. package/esm2022/lib/atomic-components/message/index.mjs +0 -4
  42. package/esm2022/lib/atomic-components/message/message.component.mjs +0 -34
  43. package/esm2022/lib/atomic-components/message/message.mjs +0 -8
  44. package/esm2022/lib/atomic-components/message/severity.enum.mjs +0 -9
  45. package/esm2022/lib/atomic-components/messages/messages.component.mjs +0 -20
  46. package/esm2022/lib/atomic-components/overlay/overlay.component.mjs +0 -11
  47. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.component.mjs +0 -11
  48. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.entity.mjs +0 -8
  49. package/esm2022/lib/atomic-components/services/messages.service.mjs +0 -27
  50. package/esm2022/lib/components/carousel-controls/carousel-controls.component.mjs +0 -40
  51. package/esm2022/lib/components/mstviewer/mstviewer.component.mjs +0 -110
  52. package/esm2022/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +0 -267
  53. package/esm2022/lib/components/ritdelen-view/ritdelen-view.component.mjs +0 -103
  54. package/esm2022/lib/components/rpe/rpe.component.mjs +0 -33
  55. package/esm2022/lib/components/svg-visualisatie/svg-visualisatie.component.mjs +0 -273
  56. package/esm2022/lib/components/viewer-controls/viewer-controls.component.mjs +0 -52
  57. package/esm2022/lib/model/alternatief-rit-deel.mjs +0 -7
  58. package/esm2022/lib/model/km-range.mjs +0 -39
  59. package/esm2022/lib/model/melding-event.mjs +0 -7
  60. package/esm2022/lib/model/nieuwe-route.mjs +0 -10
  61. package/esm2022/lib/model/ongeplande-actie.mjs +0 -7
  62. package/esm2022/lib/model/rijwegplan-rijweg-dwang-combinatie.mjs +0 -24
  63. package/esm2022/lib/model/ritdeel.mjs +0 -205
  64. package/esm2022/lib/model/sein-op-ritdeel.mjs +0 -7
  65. package/esm2022/lib/model/wissel-kant-code.mjs +0 -7
  66. package/esm2022/lib/mst-viewer.module.mjs +0 -143
  67. package/esm2022/lib/optimo.mjs +0 -9
  68. package/esm2022/lib/resources/mstlogging.resource.mjs +0 -25
  69. package/esm2022/lib/resources/signaleringsbeeldinfo.resource.mjs +0 -62
  70. package/esm2022/lib/services/base-rest.service.mjs +0 -26
  71. package/esm2022/lib/services/beweging-utils.service.mjs +0 -139
  72. package/esm2022/lib/services/beweging-verrijker.service.mjs +0 -30
  73. package/esm2022/lib/services/connector.service.mjs +0 -30
  74. package/esm2022/lib/services/debug.service.mjs +0 -59
  75. package/esm2022/lib/services/editor.service.mjs +0 -48
  76. package/esm2022/lib/services/print-beweging.service.mjs +0 -66
  77. package/esm2022/lib/services/rit-lezer.service.mjs +0 -104
  78. package/esm2022/lib/services/signalerings-beeld-manager.service.mjs +0 -92
  79. package/esm2022/lib/services/viewer-control.service.mjs +0 -104
  80. package/esm2022/lib/state/actions/actions.mjs +0 -130
  81. package/esm2022/lib/state/actions/ritdelen.actions.mjs +0 -45
  82. package/esm2022/lib/state/effect/bepaal-ongeplande-acties.effect.mjs +0 -78
  83. package/esm2022/lib/state/effect/bepaal-sb-infos.effect.mjs +0 -67
  84. package/esm2022/lib/state/effect/beweging-invoegen.effect.mjs +0 -73
  85. package/esm2022/lib/state/effect/delete-ongeplande-actie.effect.mjs +0 -39
  86. package/esm2022/lib/state/effect/focus-effect.mjs +0 -36
  87. package/esm2022/lib/state/effect/laad-route-files.effect.mjs +0 -64
  88. package/esm2022/lib/state/effect/laad-signaleringsbeelden.effect.mjs +0 -363
  89. package/esm2022/lib/state/effect/rit-goedkeuren.effect.mjs +0 -23
  90. package/esm2022/lib/state/effect/ritdelen.effect.mjs +0 -112
  91. package/esm2022/lib/state/effect/svg-view.effect.mjs +0 -48
  92. package/esm2022/lib/state/mst-editor-state.mjs +0 -89
  93. package/esm2022/lib/state/reducer/rit-delen.reducer.mjs +0 -62
  94. package/esm2022/lib/util/actie-helper.mjs +0 -437
  95. package/esm2022/lib/util/actie-popover-bepaler.mjs +0 -90
  96. package/esm2022/lib/util/date.service.mjs +0 -17
  97. package/esm2022/lib/util/logging-helper.mjs +0 -58
  98. package/esm2022/lib/util/melding-builder.mjs +0 -13
  99. package/esm2022/lib/util/message-builder.mjs +0 -32
  100. package/esm2022/lib/util/multi-map.mjs +0 -76
  101. package/esm2022/lib/util/utils.mjs +0 -35
  102. package/esm2022/lib/util/zone-util.mjs +0 -32
  103. package/esm2022/loxia-mst-viewer.mjs +0 -5
  104. package/esm2022/public-api.mjs +0 -9
  105. package/esm2022/src/generated/openapi/api/api.mjs +0 -23
  106. package/esm2022/src/generated/openapi/api/appConfigController.service.mjs +0 -140
  107. package/esm2022/src/generated/openapi/api/appConfigController.serviceInterface.mjs +0 -2
  108. package/esm2022/src/generated/openapi/api/bewegingController.service.mjs +0 -155
  109. package/esm2022/src/generated/openapi/api/bewegingController.serviceInterface.mjs +0 -2
  110. package/esm2022/src/generated/openapi/api/class0BuildProperties.service.mjs +0 -140
  111. package/esm2022/src/generated/openapi/api/class0BuildProperties.serviceInterface.mjs +0 -2
  112. package/esm2022/src/generated/openapi/api/connectorController.service.mjs +0 -146
  113. package/esm2022/src/generated/openapi/api/connectorController.serviceInterface.mjs +0 -2
  114. package/esm2022/src/generated/openapi/api/logController.service.mjs +0 -150
  115. package/esm2022/src/generated/openapi/api/logController.serviceInterface.mjs +0 -2
  116. package/esm2022/src/generated/openapi/api/p21Controller.service.mjs +0 -236
  117. package/esm2022/src/generated/openapi/api/p21Controller.serviceInterface.mjs +0 -2
  118. package/esm2022/src/generated/openapi/api/sbController.service.mjs +0 -202
  119. package/esm2022/src/generated/openapi/api/sbController.serviceInterface.mjs +0 -2
  120. package/esm2022/src/generated/openapi/api.module.mjs +0 -40
  121. package/esm2022/src/generated/openapi/configuration.mjs +0 -99
  122. package/esm2022/src/generated/openapi/encoder.mjs +0 -19
  123. package/esm2022/src/generated/openapi/index.mjs +0 -7
  124. package/esm2022/src/generated/openapi/loxia-mst-viewer-src-generated-openapi.mjs +0 -5
  125. package/esm2022/src/generated/openapi/model/actieDto.mjs +0 -13
  126. package/esm2022/src/generated/openapi/model/algemeneRitDto.mjs +0 -13
  127. package/esm2022/src/generated/openapi/model/bewegingDto.mjs +0 -2
  128. package/esm2022/src/generated/openapi/model/frontendKeycloakConfig.mjs +0 -13
  129. package/esm2022/src/generated/openapi/model/frontendProperties.mjs +0 -2
  130. package/esm2022/src/generated/openapi/model/logDto.mjs +0 -2
  131. package/esm2022/src/generated/openapi/model/models.mjs +0 -10
  132. package/esm2022/src/generated/openapi/model/ritRequestDto.mjs +0 -2
  133. package/esm2022/src/generated/openapi/model/signaleringsbeeldDto.mjs +0 -13
  134. package/esm2022/src/generated/openapi/model/signaleringsbeeldRequestDto.mjs +0 -13
  135. package/esm2022/src/generated/openapi/param.mjs +0 -2
  136. package/esm2022/src/generated/openapi/variables.mjs +0 -9
  137. package/generated/openapi/api/api.d.ts +0 -22
  138. package/generated/openapi/api/appConfigController.service.d.ts +0 -38
  139. package/generated/openapi/api/appConfigController.serviceInterface.d.ts +0 -24
  140. package/generated/openapi/api/bewegingController.service.d.ts +0 -40
  141. package/generated/openapi/api/bewegingController.serviceInterface.d.ts +0 -27
  142. package/generated/openapi/api/class0BuildProperties.service.d.ts +0 -36
  143. package/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +0 -23
  144. package/generated/openapi/api/connectorController.service.d.ts +0 -38
  145. package/generated/openapi/api/connectorController.serviceInterface.d.ts +0 -25
  146. package/generated/openapi/api/logController.service.d.ts +0 -38
  147. package/generated/openapi/api/logController.serviceInterface.d.ts +0 -25
  148. package/generated/openapi/api/p21Controller.service.d.ts +0 -62
  149. package/generated/openapi/api/p21Controller.serviceInterface.d.ts +0 -30
  150. package/generated/openapi/api/sbController.service.d.ts +0 -60
  151. package/generated/openapi/api/sbController.serviceInterface.d.ts +0 -32
  152. package/generated/openapi/api.module.d.ts +0 -11
  153. package/generated/openapi/configuration.d.ts +0 -104
  154. package/generated/openapi/encoder.d.ts +0 -11
  155. package/generated/openapi/index.d.ts +0 -6
  156. package/generated/openapi/model/actieDto.d.ts +0 -35
  157. package/generated/openapi/model/algemeneRitDto.d.ts +0 -28
  158. package/generated/openapi/model/bewegingDto.d.ts +0 -37
  159. package/generated/openapi/model/frontendKeycloakConfig.d.ts +0 -16
  160. package/generated/openapi/model/frontendProperties.d.ts +0 -15
  161. package/generated/openapi/model/logDto.d.ts +0 -22
  162. package/generated/openapi/model/models.d.ts +0 -9
  163. package/generated/openapi/model/ritRequestDto.d.ts +0 -17
  164. package/generated/openapi/model/signaleringsbeeldDto.d.ts +0 -16
  165. package/generated/openapi/model/signaleringsbeeldRequestDto.d.ts +0 -16
  166. package/generated/openapi/param.d.ts +0 -37
  167. package/generated/openapi/variables.d.ts +0 -8
  168. package/generated.version.d.ts +0 -1
  169. package/lib/atomic-components/message/index.d.ts +0 -3
  170. package/lib/atomic-components/message/message.component.d.ts +0 -12
  171. package/lib/atomic-components/message/message.d.ts +0 -7
  172. package/lib/atomic-components/message/severity.enum.d.ts +0 -7
  173. package/lib/atomic-components/messages/messages.component.d.ts +0 -9
  174. package/lib/atomic-components/overlay/overlay.component.d.ts +0 -5
  175. package/lib/atomic-components/progress-indicator/progress-indicator.component.d.ts +0 -5
  176. package/lib/atomic-components/progress-indicator/progress-indicator.entity.d.ts +0 -6
  177. package/lib/atomic-components/services/messages.service.d.ts +0 -12
  178. package/lib/components/carousel-controls/carousel-controls.component.d.ts +0 -21
  179. package/lib/components/mstviewer/mstviewer.component.d.ts +0 -39
  180. package/lib/components/ritdelen-lijst/ritdelen-lijst.component.d.ts +0 -72
  181. package/lib/components/ritdelen-view/ritdelen-view.component.d.ts +0 -33
  182. package/lib/components/rpe/rpe.component.d.ts +0 -11
  183. package/lib/components/svg-visualisatie/svg-visualisatie.component.d.ts +0 -55
  184. package/lib/components/viewer-controls/viewer-controls.component.d.ts +0 -27
  185. package/lib/model/alternatief-rit-deel.d.ts +0 -7
  186. package/lib/model/km-range.d.ts +0 -13
  187. package/lib/model/melding-event.d.ts +0 -5
  188. package/lib/model/nieuwe-route.d.ts +0 -8
  189. package/lib/model/ongeplande-actie.d.ts +0 -6
  190. package/lib/model/rijwegplan-rijweg-dwang-combinatie.d.ts +0 -12
  191. package/lib/model/ritdeel.d.ts +0 -61
  192. package/lib/model/sein-op-ritdeel.d.ts +0 -7
  193. package/lib/model/wissel-kant-code.d.ts +0 -5
  194. package/lib/mst-viewer.module.d.ts +0 -34
  195. package/lib/optimo.d.ts +0 -69
  196. package/lib/resources/mstlogging.resource.d.ts +0 -15
  197. package/lib/resources/signaleringsbeeldinfo.resource.d.ts +0 -36
  198. package/lib/services/base-rest.service.d.ts +0 -16
  199. package/lib/services/beweging-utils.service.d.ts +0 -25
  200. package/lib/services/beweging-verrijker.service.d.ts +0 -11
  201. package/lib/services/connector.service.d.ts +0 -10
  202. package/lib/services/debug.service.d.ts +0 -15
  203. package/lib/services/editor.service.d.ts +0 -23
  204. package/lib/services/print-beweging.service.d.ts +0 -18
  205. package/lib/services/rit-lezer.service.d.ts +0 -22
  206. package/lib/services/signalerings-beeld-manager.service.d.ts +0 -29
  207. package/lib/services/viewer-control.service.d.ts +0 -32
  208. package/lib/state/actions/actions.d.ts +0 -275
  209. package/lib/state/actions/ritdelen.actions.d.ts +0 -101
  210. package/lib/state/effect/bepaal-ongeplande-acties.effect.d.ts +0 -23
  211. package/lib/state/effect/bepaal-sb-infos.effect.d.ts +0 -23
  212. package/lib/state/effect/beweging-invoegen.effect.d.ts +0 -17
  213. package/lib/state/effect/delete-ongeplande-actie.effect.d.ts +0 -15
  214. package/lib/state/effect/focus-effect.d.ts +0 -17
  215. package/lib/state/effect/laad-route-files.effect.d.ts +0 -28
  216. package/lib/state/effect/laad-signaleringsbeelden.effect.d.ts +0 -58
  217. package/lib/state/effect/rit-goedkeuren.effect.d.ts +0 -17
  218. package/lib/state/effect/ritdelen.effect.d.ts +0 -32
  219. package/lib/state/effect/svg-view.effect.d.ts +0 -17
  220. package/lib/state/mst-editor-state.d.ts +0 -133
  221. package/lib/state/reducer/rit-delen.reducer.d.ts +0 -4
  222. package/lib/util/actie-helper.d.ts +0 -117
  223. package/lib/util/actie-popover-bepaler.d.ts +0 -14
  224. package/lib/util/date.service.d.ts +0 -6
  225. package/lib/util/logging-helper.d.ts +0 -15
  226. package/lib/util/melding-builder.d.ts +0 -8
  227. package/lib/util/message-builder.d.ts +0 -13
  228. package/lib/util/multi-map.d.ts +0 -39
  229. package/lib/util/utils.d.ts +0 -4
  230. package/lib/util/zone-util.d.ts +0 -11
  231. package/public-api.d.ts +0 -5
  232. package/src/generated/openapi/api/api.d.ts +0 -22
  233. package/src/generated/openapi/api/appConfigController.service.d.ts +0 -38
  234. package/src/generated/openapi/api/appConfigController.serviceInterface.d.ts +0 -24
  235. package/src/generated/openapi/api/bewegingController.service.d.ts +0 -40
  236. package/src/generated/openapi/api/bewegingController.serviceInterface.d.ts +0 -27
  237. package/src/generated/openapi/api/class0BuildProperties.service.d.ts +0 -36
  238. package/src/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +0 -23
  239. package/src/generated/openapi/api/connectorController.service.d.ts +0 -38
  240. package/src/generated/openapi/api/connectorController.serviceInterface.d.ts +0 -25
  241. package/src/generated/openapi/api/logController.service.d.ts +0 -38
  242. package/src/generated/openapi/api/logController.serviceInterface.d.ts +0 -25
  243. package/src/generated/openapi/api/p21Controller.service.d.ts +0 -62
  244. package/src/generated/openapi/api/p21Controller.serviceInterface.d.ts +0 -30
  245. package/src/generated/openapi/api/sbController.service.d.ts +0 -60
  246. package/src/generated/openapi/api/sbController.serviceInterface.d.ts +0 -32
  247. package/src/generated/openapi/api.module.d.ts +0 -11
  248. package/src/generated/openapi/configuration.d.ts +0 -104
  249. package/src/generated/openapi/encoder.d.ts +0 -11
  250. package/src/generated/openapi/model/actieDto.d.ts +0 -35
  251. package/src/generated/openapi/model/algemeneRitDto.d.ts +0 -28
  252. package/src/generated/openapi/model/bewegingDto.d.ts +0 -37
  253. package/src/generated/openapi/model/frontendKeycloakConfig.d.ts +0 -16
  254. package/src/generated/openapi/model/frontendProperties.d.ts +0 -15
  255. package/src/generated/openapi/model/logDto.d.ts +0 -22
  256. package/src/generated/openapi/model/models.d.ts +0 -9
  257. package/src/generated/openapi/model/ritRequestDto.d.ts +0 -17
  258. package/src/generated/openapi/model/signaleringsbeeldDto.d.ts +0 -16
  259. package/src/generated/openapi/model/signaleringsbeeldRequestDto.d.ts +0 -16
  260. package/src/generated/openapi/param.d.ts +0 -37
  261. package/src/generated/openapi/variables.d.ts +0 -8
@@ -1,110 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { select } from '@ngrx/store';
3
- import { Subscription } from 'rxjs';
4
- import { version } from '../../../generated.version';
5
- import * as MstActions from '../../state/actions/actions';
6
- import { SetBaseUrl, SetIaVersie, SetOngeplandeActiesBepaald } from '../../state/actions/actions';
7
- import { setRitdelenAfterUpdate } from '../../state/actions/ritdelen.actions';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@ngrx/store";
10
- import * as i2 from "../../services/viewer-control.service";
11
- import * as i3 from "../../services/debug.service";
12
- import * as i4 from "../../services/print-beweging.service";
13
- import * as i5 from "@angular/common";
14
- import * as i6 from "../../atomic-components/overlay/overlay.component";
15
- import * as i7 from "../../atomic-components/progress-indicator/progress-indicator.component";
16
- import * as i8 from "../rpe/rpe.component";
17
- import * as i9 from "../ritdelen-lijst/ritdelen-lijst.component";
18
- import * as i10 from "../ritdelen-view/ritdelen-view.component";
19
- import * as i11 from "../viewer-controls/viewer-controls.component";
20
- import * as i12 from "../svg-visualisatie/svg-visualisatie.component";
21
- import * as i13 from "../../atomic-components/messages/messages.component";
22
- export class MstviewerComponent {
23
- constructor(store, viewerControlsService, debugService, printBewegingService) {
24
- this.store = store;
25
- this.viewerControlsService = viewerControlsService;
26
- this.debugService = debugService;
27
- this.printBewegingService = printBewegingService;
28
- this.paginationSize = 4;
29
- this.baseurl = 'https://acceptatie.raildesign.nl';
30
- this.goedgekeurd = new EventEmitter();
31
- this.subscriptions = new Subscription();
32
- this.subscriptions.add(this.store.select('nieuweBewegingen').subscribe(nieuweRit => {
33
- if (this.treinpad) {
34
- this.treinpad.bewegingen = nieuweRit;
35
- store.dispatch(setRitdelenAfterUpdate([]));
36
- store.dispatch(SetOngeplandeActiesBepaald(false));
37
- this.bepaalSbInfos(true);
38
- }
39
- }));
40
- this.progressIndicator$ = this.store.pipe(select(s => s.progressState?.progressIndicator));
41
- }
42
- ngOnInit() {
43
- // eslint-disable-next-line no-console
44
- console.log('MST viewer versie: ' + version);
45
- }
46
- ngOnChanges({ debug, baseurl, treinpad, ongeplandeActies, iaversieinfo }) {
47
- if (debug) {
48
- this.debugService.setDebugFlag(debug.currentValue);
49
- }
50
- if (baseurl) {
51
- this.store.dispatch(SetBaseUrl(baseurl.currentValue));
52
- }
53
- if (treinpad || ongeplandeActies) {
54
- this.bepaalSbInfos();
55
- }
56
- if (iaversieinfo) {
57
- this.store.dispatch(SetIaVersie(iaversieinfo.currentValue));
58
- this.bepaalSbInfos();
59
- }
60
- if (ongeplandeActies) {
61
- this.store.dispatch(SetOngeplandeActiesBepaald(false));
62
- }
63
- }
64
- ngOnDestroy() {
65
- this.debugService.setDebugFlag(false);
66
- this.subscriptions.unsubscribe();
67
- }
68
- focusRitdeel(ritdeel) {
69
- this.store.dispatch(MstActions.focusOpRitdeel(ritdeel, this.paginationSize, this.iaversieinfo));
70
- }
71
- focusPuic(puics) {
72
- this.store.dispatch(MstActions.focusOpIds(puics));
73
- }
74
- bepaalSbInfos(ritGewijzigdToegestaan = false) {
75
- if (this.treinpad && this.ongeplandeActies && this.iaversieinfo?.versie) {
76
- this.store.dispatch(MstActions.bepaalSbInfos(this.treinpad, this.ongeplandeActies, this.iaversieinfo?.versie, ritGewijzigdToegestaan, this.paginationSize));
77
- }
78
- }
79
- printFocusBeweging(bewegingId) {
80
- return this.printBewegingService.printBeweging(bewegingId, this.paginationSize, this.iaversieinfo);
81
- }
82
- keurAlleActiesGoed() {
83
- this.viewerControlsService.keurAlleActiesGoed(this.ongeplandeActies);
84
- }
85
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MstviewerComponent, deps: [{ token: i1.Store }, { token: i2.ViewerControlService }, { token: i3.DebugService }, { token: i4.PrintBewegingService }], target: i0.ɵɵFactoryTarget.Component }); }
86
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: MstviewerComponent, selector: "mst-viewer", inputs: { iaversieinfo: "iaversieinfo", treinpad: "treinpad", ongeplandeActies: "ongeplandeActies", paginationSize: "paginationSize", baseurl: "baseurl", debug: "debug", viewer: "viewer", useClickArea: "useClickArea" }, outputs: { goedgekeurd: "goedgekeurd" }, usesOnChanges: true, ngImport: i0, template: "<loxia-messages></loxia-messages>\n<loxia-overlay *ngIf=\"(progressIndicator$ | async)\">\n <loxia-progress-indicator id=\"progress-indicator\" [border]=\"false\" upperText=\"\">\n </loxia-progress-indicator>\n</loxia-overlay>\n\n<div style=\"position: relative\">\n <rpe-component [baseurl]=\"baseurl\" path=\"/mst/editor/editor.nocache.js\"></rpe-component>\n\n <svg-visualisatie [useClickArea]=\"useClickArea\" [nietGeplandeActies]=\"ongeplandeActies\"></svg-visualisatie>\n\n <nav [class.active]=\"(viewerControlsService.sideNavOpen$ | async) === false\" id=\"sidebar\">\n <div id=\"dismiss\">\n <em id=\"verbergSideNav\" class=\"fa fa-arrow-left\" (click)=\"viewerControlsService.toggleSideNavVisible()\">&times;</em>\n </div>\n <ritdelen-lijst *ngIf=\"!viewer\" (focusEmitter)=\"focusRitdeel($event)\" (keurAlleActiesGoed)=\"keurAlleActiesGoed()\"\n [nietGeplandeActies]=\"ongeplandeActies\"></ritdelen-lijst>\n <ritdelen-view *ngIf=\"viewer\" (focusEmitter)=\"focusRitdeel($event)\"></ritdelen-view>\n </nav>\n\n <viewer-controls [paginationSize]=\"paginationSize\"\n [iaversieinfo]=\"iaversieinfo\"\n [treinpad]=\"treinpad\"\n [goedgekeurd]=\"goedgekeurd\"\n ></viewer-controls>\n\n</div>\n", styles: ["#sidebar{min-width:350px;max-width:475px;background:#fff;transition:all .3s;height:93vh;position:absolute;top:0;z-index:20}#sidebar.active{margin-left:-475px}#sidebar .sidebar-header{padding:20px;background:#6d7fcc}#dismiss{width:20px;height:20px;position:absolute;cursor:pointer;top:5px;right:0;color:#000;z-index:300}[hidden]{display:none}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.OverlayComponent, selector: "loxia-overlay" }, { kind: "component", type: i7.ProgressIndicatorComponent, selector: "loxia-progress-indicator" }, { kind: "component", type: i8.RpeComponent, selector: "rpe-component", inputs: ["baseurl", "path"] }, { kind: "component", type: i9.RitdelenLijstComponent, selector: "ritdelen-lijst", inputs: ["nietGeplandeActies"], outputs: ["focusEmitter", "keurAlleActiesGoed"] }, { kind: "component", type: i10.RitdelenViewComponent, selector: "ritdelen-view", outputs: ["focusEmitter"] }, { kind: "component", type: i11.ViewerControlsComponent, selector: "viewer-controls", inputs: ["paginationSize", "iaversieinfo", "treinpad", "goedgekeurd"] }, { kind: "component", type: i12.SvgVisualisatieComponent, selector: "svg-visualisatie", inputs: ["nietGeplandeActies", "useClickArea"] }, { kind: "component", type: i13.MessagesComponent, selector: "loxia-messages" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] }); }
87
- }
88
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MstviewerComponent, decorators: [{
89
- type: Component,
90
- args: [{ selector: 'mst-viewer', template: "<loxia-messages></loxia-messages>\n<loxia-overlay *ngIf=\"(progressIndicator$ | async)\">\n <loxia-progress-indicator id=\"progress-indicator\" [border]=\"false\" upperText=\"\">\n </loxia-progress-indicator>\n</loxia-overlay>\n\n<div style=\"position: relative\">\n <rpe-component [baseurl]=\"baseurl\" path=\"/mst/editor/editor.nocache.js\"></rpe-component>\n\n <svg-visualisatie [useClickArea]=\"useClickArea\" [nietGeplandeActies]=\"ongeplandeActies\"></svg-visualisatie>\n\n <nav [class.active]=\"(viewerControlsService.sideNavOpen$ | async) === false\" id=\"sidebar\">\n <div id=\"dismiss\">\n <em id=\"verbergSideNav\" class=\"fa fa-arrow-left\" (click)=\"viewerControlsService.toggleSideNavVisible()\">&times;</em>\n </div>\n <ritdelen-lijst *ngIf=\"!viewer\" (focusEmitter)=\"focusRitdeel($event)\" (keurAlleActiesGoed)=\"keurAlleActiesGoed()\"\n [nietGeplandeActies]=\"ongeplandeActies\"></ritdelen-lijst>\n <ritdelen-view *ngIf=\"viewer\" (focusEmitter)=\"focusRitdeel($event)\"></ritdelen-view>\n </nav>\n\n <viewer-controls [paginationSize]=\"paginationSize\"\n [iaversieinfo]=\"iaversieinfo\"\n [treinpad]=\"treinpad\"\n [goedgekeurd]=\"goedgekeurd\"\n ></viewer-controls>\n\n</div>\n", styles: ["#sidebar{min-width:350px;max-width:475px;background:#fff;transition:all .3s;height:93vh;position:absolute;top:0;z-index:20}#sidebar.active{margin-left:-475px}#sidebar .sidebar-header{padding:20px;background:#6d7fcc}#dismiss{width:20px;height:20px;position:absolute;cursor:pointer;top:5px;right:0;color:#000;z-index:300}[hidden]{display:none}\n"] }]
91
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.ViewerControlService }, { type: i3.DebugService }, { type: i4.PrintBewegingService }], propDecorators: { iaversieinfo: [{
92
- type: Input
93
- }], treinpad: [{
94
- type: Input
95
- }], ongeplandeActies: [{
96
- type: Input
97
- }], paginationSize: [{
98
- type: Input
99
- }], baseurl: [{
100
- type: Input
101
- }], debug: [{
102
- type: Input
103
- }], viewer: [{
104
- type: Input
105
- }], useClickArea: [{
106
- type: Input
107
- }], goedgekeurd: [{
108
- type: Output
109
- }] } });
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXN0dmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21zdC12aWV3ZXIvc3JjL2xpYi9jb21wb25lbnRzL21zdHZpZXdlci9tc3R2aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL2NvbXBvbmVudHMvbXN0dmlld2VyL21zdHZpZXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLE1BQU0sRUFBUyxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU9yRCxPQUFPLEtBQUssVUFBVSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVE5RSxNQUFNLE9BQU8sa0JBQWtCO0lBZ0IzQixZQUFvQixLQUE0QixFQUM3QixxQkFBMkMsRUFDMUMsWUFBMEIsRUFDMUIsb0JBQTBDO1FBSDFDLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBQzdCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDMUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQWZyRCxtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixZQUFPLEdBQUcsa0NBQWtDLENBQUM7UUFLNUMs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QUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNoSyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQWtCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6RSxDQUFDOzhHQWpGUSxrQkFBa0I7a0dBQWxCLGtCQUFrQiw0VUNwQi9CLGswQ0EyQkE7OzJGRFBhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZOzJLQUtiLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uLy4uL2dlbmVyYXRlZC52ZXJzaW9uJztcbmltcG9ydCB7IFByb2dyZXNzSW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbWljLWNvbXBvbmVudHMvcHJvZ3Jlc3MtaW5kaWNhdG9yL3Byb2dyZXNzLWluZGljYXRvci5lbnRpdHknO1xuaW1wb3J0IHsgUml0ZGVlbCB9IGZyb20gJy4uLy4uL21vZGVsL3JpdGRlZWwnO1xuaW1wb3J0IHsgQWN0aWUsIEluZnJhTW9kZWwsIFJpdCB9IGZyb20gJy4uLy4uL29wdGltbyc7XG5pbXBvcnQgeyBEZWJ1Z1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kZWJ1Zy5zZXJ2aWNlJztcbmltcG9ydCB7IFByaW50QmV3ZWdpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJpbnQtYmV3ZWdpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBWaWV3ZXJDb250cm9sU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdlci1jb250cm9sLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgTXN0QWN0aW9ucyBmcm9tICcuLi8uLi9zdGF0ZS9hY3Rpb25zL2FjdGlvbnMnO1xuaW1wb3J0IHsgU2V0QmFzZVVybCwgU2V0SWFWZXJzaWUsIFNldE9uZ2VwbGFuZGVBY3RpZXNCZXBhYWxkIH0gZnJvbSAnLi4vLi4vc3RhdGUvYWN0aW9ucy9hY3Rpb25zJztcbmltcG9ydCB7IHNldFJpdGRlbGVuQWZ0ZXJVcGRhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9hY3Rpb25zL3JpdGRlbGVuLmFjdGlvbnMnO1xuaW1wb3J0IHsgTXN0RWRpdG9yU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9tc3QtZWRpdG9yLXN0YXRlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtc3Qtdmlld2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbXN0dmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tc3R2aWV3ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNc3R2aWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBpYXZlcnNpZWluZm86IEluZnJhTW9kZWw7XG4gICAgQElucHV0KCkgdHJlaW5wYWQ6IFJpdDtcbiAgICBASW5wdXQoKSBvbmdlcGxhbmRlQWN0aWVzOiBBY3RpZVtdO1xuICAgIEBJbnB1dCgpIHBhZ2luYXRpb25TaXplID0gNDtcbiAgICBASW5wdXQoKSBiYXNldXJsID0gJ2h0dHBzOi8vYWNjZXB0YXRpZS5yYWlsZGVzaWduLm5sJztcbiAgICBASW5wdXQoKSBkZWJ1ZzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB2aWV3ZXI6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdXNlQ2xpY2tBcmVhOiBib29sZWFuO1xuXG4gICAgQE91dHB1dCgpIGdvZWRnZWtldXJkOiBFdmVudEVtaXR0ZXI8Uml0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHByb2dyZXNzSW5kaWNhdG9yJDogT2JzZXJ2YWJsZTxQcm9ncmVzc0luZGljYXRvcj47XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlPE1zdEVkaXRvclN0YXRlPixcbiAgICAgICAgICAgICAgICBwdWJsaWMgdmlld2VyQ29udHJvbHNTZXJ2aWNlOiBWaWV3ZXJDb250cm9sU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRlYnVnU2VydmljZTogRGVidWdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHJpbnRCZXdlZ2luZ1NlcnZpY2U6IFByaW50QmV3ZWdpbmdTZXJ2aWNlKSB7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnN0b3JlLnNlbGVjdCgnbmlldXdlQmV3ZWdpbmdlbicpLnN1YnNjcmliZShuaWV1d2VSaXQgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlaW5wYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWlucGFkLmJld2VnaW5nZW4gPSBuaWV1d2VSaXQ7XG4gICAgICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goc2V0Uml0ZGVsZW5BZnRlclVwZGF0ZShbXSkpO1xuICAgICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKFNldE9uZ2VwbGFuZGVBY3RpZXNCZXBhYWxkKGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iZXBhYWxTYkluZm9zKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3IkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzID0+IHMucHJvZ3Jlc3NTdGF0ZT8ucHJvZ3Jlc3NJbmRpY2F0b3IpKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5sb2coJ01TVCB2aWV3ZXIgdmVyc2llOiAnICsgdmVyc2lvbik7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoeyBkZWJ1ZywgYmFzZXVybCwgdHJlaW5wYWQsIG9uZ2VwbGFuZGVBY3RpZXMsIGlhdmVyc2llaW5mbyB9OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z1NlcnZpY2Uuc2V0RGVidWdGbGFnKGRlYnVnLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJhc2V1cmwpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0QmFzZVVybChiYXNldXJsLmN1cnJlbnRWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmVpbnBhZCB8fCBvbmdlcGxhbmRlQWN0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLmJlcGFhbFNiSW5mb3MoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWF2ZXJzaWVpbmZvKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldElhVmVyc2llKGlhdmVyc2llaW5mby5jdXJyZW50VmFsdWUpKTtcbiAgICAgICAgICAgIHRoaXMuYmVwYWFsU2JJbmZvcygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbmdlcGxhbmRlQWN0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldE9uZ2VwbGFuZGVBY3RpZXNCZXBhYWxkKGZhbHNlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZWJ1Z1NlcnZpY2Uuc2V0RGVidWdGbGFnKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgZm9jdXNSaXRkZWVsKHJpdGRlZWw6IFJpdGRlZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChNc3RBY3Rpb25zLmZvY3VzT3BSaXRkZWVsKHJpdGRlZWwsIHRoaXMucGFnaW5hdGlvblNpemUsIHRoaXMuaWF2ZXJzaWVpbmZvKSk7XG4gICAgfVxuXG4gICAgZm9jdXNQdWljKHB1aWNzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKE1zdEFjdGlvbnMuZm9jdXNPcElkcyhwdWljcykpO1xuICAgIH1cblxuICAgIGJlcGFhbFNiSW5mb3Mocml0R2V3aWp6aWdkVG9lZ2VzdGFhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRyZWlucGFkICYmIHRoaXMub25nZXBsYW5kZUFjdGllcyAmJiB0aGlzLmlhdmVyc2llaW5mbz8udmVyc2llKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKE1zdEFjdGlvbnMuYmVwYWFsU2JJbmZvcyh0aGlzLnRyZWlucGFkLCB0aGlzLm9uZ2VwbGFuZGVBY3RpZXMsIHRoaXMuaWF2ZXJzaWVpbmZvPy52ZXJzaWUsIHJpdEdld2lqemlnZFRvZWdlc3RhYW4sIHRoaXMucGFnaW5hdGlvblNpemUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaW50Rm9jdXNCZXdlZ2luZyhiZXdlZ2luZ0lkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpbnRCZXdlZ2luZ1NlcnZpY2UucHJpbnRCZXdlZ2luZyhiZXdlZ2luZ0lkLCB0aGlzLnBhZ2luYXRpb25TaXplLCB0aGlzLmlhdmVyc2llaW5mbyk7XG4gICAgfVxuXG4gICAga2V1ckFsbGVBY3RpZXNHb2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdlckNvbnRyb2xzU2VydmljZS5rZXVyQWxsZUFjdGllc0dvZWQodGhpcy5vbmdlcGxhbmRlQWN0aWVzKTtcbiAgICB9XG59XG4iLCI8bG94aWEtbWVzc2FnZXM+PC9sb3hpYS1tZXNzYWdlcz5cbjxsb3hpYS1vdmVybGF5ICpuZ0lmPVwiKHByb2dyZXNzSW5kaWNhdG9yJCB8IGFzeW5jKVwiPlxuICAgIDxsb3hpYS1wcm9ncmVzcy1pbmRpY2F0b3IgaWQ9XCJwcm9ncmVzcy1pbmRpY2F0b3JcIiBbYm9yZGVyXT1cImZhbHNlXCIgdXBwZXJUZXh0PVwiXCI+XG4gICAgPC9sb3hpYS1wcm9ncmVzcy1pbmRpY2F0b3I+XG48L2xveGlhLW92ZXJsYXk+XG5cbjxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cbiAgICA8cnBlLWNvbXBvbmVudCBbYmFzZXVybF09XCJiYXNldXJsXCIgcGF0aD1cIi9tc3QvZWRpdG9yL2VkaXRvci5ub2NhY2hlLmpzXCI+PC9ycGUtY29tcG9uZW50PlxuXG4gICAgPHN2Zy12aXN1YWxpc2F0aWUgW3VzZUNsaWNrQXJlYV09XCJ1c2VDbGlja0FyZWFcIiBbbmlldEdlcGxhbmRlQWN0aWVzXT1cIm9uZ2VwbGFuZGVBY3RpZXNcIj48L3N2Zy12aXN1YWxpc2F0aWU+XG5cbiAgICA8bmF2IFtjbGFzcy5hY3RpdmVdPVwiKHZpZXdlckNvbnRyb2xzU2VydmljZS5zaWRlTmF2T3BlbiQgfCBhc3luYykgPT09IGZhbHNlXCIgaWQ9XCJzaWRlYmFyXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJkaXNtaXNzXCI+XG4gICAgICAgICAgICA8ZW0gaWQ9XCJ2ZXJiZXJnU2lkZU5hdlwiIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdFwiIChjbGljayk9XCJ2aWV3ZXJDb250cm9sc1NlcnZpY2UudG9nZ2xlU2lkZU5hdlZpc2libGUoKVwiPiZ0aW1lczs8L2VtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHJpdGRlbGVuLWxpanN0ICpuZ0lmPVwiIXZpZXdlclwiIChmb2N1c0VtaXR0ZXIpPVwiZm9jdXNSaXRkZWVsKCRldmVudClcIiAoa2V1ckFsbGVBY3RpZXNHb2VkKT1cImtldXJBbGxlQWN0aWVzR29lZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuaWV0R2VwbGFuZGVBY3RpZXNdPVwib25nZXBsYW5kZUFjdGllc1wiPjwvcml0ZGVsZW4tbGlqc3Q+XG4gICAgICAgIDxyaXRkZWxlbi12aWV3ICpuZ0lmPVwidmlld2VyXCIgKGZvY3VzRW1pdHRlcik9XCJmb2N1c1JpdGRlZWwoJGV2ZW50KVwiPjwvcml0ZGVsZW4tdmlldz5cbiAgICA8L25hdj5cblxuICAgIDx2aWV3ZXItY29udHJvbHMgW3BhZ2luYXRpb25TaXplXT1cInBhZ2luYXRpb25TaXplXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpYXZlcnNpZWluZm9dPVwiaWF2ZXJzaWVpbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgIFt0cmVpbnBhZF09XCJ0cmVpbnBhZFwiXG4gICAgICAgICAgICAgICAgICAgICBbZ29lZGdla2V1cmRdPVwiZ29lZGdla2V1cmRcIlxuICAgID48L3ZpZXdlci1jb250cm9scz5cblxuPC9kaXY+XG4iXX0=
@@ -1,267 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { JsJavaUtil } from '@loxia/rijwegen';
3
- import { combineLatest } from 'rxjs';
4
- import { filter } from 'rxjs/operators';
5
- import { OngeplandeActie } from '../../model/ongeplande-actie';
6
- import * as MstActions from '../../state/actions/actions';
7
- import * as RitdelenActions from '../../state/actions/ritdelen.actions';
8
- import { ActieHelper } from '../../util/actie-helper';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@ngrx/store";
11
- import * as i2 from "../../services/signalerings-beeld-manager.service";
12
- import * as i3 from "@angular/common";
13
- export class RitdelenLijstComponent {
14
- constructor(store, sbmService) {
15
- this.store = store;
16
- this.sbmService = sbmService;
17
- this.focusEmitter = new EventEmitter();
18
- this.keurAlleActiesGoed = new EventEmitter();
19
- this.selectedRitdeelActies = [];
20
- this.selectedRitdeelOngeplandeActies = [];
21
- this.NG_ACTIE_PREFIX = '* ';
22
- this.subscriptions = [];
23
- this.subscriptions.push(store.select('ritDelen').subscribe((ritdelen) => {
24
- this.ritdeelViewModels = ritdelen?.map(ritdeel => {
25
- return new RitdeelViewModel(ritdeel, this.selectedRitdeelClass(ritdeel), this.isRitdeelZichtbaar(ritdeel), this.getTitle(ritdeel), ritdeel.isNietBeschikbaar(), this.isRitdeelNieuw(ritdeel), ritdeel.getVanPrlSpoor(), ritdeel.getNaarPrlSpoorText(), ritdeel.getDwangNummer(), ritdeel.getPplgString(), this.getTreinNummer(ritdeel));
26
- });
27
- }));
28
- this.subscriptions.push(store.select('ongeplandeActies').subscribe(acties => this.ongeplandeActiesMap = acties));
29
- this.subscriptions.push(store.select('geplandeActies').subscribe(acties => this.geplandeActies = acties));
30
- this.subscriptions.push(store.select('editable').subscribe(editable => this.editable = editable));
31
- // listen to changes from svg-viewer-component, saving ritdeel in store isn't cool because of all the gwt in it. This is
32
- // just to make changes within the angular lifecycle.
33
- this.subscriptions.push(store.select('selectedRitdeelId').pipe(filter(id => !id)).subscribe(this.deselectRitdeel));
34
- this.subscriptions.push(combineLatest([
35
- this.store.select('ritDelen'),
36
- this.store.select('ongeplandeActies')
37
- ]).subscribe(() => this.updateOngeplandeActiesList()));
38
- }
39
- ngOnDestroy() {
40
- this.subscriptions.forEach(s => s.unsubscribe());
41
- }
42
- isRitdeelZichtbaar(ritdeel) {
43
- return ritdeel.isZichtbaar();
44
- }
45
- toggleRitdeelZichtbaarheid(ritdeel) {
46
- this.deselectRitdeel();
47
- this.store.dispatch(RitdelenActions.toggleRitdeelZichtbaar(ritdeel));
48
- }
49
- toggleZichtbaarheidAlleRitdelen(checked) {
50
- this.deselectRitdeel();
51
- this.store.dispatch(RitdelenActions.setZichtbaarheidAlleRitdelen(checked));
52
- }
53
- isRitdeelNieuw(ritdeel) {
54
- return ritdeel.isNieuw() ? '+' : '';
55
- }
56
- getTitle(ritdeel) {
57
- return ritdeel.getBewegingId();
58
- }
59
- getTreinNummer(ritdeel) {
60
- return ritdeel.getTreinNummer();
61
- }
62
- deleteRitdeel(ritdeel) {
63
- ritdeel.acties.forEach(actie => {
64
- this.verhuisActieNaarOngepland(actie);
65
- });
66
- this.deselectRitdeel();
67
- this.store.dispatch(RitdelenActions.deleteRitdeel(ritdeel));
68
- }
69
- deleteActiesUitRit() {
70
- this.selectedRitdeel.acties.slice().forEach(actie => {
71
- this.deleteActieUitRit(actie);
72
- });
73
- }
74
- deleteActieUitRit(actie) {
75
- const acties = this.selectedRitdeel.acties;
76
- const idx = acties.indexOf(actie);
77
- if (idx >= 0) {
78
- this.verhuisActieNaarOngepland(actie);
79
- this.store.dispatch(RitdelenActions.deleteRitdeelActie(this.selectedRitdeel, acties[idx]));
80
- }
81
- const index = this.nietGeplandeActies.indexOf(actie);
82
- if (index < 0) {
83
- this.nietGeplandeActies.push(actie);
84
- }
85
- }
86
- verhuisActieNaarOngepland(actie) {
87
- const puics = this.geplandeActies.get(actie);
88
- if (puics && puics.length > 0) {
89
- this.store.dispatch(MstActions.AddOngeplandeActie(new OngeplandeActie(actie, puics)));
90
- this.store.dispatch(MstActions.DeleteGeplandeActie(actie, puics));
91
- }
92
- }
93
- voegActiesToeAanRit() {
94
- const acties = this.selectedRitdeelOngeplandeActies;
95
- acties.slice().forEach(actie => {
96
- this.voegActieToeAanRit(actie);
97
- });
98
- }
99
- voegActieToeAanRit(ongeplandeActie) {
100
- const idx = this.selectedRitdeelOngeplandeActies.indexOf(ongeplandeActie);
101
- if (idx >= 0) {
102
- this.store.dispatch(RitdelenActions.addRitdeelActie(this.selectedRitdeel, this.selectedRitdeelOngeplandeActies[idx].actie));
103
- this.store.dispatch(MstActions.AddGeplandeActie(ongeplandeActie.actie, ongeplandeActie.puics));
104
- this.store.dispatch(MstActions.DeleteOngeplandeActie(ongeplandeActie));
105
- }
106
- }
107
- updateOngeplandeActiesList() {
108
- if (this.selectedRitdeel) {
109
- this.selectedRitdeelOngeplandeActies = [];
110
- const ritPuics = [];
111
- const ritdeelTopoElements = ActieHelper.getActieTopoElements(this.selectedRitdeel, this.sbmService);
112
- const wisselObjecten = JsJavaUtil.listToArray(this.selectedRitdeel.getRoute().getWisselObjectenInDeRoute());
113
- ritdeelTopoElements.forEach(elem => ritPuics.push(elem.getPuic()));
114
- const ongeplandeActiesArray = this.ongeplandeActiesMap.values();
115
- ongeplandeActiesArray.forEach(oa => {
116
- const acties = this.ritdeelViewModels.flatMap(rd => rd.ritdeel.acties);
117
- const alreadyAdded = acties.filter(a => a.id === oa.actie.id).length > 0;
118
- if (!alreadyAdded) {
119
- let oaMatch;
120
- if (ActieHelper.isVSTActie(oa.actie)) {
121
- oaMatch = this.matchedWisselMetKantCodeInVSTActie(oa, wisselObjecten) ? oa : undefined;
122
- }
123
- else if (oa.puics.filter(p => ritPuics.includes(p) || this.bevatWisselPuic(ritPuics, p)).length > 0) {
124
- oaMatch = oa;
125
- }
126
- const alreadyAddedAsOngepland = this.selectedRitdeelOngeplandeActies.filter(a => a.actie.id === oa.actie.id).length > 0;
127
- if (oaMatch && !alreadyAddedAsOngepland) {
128
- this.selectedRitdeelOngeplandeActies.push(oaMatch);
129
- }
130
- }
131
- });
132
- }
133
- }
134
- matchedWisselMetKantCodeInVSTActie(ongeplandeActie, wissels) {
135
- const pplg = ongeplandeActie.actie.pplgNaam;
136
- const wisselKantCodes = ActieHelper.getWisselKantCodes(ongeplandeActie.actie);
137
- let gevondenWissels = 0;
138
- let gevondenWisselKantCodes = 0;
139
- wisselKantCodes.forEach((wisselKantCode) => {
140
- const gevondenWissel = this.findWisselOpNaamEnPplg(wissels, wisselKantCode.naam, pplg);
141
- if (gevondenWissel) {
142
- gevondenWissels++;
143
- if (this.getKantCode(gevondenWissel.getStand()) === wisselKantCode.kantCode) {
144
- gevondenWisselKantCodes++;
145
- }
146
- }
147
- });
148
- return gevondenWissels > 0 && gevondenWissels === gevondenWisselKantCodes;
149
- }
150
- findWisselOpNaamEnPplg(wissels, wisselNaam, pplgNaam) {
151
- return wissels.find(wo => wo.getName() === wisselNaam && wo.getPPLG() === pplgNaam);
152
- }
153
- bevatWisselPuic(ritPuics, p) {
154
- return ritPuics.includes(this.sbmService.getWisselMetStoringskaderPuic(p)?.getPuic());
155
- }
156
- selectedRitdeelClass(ritdeel) {
157
- if (ritdeel.getZichtbaarheidBuitenPaginatie()) {
158
- if (ritdeel.equals(this.selectedRitdeel)) {
159
- return 'selected';
160
- }
161
- return 'visible-outside-window';
162
- }
163
- if (ritdeel.isNietBeschikbaar()) {
164
- return 'disabled';
165
- }
166
- if (ritdeel.equals(this.selectedRitdeel)) {
167
- return 'selected';
168
- }
169
- return '';
170
- }
171
- selectRitdeel(event, ritdeel) {
172
- if (event?.ctrlKey) {
173
- this.focusEmitter.emit(ritdeel);
174
- }
175
- else {
176
- if (ritdeel?.equals(this.selectedRitdeel)) {
177
- this.deselectRitdeel();
178
- return;
179
- }
180
- this.selectedRitdeel = ritdeel;
181
- this.disableActieKnoppenVanRitdeel = !this.selectedRitdeel.isZichtbaar();
182
- if (ritdeel.acties) {
183
- this.selectedRitdeelActies = ritdeel.acties;
184
- this.updateOngeplandeActiesList();
185
- }
186
- else {
187
- this.selectedRitdeelActies = [];
188
- this.selectedRitdeelOngeplandeActies = [];
189
- }
190
- }
191
- }
192
- actieOmschrijvingTekst(actie) {
193
- const prefix = this.bepaalPrefixVoorActieOmschrijving(actie);
194
- if (ActieHelper.isVSTActie(actie)) {
195
- return this.maakVstActieOmschrijving(actie, prefix);
196
- }
197
- return prefix + actie.ritActieTypeOmschrijving;
198
- }
199
- maakVstActieOmschrijving(actie, prefix) {
200
- return `${prefix}${ActieHelper.getVSTActieOmschrijving(actie)}`;
201
- }
202
- bepaalPrefixVoorActieOmschrijving(actie) {
203
- const prefix = '';
204
- if (this.selectedRitdeel.acties.includes(actie)) {
205
- // Afwijkende naam bij niet gevisualiseerde actie in rit
206
- const puics = this.geplandeActies.get(actie);
207
- return puics.length > 0 ? prefix : this.NG_ACTIE_PREFIX;
208
- }
209
- return prefix;
210
- }
211
- actieVanKmTekst(actie) {
212
- if (ActieHelper.isWisselSlijpenActie(actie)) {
213
- return actie.wisselNaam;
214
- }
215
- return actie.vanKilometerlint ? actie.vanKilometerlint + ' ' + actie.vanKilometrering : '-';
216
- }
217
- actieTotKmTekst(actie) {
218
- return actie.totKilometerlint ? actie.totKilometerlint + ' ' + actie.totKilometrering : '-';
219
- }
220
- deselectRitdeel() {
221
- this.disableActieKnoppenVanRitdeel = false;
222
- this.selectedRitdeel = undefined;
223
- this.selectedRitdeelActies = [];
224
- this.selectedRitdeelOngeplandeActies = [];
225
- }
226
- getPplgString(ritdeel) {
227
- return ritdeel.getPplgString();
228
- }
229
- getKantCode(stand) {
230
- if (stand === window['domein'].Stand.LINKS) {
231
- return 'L';
232
- }
233
- return 'R';
234
- }
235
- planAlleRitActies() {
236
- this.keurAlleActiesGoed.emit();
237
- this.deselectRitdeel();
238
- }
239
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RitdelenLijstComponent, deps: [{ token: i1.Store }, { token: i2.SignaleringsBeeldManagerService }], target: i0.ɵɵFactoryTarget.Component }); }
240
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RitdelenLijstComponent, selector: "ritdelen-lijst", inputs: { nietGeplandeActies: "nietGeplandeActies" }, outputs: { focusEmitter: "focusEmitter", keurAlleActiesGoed: "keurAlleActiesGoed" }, ngImport: i0, template: "<div id=\"ritdelen-lijst\">\n <div class=\"sidebar-header\">\n <h3 [attr.data-test-id]=\"'title-rit-details'\">Ritdetails</h3>\n </div>\n <div class=\"panes-container\">\n <div class=\"top-pane tableFixHead\" id=\"top-pane\">\n <table class=\"table\" aria-hidden=\"true\" [attr.data-test-id]=\"'table-rit-details'\">\n <thead>\n <tr>\n <th scope=\"col\">\n <input #input\n type=\"checkbox\"\n checked\n class=\"checkbox col-visibility\"\n (change)=\"toggleZichtbaarheidAlleRitdelen(input.checked)\"\n id=\"ritdetails-selecteerAlles\"\n title=\"Selecteer alles\"\n [attr.data-test-id]=\"'checkbox-alle-bewegingen'\">\n </th>\n <th scope=\"col\"></th>\n <th scope=\"col\">Van</th>\n <th scope=\"col\">Naar</th>\n <th scope=\"col\">DW</th>\n <th scope=\"col\">PPLG(s)</th>\n <th scope=\"col\">Treinnr.</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n\n <tr *ngFor=\"let ritdeelViewModel of ritdeelViewModels; let i = index\"\n class=\"{{ selectedRitdeelClass(ritdeelViewModel.ritdeel) }}\" id=\"ritdetails-r{{i}}\">\n <td>\n <input id=\"ritdetails-r{{i}}-zichtbaar\"\n [attr.data-test-id]=\"'checkbox-r'+i\"\n type=\"checkbox\"\n class=\"checkbox col-visibility\"\n [checked]=\"ritdeelViewModel.isZichtbaar\"\n [title]=\"ritdeelViewModel.title\"\n (change)=\"toggleRitdeelZichtbaarheid(ritdeelViewModel.ritdeel)\"\n [hidden]=\"ritdeelViewModel.isNietBeschikbaar\"/>\n </td>\n <td id=\"ritdetails-r{{i}}-gewijzigd\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.isNieuw}}</td>\n <td id=\"ritdetails-r{{i}}-vanSpoor\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.vanPrlSpoor}}</td>\n <td id=\"ritdetails-r{{i}}-naarSpoor\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.naarPrlSpoor}}</td>\n <td id=\"ritdetails-r{{i}}-dwangNummer\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.dwangNummer}}</td>\n <td id=\"ritdetails-r{{i}}-pplgs\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.pplgString}}</td>\n <td id=\"ritdetails-r{{i}}-treinNummer\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.treinNummer}}</td>\n <td style=\"text-align:right\">\n <button *ngIf=\"editable\"\n id=\"ritdetails-r{{i}}-del\"\n type=\"button\"\n class=\"loxia-btn loxia-btn-danger btn-sm\"\n (click)=\"deleteRitdeel(ritdeelViewModel.ritdeel)\">X\n </button>\n </td>\n </tr>\n\n </table>\n </div>\n <div class=\"actie-pane\">\n <div *ngIf=\"selectedRitdeel && (selectedRitdeelActies.length > 0 || selectedRitdeelOngeplandeActies.length > 0) \"\n id=\"actie-pane\">\n <h4>Geplande acties</h4>\n <table aria-hidden=\"true\">\n <tr>\n <th scope=\"col\">Actie</th>\n <th scope=\"col\">Van</th>\n <th scope=\"col\">Tot</th>\n <th scope=\"col\">\n <button *ngIf=\"editable\"\n [hidden]=\"selectedRitdeelActies.length===0\"\n id=\"bulkSetOngeplandButton\"\n [attr.data-test-id]=\"'unplan-all-actions'\"\n type=\"button\"\n class=\"loxia-btn loxia-btn-danger btn-sm\"\n (click)=\"deleteActiesUitRit()\"\n [disabled]=\"disableActieKnoppenVanRitdeel\">X\n </button>\n </th>\n </tr>\n\n <tr *ngFor=\"let actie of selectedRitdeelActies; let i = index\" id=\"ritdetails-a{{i}}\">\n <td id=\"ritdetails-a{{i}}-omschrijving\" class=\"nowrap\">{{ actieOmschrijvingTekst(actie) }}</td>\n <td id=\"ritdetails-a{{i}}-vanKmLint\">{{ actieVanKmTekst(actie)}}</td>\n <td id=\"ritdetails-a{{i}}-totKmLint\">{{ actieTotKmTekst(actie)}}</td>\n <td style=\"text-align:right\">\n <button *ngIf=\"editable\"\n id=\"ritdetails-a{{i}}-del\"\n type=\"button\"\n class=\"loxia-btn loxia-btn-danger btn-sm\"\n (click)=\"deleteActieUitRit(actie)\"\n [disabled]=\"disableActieKnoppenVanRitdeel\">X\n </button>\n </td>\n </tr>\n </table>\n <h4>Ongeplande acties</h4>\n <table aria-hidden=\"true\">\n <tr>\n <th scope=\"col\">Actie</th>\n <th scope=\"col\">Van</th>\n <th scope=\"col\">Tot</th>\n <th scope=\"col\">\n <button *ngIf=\"editable\"\n [hidden]=\"selectedRitdeelOngeplandeActies.length===0\"\n id=\"bulkSetGeplandButton\"\n [attr.data-test-id]=\"'plan-all-actions'\"\n type=\"button\"\n class=\"loxia-btn loxia-btn-success loxia-btn-sm\"\n (click)=\"voegActiesToeAanRit()\"\n [disabled]=\"disableActieKnoppenVanRitdeel\">^\n </button>\n </th>\n </tr>\n\n <tr *ngFor=\"let ongeplandeActie of selectedRitdeelOngeplandeActies; let i = index\"\n id=\"ritdetails-oa{{i}}\">\n <td id=\"ritdetails-oa{{i}}-omschrijving\" class=\"nowrap\">{{actieOmschrijvingTekst(ongeplandeActie.actie) }}</td>\n <td id=\"ritdetails-oa{{i}}-vanKmLint\">{{ actieVanKmTekst(ongeplandeActie.actie)}}</td>\n <td id=\"ritdetails-oa{{i}}-totKmLint\">{{ actieTotKmTekst(ongeplandeActie.actie)}}</td>\n <td style=\"text-align:right\">\n <button *ngIf=\"editable\"\n id=\"ritdetails-oa{{i}}-del\"\n type=\"button\"\n class=\"loxia-btn loxia-btn-success loxia-btn-sm\"\n (click)=\"voegActieToeAanRit(ongeplandeActie)\"\n [disabled]=\"disableActieKnoppenVanRitdeel\">^\n </button>\n </td>\n </tr>\n </table>\n </div>\n </div>\n <div class=\"knop-pane\">\n <button type=\"button\"\n class=\"loxia-btn loxia-btn-primary loxia-btn-sm\"\n [attr.data-test-id]=\"'plan-all-actions-for-file'\"\n [innerText]=\"'Plan acties hele rit'\"\n (click)=\"planAlleRitActies()\">\n </button>\n </div>\n </div>\n</div>\n", styles: [".panes-container{display:inline;height:100%;border:1px solid black}table{width:100%}th{padding:5px;z-index:1000}td{padding:4px}tr:nth-child(2n){background:#f0f0f0}tr:nth-child(odd){background:#fff}.top-pane{height:45vh;overflow:auto}.actie-pane{height:35vh;overflow:auto}.knop-pane{height:5vh;justify-content:center;display:flex;align-items:center}.panes-container,.panes-separator,.top-pane,.actie-pane{margin:0;padding:0;width:100%}.selected{background:#ffff80!important}.disabled{background:gray!important}.visible-outside-window{background:#87cefa!important}.table-scroll-header-fix tbody{display:block;height:40vh;overflow:auto}.tableFixHead{overflow-y:auto}.tableFixHead thead th{position:sticky;top:0;background-color:#fff}.table{margin-bottom:0}.table td,.table th{border-top:none;border-bottom:none;padding-left:.75em}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
241
- }
242
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RitdelenLijstComponent, decorators: [{
243
- type: Component,
244
- args: [{ selector: 'ritdelen-lijst', changeDetection: ChangeDetectionStrategy.Default, template: "<div id=\"ritdelen-lijst\">\n <div class=\"sidebar-header\">\n <h3 [attr.data-test-id]=\"'title-rit-details'\">Ritdetails</h3>\n </div>\n <div class=\"panes-container\">\n <div class=\"top-pane tableFixHead\" id=\"top-pane\">\n <table class=\"table\" aria-hidden=\"true\" [attr.data-test-id]=\"'table-rit-details'\">\n <thead>\n <tr>\n <th scope=\"col\">\n <input #input\n type=\"checkbox\"\n checked\n class=\"checkbox col-visibility\"\n (change)=\"toggleZichtbaarheidAlleRitdelen(input.checked)\"\n id=\"ritdetails-selecteerAlles\"\n title=\"Selecteer alles\"\n [attr.data-test-id]=\"'checkbox-alle-bewegingen'\">\n </th>\n <th scope=\"col\"></th>\n <th scope=\"col\">Van</th>\n <th scope=\"col\">Naar</th>\n <th scope=\"col\">DW</th>\n <th scope=\"col\">PPLG(s)</th>\n <th scope=\"col\">Treinnr.</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n\n <tr *ngFor=\"let ritdeelViewModel of ritdeelViewModels; let i = index\"\n class=\"{{ selectedRitdeelClass(ritdeelViewModel.ritdeel) }}\" id=\"ritdetails-r{{i}}\">\n <td>\n <input id=\"ritdetails-r{{i}}-zichtbaar\"\n [attr.data-test-id]=\"'checkbox-r'+i\"\n type=\"checkbox\"\n class=\"checkbox col-visibility\"\n [checked]=\"ritdeelViewModel.isZichtbaar\"\n [title]=\"ritdeelViewModel.title\"\n (change)=\"toggleRitdeelZichtbaarheid(ritdeelViewModel.ritdeel)\"\n [hidden]=\"ritdeelViewModel.isNietBeschikbaar\"/>\n </td>\n <td id=\"ritdetails-r{{i}}-gewijzigd\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.isNieuw}}</td>\n <td id=\"ritdetails-r{{i}}-vanSpoor\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.vanPrlSpoor}}</td>\n <td id=\"ritdetails-r{{i}}-naarSpoor\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.naarPrlSpoor}}</td>\n <td id=\"ritdetails-r{{i}}-dwangNummer\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.dwangNummer}}</td>\n <td id=\"ritdetails-r{{i}}-pplgs\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.pplgString}}</td>\n <td id=\"ritdetails-r{{i}}-treinNummer\" (click)=\"selectRitdeel($event, ritdeelViewModel.ritdeel)\">{{ritdeelViewModel.treinNummer}}</td>\n <td style=\"text-align:right\">\n <button *ngIf=\"editable\"\n id=\"ritdetails-r{{i}}-del\"\n type=\"button\"\n class=\"loxia-btn loxia-btn-danger btn-sm\"\n (click)=\"deleteRitdeel(ritdeelViewModel.ritdeel)\">X\n </button>\n </td>\n </tr>\n\n </table>\n </div>\n <div class=\"actie-pane\">\n <div *ngIf=\"selectedRitdeel && (selectedRitdeelActies.length > 0 || selectedRitdeelOngeplandeActies.length > 0) \"\n id=\"actie-pane\">\n <h4>Geplande acties</h4>\n <table aria-hidden=\"true\">\n <tr>\n <th scope=\"col\">Actie</th>\n <th scope=\"col\">Van</th>\n <th scope=\"col\">Tot</th>\n <th scope=\"col\">\n <button *ngIf=\"editable\"\n [hidden]=\"selectedRitdeelActies.length===0\"\n id=\"bulkSetOngeplandButton\"\n [attr.data-test-id]=\"'unplan-all-actions'\"\n type=\"button\"\n class=\"loxia-btn loxia-btn-danger btn-sm\"\n (click)=\"deleteActiesUitRit()\"\n [disabled]=\"disableActieKnoppenVanRitdeel\">X\n </button>\n </th>\n </tr>\n\n <tr *ngFor=\"let actie of selectedRitdeelActies; let i = index\" id=\"ritdetails-a{{i}}\">\n <td id=\"ritdetails-a{{i}}-omschrijving\" class=\"nowrap\">{{ actieOmschrijvingTekst(actie) }}</td>\n <td id=\"ritdetails-a{{i}}-vanKmLint\">{{ actieVanKmTekst(actie)}}</td>\n <td id=\"ritdetails-a{{i}}-totKmLint\">{{ actieTotKmTekst(actie)}}</td>\n <td style=\"text-align:right\">\n <button *ngIf=\"editable\"\n id=\"ritdetails-a{{i}}-del\"\n type=\"button\"\n class=\"loxia-btn loxia-btn-danger btn-sm\"\n (click)=\"deleteActieUitRit(actie)\"\n [disabled]=\"disableActieKnoppenVanRitdeel\">X\n </button>\n </td>\n </tr>\n </table>\n <h4>Ongeplande acties</h4>\n <table aria-hidden=\"true\">\n <tr>\n <th scope=\"col\">Actie</th>\n <th scope=\"col\">Van</th>\n <th scope=\"col\">Tot</th>\n <th scope=\"col\">\n <button *ngIf=\"editable\"\n [hidden]=\"selectedRitdeelOngeplandeActies.length===0\"\n id=\"bulkSetGeplandButton\"\n [attr.data-test-id]=\"'plan-all-actions'\"\n type=\"button\"\n class=\"loxia-btn loxia-btn-success loxia-btn-sm\"\n (click)=\"voegActiesToeAanRit()\"\n [disabled]=\"disableActieKnoppenVanRitdeel\">^\n </button>\n </th>\n </tr>\n\n <tr *ngFor=\"let ongeplandeActie of selectedRitdeelOngeplandeActies; let i = index\"\n id=\"ritdetails-oa{{i}}\">\n <td id=\"ritdetails-oa{{i}}-omschrijving\" class=\"nowrap\">{{actieOmschrijvingTekst(ongeplandeActie.actie) }}</td>\n <td id=\"ritdetails-oa{{i}}-vanKmLint\">{{ actieVanKmTekst(ongeplandeActie.actie)}}</td>\n <td id=\"ritdetails-oa{{i}}-totKmLint\">{{ actieTotKmTekst(ongeplandeActie.actie)}}</td>\n <td style=\"text-align:right\">\n <button *ngIf=\"editable\"\n id=\"ritdetails-oa{{i}}-del\"\n type=\"button\"\n class=\"loxia-btn loxia-btn-success loxia-btn-sm\"\n (click)=\"voegActieToeAanRit(ongeplandeActie)\"\n [disabled]=\"disableActieKnoppenVanRitdeel\">^\n </button>\n </td>\n </tr>\n </table>\n </div>\n </div>\n <div class=\"knop-pane\">\n <button type=\"button\"\n class=\"loxia-btn loxia-btn-primary loxia-btn-sm\"\n [attr.data-test-id]=\"'plan-all-actions-for-file'\"\n [innerText]=\"'Plan acties hele rit'\"\n (click)=\"planAlleRitActies()\">\n </button>\n </div>\n </div>\n</div>\n", styles: [".panes-container{display:inline;height:100%;border:1px solid black}table{width:100%}th{padding:5px;z-index:1000}td{padding:4px}tr:nth-child(2n){background:#f0f0f0}tr:nth-child(odd){background:#fff}.top-pane{height:45vh;overflow:auto}.actie-pane{height:35vh;overflow:auto}.knop-pane{height:5vh;justify-content:center;display:flex;align-items:center}.panes-container,.panes-separator,.top-pane,.actie-pane{margin:0;padding:0;width:100%}.selected{background:#ffff80!important}.disabled{background:gray!important}.visible-outside-window{background:#87cefa!important}.table-scroll-header-fix tbody{display:block;height:40vh;overflow:auto}.tableFixHead{overflow-y:auto}.tableFixHead thead th{position:sticky;top:0;background-color:#fff}.table{margin-bottom:0}.table td,.table th{border-top:none;border-bottom:none;padding-left:.75em}\n"] }]
245
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.SignaleringsBeeldManagerService }], propDecorators: { nietGeplandeActies: [{
246
- type: Input
247
- }], focusEmitter: [{
248
- type: Output
249
- }], keurAlleActiesGoed: [{
250
- type: Output
251
- }] } });
252
- class RitdeelViewModel {
253
- constructor(ritdeel, selectedRitdeelClass, isZichtbaar, title, isNietBeschikbaar, isNieuw, vanPrlSpoor, naarPrlSpoor, dwangNummer, pplgString, treinNummer) {
254
- this.ritdeel = ritdeel;
255
- this.selectedRitdeelClass = selectedRitdeelClass;
256
- this.isZichtbaar = isZichtbaar;
257
- this.title = title;
258
- this.isNietBeschikbaar = isNietBeschikbaar;
259
- this.isNieuw = isNieuw;
260
- this.vanPrlSpoor = vanPrlSpoor;
261
- this.naarPrlSpoor = naarPrlSpoor;
262
- this.dwangNummer = dwangNummer;
263
- this.pplgString = pplgString;
264
- this.treinNummer = treinNummer;
265
- }
266
- }
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicml0ZGVsZW4tbGlqc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL2NvbXBvbmVudHMvcml0ZGVsZW4tbGlqc3Qvcml0ZGVsZW4tbGlqc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL2NvbXBvbmVudHMvcml0ZGVsZW4tbGlqc3Qvcml0ZGVsZW4tbGlqc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQVMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFbkQsT0FBTyxFQUFDLGFBQWEsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBSTdELE9BQU8sS0FBSyxVQUFVLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxLQUFLLGVBQWUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV4RSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBU3BELE1BQU0sT0FBTyxzQkFBc0I7SUFrQi9CLFlBQTZCLEtBQTRCLEVBQW1CLFVBQTJDO1FBQTFGLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBQW1CLGVBQVUsR0FBVixVQUFVLENBQWlDO1FBZjdHLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUMzQyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSWxELDBCQUFxQixHQUFZLEVBQUUsQ0FBQztRQUNwQyxvQ0FBK0IsR0FBc0IsRUFBRSxDQUFDO1FBTXZDLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUdoRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM3QyxPQUFPLElBQUksZ0JBQWdCLENBQ3ZCLE9BQU8sRUFDUCxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDdEIsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQzVCLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFDeEIsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQzdCLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFDeEIsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFbEcsd0hBQXdIO1FBQ3hILHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUMxRCxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQ3BELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNuQixhQUFhLENBQUM7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUM7U0FBQyxDQUN6QyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFnQjtRQUMvQixPQUFPLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsMEJBQTBCLENBQUMsT0FBZ0I7UUFDdkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxPQUFnQjtRQUM1QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFnQjtRQUMzQixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFnQjtRQUNyQixPQUFPLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWdCO1FBQzNCLE9BQU8sT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZ0I7UUFDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFLO1FBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQzNDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNMLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxLQUFLO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUksZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDO1FBQ3BELE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtCQUFrQixDQUFDLGVBQWdDO1FBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUUsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDNUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDL0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNMLENBQUM7SUFFRCwwQkFBMEI7UUFDdEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLCtCQUErQixHQUFHLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7WUFDOUIsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEcsTUFBTSxjQUFjLEdBQW9CLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUM7WUFFN0gsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25FLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hFLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDekUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNoQixJQUFJLE9BQU8sQ0FBQztvQkFDWixJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDM0YsQ0FBQzt5QkFBTSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDcEcsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDakIsQ0FBQztvQkFFRCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ3hILElBQUksT0FBTyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzt3QkFDdEMsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdkQsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVELGtDQUFrQyxDQUFDLGVBQWdDLEVBQUUsT0FBd0I7UUFDekYsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDNUMsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5RSxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7UUFFaEMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV2RixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixlQUFlLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDMUUsdUJBQXVCLEVBQUUsQ0FBQztnQkFDOUIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZUFBZSxHQUFHLENBQUMsSUFBSSxlQUFlLEtBQUssdUJBQXVCLENBQUM7SUFDOUUsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE9BQXdCLEVBQUUsVUFBa0IsRUFBRSxRQUFnQjtRQUN6RixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssVUFBVSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQWtCLEVBQUUsQ0FBQztRQUN6QyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFnQjtRQUNqQyxJQUFJLE9BQU8sQ0FBQywrQkFBK0IsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxPQUFPLFVBQVUsQ0FBQztZQUN0QixDQUFDO1lBQ0QsT0FBTyx3QkFBd0IsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxVQUFVLENBQUM7UUFDdEIsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFpQixFQUFFLE9BQWdCO1FBQzdDLElBQUksS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU87WUFDWCxDQUFDO1lBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7WUFDL0IsSUFBSSxDQUFDLDZCQUE2QixHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV6RSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQzVDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ3RDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsK0JBQStCLEdBQUcsRUFBRSxDQUFDO1lBQzlDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQVk7UUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxNQUFNLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0lBQ25ELENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxLQUFZLEVBQUUsTUFBYztRQUN6RCxPQUFPLEdBQUksTUFBTyxHQUFJLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUUsRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxpQ0FBaUMsQ0FBQyxLQUFZO1FBQzFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlDLHdEQUF3RDtZQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDNUQsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBWTtRQUN4QixJQUFJLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDaEcsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFZO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQywrQkFBK0IsR0FBRyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFnQjtRQUMxQixPQUFPLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQW1CO1FBQ25DLElBQUksS0FBSyxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQTVSUSxzQkFBc0I7a0dBQXRCLHNCQUFzQixpTUNyQm5DLG91UUErSUE7OzJGRDFIYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0ksZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE9BQU87d0hBR3ZDLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTs7QUEyUlgsTUFBTSxnQkFBZ0I7SUFDbEIsWUFDYSxPQUFnQixFQUNoQixvQkFBNEIsRUFDNUIsV0FBb0IsRUFDcEIsS0FBYSxFQUNiLGlCQUEwQixFQUMxQixPQUFlLEVBQ2YsV0FBbUIsRUFDbkIsWUFBb0IsRUFDcEIsV0FBbUIsRUFDbkIsVUFBa0IsRUFDbEIsV0FBbUI7UUFWbkIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVE7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFDcEIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUztRQUMxQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtJQUVoQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ZG9tZWluLCBKc0phdmFVdGlsfSBmcm9tICdAbG94aWEvcmlqd2VnZW4nO1xuaW1wb3J0IHtTdG9yZX0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7T25nZXBsYW5kZUFjdGllfSBmcm9tICcuLi8uLi9tb2RlbC9vbmdlcGxhbmRlLWFjdGllJztcbmltcG9ydCB7Uml0ZGVlbH0gZnJvbSAnLi4vLi4vbW9kZWwvcml0ZGVlbCc7XG5pbXBvcnQge0FjdGllfSBmcm9tICcuLi8uLi9vcHRpbW8nO1xuaW1wb3J0IHtTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaWduYWxlcmluZ3MtYmVlbGQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIE1zdEFjdGlvbnMgZnJvbSAnLi4vLi4vc3RhdGUvYWN0aW9ucy9hY3Rpb25zJztcbmltcG9ydCAqIGFzIFJpdGRlbGVuQWN0aW9ucyBmcm9tICcuLi8uLi9zdGF0ZS9hY3Rpb25zL3JpdGRlbGVuLmFjdGlvbnMnO1xuaW1wb3J0IHtNc3RFZGl0b3JTdGF0ZX0gZnJvbSAnLi4vLi4vc3RhdGUvbXN0LWVkaXRvci1zdGF0ZSc7XG5pbXBvcnQge0FjdGllSGVscGVyfSBmcm9tICcuLi8uLi91dGlsL2FjdGllLWhlbHBlcic7XG5pbXBvcnQge0FycmF5TXVsdGltYXB9IGZyb20gJy4uLy4uL3V0aWwvbXVsdGktbWFwJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdyaXRkZWxlbi1saWpzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JpdGRlbGVuLWxpanN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yaXRkZWxlbi1saWpzdC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdFxufSlcbmV4cG9ydCBjbGFzcyBSaXRkZWxlbkxpanN0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBuaWV0R2VwbGFuZGVBY3RpZXM6IEFjdGllW107XG5cbiAgICBAT3V0cHV0KCkgZm9jdXNFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxSaXRkZWVsPigpO1xuICAgIEBPdXRwdXQoKSBrZXVyQWxsZUFjdGllc0dvZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICByaXRkZWVsVmlld01vZGVsczogUml0ZGVlbFZpZXdNb2RlbFtdO1xuICAgIHNlbGVjdGVkUml0ZGVlbDogUml0ZGVlbDtcbiAgICBzZWxlY3RlZFJpdGRlZWxBY3RpZXM6IEFjdGllW10gPSBbXTtcbiAgICBzZWxlY3RlZFJpdGRlZWxPbmdlcGxhbmRlQWN0aWVzOiBPbmdlcGxhbmRlQWN0aWVbXSA9IFtdO1xuICAgIGRpc2FibGVBY3RpZUtub3BwZW5WYW5SaXRkZWVsOiBib29sZWFuO1xuICAgIGVkaXRhYmxlOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBvbmdlcGxhbmRlQWN0aWVzTWFwOiBBcnJheU11bHRpbWFwPHN0cmluZywgT25nZXBsYW5kZUFjdGllPjtcbiAgICBwcml2YXRlIGdlcGxhbmRlQWN0aWVzOiBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgTkdfQUNUSUVfUFJFRklYID0gJyogJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBTdG9yZTxNc3RFZGl0b3JTdGF0ZT4sIHByaXZhdGUgcmVhZG9ubHkgc2JtU2VydmljZTogU2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdG9yZS5zZWxlY3QoJ3JpdERlbGVuJykuc3Vic2NyaWJlKChyaXRkZWxlbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5yaXRkZWVsVmlld01vZGVscyA9IHJpdGRlbGVuPy5tYXAocml0ZGVlbCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSaXRkZWVsVmlld01vZGVsKFxuICAgICAgICAgICAgICAgICAgICByaXRkZWVsLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUml0ZGVlbENsYXNzKHJpdGRlZWwpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUml0ZGVlbFppY2h0YmFhcihyaXRkZWVsKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUaXRsZShyaXRkZWVsKSxcbiAgICAgICAgICAgICAgICAgICAgcml0ZGVlbC5pc05pZXRCZXNjaGlrYmFhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUml0ZGVlbE5pZXV3KHJpdGRlZWwpLFxuICAgICAgICAgICAgICAgICAgICByaXRkZWVsLmdldFZhblBybFNwb29yKCksXG4gICAgICAgICAgICAgICAgICAgIHJpdGRlZWwuZ2V0TmFhclBybFNwb29yVGV4dCgpLFxuICAgICAgICAgICAgICAgICAgICByaXRkZWVsLmdldER3YW5nTnVtbWVyKCksXG4gICAgICAgICAgICAgICAgICAgIHJpdGRlZWwuZ2V0UHBsZ1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRyZWluTnVtbWVyKHJpdGRlZWwpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3RvcmUuc2VsZWN0KCdvbmdlcGxhbmRlQWN0aWVzJykuc3Vic2NyaWJlKGFjdGllcyA9PiB0aGlzLm9uZ2VwbGFuZGVBY3RpZXNNYXAgPSBhY3RpZXMpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3RvcmUuc2VsZWN0KCdnZXBsYW5kZUFjdGllcycpLnN1YnNjcmliZShhY3RpZXMgPT4gdGhpcy5nZXBsYW5kZUFjdGllcyA9IGFjdGllcykpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdG9yZS5zZWxlY3QoJ2VkaXRhYmxlJykuc3Vic2NyaWJlKGVkaXRhYmxlID0+IHRoaXMuZWRpdGFibGUgPSBlZGl0YWJsZSkpO1xuXG4gICAgICAgIC8vIGxpc3RlbiB0byBjaGFuZ2VzIGZyb20gc3ZnLXZpZXdlci1jb21wb25lbnQsIHNhdmluZyByaXRkZWVsIGluIHN0b3JlIGlzbid0IGNvb2wgYmVjYXVzZSBvZiBhbGwgdGhlIGd3dCBpbiBpdC4gVGhpcyBpc1xuICAgICAgICAvLyBqdXN0IHRvIG1ha2UgY2hhbmdlcyB3aXRoaW4gdGhlIGFuZ3VsYXIgbGlmZWN5Y2xlLlxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdG9yZS5zZWxlY3QoJ3NlbGVjdGVkUml0ZGVlbElkJykucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihpZCA9PiAhaWQpKS5zdWJzY3JpYmUodGhpcy5kZXNlbGVjdFJpdGRlZWxcbiAgICAgICAgKSk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdyaXREZWxlbicpLFxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ29uZ2VwbGFuZGVBY3RpZXMnKV1cbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVPbmdlcGxhbmRlQWN0aWVzTGlzdCgpKSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBpc1JpdGRlZWxaaWNodGJhYXIocml0ZGVlbDogUml0ZGVlbCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcml0ZGVlbC5pc1ppY2h0YmFhcigpO1xuICAgIH1cblxuICAgIHRvZ2dsZVJpdGRlZWxaaWNodGJhYXJoZWlkKHJpdGRlZWw6IFJpdGRlZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXNlbGVjdFJpdGRlZWwoKTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChSaXRkZWxlbkFjdGlvbnMudG9nZ2xlUml0ZGVlbFppY2h0YmFhcihyaXRkZWVsKSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlWmljaHRiYWFyaGVpZEFsbGVSaXRkZWxlbihjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzZWxlY3RSaXRkZWVsKCk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUml0ZGVsZW5BY3Rpb25zLnNldFppY2h0YmFhcmhlaWRBbGxlUml0ZGVsZW4oY2hlY2tlZCkpO1xuICAgIH1cblxuICAgIGlzUml0ZGVlbE5pZXV3KHJpdGRlZWw6IFJpdGRlZWwpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcml0ZGVlbC5pc05pZXV3KCkgPyAnKycgOiAnJztcbiAgICB9XG5cbiAgICBnZXRUaXRsZShyaXRkZWVsOiBSaXRkZWVsKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHJpdGRlZWwuZ2V0QmV3ZWdpbmdJZCgpO1xuICAgIH1cblxuICAgIGdldFRyZWluTnVtbWVyKHJpdGRlZWw6IFJpdGRlZWwpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcml0ZGVlbC5nZXRUcmVpbk51bW1lcigpO1xuICAgIH1cblxuICAgIGRlbGV0ZVJpdGRlZWwocml0ZGVlbDogUml0ZGVlbCk6IHZvaWQge1xuICAgICAgICByaXRkZWVsLmFjdGllcy5mb3JFYWNoKGFjdGllID0+IHtcbiAgICAgICAgICAgIHRoaXMudmVyaHVpc0FjdGllTmFhck9uZ2VwbGFuZChhY3RpZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlc2VsZWN0Uml0ZGVlbCgpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFJpdGRlbGVuQWN0aW9ucy5kZWxldGVSaXRkZWVsKHJpdGRlZWwpKTtcbiAgICB9XG5cbiAgICBkZWxldGVBY3RpZXNVaXRSaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSaXRkZWVsLmFjdGllcy5zbGljZSgpLmZvckVhY2goYWN0aWUgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVBY3RpZVVpdFJpdChhY3RpZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUFjdGllVWl0Uml0KGFjdGllKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFjdGllcyA9IHRoaXMuc2VsZWN0ZWRSaXRkZWVsLmFjdGllcztcbiAgICAgICAgY29uc3QgaWR4ID0gYWN0aWVzLmluZGV4T2YoYWN0aWUpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMudmVyaHVpc0FjdGllTmFhck9uZ2VwbGFuZChhY3RpZSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFJpdGRlbGVuQWN0aW9ucy5kZWxldGVSaXRkZWVsQWN0aWUodGhpcy5zZWxlY3RlZFJpdGRlZWwsIGFjdGllc1tpZHhdKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm5pZXRHZXBsYW5kZUFjdGllcy5pbmRleE9mKGFjdGllKTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5uaWV0R2VwbGFuZGVBY3RpZXMucHVzaChhY3RpZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZlcmh1aXNBY3RpZU5hYXJPbmdlcGxhbmQoYWN0aWUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHVpY3MgPSB0aGlzLmdlcGxhbmRlQWN0aWVzLmdldChhY3RpZSk7XG5cbiAgICAgICAgaWYgKHB1aWNzICYmIHB1aWNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goTXN0QWN0aW9ucy5BZGRPbmdlcGxhbmRlQWN0aWUobmV3IE9uZ2VwbGFuZGVBY3RpZShhY3RpZSwgcHVpY3MpKSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKE1zdEFjdGlvbnMuRGVsZXRlR2VwbGFuZGVBY3RpZShhY3RpZSwgcHVpY3MpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZvZWdBY3RpZXNUb2VBYW5SaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFjdGllcyA9IHRoaXMuc2VsZWN0ZWRSaXRkZWVsT25nZXBsYW5kZUFjdGllcztcbiAgICAgICAgYWN0aWVzLnNsaWNlKCkuZm9yRWFjaChhY3RpZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZvZWdBY3RpZVRvZUFhblJpdChhY3RpZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZvZWdBY3RpZVRvZUFhblJpdChvbmdlcGxhbmRlQWN0aWU6IE9uZ2VwbGFuZGVBY3RpZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLnNlbGVjdGVkUml0ZGVlbE9uZ2VwbGFuZGVBY3RpZXMuaW5kZXhPZihvbmdlcGxhbmRlQWN0aWUpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUml0ZGVsZW5BY3Rpb25zLmFkZFJpdGRlZWxBY3RpZSh0aGlzLnNlbGVjdGVkUml0ZGVlbCwgdGhpcy5zZWxlY3RlZFJpdGRlZWxPbmdlcGxhbmRlQWN0aWVzW2lkeF0uYWN0aWUpKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goTXN0QWN0aW9ucy5BZGRHZXBsYW5kZUFjdGllKG9uZ2VwbGFuZGVBY3RpZS5hY3RpZSwgb25nZXBsYW5kZUFjdGllLnB1aWNzKSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKE1zdEFjdGlvbnMuRGVsZXRlT25nZXBsYW5kZUFjdGllKG9uZ2VwbGFuZGVBY3RpZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlT25nZXBsYW5kZUFjdGllc0xpc3QoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUml0ZGVlbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJpdGRlZWxPbmdlcGxhbmRlQWN0aWVzID0gW107XG4gICAgICAgICAgICBjb25zdCByaXRQdWljczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJpdGRlZWxUb3BvRWxlbWVudHMgPSBBY3RpZUhlbHBlci5nZXRBY3RpZVRvcG9FbGVtZW50cyh0aGlzLnNlbGVjdGVkUml0ZGVlbCwgdGhpcy5zYm1TZXJ2aWNlKTtcbiAgICAgICAgICAgIGNvbnN0IHdpc3NlbE9iamVjdGVuOiBkb21laW4uV2lzc2VsW10gPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KHRoaXMuc2VsZWN0ZWRSaXRkZWVsLmdldFJvdXRlKCkuZ2V0V2lzc2VsT2JqZWN0ZW5JbkRlUm91dGUoKSk7XG5cbiAgICAgICAgICAgIHJpdGRlZWxUb3BvRWxlbWVudHMuZm9yRWFjaChlbGVtID0+IHJpdFB1aWNzLnB1c2goZWxlbS5nZXRQdWljKCkpKTtcbiAgICAgICAgICAgIGNvbnN0IG9uZ2VwbGFuZGVBY3RpZXNBcnJheSA9IHRoaXMub25nZXBsYW5kZUFjdGllc01hcC52YWx1ZXMoKTtcbiAgICAgICAgICAgIG9uZ2VwbGFuZGVBY3RpZXNBcnJheS5mb3JFYWNoKG9hID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpZXMgPSB0aGlzLnJpdGRlZWxWaWV3TW9kZWxzLmZsYXRNYXAocmQgPT4gcmQucml0ZGVlbC5hY3RpZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFscmVhZHlBZGRlZCA9IGFjdGllcy5maWx0ZXIoYSA9PiBhLmlkID09PSBvYS5hY3RpZS5pZCkubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlBZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgb2FNYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzVlNUQWN0aWUob2EuYWN0aWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYU1hdGNoID0gdGhpcy5tYXRjaGVkV2lzc2VsTWV0S2FudENvZGVJblZTVEFjdGllKG9hLCB3aXNzZWxPYmplY3RlbikgPyBvYSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYS5wdWljcy5maWx0ZXIocCA9PiByaXRQdWljcy5pbmNsdWRlcyhwKSB8fCB0aGlzLmJldmF0V2lzc2VsUHVpYyhyaXRQdWljcywgcCkpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9hTWF0Y2ggPSBvYTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFscmVhZHlBZGRlZEFzT25nZXBsYW5kID0gdGhpcy5zZWxlY3RlZFJpdGRlZWxPbmdlcGxhbmRlQWN0aWVzLmZpbHRlcihhID0+IGEuYWN0aWUuaWQgPT09IG9hLmFjdGllLmlkKS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAob2FNYXRjaCAmJiAhYWxyZWFkeUFkZGVkQXNPbmdlcGxhbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSaXRkZWVsT25nZXBsYW5kZUFjdGllcy5wdXNoKG9hTWF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXRjaGVkV2lzc2VsTWV0S2FudENvZGVJblZTVEFjdGllKG9uZ2VwbGFuZGVBY3RpZTogT25nZXBsYW5kZUFjdGllLCB3aXNzZWxzOiBkb21laW4uV2lzc2VsW10pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcHBsZyA9IG9uZ2VwbGFuZGVBY3RpZS5hY3RpZS5wcGxnTmFhbTtcbiAgICAgICAgY29uc3Qgd2lzc2VsS2FudENvZGVzID0gQWN0aWVIZWxwZXIuZ2V0V2lzc2VsS2FudENvZGVzKG9uZ2VwbGFuZGVBY3RpZS5hY3RpZSk7XG5cbiAgICAgICAgbGV0IGdldm9uZGVuV2lzc2VscyA9IDA7XG4gICAgICAgIGxldCBnZXZvbmRlbldpc3NlbEthbnRDb2RlcyA9IDA7XG5cbiAgICAgICAgd2lzc2VsS2FudENvZGVzLmZvckVhY2goKHdpc3NlbEthbnRDb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZXZvbmRlbldpc3NlbCA9IHRoaXMuZmluZFdpc3NlbE9wTmFhbUVuUHBsZyh3aXNzZWxzLCB3aXNzZWxLYW50Q29kZS5uYWFtLCBwcGxnKTtcblxuICAgICAgICAgICAgaWYgKGdldm9uZGVuV2lzc2VsKSB7XG4gICAgICAgICAgICAgICAgZ2V2b25kZW5XaXNzZWxzKys7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0S2FudENvZGUoZ2V2b25kZW5XaXNzZWwuZ2V0U3RhbmQoKSkgPT09IHdpc3NlbEthbnRDb2RlLmthbnRDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldm9uZGVuV2lzc2VsS2FudENvZGVzKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZ2V2b25kZW5XaXNzZWxzID4gMCAmJiBnZXZvbmRlbldpc3NlbHMgPT09IGdldm9uZGVuV2lzc2VsS2FudENvZGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZFdpc3NlbE9wTmFhbUVuUHBsZyh3aXNzZWxzOiBkb21laW4uV2lzc2VsW10sIHdpc3NlbE5hYW06IHN0cmluZywgcHBsZ05hYW06IHN0cmluZyk6IGRvbWVpbi5XaXNzZWwge1xuICAgICAgICByZXR1cm4gd2lzc2Vscy5maW5kKHdvID0+IHdvLmdldE5hbWUoKSA9PT0gd2lzc2VsTmFhbSAmJiB3by5nZXRQUExHKCkgPT09IHBwbGdOYWFtKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJldmF0V2lzc2VsUHVpYyhyaXRQdWljczogc3RyaW5nW10sIHApOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJpdFB1aWNzLmluY2x1ZGVzKHRoaXMuc2JtU2VydmljZS5nZXRXaXNzZWxNZXRTdG9yaW5nc2thZGVyUHVpYyhwKT8uZ2V0UHVpYygpKTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZFJpdGRlZWxDbGFzcyhyaXRkZWVsOiBSaXRkZWVsKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHJpdGRlZWwuZ2V0WmljaHRiYWFyaGVpZEJ1aXRlblBhZ2luYXRpZSgpKSB7XG4gICAgICAgICAgICBpZiAocml0ZGVlbC5lcXVhbHModGhpcy5zZWxlY3RlZFJpdGRlZWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzZWxlY3RlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ3Zpc2libGUtb3V0c2lkZS13aW5kb3cnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyaXRkZWVsLmlzTmlldEJlc2NoaWtiYWFyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnZGlzYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyaXRkZWVsLmVxdWFscyh0aGlzLnNlbGVjdGVkUml0ZGVlbCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnc2VsZWN0ZWQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBzZWxlY3RSaXRkZWVsKGV2ZW50OiBNb3VzZUV2ZW50LCByaXRkZWVsOiBSaXRkZWVsKTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudD8uY3RybEtleSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0VtaXR0ZXIuZW1pdChyaXRkZWVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyaXRkZWVsPy5lcXVhbHModGhpcy5zZWxlY3RlZFJpdGRlZWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFJpdGRlZWwoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSaXRkZWVsID0gcml0ZGVlbDtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUFjdGllS25vcHBlblZhblJpdGRlZWwgPSAhdGhpcy5zZWxlY3RlZFJpdGRlZWwuaXNaaWNodGJhYXIoKTtcblxuICAgICAgICAgICAgaWYgKHJpdGRlZWwuYWN0aWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJpdGRlZWxBY3RpZXMgPSByaXRkZWVsLmFjdGllcztcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU9uZ2VwbGFuZGVBY3RpZXNMaXN0KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSaXRkZWVsQWN0aWVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJpdGRlZWxPbmdlcGxhbmRlQWN0aWVzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhY3RpZU9tc2NocmlqdmluZ1Rla3N0KGFjdGllOiBBY3RpZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuYmVwYWFsUHJlZml4Vm9vckFjdGllT21zY2hyaWp2aW5nKGFjdGllKTtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzVlNUQWN0aWUoYWN0aWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWFrVnN0QWN0aWVPbXNjaHJpanZpbmcoYWN0aWUsIHByZWZpeCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGFjdGllLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZztcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hYWtWc3RBY3RpZU9tc2NocmlqdmluZyhhY3RpZTogQWN0aWUsIHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAkeyBwcmVmaXggfSR7IEFjdGllSGVscGVyLmdldFZTVEFjdGllT21zY2hyaWp2aW5nKGFjdGllKSB9YDtcbiAgICB9XG5cbiAgICBiZXBhYWxQcmVmaXhWb29yQWN0aWVPbXNjaHJpanZpbmcoYWN0aWU6IEFjdGllKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUml0ZGVlbC5hY3RpZXMuaW5jbHVkZXMoYWN0aWUpKSB7XG4gICAgICAgICAgICAvLyBBZndpamtlbmRlIG5hYW0gYmlqIG5pZXQgZ2V2aXN1YWxpc2VlcmRlIGFjdGllIGluIHJpdFxuICAgICAgICAgICAgY29uc3QgcHVpY3MgPSB0aGlzLmdlcGxhbmRlQWN0aWVzLmdldChhY3RpZSk7XG4gICAgICAgICAgICByZXR1cm4gcHVpY3MubGVuZ3RoID4gMCA/IHByZWZpeCA6IHRoaXMuTkdfQUNUSUVfUFJFRklYO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgfVxuXG4gICAgYWN0aWVWYW5LbVRla3N0KGFjdGllOiBBY3RpZSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChBY3RpZUhlbHBlci5pc1dpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3RpZS53aXNzZWxOYWFtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3RpZS52YW5LaWxvbWV0ZXJsaW50ID8gYWN0aWUudmFuS2lsb21ldGVybGludCArICcgJyArIGFjdGllLnZhbktpbG9tZXRyZXJpbmcgOiAnLSc7XG4gICAgfVxuXG4gICAgYWN0aWVUb3RLbVRla3N0KGFjdGllOiBBY3RpZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBhY3RpZS50b3RLaWxvbWV0ZXJsaW50ID8gYWN0aWUudG90S2lsb21ldGVybGludCArICcgJyArIGFjdGllLnRvdEtpbG9tZXRyZXJpbmcgOiAnLSc7XG4gICAgfVxuXG4gICAgZGVzZWxlY3RSaXRkZWVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVBY3RpZUtub3BwZW5WYW5SaXRkZWVsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSaXRkZWVsID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUml0ZGVlbEFjdGllcyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUml0ZGVlbE9uZ2VwbGFuZGVBY3RpZXMgPSBbXTtcbiAgICB9XG5cbiAgICBnZXRQcGxnU3RyaW5nKHJpdGRlZWw6IFJpdGRlZWwpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcml0ZGVlbC5nZXRQcGxnU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRLYW50Q29kZShzdGFuZDogZG9tZWluLlN0YW5kKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHN0YW5kID09PSB3aW5kb3dbJ2RvbWVpbiddLlN0YW5kLkxJTktTKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0wnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnUic7XG4gICAgfVxuXG4gICAgcGxhbkFsbGVSaXRBY3RpZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V1ckFsbGVBY3RpZXNHb2VkLmVtaXQoKTtcbiAgICAgICAgdGhpcy5kZXNlbGVjdFJpdGRlZWwoKTtcbiAgICB9XG59XG5cbmNsYXNzIFJpdGRlZWxWaWV3TW9kZWwge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICByZWFkb25seSByaXRkZWVsOiBSaXRkZWVsLFxuICAgICAgICByZWFkb25seSBzZWxlY3RlZFJpdGRlZWxDbGFzczogc3RyaW5nLFxuICAgICAgICByZWFkb25seSBpc1ppY2h0YmFhcjogYm9vbGVhbixcbiAgICAgICAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZyxcbiAgICAgICAgcmVhZG9ubHkgaXNOaWV0QmVzY2hpa2JhYXI6IGJvb2xlYW4sXG4gICAgICAgIHJlYWRvbmx5IGlzTmlldXc6IHN0cmluZyxcbiAgICAgICAgcmVhZG9ubHkgdmFuUHJsU3Bvb3I6IHN0cmluZyxcbiAgICAgICAgcmVhZG9ubHkgbmFhclBybFNwb29yOiBzdHJpbmcsXG4gICAgICAgIHJlYWRvbmx5IGR3YW5nTnVtbWVyOiBudW1iZXIsXG4gICAgICAgIHJlYWRvbmx5IHBwbGdTdHJpbmc6IHN0cmluZyxcbiAgICAgICAgcmVhZG9ubHkgdHJlaW5OdW1tZXI6IHN0cmluZ1xuICAgICkge1xuICAgIH1cbn1cbiIsIjxkaXYgaWQ9XCJyaXRkZWxlbi1saWpzdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyLWhlYWRlclwiPlxuICAgICAgICA8aDMgW2F0dHIuZGF0YS10ZXN0LWlkXT1cIid0aXRsZS1yaXQtZGV0YWlscydcIj5SaXRkZXRhaWxzPC9oMz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicGFuZXMtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b3AtcGFuZSB0YWJsZUZpeEhlYWRcIiBpZD1cInRvcC1wYW5lXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFthdHRyLmRhdGEtdGVzdC1pZF09XCIndGFibGUtcml0LWRldGFpbHMnXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI2lucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveCBjb2wtdmlzaWJpbGl0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVaaWNodGJhYXJoZWlkQWxsZVJpdGRlbGVuKGlucHV0LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJpdGRldGFpbHMtc2VsZWN0ZWVyQWxsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiU2VsZWN0ZWVyIGFsbGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwiJ2NoZWNrYm94LWFsbGUtYmV3ZWdpbmdlbidcIj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+VmFuPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+TmFhcjwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPkRXPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+UFBMRyhzKTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPlRyZWlubnIuPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+PC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJpdGRlZWxWaWV3TW9kZWwgb2Ygcml0ZGVlbFZpZXdNb2RlbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IHNlbGVjdGVkUml0ZGVlbENsYXNzKHJpdGRlZWxWaWV3TW9kZWwucml0ZGVlbCkgfX1cIiBpZD1cInJpdGRldGFpbHMtcnt7aX19XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cInJpdGRldGFpbHMtcnt7aX19LXppY2h0YmFhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cIidjaGVja2JveC1yJytpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3ggY29sLXZpc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJpdGRlZWxWaWV3TW9kZWwuaXNaaWNodGJhYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJyaXRkZWVsVmlld01vZGVsLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVJpdGRlZWxaaWNodGJhYXJoZWlkKHJpdGRlZWxWaWV3TW9kZWwucml0ZGVlbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwicml0ZGVlbFZpZXdNb2RlbC5pc05pZXRCZXNjaGlrYmFhclwiLz5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGlkPVwicml0ZGV0YWlscy1ye3tpfX0tZ2V3aWp6aWdkXCIgKGNsaWNrKT1cInNlbGVjdFJpdGRlZWwoJGV2ZW50LCByaXRkZWVsVmlld01vZGVsLnJpdGRlZWwpXCI+e3tyaXRkZWVsVmlld01vZGVsLmlzTmlldXd9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBpZD1cInJpdGRldGFpbHMtcnt7aX19LXZhblNwb29yXCIgKGNsaWNrKT1cInNlbGVjdFJpdGRlZWwoJGV2ZW50LCByaXRkZWVsVmlld01vZGVsLnJpdGRlZWwpXCI+e3tyaXRkZWVsVmlld01vZGVsLnZhblBybFNwb29yfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgaWQ9XCJyaXRkZXRhaWxzLXJ7e2l9fS1uYWFyU3Bvb3JcIiAoY2xpY2spPVwic2VsZWN0Uml0ZGVlbCgkZXZlbnQsIHJpdGRlZWxWaWV3TW9kZWwucml0ZGVlbClcIj57e3JpdGRlZWxWaWV3TW9kZWwubmFhclBybFNwb29yfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgaWQ9XCJyaXRkZXRhaWxzLXJ7e2l9fS1kd2FuZ051bW1lclwiIChjbGljayk9XCJzZWxlY3RSaXRkZWVsKCRldmVudCwgcml0ZGVlbFZpZXdNb2RlbC5yaXRkZWVsKVwiPnt7cml0ZGVlbFZpZXdNb2RlbC5kd2FuZ051bW1lcn19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGlkPVwicml0ZGV0YWlscy1ye3tpfX0tcHBsZ3NcIiAoY2xpY2spPVwic2VsZWN0Uml0ZGVlbCgkZXZlbnQsIHJpdGRlZWxWaWV3TW9kZWwucml0ZGVlbClcIj57e3JpdGRlZWxWaWV3TW9kZWwucHBsZ1N0cmluZ319PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGlkPVwicml0ZGV0YWlscy1ye3tpfX0tdHJlaW5OdW1tZXJcIiAoY2xpY2spPVwic2VsZWN0Uml0ZGVlbCgkZXZlbnQsIHJpdGRlZWxWaWV3TW9kZWwucml0ZGVlbClcIj57e3JpdGRlZWxWaWV3TW9kZWwudHJlaW5OdW1tZXJ9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246cmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicml0ZGV0YWlscy1ye3tpfX0tZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibG94aWEtYnRuIGxveGlhLWJ0bi1kYW5nZXIgYnRuLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJpdGRlZWwocml0ZGVlbFZpZXdNb2RlbC5yaXRkZWVsKVwiPlhcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aWUtcGFuZVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkUml0ZGVlbCAgJiYgKHNlbGVjdGVkUml0ZGVlbEFjdGllcy5sZW5ndGggPiAwIHx8IHNlbGVjdGVkUml0ZGVlbE9uZ2VwbGFuZGVBY3RpZXMubGVuZ3RoID4gMCkgXCJcbiAgICAgICAgICAgICAgICAgaWQ9XCJhY3RpZS1wYW5lXCI+XG4gICAgICAgICAgICAgICAgPGg0PkdlcGxhbmRlIGFjdGllczwvaDQ+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5BY3RpZTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5WYW48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+VG90PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cInNlbGVjdGVkUml0ZGVlbEFjdGllcy5sZW5ndGg9PT0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnVsa1NldE9uZ2VwbGFuZEJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwiJ3VucGxhbi1hbGwtYWN0aW9ucydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxveGlhLWJ0biBsb3hpYS1idG4tZGFuZ2VyIGJ0bi1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQWN0aWVzVWl0Uml0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVBY3RpZUtub3BwZW5WYW5SaXRkZWVsXCI+WFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cblxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGFjdGllIG9mIHNlbGVjdGVkUml0ZGVlbEFjdGllczsgbGV0IGkgPSBpbmRleFwiIGlkPVwicml0ZGV0YWlscy1he3tpfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBpZD1cInJpdGRldGFpbHMtYXt7aX19LW9tc2NocmlqdmluZ1wiIGNsYXNzPVwibm93cmFwXCI+e3sgYWN0aWVPbXNjaHJpanZpbmdUZWtzdChhY3RpZSkgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGlkPVwicml0ZGV0YWlscy1he3tpfX0tdmFuS21MaW50XCI+e3sgYWN0aWVWYW5LbVRla3N0KGFjdGllKX19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBpZD1cInJpdGRldGFpbHMtYXt7aX19LXRvdEttTGludFwiPnt7IGFjdGllVG90S21UZWtzdChhY3RpZSl9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicml0ZGV0YWlscy1he3tpfX0tZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb3hpYS1idG4gbG94aWEtYnRuLWRhbmdlciBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUFjdGllVWl0Uml0KGFjdGllKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUFjdGllS25vcHBlblZhblJpdGRlZWxcIj5YXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPGg0Pk9uZ2VwbGFuZGUgYWN0aWVzPC9oND5cbiAgICAgICAgICAgICAgICA8dGFibGUgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPkFjdGllPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPlZhbjwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5Ub3Q8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwic2VsZWN0ZWRSaXRkZWVsT25nZXBsYW5kZUFjdGllcy5sZW5ndGg9PT0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnVsa1NldEdlcGxhbmRCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cIidwbGFuLWFsbC1hY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibG94aWEtYnRuIGxveGlhLWJ0bi1zdWNjZXNzIGxveGlhLWJ0bi1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidm9lZ0FjdGllc1RvZUFhblJpdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQWN0aWVLbm9wcGVuVmFuUml0ZGVlbFwiPl5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvbmdlcGxhbmRlQWN0aWUgb2Ygc2VsZWN0ZWRSaXRkZWVsT25nZXBsYW5kZUFjdGllczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJpdGRldGFpbHMtb2F7e2l9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGlkPVwicml0ZGV0YWlscy1vYXt7aX19LW9tc2NocmlqdmluZ1wiIGNsYXNzPVwibm93cmFwXCI+e3thY3RpZU9tc2NocmlqdmluZ1Rla3N0KG9uZ2VwbGFuZGVBY3RpZS5hY3RpZSkgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGlkPVwicml0ZGV0YWlscy1vYXt7aX19LXZhbkttTGludFwiPnt7IGFjdGllVmFuS21UZWtzdChvbmdlcGxhbmRlQWN0aWUuYWN0aWUpfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGlkPVwicml0ZGV0YWlscy1vYXt7aX19LXRvdEttTGludFwiPnt7IGFjdGllVG90S21UZWtzdChvbmdlcGxhbmRlQWN0aWUuYWN0aWUpfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJpdGRldGFpbHMtb2F7e2l9fS1kZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxveGlhLWJ0biBsb3hpYS1idG4tc3VjY2VzcyBsb3hpYS1idG4tc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZvZWdBY3RpZVRvZUFhblJpdChvbmdlcGxhbmRlQWN0aWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQWN0aWVLbm9wcGVuVmFuUml0ZGVlbFwiPl5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImtub3AtcGFuZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb3hpYS1idG4gbG94aWEtYnRuLXByaW1hcnkgbG94aWEtYnRuLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cIidwbGFuLWFsbC1hY3Rpb25zLWZvci1maWxlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lclRleHRdPVwiJ1BsYW4gYWN0aWVzIGhlbGUgcml0J1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwbGFuQWxsZVJpdEFjdGllcygpXCI+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==