@sbb-esta/lyne-elements-experimental-dev 4.7.0-dev.1773648109 → 4.7.0-dev.1773670972

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 (191) hide show
  1. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +65 -76
  2. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +72 -52
  3. package/autocomplete-grid/autocomplete-grid-button.js +3 -6
  4. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +2 -17
  5. package/autocomplete-grid/autocomplete-grid-cell.js +4 -7
  6. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +20 -21
  7. package/autocomplete-grid/autocomplete-grid-optgroup.js +3 -6
  8. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +2 -33
  9. package/autocomplete-grid/autocomplete-grid-option.js +4 -9
  10. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +2 -22
  11. package/autocomplete-grid/autocomplete-grid-row.js +4 -7
  12. package/autocomplete-grid/autocomplete-grid.js +3 -6
  13. package/autocomplete-grid-cell.component-Dak9wlBr.js +24 -0
  14. package/autocomplete-grid-option.component-DNRFHOwc.js +37 -0
  15. package/autocomplete-grid-row.component-DBHZQ0GQ.js +27 -0
  16. package/autocomplete-grid.js +9 -21
  17. package/autocomplete-grid.pure.js +7 -15
  18. package/core/datetime/date-helper.js +2 -191
  19. package/core/datetime.js +2 -5
  20. package/core/timetable/access-leg-helper.js +76 -71
  21. package/core/timetable/timetable-helper.js +9 -11
  22. package/core/timetable/timetable-properties.js +0 -1
  23. package/core/timetable.js +3 -7
  24. package/date-helper-CGproP5d.js +185 -0
  25. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +114 -122
  26. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +92 -70
  27. package/development/autocomplete-grid/autocomplete-grid-button.js +6 -4
  28. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +2 -29
  29. package/development/autocomplete-grid/autocomplete-grid-cell.js +7 -5
  30. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +27 -22
  31. package/development/autocomplete-grid/autocomplete-grid-optgroup.js +6 -4
  32. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +2 -109
  33. package/development/autocomplete-grid/autocomplete-grid-option.js +7 -7
  34. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +2 -91
  35. package/development/autocomplete-grid/autocomplete-grid-row.js +7 -5
  36. package/development/autocomplete-grid/autocomplete-grid.js +6 -4
  37. package/development/autocomplete-grid-cell.component-BBvM4o2H.js +42 -0
  38. package/development/autocomplete-grid-option.component-QzfM5eIE.js +123 -0
  39. package/development/autocomplete-grid-row.component-H8sCTCkT.js +104 -0
  40. package/development/autocomplete-grid.js +10 -14
  41. package/development/autocomplete-grid.pure.js +4 -13
  42. package/development/core/datetime/date-helper.js +2 -285
  43. package/development/core/datetime.js +2 -6
  44. package/development/core/timetable/access-leg-helper.js +104 -82
  45. package/development/core/timetable/timetable-helper.js +16 -17
  46. package/development/core/timetable/timetable-properties.js +0 -2
  47. package/development/core/timetable.js +3 -8
  48. package/development/date-helper-8_Y-PuHh.js +520 -0
  49. package/development/differenceInMinutes-DN_1Rk3O.js +110 -0
  50. package/development/format-Bbrn2bgo.js +1848 -0
  51. package/development/isValid-C-HzKv4v.js +178 -0
  52. package/development/journey-summary/journey-summary.component.js +2 -288
  53. package/development/journey-summary.component-uGhZvA4p.js +385 -0
  54. package/development/journey-summary.js +8 -5
  55. package/development/journey-summary.pure.js +2 -5
  56. package/development/mapper-hWWm7Uke.js +11454 -0
  57. package/development/pearl-chain/pearl-chain.component.js +2 -634
  58. package/development/pearl-chain-time/pearl-chain-time.component.js +2 -306
  59. package/development/pearl-chain-time.component-B8mayTWD.js +415 -0
  60. package/development/pearl-chain-time.js +8 -5
  61. package/development/pearl-chain-time.pure.js +2 -5
  62. package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +2 -28
  63. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +2 -393
  64. package/development/pearl-chain-vertical-item.component-BDzbcIaf.js +435 -0
  65. package/development/pearl-chain-vertical-item.js +8 -5
  66. package/development/pearl-chain-vertical-item.pure.js +2 -5
  67. package/development/pearl-chain-vertical.component-CswE7b3M.js +39 -0
  68. package/development/pearl-chain-vertical.js +8 -5
  69. package/development/pearl-chain-vertical.pure.js +2 -5
  70. package/development/pearl-chain.component-wpsTvoSe.js +704 -0
  71. package/development/pearl-chain.js +8 -5
  72. package/development/pearl-chain.pure.js +2 -5
  73. package/development/seat-reservation/common/mapper/icon-mapper.js +168 -71
  74. package/development/seat-reservation/common/mapper/mapper.js +2 -11429
  75. package/development/seat-reservation/common/mapper.js +2 -9
  76. package/development/seat-reservation/common/svgs.js +2 -46
  77. package/development/seat-reservation/common/translations/i18n.js +1118 -900
  78. package/development/seat-reservation/common/translations.js +1 -4
  79. package/development/seat-reservation/common/types.js +0 -2
  80. package/development/seat-reservation/common.js +8 -12
  81. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +1307 -1231
  82. package/development/seat-reservation/seat-reservation/seat-reservation.component.js +2 -862
  83. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +2 -106
  84. package/development/seat-reservation/seat-reservation-area.js +7 -5
  85. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +35 -34
  86. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +2 -162
  87. package/development/seat-reservation/seat-reservation-graphic.js +7 -5
  88. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +2 -713
  89. package/development/seat-reservation/seat-reservation-navigation-coach.js +7 -5
  90. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +2 -131
  91. package/development/seat-reservation/seat-reservation-navigation-services.js +7 -5
  92. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +2 -601
  93. package/development/seat-reservation/seat-reservation-place-control.js +7 -5
  94. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +2 -22
  95. package/development/seat-reservation/seat-reservation-scoped.js +7 -5
  96. package/development/seat-reservation/seat-reservation.js +7 -6
  97. package/development/seat-reservation-area.component-ORuli_DC.js +138 -0
  98. package/development/seat-reservation-graphic.component-lZXqHWIz.js +193 -0
  99. package/development/seat-reservation-navigation-coach.component-D2QXTMJJ.js +828 -0
  100. package/development/seat-reservation-navigation-services.component-Bg1adRlU.js +179 -0
  101. package/development/seat-reservation-place-control.component-CwUX-QYO.js +726 -0
  102. package/development/seat-reservation-scoped.component-uLT33P9y.js +31 -0
  103. package/development/seat-reservation.component-MOv5kHDC.js +821 -0
  104. package/development/seat-reservation.js +16 -29
  105. package/development/seat-reservation.pure.js +11 -29
  106. package/development/svgs-kDpBCto5.js +28 -0
  107. package/development/timetable-duration/timetable-duration.component.js +2 -108
  108. package/development/timetable-duration.component-D21SXsQq.js +125 -0
  109. package/development/timetable-duration.js +8 -5
  110. package/development/timetable-duration.pure.js +2 -5
  111. package/development/timetable-row/timetable-row.component.js +2 -781
  112. package/development/timetable-row.component-Y5w8vEwP.js +932 -0
  113. package/development/timetable-row.js +8 -13
  114. package/development/timetable-row.pure.js +2 -12
  115. package/development/toDate-Biiv3kyf.js +150 -0
  116. package/differenceInMinutes-Dr9gRqtu.js +27 -0
  117. package/format-CM5exOsN.js +1103 -0
  118. package/isValid-B9oVW3lA.js +36 -0
  119. package/journey-summary/journey-summary.component.js +2 -194
  120. package/journey-summary.component-Cq_4kaOp.js +264 -0
  121. package/journey-summary.js +5 -4
  122. package/journey-summary.pure.js +2 -4
  123. package/mapper-DkiDDseD.js +11382 -0
  124. package/package.json +2 -2
  125. package/pearl-chain/pearl-chain.component.js +2 -165
  126. package/pearl-chain-time/pearl-chain-time.component.js +2 -157
  127. package/pearl-chain-time.component-DGDW5S1c.js +239 -0
  128. package/pearl-chain-time.js +5 -4
  129. package/pearl-chain-time.pure.js +2 -4
  130. package/pearl-chain-vertical/pearl-chain-vertical.component.js +2 -17
  131. package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +2 -77
  132. package/pearl-chain-vertical-item.component-G22bWhLU.js +108 -0
  133. package/pearl-chain-vertical-item.js +5 -4
  134. package/pearl-chain-vertical-item.pure.js +2 -4
  135. package/pearl-chain-vertical.component-CXIDT5RD.js +21 -0
  136. package/pearl-chain-vertical.js +5 -4
  137. package/pearl-chain-vertical.pure.js +2 -4
  138. package/pearl-chain.component-DmjkVIva.js +194 -0
  139. package/pearl-chain.js +5 -4
  140. package/pearl-chain.pure.js +2 -4
  141. package/seat-reservation/common/mapper/icon-mapper.js +71 -71
  142. package/seat-reservation/common/mapper/mapper.js +2 -11386
  143. package/seat-reservation/common/mapper.js +3 -9
  144. package/seat-reservation/common/svgs.js +2 -242
  145. package/seat-reservation/common/translations/i18n.js +1084 -891
  146. package/seat-reservation/common/translations.js +2 -4
  147. package/seat-reservation/common/types.js +0 -1
  148. package/seat-reservation/common.js +9 -15
  149. package/seat-reservation/seat-reservation/seat-reservation-base-element.js +834 -812
  150. package/seat-reservation/seat-reservation/seat-reservation.component.js +2 -420
  151. package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +2 -51
  152. package/seat-reservation/seat-reservation-area.js +4 -7
  153. package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +68 -71
  154. package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +2 -75
  155. package/seat-reservation/seat-reservation-graphic.js +4 -7
  156. package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +2 -234
  157. package/seat-reservation/seat-reservation-navigation-coach.js +4 -7
  158. package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +2 -85
  159. package/seat-reservation/seat-reservation-navigation-services.js +4 -7
  160. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +2 -203
  161. package/seat-reservation/seat-reservation-place-control.js +4 -7
  162. package/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +2 -13
  163. package/seat-reservation/seat-reservation-scoped.js +4 -7
  164. package/seat-reservation/seat-reservation.js +5 -9
  165. package/seat-reservation-area.component-COD6CXhP.js +75 -0
  166. package/seat-reservation-graphic.component-BNfU5tQM.js +102 -0
  167. package/seat-reservation-navigation-coach.component-Bh9ILq60.js +333 -0
  168. package/seat-reservation-navigation-services.component-QL0UnilZ.js +127 -0
  169. package/seat-reservation-place-control.component-BfnZUyHv.js +322 -0
  170. package/seat-reservation-scoped.component-CY04BT_4.js +17 -0
  171. package/seat-reservation.component-zrQHTRl3.js +364 -0
  172. package/seat-reservation.js +17 -39
  173. package/seat-reservation.pure.js +15 -32
  174. package/svgs-D5DhLHxC.js +26 -0
  175. package/timetable-duration/timetable-duration.component.js +2 -57
  176. package/timetable-duration.component-DaYoJUGS.js +65 -0
  177. package/timetable-duration.js +5 -4
  178. package/timetable-duration.pure.js +2 -4
  179. package/timetable-row/timetable-row.component.js +2 -427
  180. package/timetable-row.component-BDMAEsbR.js +559 -0
  181. package/timetable-row.js +6 -13
  182. package/timetable-row.pure.js +2 -11
  183. package/toDate-p-Tpkb7t.js +16 -0
  184. package/development/differenceInMinutes-B0dawX-5.js +0 -26
  185. package/development/format-BMkeaqaF.js +0 -1433
  186. package/development/isValid-BYRch7pV.js +0 -53
  187. package/development/toDate-BWb6Z1JD.js +0 -24
  188. package/differenceInMinutes-COvvdYsJ.js +0 -23
  189. package/format-CmKROkbc.js +0 -1186
  190. package/isValid-m3_OsPaB.js +0 -45
  191. package/toDate-Bw2KTWeq.js +0 -15
@@ -0,0 +1,932 @@
1
+ import { t as format } from "./format-Bbrn2bgo.js";
2
+ import { __esDecorate, __runInitializers } from "tslib";
3
+ import { SbbElement } from "@sbb-esta/lyne-elements/core/base-elements.js";
4
+ import { SbbLanguageController } from "@sbb-esta/lyne-elements/core/controllers.js";
5
+ import { forceType } from "@sbb-esta/lyne-elements/core/decorators.js";
6
+ import { boxSizingStyles } from "@sbb-esta/lyne-elements/core/styles.js";
7
+ import "@sbb-esta/lyne-elements/icon.js";
8
+ import { css, html, nothing } from "lit";
9
+ import { setOrRemoveAttribute } from "@sbb-esta/lyne-elements/core/dom.js";
10
+ import { defaultDateAdapter } from "@sbb-esta/lyne-elements/core/datetime.js";
11
+ import { i18nArrival, i18nClass, i18nDeparture, i18nDirection, i18nFromPlatform, i18nMeansOfTransport, i18nNew, i18nOccupancy, i18nRealTimeInfo, i18nSupersaver, i18nTransferProcedure, i18nTransferProcedures, i18nTravelhints, i18nTripDuration, i18nTripQuayChange } from "@sbb-esta/lyne-elements/core/i18n.js";
12
+ import { property } from "lit/decorators.js";
13
+ import { durationToTime, removeTimezoneFromISOTimeString } from "./core/datetime.js";
14
+ import "./pearl-chain-time.js";
15
+ import { getDepartureArrivalTimeAttribute, isRideLeg } from "./core/timetable.js";
16
+ import "@sbb-esta/lyne-elements/card.js";
17
+ import "@sbb-esta/lyne-elements/timetable-occupancy.js";
18
+ //#region src/elements-experimental/timetable-row/timetable-row.scss?lit&inline
19
+ var timetable_row_default = css`:host {
20
+ --sbb-timetable-row-gap: var(--sbb-spacing-fixed-2x);
21
+ --sbb-timetable-row-height: 1.5625rem;
22
+ --sbb-timetable-row-height-header: 1.25rem;
23
+ --sbb-timetable-row-height-footer: 1rem;
24
+ --sbb-timetable-row-skeleton-pulse-duration: 1800ms;
25
+ display: block;
26
+ }
27
+
28
+ :host([disable-animation]) {
29
+ --sbb-timetable-row-skeleton-pulse-duration: 0;
30
+ }
31
+
32
+ .sbb-timetable__row-transport-icon {
33
+ --sbb-icon-svg-width: 1.25rem;
34
+ --sbb-icon-svg-height: 1.25rem;
35
+ }
36
+
37
+ .sbb-travel-hints__item {
38
+ --sbb-icon-svg-height: 0.875rem;
39
+ }
40
+
41
+ .sbb-screen-reader-only {
42
+ border: 0;
43
+ clip-path: rect(0 0 0 0);
44
+ height: 1px;
45
+ margin: -1px;
46
+ overflow: hidden;
47
+ padding: 0;
48
+ position: absolute;
49
+ white-space: nowrap;
50
+ width: 1px;
51
+ }
52
+
53
+ .sbb-timetable__row--quay {
54
+ margin-inline-end: var(--sbb-spacing-fixed-1x);
55
+ }
56
+
57
+ .sbb-timetable__row--quay-type {
58
+ float: left;
59
+ }
60
+
61
+ ul {
62
+ list-style: none;
63
+ margin: 0;
64
+ padding: 0;
65
+ font-size: inherit;
66
+ display: inline-flex;
67
+ }
68
+
69
+ li {
70
+ display: inline-flex;
71
+ align-self: center;
72
+ }
73
+
74
+ .sbb-timetable__row-transport {
75
+ display: inline-flex;
76
+ align-self: center;
77
+ }
78
+
79
+ .sbb-timetable__row-transportnumber,
80
+ .sbb-timetable__row-time {
81
+ --sbb-text-font-size: var(--sbb-text-font-size-s);
82
+ font-family: var(--sbb-typo-font-family);
83
+ font-weight: normal;
84
+ line-height: var(--sbb-typo-line-height-text);
85
+ letter-spacing: var(--sbb-typo-letter-spacing-text);
86
+ font-size: var(--sbb-text-font-size);
87
+ font-weight: bold;
88
+ line-height: unset;
89
+ white-space: nowrap;
90
+ align-self: center;
91
+ }
92
+
93
+ .sbb-timetable__row {
94
+ --sbb-text-font-size: var(--sbb-text-font-size-s);
95
+ font-family: var(--sbb-typo-font-family);
96
+ font-weight: normal;
97
+ line-height: var(--sbb-typo-line-height-text);
98
+ letter-spacing: var(--sbb-typo-letter-spacing-text);
99
+ font-size: var(--sbb-text-font-size);
100
+ display: flex;
101
+ flex-direction: column;
102
+ gap: var(--sbb-timetable-row-gap);
103
+ }
104
+
105
+ .sbb-timetable__row-header,
106
+ .sbb-timetable__row-footer {
107
+ animation: none;
108
+ }
109
+
110
+ .sbb-timetable__row-header {
111
+ display: flex;
112
+ gap: var(--sbb-spacing-fixed-2x);
113
+ align-items: center;
114
+ line-height: var(--sbb-timetable-row-height-header);
115
+ }
116
+
117
+ .sbb-timetable__row-details,
118
+ .sbb-timetable__row-hints {
119
+ display: inline-flex;
120
+ gap: var(--sbb-spacing-fixed-1x);
121
+ align-items: center;
122
+ }
123
+
124
+ .sbb-timetable__row-header p {
125
+ overflow: hidden;
126
+ white-space: nowrap;
127
+ text-overflow: ellipsis;
128
+ margin: 0;
129
+ align-self: center;
130
+ }
131
+
132
+ .sbb-timetable__row-footer {
133
+ display: flex;
134
+ flex-wrap: wrap;
135
+ justify-content: space-between;
136
+ align-items: center;
137
+ gap: var(--sbb-spacing-fixed-2x);
138
+ line-height: var(--sbb-timetable-row-height-footer);
139
+ }
140
+ .sbb-timetable__row-footer > span {
141
+ align-self: center;
142
+ }
143
+ .sbb-timetable__row-footer :only-child {
144
+ margin-inline-start: auto;
145
+ }
146
+
147
+ .sbb-timetable__row-quay--changed {
148
+ color: var(--sbb-color-primary);
149
+ }
150
+
151
+ .sbb-timetable__row-transport-wrapper,
152
+ .sbb-timetable__row-warning {
153
+ display: inline-flex;
154
+ }
155
+
156
+ .sbb-loading {
157
+ pointer-events: none;
158
+ }
159
+
160
+ .sbb-loading__wrapper {
161
+ display: flex;
162
+ flex-direction: column;
163
+ gap: var(--sbb-spacing-fixed-2x);
164
+ }
165
+
166
+ .sbb-loading__row {
167
+ width: 100%;
168
+ border-radius: var(--sbb-border-radius-1x);
169
+ height: var(--sbb-timetable-row-height);
170
+ }
171
+ @media (min-width: calc(64rem)) {
172
+ .sbb-loading__row {
173
+ height: 1.75rem;
174
+ }
175
+ }
176
+ @media (forced-colors: active) {
177
+ .sbb-loading__row {
178
+ border: var(--sbb-border-width-1x) solid ButtonBorder !important;
179
+ }
180
+ }
181
+
182
+ .sbb-loading__row,
183
+ .sbb-loading__badge {
184
+ background: var(--sbb-background-color-4);
185
+ animation: skeleton-pulse var(--sbb-timetable-row-skeleton-pulse-duration) ease-out infinite;
186
+ }
187
+
188
+ .sbb-loading__row:first-of-type {
189
+ height: var(--sbb-timetable-row-height-header);
190
+ width: 50%;
191
+ }
192
+
193
+ .sbb-loading__row:last-of-type {
194
+ height: var(--sbb-timetable-row-height-footer);
195
+ }
196
+
197
+ .sbb-loading__badge {
198
+ margin-inline: auto calc(var(--sbb-spacing-fixed-3x) * -1);
199
+ padding-inline-end: var(--sbb-spacing-fixed-6x);
200
+ border-end-start-radius: var(--sbb-card-badge-border-radius);
201
+ transform: var(--sbb-card-badge-skew);
202
+ width: 7.1875rem;
203
+ height: 1.25rem;
204
+ }
205
+
206
+ @keyframes skeleton-pulse {
207
+ 0% {
208
+ background: var(--sbb-background-color-4);
209
+ }
210
+ 17% {
211
+ background: var(--sbb-background-color-4);
212
+ }
213
+ 50% {
214
+ background: var(--sbb-background-color-3);
215
+ }
216
+ 67% {
217
+ background: var(--sbb-background-color-3);
218
+ }
219
+ 100% {
220
+ background: var(--sbb-background-color-4);
221
+ }
222
+ }`;
223
+ //#endregion
224
+ //#region src/elements-experimental/timetable-row/timetable-row.component.ts
225
+ var renderIconProduct = (icon, name) => {
226
+ return html`<span class="sbb-timetable__row-transport">
227
+ <sbb-icon name=${icon}></sbb-icon>
228
+ <span class="sbb-screen-reader-only">${name}</span>
229
+ </span>`;
230
+ };
231
+ var renderStringProduct = (vehicleName, line) => {
232
+ const space = [
233
+ "M",
234
+ "B",
235
+ "T"
236
+ ].includes(vehicleName) ? " " : "";
237
+ return html`<span class="sbb-timetable__row-transportnumber">
238
+ ${line !== null ? vehicleName + space + line : vehicleName}
239
+ </span>`;
240
+ };
241
+ var getReachableText = (legs) => {
242
+ return legs?.find((leg) => leg.serviceJourney?.serviceAlteration?.reachableText)?.serviceJourney?.serviceAlteration?.reachableText;
243
+ };
244
+ var getDelayText = (legs) => {
245
+ return legs?.find((leg) => leg.serviceJourney?.serviceAlteration?.delayText)?.serviceJourney?.serviceAlteration?.delayText;
246
+ };
247
+ var getRedirectedText = (legs) => {
248
+ return legs?.find((leg) => !!leg.serviceJourney?.serviceAlteration?.redirectedText)?.serviceJourney?.serviceAlteration?.redirectedText;
249
+ };
250
+ var getUnplannedStop = (legs) => {
251
+ return legs?.find((leg) => !!leg.serviceJourney?.serviceAlteration?.unplannedStopPointsText)?.serviceJourney?.serviceAlteration?.unplannedStopPointsText;
252
+ };
253
+ var sortSituation = (situations) => {
254
+ const priorities = {
255
+ DISTURBANCE: 0,
256
+ INFORMATION: 1,
257
+ DELAY: 2,
258
+ TRAIN_REPLACEMENT_BY_BUS: 3,
259
+ CONSTRUCTION_SITE: 4,
260
+ END_MESSAGE: 5
261
+ };
262
+ return [...situations]?.sort((a, b) => priorities[a.cause] - priorities[b.cause]);
263
+ };
264
+ var getHimIcon = (situation) => {
265
+ switch (situation?.cause) {
266
+ case "DISTURBANCE": return {
267
+ name: "disruption",
268
+ text: situation?.broadcastMessages?.length ? situation?.broadcastMessages[0].title : ""
269
+ };
270
+ case "INFORMATION": return {
271
+ name: "info",
272
+ text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
273
+ };
274
+ case "DELAY": return {
275
+ name: "delay",
276
+ text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
277
+ };
278
+ case "TRAIN_REPLACEMENT_BY_BUS": return {
279
+ name: "replacementbus",
280
+ text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
281
+ };
282
+ case "CONSTRUCTION_SITE": return {
283
+ name: "construction",
284
+ text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
285
+ };
286
+ default: return {
287
+ name: "info",
288
+ text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
289
+ };
290
+ }
291
+ };
292
+ var getCus = (trip, currentLanguage) => {
293
+ const { summary, legs } = trip || {};
294
+ const rideLegs = legs?.filter((leg) => isRideLeg(leg));
295
+ const { tripStatus } = summary || {};
296
+ if (tripStatus?.cancelled || tripStatus?.partiallyCancelled) return {
297
+ name: "cancellation",
298
+ text: tripStatus?.cancelledText
299
+ };
300
+ if (getReachableText(rideLegs)) return {
301
+ name: "missed-connection",
302
+ text: getReachableText(rideLegs)
303
+ };
304
+ if (tripStatus?.alternative) return {
305
+ name: "alternative",
306
+ text: tripStatus.alternativeText
307
+ };
308
+ if (getRedirectedText(rideLegs)) return {
309
+ name: "reroute",
310
+ text: getRedirectedText(rideLegs)
311
+ };
312
+ if (getUnplannedStop(rideLegs)) return {
313
+ name: "add-stop",
314
+ text: getUnplannedStop(rideLegs)
315
+ };
316
+ if (tripStatus?.delayed || tripStatus?.delayedUnknown) return {
317
+ name: "delay",
318
+ text: getDelayText(rideLegs)
319
+ };
320
+ if (tripStatus?.quayChanged) {
321
+ const departure = rideLegs[0].departure;
322
+ return {
323
+ name: "platform-change",
324
+ text: departure.quayChanged ? departure.quayChangedText : i18nTripQuayChange[currentLanguage]
325
+ };
326
+ }
327
+ return {};
328
+ };
329
+ var findAndReplaceNotice = (notices) => {
330
+ const reservationNotice = [
331
+ "RR",
332
+ "RK",
333
+ "RC",
334
+ "RL",
335
+ "RM",
336
+ "RS",
337
+ "RU",
338
+ "XP",
339
+ "XR",
340
+ "XT"
341
+ ];
342
+ return notices.reduce((foundNotice, notice) => {
343
+ if (foundNotice) return foundNotice;
344
+ if (reservationNotice.includes(notice.name)) return {
345
+ ...notice,
346
+ name: "RR"
347
+ };
348
+ }, void 0);
349
+ };
350
+ var filterNotices = (notices) => {
351
+ const allowedNames = [
352
+ "Z",
353
+ "SB",
354
+ "SZ",
355
+ "VR",
356
+ "TG"
357
+ ];
358
+ return notices.filter((notice, index) => {
359
+ return notices.findIndex((n) => n.name === notice.name) === index;
360
+ }).filter((notice) => allowedNames.includes(notice.name)).sort((a, b) => allowedNames.indexOf(a.name) - allowedNames.indexOf(b.name));
361
+ };
362
+ var handleNotices = (notices) => {
363
+ const reservationNotice = findAndReplaceNotice(notices);
364
+ const filteredNotices = filterNotices(notices);
365
+ if (reservationNotice === void 0) return filteredNotices;
366
+ if (!filteredNotices.length) return [reservationNotice];
367
+ if (filteredNotices[0].name === "Z" && filteredNotices[1]) return [
368
+ filteredNotices[0],
369
+ reservationNotice,
370
+ filteredNotices[1]
371
+ ].concat(filteredNotices.slice(2));
372
+ return [reservationNotice, ...filteredNotices];
373
+ };
374
+ /**
375
+ * It displays information about the trip, acting as a container for all the `sbb-timetable-*` components.
376
+ * */
377
+ var SbbTimetableRowElement = (() => {
378
+ let _classSuper = SbbElement;
379
+ let _instanceExtraInitializers = [];
380
+ let _trip_decorators;
381
+ let _trip_initializers = [];
382
+ let _trip_extraInitializers = [];
383
+ let _price_decorators;
384
+ let _price_initializers = [];
385
+ let _price_extraInitializers = [];
386
+ let _disableAnimation_decorators;
387
+ let _disableAnimation_initializers = [];
388
+ let _disableAnimation_extraInitializers = [];
389
+ let _boarding_decorators;
390
+ let _boarding_initializers = [];
391
+ let _boarding_extraInitializers = [];
392
+ let _loadingTrip_decorators;
393
+ let _loadingTrip_initializers = [];
394
+ let _loadingTrip_extraInitializers = [];
395
+ let _a11yFootpath_decorators;
396
+ let _a11yFootpath_initializers = [];
397
+ let _a11yFootpath_extraInitializers = [];
398
+ let _loadingPrice_decorators;
399
+ let _loadingPrice_initializers = [];
400
+ let _loadingPrice_extraInitializers = [];
401
+ let _cardActionLabel_decorators;
402
+ let _cardActionLabel_initializers = [];
403
+ let _cardActionLabel_extraInitializers = [];
404
+ let _accessibilityExpanded_decorators;
405
+ let _accessibilityExpanded_initializers = [];
406
+ let _accessibilityExpanded_extraInitializers = [];
407
+ let _active_decorators;
408
+ let _active_initializers = [];
409
+ let _active_extraInitializers = [];
410
+ let _set_now_decorators;
411
+ return class SbbTimetableRowElement extends _classSuper {
412
+ constructor() {
413
+ super(...arguments);
414
+ this.#trip_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _trip_initializers, null));
415
+ this.#price_accessor_storage = (__runInitializers(this, _trip_extraInitializers), __runInitializers(this, _price_initializers, null));
416
+ this.#disableAnimation_accessor_storage = (__runInitializers(this, _price_extraInitializers), __runInitializers(this, _disableAnimation_initializers, false));
417
+ this.#boarding_accessor_storage = (__runInitializers(this, _disableAnimation_extraInitializers), __runInitializers(this, _boarding_initializers, null));
418
+ this.#loadingTrip_accessor_storage = (__runInitializers(this, _boarding_extraInitializers), __runInitializers(this, _loadingTrip_initializers, false));
419
+ this.#a11yFootpath_accessor_storage = (__runInitializers(this, _loadingTrip_extraInitializers), __runInitializers(this, _a11yFootpath_initializers, false));
420
+ this.#loadingPrice_accessor_storage = (__runInitializers(this, _a11yFootpath_extraInitializers), __runInitializers(this, _loadingPrice_initializers, false));
421
+ this.#cardActionLabel_accessor_storage = (__runInitializers(this, _loadingPrice_extraInitializers), __runInitializers(this, _cardActionLabel_initializers, ""));
422
+ this.#accessibilityExpanded_accessor_storage = (__runInitializers(this, _cardActionLabel_extraInitializers), __runInitializers(this, _accessibilityExpanded_initializers, false));
423
+ this.#active_accessor_storage = (__runInitializers(this, _accessibilityExpanded_extraInitializers), __runInitializers(this, _active_initializers, false));
424
+ this._now = (__runInitializers(this, _active_extraInitializers), null);
425
+ this._language = new SbbLanguageController(this);
426
+ }
427
+ static {
428
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
429
+ _trip_decorators = [property({ type: Object })];
430
+ _price_decorators = [property({ type: Object })];
431
+ _disableAnimation_decorators = [forceType(), property({
432
+ attribute: "disable-animation",
433
+ reflect: true,
434
+ type: Boolean
435
+ })];
436
+ _boarding_decorators = [property({ type: Object })];
437
+ _loadingTrip_decorators = [forceType(), property({
438
+ attribute: "loading-trip",
439
+ type: Boolean
440
+ })];
441
+ _a11yFootpath_decorators = [forceType(), property({
442
+ attribute: "a11y-footpath",
443
+ type: Boolean
444
+ })];
445
+ _loadingPrice_decorators = [forceType(), property({
446
+ attribute: "loading-price",
447
+ type: Boolean
448
+ })];
449
+ _cardActionLabel_decorators = [forceType(), property({ attribute: "card-action-label" })];
450
+ _accessibilityExpanded_decorators = [forceType(), property({
451
+ attribute: "accessibility-expanded",
452
+ type: Boolean
453
+ })];
454
+ _active_decorators = [forceType(), property({ type: Boolean })];
455
+ _set_now_decorators = [property()];
456
+ __esDecorate(this, null, _trip_decorators, {
457
+ kind: "accessor",
458
+ name: "trip",
459
+ static: false,
460
+ private: false,
461
+ access: {
462
+ has: (obj) => "trip" in obj,
463
+ get: (obj) => obj.trip,
464
+ set: (obj, value) => {
465
+ obj.trip = value;
466
+ }
467
+ },
468
+ metadata: _metadata
469
+ }, _trip_initializers, _trip_extraInitializers);
470
+ __esDecorate(this, null, _price_decorators, {
471
+ kind: "accessor",
472
+ name: "price",
473
+ static: false,
474
+ private: false,
475
+ access: {
476
+ has: (obj) => "price" in obj,
477
+ get: (obj) => obj.price,
478
+ set: (obj, value) => {
479
+ obj.price = value;
480
+ }
481
+ },
482
+ metadata: _metadata
483
+ }, _price_initializers, _price_extraInitializers);
484
+ __esDecorate(this, null, _disableAnimation_decorators, {
485
+ kind: "accessor",
486
+ name: "disableAnimation",
487
+ static: false,
488
+ private: false,
489
+ access: {
490
+ has: (obj) => "disableAnimation" in obj,
491
+ get: (obj) => obj.disableAnimation,
492
+ set: (obj, value) => {
493
+ obj.disableAnimation = value;
494
+ }
495
+ },
496
+ metadata: _metadata
497
+ }, _disableAnimation_initializers, _disableAnimation_extraInitializers);
498
+ __esDecorate(this, null, _boarding_decorators, {
499
+ kind: "accessor",
500
+ name: "boarding",
501
+ static: false,
502
+ private: false,
503
+ access: {
504
+ has: (obj) => "boarding" in obj,
505
+ get: (obj) => obj.boarding,
506
+ set: (obj, value) => {
507
+ obj.boarding = value;
508
+ }
509
+ },
510
+ metadata: _metadata
511
+ }, _boarding_initializers, _boarding_extraInitializers);
512
+ __esDecorate(this, null, _loadingTrip_decorators, {
513
+ kind: "accessor",
514
+ name: "loadingTrip",
515
+ static: false,
516
+ private: false,
517
+ access: {
518
+ has: (obj) => "loadingTrip" in obj,
519
+ get: (obj) => obj.loadingTrip,
520
+ set: (obj, value) => {
521
+ obj.loadingTrip = value;
522
+ }
523
+ },
524
+ metadata: _metadata
525
+ }, _loadingTrip_initializers, _loadingTrip_extraInitializers);
526
+ __esDecorate(this, null, _a11yFootpath_decorators, {
527
+ kind: "accessor",
528
+ name: "a11yFootpath",
529
+ static: false,
530
+ private: false,
531
+ access: {
532
+ has: (obj) => "a11yFootpath" in obj,
533
+ get: (obj) => obj.a11yFootpath,
534
+ set: (obj, value) => {
535
+ obj.a11yFootpath = value;
536
+ }
537
+ },
538
+ metadata: _metadata
539
+ }, _a11yFootpath_initializers, _a11yFootpath_extraInitializers);
540
+ __esDecorate(this, null, _loadingPrice_decorators, {
541
+ kind: "accessor",
542
+ name: "loadingPrice",
543
+ static: false,
544
+ private: false,
545
+ access: {
546
+ has: (obj) => "loadingPrice" in obj,
547
+ get: (obj) => obj.loadingPrice,
548
+ set: (obj, value) => {
549
+ obj.loadingPrice = value;
550
+ }
551
+ },
552
+ metadata: _metadata
553
+ }, _loadingPrice_initializers, _loadingPrice_extraInitializers);
554
+ __esDecorate(this, null, _cardActionLabel_decorators, {
555
+ kind: "accessor",
556
+ name: "cardActionLabel",
557
+ static: false,
558
+ private: false,
559
+ access: {
560
+ has: (obj) => "cardActionLabel" in obj,
561
+ get: (obj) => obj.cardActionLabel,
562
+ set: (obj, value) => {
563
+ obj.cardActionLabel = value;
564
+ }
565
+ },
566
+ metadata: _metadata
567
+ }, _cardActionLabel_initializers, _cardActionLabel_extraInitializers);
568
+ __esDecorate(this, null, _accessibilityExpanded_decorators, {
569
+ kind: "accessor",
570
+ name: "accessibilityExpanded",
571
+ static: false,
572
+ private: false,
573
+ access: {
574
+ has: (obj) => "accessibilityExpanded" in obj,
575
+ get: (obj) => obj.accessibilityExpanded,
576
+ set: (obj, value) => {
577
+ obj.accessibilityExpanded = value;
578
+ }
579
+ },
580
+ metadata: _metadata
581
+ }, _accessibilityExpanded_initializers, _accessibilityExpanded_extraInitializers);
582
+ __esDecorate(this, null, _active_decorators, {
583
+ kind: "accessor",
584
+ name: "active",
585
+ static: false,
586
+ private: false,
587
+ access: {
588
+ has: (obj) => "active" in obj,
589
+ get: (obj) => obj.active,
590
+ set: (obj, value) => {
591
+ obj.active = value;
592
+ }
593
+ },
594
+ metadata: _metadata
595
+ }, _active_initializers, _active_extraInitializers);
596
+ __esDecorate(this, null, _set_now_decorators, {
597
+ kind: "setter",
598
+ name: "now",
599
+ static: false,
600
+ private: false,
601
+ access: {
602
+ has: (obj) => "now" in obj,
603
+ set: (obj, value) => {
604
+ obj.now = value;
605
+ }
606
+ },
607
+ metadata: _metadata
608
+ }, null, _instanceExtraInitializers);
609
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, {
610
+ enumerable: true,
611
+ configurable: true,
612
+ writable: true,
613
+ value: _metadata
614
+ });
615
+ }
616
+ static {
617
+ this.elementName = "sbb-timetable-row";
618
+ }
619
+ static {
620
+ this.styles = [boxSizingStyles, timetable_row_default];
621
+ }
622
+ #trip_accessor_storage;
623
+ /** The trip Prop. */
624
+ get trip() {
625
+ return this.#trip_accessor_storage;
626
+ }
627
+ set trip(value) {
628
+ this.#trip_accessor_storage = value;
629
+ }
630
+ #price_accessor_storage;
631
+ /** The price Prop, which consists of the data for the badge. */
632
+ get price() {
633
+ return this.#price_accessor_storage;
634
+ }
635
+ set price(value) {
636
+ this.#price_accessor_storage = value;
637
+ }
638
+ #disableAnimation_accessor_storage;
639
+ /** This will be forwarded to the sbb-pearl-chain component - if true the position won't be animated. */
640
+ get disableAnimation() {
641
+ return this.#disableAnimation_accessor_storage;
642
+ }
643
+ set disableAnimation(value) {
644
+ this.#disableAnimation_accessor_storage = value;
645
+ }
646
+ #boarding_accessor_storage;
647
+ /** This will be forwarded to the notices section */
648
+ get boarding() {
649
+ return this.#boarding_accessor_storage;
650
+ }
651
+ set boarding(value) {
652
+ this.#boarding_accessor_storage = value;
653
+ }
654
+ #loadingTrip_accessor_storage;
655
+ /**
656
+ * The loading state -
657
+ * when this is true it will be render skeleton with an idling animation
658
+ */
659
+ get loadingTrip() {
660
+ return this.#loadingTrip_accessor_storage;
661
+ }
662
+ set loadingTrip(value) {
663
+ this.#loadingTrip_accessor_storage = value;
664
+ }
665
+ #a11yFootpath_accessor_storage;
666
+ /**
667
+ * The Footpath attribute for rendering different icons
668
+ * true: render a11y-icon
669
+ * false: render walk-icon
670
+ * default: render walk-icon
671
+ */
672
+ get a11yFootpath() {
673
+ return this.#a11yFootpath_accessor_storage;
674
+ }
675
+ set a11yFootpath(value) {
676
+ this.#a11yFootpath_accessor_storage = value;
677
+ }
678
+ #loadingPrice_accessor_storage;
679
+ /**
680
+ * The loading state -
681
+ * when this is true it will be render skeleton with an idling animation
682
+ */
683
+ get loadingPrice() {
684
+ return this.#loadingPrice_accessor_storage;
685
+ }
686
+ set loadingPrice(value) {
687
+ this.#loadingPrice_accessor_storage = value;
688
+ }
689
+ #cardActionLabel_accessor_storage;
690
+ /**
691
+ * Hidden label for the card action. It overrides the automatically generated accessibility text for the component. Use this prop to provide custom accessibility information for the component.
692
+ */
693
+ get cardActionLabel() {
694
+ return this.#cardActionLabel_accessor_storage;
695
+ }
696
+ set cardActionLabel(value) {
697
+ this.#cardActionLabel_accessor_storage = value;
698
+ }
699
+ #accessibilityExpanded_accessor_storage;
700
+ /** This will be forwarded to the sbb-card component as aria-expanded. */
701
+ get accessibilityExpanded() {
702
+ return this.#accessibilityExpanded_accessor_storage;
703
+ }
704
+ set accessibilityExpanded(value) {
705
+ this.#accessibilityExpanded_accessor_storage = value;
706
+ }
707
+ #active_accessor_storage;
708
+ /** When this prop is true the sbb-card will be in the active state. */
709
+ get active() {
710
+ return this.#active_accessor_storage;
711
+ }
712
+ set active(value) {
713
+ this.#active_accessor_storage = value;
714
+ }
715
+ /**
716
+ * A configured date which acts as the current date instead of the real current date.
717
+ * Only recommended for testing purposes.
718
+ */
719
+ set now(value) {
720
+ this._now = defaultDateAdapter.getValidDateOrNull(defaultDateAdapter.deserialize(value));
721
+ }
722
+ get now() {
723
+ return this._now ?? /* @__PURE__ */ new Date();
724
+ }
725
+ willUpdate(changedProperties) {
726
+ super.willUpdate(changedProperties);
727
+ if (changedProperties.has("loadingTrip")) setOrRemoveAttribute(this, "role", !this.loadingTrip ? "rowgroup" : null);
728
+ }
729
+ /** The skeleton render function for the loading state */
730
+ _renderSkeleton() {
731
+ return html`
732
+ <sbb-card class="sbb-loading sbb-card-spacing-4x-xxs">
733
+ ${this.loadingPrice ? html`<div class="sbb-loading__badge" slot="badge"></div>` : nothing}
734
+ <div class="sbb-loading__wrapper">
735
+ <div class="sbb-loading__row"></div>
736
+ <div class="sbb-loading__row"></div>
737
+ <div class="sbb-loading__row"></div>
738
+ </div>
739
+ </sbb-card>
740
+ `;
741
+ }
742
+ _getRideLegs() {
743
+ return this.trip?.legs?.filter((leg) => isRideLeg(leg)) ?? [];
744
+ }
745
+ _getQuayTypeStrings() {
746
+ if (!this.trip.summary?.product) return null;
747
+ const rideLegs = this._getRideLegs();
748
+ const short = this.trip.summary.product?.vehicleMode === "TRAIN" ? rideLegs[0].serviceJourney.quayTypeShortName || "" : rideLegs[0].serviceJourney.quayTypeName || "";
749
+ return {
750
+ long: i18nFromPlatform[this._language.current] + " " + short,
751
+ short
752
+ };
753
+ }
754
+ /** map Quay */
755
+ _renderQuayType() {
756
+ if (!this.trip.summary?.product) return void 0;
757
+ const quayTypeStrings = this._getQuayTypeStrings();
758
+ return html`
759
+ <span class="sbb-timetable__row--quay">
760
+ <span class="sbb-screen-reader-only">${quayTypeStrings?.long}&nbsp;</span>
761
+ <span class="sbb-timetable__row--quay-type" aria-hidden="true"
762
+ >${quayTypeStrings?.short}</span
763
+ >
764
+ </span>
765
+ `;
766
+ }
767
+ _handleHimCus(trip) {
768
+ const { situations } = trip || {};
769
+ const sortedSituations = situations && sortSituation(situations);
770
+ const cus = getCus(trip, this._language.current);
771
+ return {
772
+ cus: Object.keys(cus)?.length ? cus : null,
773
+ him: situations?.length ? getHimIcon(sortedSituations[0]) : null
774
+ };
775
+ }
776
+ _getAccessibilityText(trip) {
777
+ const { summary, legs, notices } = trip || {};
778
+ const { departureWalk, arrivalWalk, departure, arrival, product, direction, occupancy, duration } = summary || {};
779
+ const { departureTimeAttribute, arrivalTimeAttribute } = getDepartureArrivalTimeAttribute(legs, departureWalk || 0, arrivalWalk || 0, this._language.current, this.a11yFootpath);
780
+ const rideLegs = this._getRideLegs();
781
+ const departureTime = departure?.time ? removeTimezoneFromISOTimeString(departure.time) : void 0;
782
+ const arrivalTime = arrival?.time ? removeTimezoneFromISOTimeString(arrival.time) : void 0;
783
+ const departureWalkText = departureTimeAttribute ? `${departureTimeAttribute.text} ${departureTimeAttribute.duration}, ` : "";
784
+ const arrivalWalkText = arrivalTimeAttribute ? `${arrivalTimeAttribute.text} ${arrivalTimeAttribute.duration}, ` : "";
785
+ const departureTimeText = departureTime ? `${i18nDeparture[this._language.current]}: ${format(departureTime, "HH:mm")}, ` : "";
786
+ const getDepartureQuayText = () => {
787
+ if (!departure?.quayFormatted) return "";
788
+ return `${departure?.quayChanged ? `${i18nNew[this._language.current]} ` : ""}${this._getQuayTypeStrings()?.long} ${departure?.quayFormatted}, `;
789
+ };
790
+ const meansOfTransportText = product && product.vehicleMode ? i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && `${i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}, ` : "";
791
+ const vehicleSubModeText = product?.vehicleSubModeShortName ? `${product.vehicleSubModeShortName} ${product.line || ""}, ` : "";
792
+ const directionText = `${i18nDirection[this._language.current]} ${direction}, `;
793
+ const himCus = this._handleHimCus(trip);
794
+ const cusText = himCus?.cus?.text ? `${i18nRealTimeInfo[this._language.current]}: ${himCus?.cus?.text}, ` : "";
795
+ const himText = himCus?.him?.text ? `${i18nRealTimeInfo[this._language.current]}: ${himCus?.him?.text}, ` : "";
796
+ const boardingText = this.boarding ? `${this.boarding.text}, ` : "";
797
+ const priceText = `${this.price?.isDiscount ? i18nSupersaver[this._language.current] : ""} ${this.price?.text && this.price?.price ? (this.price?.text || "") + " " + (this.price?.price || "") + ", " : ""}`;
798
+ const transferProcedures = rideLegs.length > 2 ? `${rideLegs.length - 1} ${i18nTransferProcedures[this._language.current]}, ` : rideLegs.length > 1 ? `${rideLegs.length - 1} ${i18nTransferProcedure[this._language.current]}, ` : "";
799
+ const arrivalTimeText = arrivalTime ? `${i18nArrival[this._language.current]}: ${format(arrivalTime, "HH:mm")}, ` : "";
800
+ let occupancyText = "";
801
+ if (occupancy) {
802
+ if (occupancy.firstClass && occupancy.firstClass !== "UNKNOWN") occupancyText += `${i18nClass.first[this._language.current]} ${i18nOccupancy[occupancy.firstClass.toLowerCase()]?.[this._language.current]}.`;
803
+ if (occupancy.secondClass && occupancy.secondClass !== "UNKNOWN") occupancyText += ` ${i18nClass.second[this._language.current]} ${i18nOccupancy[occupancy.secondClass.toLowerCase()]?.[this._language.current]}.`;
804
+ }
805
+ const attributes = notices && handleNotices(notices).length && handleNotices(notices)?.map((notice, index) => index < 4 && notice.text?.template).join(", ") + ", ";
806
+ const attributesText = attributes ? `${i18nTravelhints[this._language.current]}: ${attributes}` : "";
807
+ const durationText = !!duration && duration > 0 ? `${i18nTripDuration[this._language.current]} ${durationToTime(duration, this._language.current).long}, ` : "";
808
+ return [
809
+ departureWalkText,
810
+ departureTimeText,
811
+ getDepartureQuayText(),
812
+ meansOfTransportText,
813
+ vehicleSubModeText,
814
+ directionText,
815
+ cusText,
816
+ boardingText,
817
+ priceText,
818
+ cusText ? "" : himText,
819
+ arrivalTimeText,
820
+ arrivalWalkText,
821
+ durationText,
822
+ transferProcedures,
823
+ occupancyText,
824
+ attributesText
825
+ ].map((e) => e?.trim()).filter((e) => e && e.length > 0).join(" ");
826
+ }
827
+ render() {
828
+ if (this.loadingTrip) return this._renderSkeleton();
829
+ const { legs, id, notices, summary } = this.trip || {};
830
+ const { product, direction, departureWalk, departure, arrival, arrivalWalk, occupancy, duration } = summary || {};
831
+ const himCus = this._handleHimCus(this.trip);
832
+ const hasHimCus = !!himCus.cus || !!himCus.him;
833
+ const noticeAttributes = notices && handleNotices(notices);
834
+ const durationObj = duration ? durationToTime(duration, this._language.current) : null;
835
+ return html`
836
+ <sbb-card class="sbb-card-spacing-4x-xxs" id=${id}>
837
+ <sbb-card-button
838
+ ?active=${this.active}
839
+ aria-expanded=${this.accessibilityExpanded ? "true" : nothing}
840
+ >
841
+ ${this.cardActionLabel ? this.cardActionLabel : this._getAccessibilityText(this.trip)}
842
+ </sbb-card-button>
843
+ ${this.loadingPrice ? html`<div class="sbb-loading__badge" slot="badge"></div>` : nothing}
844
+ ${this.price && !this.loadingPrice ? html`<sbb-card-badge color=${this.price.isDiscount ? "charcoal" : "white"}>
845
+ ${this.price.isDiscount ? html`<span aria-hidden="true">
846
+ %<span class="sbb-screen-reader-only"
847
+ >${i18nSupersaver[this._language.current]}</span
848
+ >
849
+ </span>` : nothing}
850
+ ${this.price.text ? html`<span>${this.price.text}</span>` : nothing}
851
+ ${this.price.price ? html`<span>${this.price.price}</span>` : nothing}
852
+ </sbb-card-badge>` : nothing}
853
+ <div class="sbb-timetable__row" role="row">
854
+ <div class="sbb-timetable__row-header" role="gridcell">
855
+ <div class="sbb-timetable__row-details">
856
+ ${product?.corporateIdentityPictogram && html`<span class="sbb-timetable__row-transport-wrapper">
857
+ <sbb-icon
858
+ class="sbb-timetable__row-transport-icon"
859
+ name="picto:${product.corporateIdentityPictogram}"
860
+ ></sbb-icon>
861
+ <span class="sbb-screen-reader-only">
862
+ ${product && product.vehicleMode && i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}
863
+ &nbsp;
864
+ </span>
865
+ </span>`}
866
+ ${product && (product.corporateIdentityIcon ? renderIconProduct(product.corporateIdentityIcon, product.name) : product.vehicleSubModeShortName && renderStringProduct(product.vehicleSubModeShortName, product?.line))}
867
+ </div>
868
+ ${direction ? html`<p>${`${i18nDirection[this._language.current]} ${direction}`}</p>` : nothing}
869
+ </div>
870
+ <sbb-pearl-chain-time
871
+ role="gridcell"
872
+ .legs=${legs}
873
+ .departureTime=${departure?.time}
874
+ .arrivalTime=${arrival?.time}
875
+ .departureWalk=${departureWalk}
876
+ .arrivalWalk=${arrivalWalk}
877
+ ?disable-animation=${this.disableAnimation}
878
+ ?a11y-footpath=${this.a11yFootpath}
879
+ .now=${this.now}
880
+ ></sbb-pearl-chain-time>
881
+ <div class="sbb-timetable__row-footer" role="gridcell">
882
+ ${product && departure?.quayFormatted ? html`<span
883
+ class=${departure?.quayChanged ? `sbb-timetable__row-quay--changed` : nothing}
884
+ >
885
+ <span class="sbb-screen-reader-only">
886
+ ${`${i18nDeparture[this._language.current]} ${departure?.quayChanged ? i18nNew[this._language.current] : ""}`}
887
+ &nbsp;
888
+ </span>
889
+ ${this._renderQuayType()} ${departure?.quayFormatted}
890
+ </span>` : nothing}
891
+ ${occupancy?.firstClass && occupancy?.firstClass !== "UNKNOWN" || occupancy?.secondClass && occupancy.secondClass !== "UNKNOWN" ? html`<sbb-timetable-occupancy
892
+ .firstClassOccupancy=${occupancy?.firstClass?.toLowerCase()}
893
+ .secondClassOccupancy=${occupancy?.secondClass?.toLowerCase()}
894
+ ></sbb-timetable-occupancy>` : nothing}
895
+ ${noticeAttributes && noticeAttributes.length || this.boarding ? html`<ul class="sbb-timetable__row-hints" role="list">
896
+ ${noticeAttributes?.map((notice, index) => index < 4 ? html`<li>
897
+ <sbb-icon
898
+ class="sbb-travel-hints__item"
899
+ name=${"sa-" + notice.name?.toLowerCase()}
900
+ ></sbb-icon>
901
+ <span class="sbb-screen-reader-only">${notice.text?.template}</span>
902
+ </li>` : nothing)}
903
+ ${this.boarding ? html`<li>
904
+ <sbb-icon
905
+ class="sbb-travel-hints__item"
906
+ name=${this.boarding?.name}
907
+ aria-label=${this.boarding?.text}
908
+ aria-hidden="false"
909
+ ></sbb-icon>
910
+ </li>` : nothing}
911
+ </ul>` : nothing}
912
+ ${duration && duration > 0 ? html`<time>
913
+ <span class="sbb-screen-reader-only">
914
+ ${`${i18nTripDuration[this._language.current]} ${durationObj.long}`}
915
+ </span>
916
+ <span aria-hidden="true">${durationObj.short}</span>
917
+ </time>` : nothing}
918
+ ${hasHimCus && (himCus.cus || himCus.him) ? html`<span class="sbb-timetable__row-warning">
919
+ <sbb-icon name=${(himCus.cus || himCus.him).name}></sbb-icon>
920
+ <span class="sbb-screen-reader-only">${(himCus.cus || himCus.him).text}</span>
921
+ </span>` : nothing}
922
+ </div>
923
+ </div>
924
+ </sbb-card>
925
+ `;
926
+ }
927
+ };
928
+ })();
929
+ //#endregion
930
+ export { handleNotices as a, sortSituation as c, getHimIcon as i, filterNotices as n, renderIconProduct as o, getCus as r, renderStringProduct as s, SbbTimetableRowElement as t };
931
+
932
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXRhYmxlLXJvdy5jb21wb25lbnQtWTV3OHZFd1AuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzLWV4cGVyaW1lbnRhbC90aW1ldGFibGUtcm93L3RpbWV0YWJsZS1yb3cuc2Nzcz9saXQmaW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzLWV4cGVyaW1lbnRhbC90aW1ldGFibGUtcm93L3RpbWV0YWJsZS1yb3cuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgLS1zYmItdGltZXRhYmxlLXJvdy1nYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTJ4KTtcbiAgLS1zYmItdGltZXRhYmxlLXJvdy1oZWlnaHQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgyNSl9O1xuICAtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodC1oZWFkZXI6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgyMCl9O1xuICAtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodC1mb290ZXI6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxNil9O1xuICAtLXNiYi10aW1ldGFibGUtcm93LXNrZWxldG9uLXB1bHNlLWR1cmF0aW9uOiAxODAwbXM7XG5cbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbjpob3N0KFtkaXNhYmxlLWFuaW1hdGlvbl0pIHtcbiAgLS1zYmItdGltZXRhYmxlLXJvdy1za2VsZXRvbi1wdWxzZS1kdXJhdGlvbjogMDtcbn1cblxuLy8gb3ZlcnJpZGUgaWNvbnMgc2l6ZXNcbi5zYmItdGltZXRhYmxlX19yb3ctdHJhbnNwb3J0LWljb24ge1xuICAtLXNiYi1pY29uLXN2Zy13aWR0aDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDIwKX07XG4gIC0tc2JiLWljb24tc3ZnLWhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDIwKX07XG59XG5cbi8vIG92ZXJyaWRlIGljb25zIHNpemVzXG4uc2JiLXRyYXZlbC1oaW50c19faXRlbSB7XG4gIC0tc2JiLWljb24tc3ZnLWhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDE0KX07XG59XG5cbi5zYmItc2NyZWVuLXJlYWRlci1vbmx5IHtcbiAgQGluY2x1ZGUgc2JiLnNjcmVlbi1yZWFkZXItb25seTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy0tcXVheSB7XG4gIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xeCk7XG59XG5cbi5zYmItdGltZXRhYmxlX19yb3ctLXF1YXktdHlwZSB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuXG4vLyByZXNldHMgbGlzdHNcbnVsIHtcbiAgQGluY2x1ZGUgc2JiLmxpc3QtcmVzZXQ7XG5cbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG59XG5cbmxpIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LXRyYW5zcG9ydG51bWJlcixcbi5zYmItdGltZXRhYmxlX19yb3ctdGltZSB7XG4gIEBpbmNsdWRlIHNiYi50ZXh0LXMtLWJvbGQ7XG5cbiAgbGluZS1oZWlnaHQ6IHVuc2V0O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi5zYmItdGltZXRhYmxlX19yb3cge1xuICBAaW5jbHVkZSBzYmIudGV4dC1zLS1yZWd1bGFyO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogdmFyKC0tc2JiLXRpbWV0YWJsZS1yb3ctZ2FwKTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy1oZWFkZXIsXG4uc2JiLXRpbWV0YWJsZV9fcm93LWZvb3RlciB7XG4gIC8vIER1ZSB0byBhIGJ1ZyBpbiBTYWZhcmkgd2hpY2ggZGlzcGxheXMgc2tlbGV0b24gYW5pbWF0aW9uIGV2ZW4gb24gbG9hZGVkIGNvbnRlbnQsIHdlIG5lZWQgdG8gbWFudWFsbHkgZGlzYWJsZSBhbmltYXRpb24uXG4gIGFuaW1hdGlvbjogbm9uZTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTJ4KTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodC1oZWFkZXIpO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWRldGFpbHMsXG4uc2JiLXRpbWV0YWJsZV9fcm93LWhpbnRzIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWhlYWRlciBwIHtcbiAgQGluY2x1ZGUgc2JiLmVsbGlwc2lzO1xuXG4gIG1hcmdpbjogMDtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTJ4KTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodC1mb290ZXIpO1xuXG4gID4gc3BhbiB7XG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICB9XG5cbiAgOm9ubHktY2hpbGQge1xuICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IGF1dG87XG4gIH1cbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy1xdWF5LS1jaGFuZ2VkIHtcbiAgY29sb3I6IHZhcigtLXNiYi1jb2xvci1wcmltYXJ5KTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQtd3JhcHBlcixcbi5zYmItdGltZXRhYmxlX19yb3ctd2FybmluZyB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xufVxuXG4uc2JiLWxvYWRpbmcge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnNiYi1sb2FkaW5nX193cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0yeCk7XG59XG5cbi5zYmItbG9hZGluZ19fcm93IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi1ib3JkZXItcmFkaXVzLTF4KTtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1oZWlnaHQpO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICBoZWlnaHQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgyOCl9O1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGJvcmRlcjogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0xeCkgc29saWQgQnV0dG9uQm9yZGVyICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLnNiYi1sb2FkaW5nX19yb3csXG4uc2JiLWxvYWRpbmdfX2JhZGdlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItNCk7XG4gIGFuaW1hdGlvbjogc2tlbGV0b24tcHVsc2UgdmFyKC0tc2JiLXRpbWV0YWJsZS1yb3ctc2tlbGV0b24tcHVsc2UtZHVyYXRpb24pIGVhc2Utb3V0IGluZmluaXRlO1xufVxuXG4uc2JiLWxvYWRpbmdfX3JvdzpmaXJzdC1vZi10eXBlIHtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1oZWlnaHQtaGVhZGVyKTtcbiAgd2lkdGg6IDUwJTtcbn1cblxuLnNiYi1sb2FkaW5nX19yb3c6bGFzdC1vZi10eXBlIHtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1oZWlnaHQtZm9vdGVyKTtcbn1cblxuLnNiYi1sb2FkaW5nX19iYWRnZSB7XG4gIG1hcmdpbi1pbmxpbmU6IGF1dG8gY2FsYyh2YXIoLS1zYmItc3BhY2luZy1maXhlZC0zeCkgKiAtMSk7XG4gIHBhZGRpbmctaW5saW5lLWVuZDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNngpO1xuICBib3JkZXItZW5kLXN0YXJ0LXJhZGl1czogdmFyKC0tc2JiLWNhcmQtYmFkZ2UtYm9yZGVyLXJhZGl1cyk7XG4gIHRyYW5zZm9ybTogdmFyKC0tc2JiLWNhcmQtYmFkZ2Utc2tldyk7XG4gIHdpZHRoOiAje3NiYi5weC10by1yZW0tYnVpbGQoMTE1KX07XG4gIGhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDIwKX07XG59XG5cbkBrZXlmcmFtZXMgc2tlbGV0b24tcHVsc2Uge1xuICAwJSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItNCk7XG4gIH1cblxuICAxNyUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTQpO1xuICB9XG5cbiAgNTAlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci0zKTtcbiAgfVxuXG4gIDY3JSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMyk7XG4gIH1cblxuICAxMDAlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci00KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2JiRWxlbWVudCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGRlZmF1bHREYXRlQWRhcHRlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHNldE9yUmVtb3ZlQXR0cmlidXRlIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kb20uanMnO1xuaW1wb3J0IHtcbiAgaTE4bkFycml2YWwsXG4gIGkxOG5DbGFzcyxcbiAgaTE4bkRlcGFydHVyZSxcbiAgaTE4bkRpcmVjdGlvbixcbiAgaTE4bkZyb21QbGF0Zm9ybSxcbiAgaTE4bk1lYW5zT2ZUcmFuc3BvcnQsXG4gIGkxOG5OZXcsXG4gIGkxOG5PY2N1cGFuY3ksXG4gIGkxOG5SZWFsVGltZUluZm8sXG4gIGkxOG5TdXBlcnNhdmVyLFxuICBpMThuVHJhbnNmZXJQcm9jZWR1cmUsXG4gIGkxOG5UcmFuc2ZlclByb2NlZHVyZXMsXG4gIGkxOG5UcmF2ZWxoaW50cyxcbiAgaTE4blRyaXBEdXJhdGlvbixcbiAgaTE4blRyaXBRdWF5Q2hhbmdlLFxufSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPY2N1cGFuY3kgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9zdHlsZXMuanMnO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGR1cmF0aW9uVG9UaW1lLCByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nIH0gZnJvbSAnLi4vY29yZS9kYXRldGltZS50cyc7XG5pbXBvcnQgdHlwZSB7IElUcmlwSXRlbSwgTm90aWNlLCBQdFJpZGVMZWcsIFB0U2l0dWF0aW9uIH0gZnJvbSAnLi4vY29yZS90aW1ldGFibGUudHMnO1xuaW1wb3J0IHsgZ2V0RGVwYXJ0dXJlQXJyaXZhbFRpbWVBdHRyaWJ1dGUsIGlzUmlkZUxlZyB9IGZyb20gJy4uL2NvcmUvdGltZXRhYmxlLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vdGltZXRhYmxlLXJvdy5zY3NzP2xpdCZpbmxpbmUnO1xuXG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NhcmQuanMnO1xuaW1wb3J0ICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9pY29uLmpzJztcbmltcG9ydCAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvdGltZXRhYmxlLW9jY3VwYW5jeS5qcyc7XG5pbXBvcnQgJy4uL3BlYXJsLWNoYWluLXRpbWUudHMnO1xuXG4vKiogSGltQ3VzIGludGVyZmFjZSBmb3IgbWFwcGVkIGljb24gbmFtZSBhbmQgdGV4dCAqL1xuZXhwb3J0IGludGVyZmFjZSBIaW1DdXMge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRleHQ/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogQm9hcmRpbmcgaWNvbiBpbnRlcmZhY2UgZm9yIG1hcHBlZCBpY29uIG5hbWUgYW5kIHRleHQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9hcmRpbmcge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmljZSB7XG4gIHByaWNlPzogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nO1xuICBpc0Rpc2NvdW50PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbmRlckljb25Qcm9kdWN0ID0gKGljb246IHN0cmluZywgbmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZXN1bHQgPT4ge1xuICByZXR1cm4gaHRtbGA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnRcIj5cbiAgICA8c2JiLWljb24gbmFtZT0ke2ljb259Pjwvc2JiLWljb24+XG4gICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+JHtuYW1lfTwvc3Bhbj5cbiAgPC9zcGFuPmA7XG59O1xuXG5leHBvcnQgY29uc3QgcmVuZGVyU3RyaW5nUHJvZHVjdCA9ICh2ZWhpY2xlTmFtZTogc3RyaW5nLCBsaW5lPzogc3RyaW5nIHwgbnVsbCk6IFRlbXBsYXRlUmVzdWx0ID0+IHtcbiAgY29uc3Qgc3BhY2UgPSBbJ00nLCAnQicsICdUJ10uaW5jbHVkZXModmVoaWNsZU5hbWUpID8gJyAnIDogJyc7XG4gIHJldHVybiBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LXRyYW5zcG9ydG51bWJlclwiPlxuICAgICR7bGluZSAhPT0gbnVsbCA/IHZlaGljbGVOYW1lICsgc3BhY2UgKyBsaW5lIDogdmVoaWNsZU5hbWV9XG4gIDwvc3Bhbj5gO1xufTtcblxuY29uc3QgZ2V0UmVhY2hhYmxlVGV4dCA9IChsZWdzOiBQdFJpZGVMZWdbXSk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gbGVncz8uZmluZCgobGVnKSA9PiBsZWcuc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5yZWFjaGFibGVUZXh0KT8uc2VydmljZUpvdXJuZXlcbiAgICA/LnNlcnZpY2VBbHRlcmF0aW9uPy5yZWFjaGFibGVUZXh0O1xufTtcblxuY29uc3QgZ2V0RGVsYXlUZXh0ID0gKGxlZ3M6IFB0UmlkZUxlZ1tdKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9PiB7XG4gIHJldHVybiBsZWdzPy5maW5kKChsZWcpID0+IGxlZy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LmRlbGF5VGV4dCk/LnNlcnZpY2VKb3VybmV5XG4gICAgPy5zZXJ2aWNlQWx0ZXJhdGlvbj8uZGVsYXlUZXh0O1xufTtcblxuY29uc3QgZ2V0UmVkaXJlY3RlZFRleHQgPSAobGVnczogUHRSaWRlTGVnW10pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0+IHtcbiAgcmV0dXJuIGxlZ3M/LmZpbmQoKGxlZykgPT4gISFsZWcuc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5yZWRpcmVjdGVkVGV4dClcbiAgICA/LnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVkaXJlY3RlZFRleHQ7XG59O1xuXG5jb25zdCBnZXRVbnBsYW5uZWRTdG9wID0gKGxlZ3M6IFB0UmlkZUxlZ1tdKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9PiB7XG4gIHJldHVybiBsZWdzPy5maW5kKChsZWcpID0+ICEhbGVnLnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8udW5wbGFubmVkU3RvcFBvaW50c1RleHQpXG4gICAgPy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LnVucGxhbm5lZFN0b3BQb2ludHNUZXh0O1xufTtcblxuZXhwb3J0IGNvbnN0IHNvcnRTaXR1YXRpb24gPSAoc2l0dWF0aW9uczogUHRTaXR1YXRpb25bXSk6IFB0U2l0dWF0aW9uW10gPT4ge1xuICBjb25zdCBwcmlvcml0aWVzID0ge1xuICAgIERJU1RVUkJBTkNFOiAwLFxuICAgIElORk9STUFUSU9OOiAxLFxuICAgIERFTEFZOiAyLFxuICAgIFRSQUlOX1JFUExBQ0VNRU5UX0JZX0JVUzogMyxcbiAgICBDT05TVFJVQ1RJT05fU0lURTogNCxcbiAgICBFTkRfTUVTU0FHRTogNSxcbiAgfTtcblxuICByZXR1cm4gWy4uLnNpdHVhdGlvbnNdPy5zb3J0KFxuICAgIChhOiBQdFNpdHVhdGlvbiwgYjogUHRTaXR1YXRpb24pID0+IHByaW9yaXRpZXNbYS5jYXVzZSFdIC0gcHJpb3JpdGllc1tiLmNhdXNlIV0sXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGltSWNvbiA9IChzaXR1YXRpb246IFB0U2l0dWF0aW9uKTogSGltQ3VzID0+IHtcbiAgc3dpdGNoIChzaXR1YXRpb24/LmNhdXNlKSB7XG4gICAgY2FzZSAnRElTVFVSQkFOQ0UnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ2Rpc3J1cHRpb24nLFxuICAgICAgICB0ZXh0OiBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzPy5sZW5ndGggPyBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnRpdGxlIDogJycsXG4gICAgICB9O1xuICAgIGNhc2UgJ0lORk9STUFUSU9OJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdpbmZvJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcy5sZW5ndGggPyBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnRpdGxlIDogJycsXG4gICAgICB9O1xuICAgIGNhc2UgJ0RFTEFZJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdkZWxheScsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdUUkFJTl9SRVBMQUNFTUVOVF9CWV9CVVMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ3JlcGxhY2VtZW50YnVzJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcy5sZW5ndGggPyBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnRpdGxlIDogJycsXG4gICAgICB9O1xuICAgIGNhc2UgJ0NPTlNUUlVDVElPTl9TSVRFJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdjb25zdHJ1Y3Rpb24nLFxuICAgICAgICB0ZXh0OiBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzLmxlbmd0aCA/IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXNbMF0udGl0bGUgOiAnJyxcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdpbmZvJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcy5sZW5ndGggPyBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnRpdGxlIDogJycsXG4gICAgICB9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VzID0gKHRyaXA6IElUcmlwSXRlbSwgY3VycmVudExhbmd1YWdlOiBzdHJpbmcpOiBIaW1DdXMgPT4ge1xuICBjb25zdCB7IHN1bW1hcnksIGxlZ3MgfSA9IHRyaXAgfHwge307XG4gIGNvbnN0IHJpZGVMZWdzID0gbGVncz8uZmlsdGVyKChsZWcpID0+IGlzUmlkZUxlZyhsZWcpKSBhcyBQdFJpZGVMZWdbXTtcbiAgY29uc3QgeyB0cmlwU3RhdHVzIH0gPSBzdW1tYXJ5IHx8IHt9O1xuXG4gIGlmICh0cmlwU3RhdHVzPy5jYW5jZWxsZWQgfHwgdHJpcFN0YXR1cz8ucGFydGlhbGx5Q2FuY2VsbGVkKVxuICAgIHJldHVybiB7IG5hbWU6ICdjYW5jZWxsYXRpb24nLCB0ZXh0OiB0cmlwU3RhdHVzPy5jYW5jZWxsZWRUZXh0IH07XG4gIGlmIChnZXRSZWFjaGFibGVUZXh0KHJpZGVMZWdzKSlcbiAgICByZXR1cm4geyBuYW1lOiAnbWlzc2VkLWNvbm5lY3Rpb24nLCB0ZXh0OiBnZXRSZWFjaGFibGVUZXh0KHJpZGVMZWdzKSB9O1xuICBpZiAodHJpcFN0YXR1cz8uYWx0ZXJuYXRpdmUpIHJldHVybiB7IG5hbWU6ICdhbHRlcm5hdGl2ZScsIHRleHQ6IHRyaXBTdGF0dXMuYWx0ZXJuYXRpdmVUZXh0IH07XG4gIGlmIChnZXRSZWRpcmVjdGVkVGV4dChyaWRlTGVncykpIHJldHVybiB7IG5hbWU6ICdyZXJvdXRlJywgdGV4dDogZ2V0UmVkaXJlY3RlZFRleHQocmlkZUxlZ3MpIH07XG4gIGlmIChnZXRVbnBsYW5uZWRTdG9wKHJpZGVMZWdzKSkgcmV0dXJuIHsgbmFtZTogJ2FkZC1zdG9wJywgdGV4dDogZ2V0VW5wbGFubmVkU3RvcChyaWRlTGVncykgfTtcbiAgaWYgKHRyaXBTdGF0dXM/LmRlbGF5ZWQgfHwgdHJpcFN0YXR1cz8uZGVsYXllZFVua25vd24pXG4gICAgcmV0dXJuIHsgbmFtZTogJ2RlbGF5JywgdGV4dDogZ2V0RGVsYXlUZXh0KHJpZGVMZWdzKSB9O1xuICBpZiAodHJpcFN0YXR1cz8ucXVheUNoYW5nZWQpIHtcbiAgICBjb25zdCBkZXBhcnR1cmUgPSByaWRlTGVnc1swXS5kZXBhcnR1cmU7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdwbGF0Zm9ybS1jaGFuZ2UnLFxuICAgICAgdGV4dDogZGVwYXJ0dXJlLnF1YXlDaGFuZ2VkID8gZGVwYXJ0dXJlLnF1YXlDaGFuZ2VkVGV4dCA6IGkxOG5UcmlwUXVheUNoYW5nZVtjdXJyZW50TGFuZ3VhZ2VdLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge30gYXMgSGltQ3VzO1xufTtcblxuY29uc3QgZmluZEFuZFJlcGxhY2VOb3RpY2UgPSAobm90aWNlczogTm90aWNlW10pOiBOb3RpY2UgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCByZXNlcnZhdGlvbk5vdGljZSA9IFsnUlInLCAnUksnLCAnUkMnLCAnUkwnLCAnUk0nLCAnUlMnLCAnUlUnLCAnWFAnLCAnWFInLCAnWFQnXTtcblxuICByZXR1cm4gbm90aWNlcy5yZWR1Y2UoKGZvdW5kTm90aWNlOiBOb3RpY2UgfCB1bmRlZmluZWQsIG5vdGljZTogTm90aWNlKTogTm90aWNlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAoZm91bmROb3RpY2UpIHJldHVybiBmb3VuZE5vdGljZTtcbiAgICBpZiAocmVzZXJ2YXRpb25Ob3RpY2UuaW5jbHVkZXMobm90aWNlLm5hbWUpKSB7XG4gICAgICByZXR1cm4geyAuLi5ub3RpY2UsIG5hbWU6ICdSUicgfSBhcyBOb3RpY2U7XG4gICAgfVxuICB9LCB1bmRlZmluZWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlck5vdGljZXMgPSAobm90aWNlczogTm90aWNlW10pOiBOb3RpY2VbXSA9PiB7XG4gIGNvbnN0IGFsbG93ZWROYW1lcyA9IFsnWicsICdTQicsICdTWicsICdWUicsICdURyddO1xuXG4gIGNvbnN0IGZpbHRlck5vdGljZSA9IG5vdGljZXMuZmlsdGVyKChub3RpY2UsIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIG5vdGljZXMuZmluZEluZGV4KChuKSA9PiBuLm5hbWUgPT09IG5vdGljZS5uYW1lKSA9PT0gaW5kZXg7XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJOb3RpY2VcbiAgICAuZmlsdGVyKChub3RpY2UpID0+IGFsbG93ZWROYW1lcy5pbmNsdWRlcyhub3RpY2UubmFtZSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGFsbG93ZWROYW1lcy5pbmRleE9mKGEubmFtZSkgLSBhbGxvd2VkTmFtZXMuaW5kZXhPZihiLm5hbWUpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVOb3RpY2VzID0gKG5vdGljZXM6IE5vdGljZVtdKTogTm90aWNlW10gPT4ge1xuICBjb25zdCByZXNlcnZhdGlvbk5vdGljZSA9IGZpbmRBbmRSZXBsYWNlTm90aWNlKG5vdGljZXMpO1xuICBjb25zdCBmaWx0ZXJlZE5vdGljZXMgPSBmaWx0ZXJOb3RpY2VzKG5vdGljZXMpO1xuXG4gIGlmIChyZXNlcnZhdGlvbk5vdGljZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmlsdGVyZWROb3RpY2VzO1xuICBpZiAoIWZpbHRlcmVkTm90aWNlcy5sZW5ndGgpIHJldHVybiBbcmVzZXJ2YXRpb25Ob3RpY2VdO1xuXG4gIGlmIChmaWx0ZXJlZE5vdGljZXNbMF0ubmFtZSA9PT0gJ1onICYmIGZpbHRlcmVkTm90aWNlc1sxXSkge1xuICAgIHJldHVybiBbZmlsdGVyZWROb3RpY2VzWzBdLCByZXNlcnZhdGlvbk5vdGljZSwgZmlsdGVyZWROb3RpY2VzWzFdXS5jb25jYXQoXG4gICAgICBmaWx0ZXJlZE5vdGljZXMuc2xpY2UoMiksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbcmVzZXJ2YXRpb25Ob3RpY2UsIC4uLmZpbHRlcmVkTm90aWNlc107XG59O1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cmlwLCBhY3RpbmcgYXMgYSBjb250YWluZXIgZm9yIGFsbCB0aGUgYHNiYi10aW1ldGFibGUtKmAgY29tcG9uZW50cy5cbiAqICovXG5leHBvcnQgY2xhc3MgU2JiVGltZXRhYmxlUm93RWxlbWVudCBleHRlbmRzIFNiYkVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLXRpbWV0YWJsZS1yb3cnO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG5cbiAgLyoqIFRoZSB0cmlwIFByb3AuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE9iamVjdCB9KSBwdWJsaWMgYWNjZXNzb3IgdHJpcDogSVRyaXBJdGVtID0gbnVsbCE7XG5cbiAgLyoqIFRoZSBwcmljZSBQcm9wLCB3aGljaCBjb25zaXN0cyBvZiB0aGUgZGF0YSBmb3IgdGhlIGJhZGdlLiAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBPYmplY3QgfSkgcHVibGljIGFjY2Vzc29yIHByaWNlOiBQcmljZSA9IG51bGwhO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSBzYmItcGVhcmwtY2hhaW4gY29tcG9uZW50IC0gaWYgdHJ1ZSB0aGUgcG9zaXRpb24gd29uJ3QgYmUgYW5pbWF0ZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdkaXNhYmxlLWFuaW1hdGlvbicsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGRpc2FibGVBbmltYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgbm90aWNlcyBzZWN0aW9uICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE9iamVjdCB9KSBwdWJsaWMgYWNjZXNzb3IgYm9hcmRpbmc6IEJvYXJkaW5nID0gbnVsbCE7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2FkaW5nIHN0YXRlIC1cbiAgICogd2hlbiB0aGlzIGlzIHRydWUgaXQgd2lsbCBiZSByZW5kZXIgc2tlbGV0b24gd2l0aCBhbiBpZGxpbmcgYW5pbWF0aW9uXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbG9hZGluZy10cmlwJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbG9hZGluZ1RyaXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIEZvb3RwYXRoIGF0dHJpYnV0ZSBmb3IgcmVuZGVyaW5nIGRpZmZlcmVudCBpY29uc1xuICAgKiB0cnVlOiByZW5kZXIgYTExeS1pY29uXG4gICAqIGZhbHNlOiByZW5kZXIgd2Fsay1pY29uXG4gICAqIGRlZmF1bHQ6IHJlbmRlciB3YWxrLWljb25cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhMTF5LWZvb3RwYXRoJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYTExeUZvb3RwYXRoOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2FkaW5nIHN0YXRlIC1cbiAgICogd2hlbiB0aGlzIGlzIHRydWUgaXQgd2lsbCBiZSByZW5kZXIgc2tlbGV0b24gd2l0aCBhbiBpZGxpbmcgYW5pbWF0aW9uXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbG9hZGluZy1wcmljZScsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGxvYWRpbmdQcmljZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRkZW4gbGFiZWwgZm9yIHRoZSBjYXJkIGFjdGlvbi4gSXQgb3ZlcnJpZGVzIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhY2Nlc3NpYmlsaXR5IHRleHQgZm9yIHRoZSBjb21wb25lbnQuIFVzZSB0aGlzIHByb3AgdG8gcHJvdmlkZSBjdXN0b20gYWNjZXNzaWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjYXJkLWFjdGlvbi1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGNhcmRBY3Rpb25MYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIHNiYi1jYXJkIGNvbXBvbmVudCBhcyBhcmlhLWV4cGFuZGVkLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1leHBhbmRlZCcsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGVuIHRoaXMgcHJvcCBpcyB0cnVlIHRoZSBzYmItY2FyZCB3aWxsIGJlIGluIHRoZSBhY3RpdmUgc3RhdGUuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBjb25maWd1cmVkIGRhdGUgd2hpY2ggYWN0cyBhcyB0aGUgY3VycmVudCBkYXRlIGluc3RlYWQgb2YgdGhlIHJlYWwgY3VycmVudCBkYXRlLlxuICAgKiBPbmx5IHJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBub3codmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbm93ID0gZGVmYXVsdERhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChkZWZhdWx0RGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5vdygpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbm93ID8/IG5ldyBEYXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfbm93OiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbG9hZGluZ1RyaXAnKSkge1xuICAgICAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUodGhpcywgJ3JvbGUnLCAhdGhpcy5sb2FkaW5nVHJpcCA/ICdyb3dncm91cCcgOiBudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIHNrZWxldG9uIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIGxvYWRpbmcgc3RhdGUgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyU2tlbGV0b24oKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1jYXJkIGNsYXNzPVwic2JiLWxvYWRpbmcgc2JiLWNhcmQtc3BhY2luZy00eC14eHNcIj5cbiAgICAgICAgJHt0aGlzLmxvYWRpbmdQcmljZSA/IGh0bWxgPGRpdiBjbGFzcz1cInNiYi1sb2FkaW5nX19iYWRnZVwiIHNsb3Q9XCJiYWRnZVwiPjwvZGl2PmAgOiBub3RoaW5nfVxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX3dyYXBwZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX3Jvd1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbG9hZGluZ19fcm93XCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1sb2FkaW5nX19yb3dcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NiYi1jYXJkPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSaWRlTGVncygpOiBQdFJpZGVMZWdbXSB7XG4gICAgcmV0dXJuIHRoaXMudHJpcD8ubGVncz8uZmlsdGVyKChsZWcpID0+IGlzUmlkZUxlZyhsZWcpKSA/PyBbXTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFF1YXlUeXBlU3RyaW5ncygpOiB7IGxvbmc6IHN0cmluZzsgc2hvcnQ6IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnRyaXAuc3VtbWFyeT8ucHJvZHVjdCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmlkZUxlZ3MgPSB0aGlzLl9nZXRSaWRlTGVncygpO1xuICAgIGNvbnN0IGlzU2hvcnQgPSB0aGlzLnRyaXAuc3VtbWFyeS5wcm9kdWN0Py52ZWhpY2xlTW9kZSA9PT0gJ1RSQUlOJztcbiAgICBjb25zdCBzaG9ydCA9IGlzU2hvcnRcbiAgICAgID8gcmlkZUxlZ3NbMF0uc2VydmljZUpvdXJuZXkucXVheVR5cGVTaG9ydE5hbWUgfHwgJydcbiAgICAgIDogcmlkZUxlZ3NbMF0uc2VydmljZUpvdXJuZXkucXVheVR5cGVOYW1lIHx8ICcnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvbmc6IGkxOG5Gcm9tUGxhdGZvcm1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gKyAnICcgKyBzaG9ydCxcbiAgICAgIHNob3J0LFxuICAgIH07XG4gIH1cblxuICAvKiogbWFwIFF1YXkgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyUXVheVR5cGUoKTogVGVtcGxhdGVSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy50cmlwLnN1bW1hcnk/LnByb2R1Y3QpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcXVheVR5cGVTdHJpbmdzID0gdGhpcy5fZ2V0UXVheVR5cGVTdHJpbmdzKCk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy0tcXVheVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke3F1YXlUeXBlU3RyaW5ncz8ubG9uZ30mbmJzcDs8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LS1xdWF5LXR5cGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID4ke3F1YXlUeXBlU3RyaW5ncz8uc2hvcnR9PC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlSGltQ3VzKHRyaXA6IElUcmlwSXRlbSk6IHsgY3VzOiBIaW1DdXMgfCBudWxsOyBoaW06IEhpbUN1cyB8IG51bGwgfSB7XG4gICAgY29uc3QgeyBzaXR1YXRpb25zIH0gPSB0cmlwIHx8IHt9O1xuICAgIGNvbnN0IHNvcnRlZFNpdHVhdGlvbnMgPSBzaXR1YXRpb25zICYmIHNvcnRTaXR1YXRpb24oc2l0dWF0aW9ucyk7XG4gICAgY29uc3QgY3VzID0gZ2V0Q3VzKHRyaXAsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1czogT2JqZWN0LmtleXMoY3VzKT8ubGVuZ3RoID8gY3VzIDogbnVsbCxcbiAgICAgIGhpbTogc2l0dWF0aW9ucz8ubGVuZ3RoID8gZ2V0SGltSWNvbihzb3J0ZWRTaXR1YXRpb25zWzBdKSA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEFjY2Vzc2liaWxpdHlUZXh0KHRyaXA6IElUcmlwSXRlbSk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBzdW1tYXJ5LCBsZWdzLCBub3RpY2VzIH0gPSB0cmlwIHx8IHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIGRlcGFydHVyZVdhbGssXG4gICAgICBhcnJpdmFsV2FsayxcbiAgICAgIGRlcGFydHVyZSxcbiAgICAgIGFycml2YWwsXG4gICAgICBwcm9kdWN0LFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgb2NjdXBhbmN5LFxuICAgICAgZHVyYXRpb24sXG4gICAgfSA9IHN1bW1hcnkgfHwge307XG5cbiAgICBjb25zdCB7IGRlcGFydHVyZVRpbWVBdHRyaWJ1dGUsIGFycml2YWxUaW1lQXR0cmlidXRlIH0gPSBnZXREZXBhcnR1cmVBcnJpdmFsVGltZUF0dHJpYnV0ZShcbiAgICAgIGxlZ3MsXG4gICAgICBkZXBhcnR1cmVXYWxrIHx8IDAsXG4gICAgICBhcnJpdmFsV2FsayB8fCAwLFxuICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgIHRoaXMuYTExeUZvb3RwYXRoLFxuICAgICk7XG5cbiAgICBjb25zdCByaWRlTGVncyA9IHRoaXMuX2dldFJpZGVMZWdzKCk7XG5cbiAgICBjb25zdCBkZXBhcnR1cmVUaW1lOiBEYXRlIHwgdW5kZWZpbmVkID0gZGVwYXJ0dXJlPy50aW1lXG4gICAgICA/IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcoZGVwYXJ0dXJlLnRpbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFycml2YWxUaW1lOiBEYXRlIHwgdW5kZWZpbmVkID0gYXJyaXZhbD8udGltZVxuICAgICAgPyByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGFycml2YWwudGltZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlV2Fsa1RleHQgPSBkZXBhcnR1cmVUaW1lQXR0cmlidXRlXG4gICAgICA/IGAke2RlcGFydHVyZVRpbWVBdHRyaWJ1dGUudGV4dH0gJHtkZXBhcnR1cmVUaW1lQXR0cmlidXRlLmR1cmF0aW9ufSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGFycml2YWxXYWxrVGV4dCA9IGFycml2YWxUaW1lQXR0cmlidXRlXG4gICAgICA/IGAke2Fycml2YWxUaW1lQXR0cmlidXRlLnRleHR9ICR7YXJyaXZhbFRpbWVBdHRyaWJ1dGUuZHVyYXRpb259LCBgXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlVGltZVRleHQgPSBkZXBhcnR1cmVUaW1lXG4gICAgICA/IGAke2kxOG5EZXBhcnR1cmVbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2Zvcm1hdChkZXBhcnR1cmVUaW1lLCAnSEg6bW0nKX0sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBnZXREZXBhcnR1cmVRdWF5VGV4dCA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKCFkZXBhcnR1cmU/LnF1YXlGb3JtYXR0ZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgcHJlZml4IFwibmV3XCIgaWYgcXVheSB3YXMgY2hhbmdlZFxuICAgICAgY29uc3QgY2hhbmdlZFF1YXlQcmVmaXggPSBkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gYCR7aTE4bk5ld1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gYCA6ICcnO1xuICAgICAgcmV0dXJuIGAke2NoYW5nZWRRdWF5UHJlZml4fSR7XG4gICAgICAgIHRoaXMuX2dldFF1YXlUeXBlU3RyaW5ncygpPy5sb25nXG4gICAgICB9ICR7ZGVwYXJ0dXJlPy5xdWF5Rm9ybWF0dGVkfSwgYDtcbiAgICB9O1xuXG4gICAgY29uc3QgbWVhbnNPZlRyYW5zcG9ydFRleHQgPVxuICAgICAgcHJvZHVjdCAmJiBwcm9kdWN0LnZlaGljbGVNb2RlXG4gICAgICAgID8gaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXSAmJlxuICAgICAgICAgIGAke2kxOG5NZWFuc09mVHJhbnNwb3J0W3Byb2R1Y3QudmVoaWNsZU1vZGUudG9Mb3dlckNhc2UoKV1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19LCBgXG4gICAgICAgIDogJyc7XG5cbiAgICBjb25zdCB2ZWhpY2xlU3ViTW9kZVRleHQgPSBwcm9kdWN0Py52ZWhpY2xlU3ViTW9kZVNob3J0TmFtZVxuICAgICAgPyBgJHtwcm9kdWN0LnZlaGljbGVTdWJNb2RlU2hvcnROYW1lfSAke3Byb2R1Y3QubGluZSB8fCAnJ30sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkaXJlY3Rpb25UZXh0ID0gYCR7aTE4bkRpcmVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkaXJlY3Rpb259LCBgO1xuXG4gICAgY29uc3QgaGltQ3VzID0gdGhpcy5faGFuZGxlSGltQ3VzKHRyaXApO1xuICAgIGNvbnN0IGN1c1RleHQgPSBoaW1DdXM/LmN1cz8udGV4dFxuICAgICAgPyBgJHtpMThuUmVhbFRpbWVJbmZvW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHtoaW1DdXM/LmN1cz8udGV4dH0sIGBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgaGltVGV4dCA9IGhpbUN1cz8uaGltPy50ZXh0XG4gICAgICA/IGAke2kxOG5SZWFsVGltZUluZm9bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2hpbUN1cz8uaGltPy50ZXh0fSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGJvYXJkaW5nVGV4dCA9IHRoaXMuYm9hcmRpbmcgPyBgJHt0aGlzLmJvYXJkaW5nLnRleHR9LCBgIDogJyc7XG5cbiAgICBjb25zdCBwcmljZVRleHQgPSBgJHt0aGlzLnByaWNlPy5pc0Rpc2NvdW50ID8gaTE4blN1cGVyc2F2ZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gOiAnJ30gJHtcbiAgICAgIHRoaXMucHJpY2U/LnRleHQgJiYgdGhpcy5wcmljZT8ucHJpY2VcbiAgICAgICAgPyAodGhpcy5wcmljZT8udGV4dCB8fCAnJykgKyAnICcgKyAodGhpcy5wcmljZT8ucHJpY2UgfHwgJycpICsgJywgJ1xuICAgICAgICA6ICcnXG4gICAgfWA7XG5cbiAgICBjb25zdCB0cmFuc2ZlclByb2NlZHVyZXMgPVxuICAgICAgcmlkZUxlZ3MubGVuZ3RoID4gMlxuICAgICAgICA/IGAke3JpZGVMZWdzLmxlbmd0aCAtIDF9ICR7aTE4blRyYW5zZmVyUHJvY2VkdXJlc1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sIGBcbiAgICAgICAgOiByaWRlTGVncy5sZW5ndGggPiAxXG4gICAgICAgICAgPyBgJHtyaWRlTGVncy5sZW5ndGggLSAxfSAke2kxOG5UcmFuc2ZlclByb2NlZHVyZVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sIGBcbiAgICAgICAgICA6ICcnO1xuXG4gICAgY29uc3QgYXJyaXZhbFRpbWVUZXh0ID0gYXJyaXZhbFRpbWVcbiAgICAgID8gYCR7aTE4bkFycml2YWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2Zvcm1hdChhcnJpdmFsVGltZSwgJ0hIOm1tJyl9LCBgXG4gICAgICA6ICcnO1xuXG4gICAgbGV0IG9jY3VwYW5jeVRleHQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChvY2N1cGFuY3kpIHtcbiAgICAgIGlmIChvY2N1cGFuY3kuZmlyc3RDbGFzcyAmJiBvY2N1cGFuY3kuZmlyc3RDbGFzcyAhPT0gJ1VOS05PV04nKSB7XG4gICAgICAgIG9jY3VwYW5jeVRleHQgKz0gYCR7aTE4bkNsYXNzLmZpcnN0W3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgIChcbiAgICAgICAgICAgIGkxOG5PY2N1cGFuY3lbb2NjdXBhbmN5LmZpcnN0Q2xhc3MudG9Mb3dlckNhc2UoKSBhcyBTYmJPY2N1cGFuY3ldIGFzIFJlY29yZDxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBzdHJpbmdcbiAgICAgICAgICAgID5cbiAgICAgICAgICApPy5bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF1cbiAgICAgICAgfS5gO1xuICAgICAgfVxuICAgICAgaWYgKG9jY3VwYW5jeS5zZWNvbmRDbGFzcyAmJiBvY2N1cGFuY3kuc2Vjb25kQ2xhc3MgIT09ICdVTktOT1dOJykge1xuICAgICAgICBvY2N1cGFuY3lUZXh0ICs9IGAgJHtpMThuQ2xhc3Muc2Vjb25kW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgIChcbiAgICAgICAgICAgIGkxOG5PY2N1cGFuY3lbb2NjdXBhbmN5LnNlY29uZENsYXNzLnRvTG93ZXJDYXNlKCkgYXMgU2JiT2NjdXBhbmN5XSBhcyBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgc3RyaW5nXG4gICAgICAgICAgICA+XG4gICAgICAgICAgKT8uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdXG4gICAgICAgIH0uYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID1cbiAgICAgIG5vdGljZXMgJiZcbiAgICAgIGhhbmRsZU5vdGljZXMobm90aWNlcykubGVuZ3RoICYmXG4gICAgICBoYW5kbGVOb3RpY2VzKG5vdGljZXMpXG4gICAgICAgID8ubWFwKChub3RpY2UsIGluZGV4KSA9PiBpbmRleCA8IDQgJiYgbm90aWNlLnRleHQ/LnRlbXBsYXRlKVxuICAgICAgICAuam9pbignLCAnKSArICcsICc7XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzVGV4dCA9IGF0dHJpYnV0ZXNcbiAgICAgID8gYCR7aTE4blRyYXZlbGhpbnRzW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHthdHRyaWJ1dGVzfWBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkdXJhdGlvblRleHQgPVxuICAgICAgISFkdXJhdGlvbiAmJiBkdXJhdGlvbiA+IDBcbiAgICAgICAgPyBgJHtpMThuVHJpcER1cmF0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgICAgZHVyYXRpb25Ub1RpbWUoZHVyYXRpb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpLmxvbmdcbiAgICAgICAgICB9LCBgXG4gICAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgZGVwYXJ0dXJlV2Fsa1RleHQsXG4gICAgICBkZXBhcnR1cmVUaW1lVGV4dCxcbiAgICAgIGdldERlcGFydHVyZVF1YXlUZXh0KCksXG4gICAgICBtZWFuc09mVHJhbnNwb3J0VGV4dCxcbiAgICAgIHZlaGljbGVTdWJNb2RlVGV4dCxcbiAgICAgIGRpcmVjdGlvblRleHQsXG4gICAgICBjdXNUZXh0LFxuICAgICAgYm9hcmRpbmdUZXh0LFxuICAgICAgcHJpY2VUZXh0LFxuICAgICAgY3VzVGV4dCA/ICcnIDogaGltVGV4dCxcbiAgICAgIGFycml2YWxUaW1lVGV4dCxcbiAgICAgIGFycml2YWxXYWxrVGV4dCxcbiAgICAgIGR1cmF0aW9uVGV4dCxcbiAgICAgIHRyYW5zZmVyUHJvY2VkdXJlcyxcbiAgICAgIG9jY3VwYW5jeVRleHQsXG4gICAgICBhdHRyaWJ1dGVzVGV4dCxcbiAgICBdXG4gICAgICAubWFwKChlKSA9PiBlPy50cmltKCkpXG4gICAgICAuZmlsdGVyKChlKSA9PiBlICYmIGUubGVuZ3RoID4gMClcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nVHJpcCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNrZWxldG9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBsZWdzLCBpZCwgbm90aWNlcywgc3VtbWFyeSB9ID0gdGhpcy50cmlwIHx8IHt9O1xuXG4gICAgY29uc3Qge1xuICAgICAgcHJvZHVjdCxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIGRlcGFydHVyZVdhbGssXG4gICAgICBkZXBhcnR1cmUsXG4gICAgICBhcnJpdmFsLFxuICAgICAgYXJyaXZhbFdhbGssXG4gICAgICBvY2N1cGFuY3ksXG4gICAgICBkdXJhdGlvbixcbiAgICB9ID0gc3VtbWFyeSB8fCB7fTtcblxuICAgIGNvbnN0IGhpbUN1cyA9IHRoaXMuX2hhbmRsZUhpbUN1cyh0aGlzLnRyaXApO1xuICAgIGNvbnN0IGhhc0hpbUN1cyA9ICEhaGltQ3VzLmN1cyB8fCAhIWhpbUN1cy5oaW07XG5cbiAgICBjb25zdCBub3RpY2VBdHRyaWJ1dGVzID0gbm90aWNlcyAmJiBoYW5kbGVOb3RpY2VzKG5vdGljZXMpO1xuXG4gICAgY29uc3QgZHVyYXRpb25PYmogPSBkdXJhdGlvbiA/IGR1cmF0aW9uVG9UaW1lKGR1cmF0aW9uLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KSA6IG51bGw7XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzYmItY2FyZCBjbGFzcz1cInNiYi1jYXJkLXNwYWNpbmctNHgteHhzXCIgaWQ9JHtpZH0+XG4gICAgICAgIDxzYmItY2FyZC1idXR0b25cbiAgICAgICAgICA/YWN0aXZlPSR7dGhpcy5hY3RpdmV9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD0ke3RoaXMuYWNjZXNzaWJpbGl0eUV4cGFuZGVkID8gJ3RydWUnIDogbm90aGluZ31cbiAgICAgICAgPlxuICAgICAgICAgICR7dGhpcy5jYXJkQWN0aW9uTGFiZWwgPyB0aGlzLmNhcmRBY3Rpb25MYWJlbCA6IHRoaXMuX2dldEFjY2Vzc2liaWxpdHlUZXh0KHRoaXMudHJpcCl9XG4gICAgICAgIDwvc2JiLWNhcmQtYnV0dG9uPlxuICAgICAgICAke3RoaXMubG9hZGluZ1ByaWNlID8gaHRtbGA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX2JhZGdlXCIgc2xvdD1cImJhZGdlXCI+PC9kaXY+YCA6IG5vdGhpbmd9XG4gICAgICAgICR7dGhpcy5wcmljZSAmJiAhdGhpcy5sb2FkaW5nUHJpY2VcbiAgICAgICAgICA/IGh0bWxgPHNiYi1jYXJkLWJhZGdlIGNvbG9yPSR7dGhpcy5wcmljZS5pc0Rpc2NvdW50ID8gJ2NoYXJjb2FsJyA6ICd3aGl0ZSd9PlxuICAgICAgICAgICAgICAke3RoaXMucHJpY2UuaXNEaXNjb3VudFxuICAgICAgICAgICAgICAgID8gaHRtbGA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgJTxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgPiR7aTE4blN1cGVyc2F2ZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAke3RoaXMucHJpY2UudGV4dCA/IGh0bWxgPHNwYW4+JHt0aGlzLnByaWNlLnRleHR9PC9zcGFuPmAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAke3RoaXMucHJpY2UucHJpY2UgPyBodG1sYDxzcGFuPiR7dGhpcy5wcmljZS5wcmljZX08L3NwYW4+YCA6IG5vdGhpbmd9XG4gICAgICAgICAgICA8L3NiYi1jYXJkLWJhZGdlPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3dcIiByb2xlPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy1oZWFkZXJcIiByb2xlPVwiZ3JpZGNlbGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAke3Byb2R1Y3Q/LmNvcnBvcmF0ZUlkZW50aXR5UGljdG9ncmFtICYmXG4gICAgICAgICAgICAgIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctdHJhbnNwb3J0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LXRyYW5zcG9ydC1pY29uXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJwaWN0bzoke3Byb2R1Y3QuY29ycG9yYXRlSWRlbnRpdHlQaWN0b2dyYW19XCJcbiAgICAgICAgICAgICAgICA+PC9zYmItaWNvbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICR7cHJvZHVjdCAmJlxuICAgICAgICAgICAgICAgICAgcHJvZHVjdC52ZWhpY2xlTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXSAmJlxuICAgICAgICAgICAgICAgICAgaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPmB9XG4gICAgICAgICAgICAgICR7cHJvZHVjdCAmJlxuICAgICAgICAgICAgICAocHJvZHVjdC5jb3Jwb3JhdGVJZGVudGl0eUljb25cbiAgICAgICAgICAgICAgICA/IHJlbmRlckljb25Qcm9kdWN0KHByb2R1Y3QuY29ycG9yYXRlSWRlbnRpdHlJY29uLCBwcm9kdWN0Lm5hbWUpXG4gICAgICAgICAgICAgICAgOiBwcm9kdWN0LnZlaGljbGVTdWJNb2RlU2hvcnROYW1lICYmXG4gICAgICAgICAgICAgICAgICByZW5kZXJTdHJpbmdQcm9kdWN0KHByb2R1Y3QudmVoaWNsZVN1Yk1vZGVTaG9ydE5hbWUsIHByb2R1Y3Q/LmxpbmUpKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgJHtkaXJlY3Rpb25cbiAgICAgICAgICAgICAgPyBodG1sYDxwPiR7YCR7aTE4bkRpcmVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkaXJlY3Rpb259YH08L3A+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNiYi1wZWFybC1jaGFpbi10aW1lXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgLmxlZ3M9JHtsZWdzfVxuICAgICAgICAgICAgLmRlcGFydHVyZVRpbWU9JHtkZXBhcnR1cmU/LnRpbWV9XG4gICAgICAgICAgICAuYXJyaXZhbFRpbWU9JHthcnJpdmFsPy50aW1lfVxuICAgICAgICAgICAgLmRlcGFydHVyZVdhbGs9JHtkZXBhcnR1cmVXYWxrfVxuICAgICAgICAgICAgLmFycml2YWxXYWxrPSR7YXJyaXZhbFdhbGt9XG4gICAgICAgICAgICA/ZGlzYWJsZS1hbmltYXRpb249JHt0aGlzLmRpc2FibGVBbmltYXRpb259XG4gICAgICAgICAgICA/YTExeS1mb290cGF0aD0ke3RoaXMuYTExeUZvb3RwYXRofVxuICAgICAgICAgICAgLm5vdz0ke3RoaXMubm93fVxuICAgICAgICAgID48L3NiYi1wZWFybC1jaGFpbi10aW1lPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctZm9vdGVyXCIgcm9sZT1cImdyaWRjZWxsXCI+XG4gICAgICAgICAgICAke3Byb2R1Y3QgJiYgZGVwYXJ0dXJlPy5xdWF5Rm9ybWF0dGVkXG4gICAgICAgICAgICAgID8gaHRtbGA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9JHtkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gYHNiYi10aW1ldGFibGVfX3Jvdy1xdWF5LS1jaGFuZ2VkYCA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICR7YCR7aTE4bkRlcGFydHVyZVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gaTE4bk5ld1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSA6ICcnXG4gICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5fcmVuZGVyUXVheVR5cGUoKX0gJHtkZXBhcnR1cmU/LnF1YXlGb3JtYXR0ZWR9XG4gICAgICAgICAgICAgICAgPC9zcGFuPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgJHsob2NjdXBhbmN5Py5maXJzdENsYXNzICYmIG9jY3VwYW5jeT8uZmlyc3RDbGFzcyAhPT0gJ1VOS05PV04nKSB8fFxuICAgICAgICAgICAgKG9jY3VwYW5jeT8uc2Vjb25kQ2xhc3MgJiYgb2NjdXBhbmN5LnNlY29uZENsYXNzICE9PSAnVU5LTk9XTicpXG4gICAgICAgICAgICAgID8gaHRtbGA8c2JiLXRpbWV0YWJsZS1vY2N1cGFuY3lcbiAgICAgICAgICAgICAgICAgIC5maXJzdENsYXNzT2NjdXBhbmN5PSR7b2NjdXBhbmN5Py5maXJzdENsYXNzPy50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICAgICAgLnNlY29uZENsYXNzT2NjdXBhbmN5PSR7b2NjdXBhbmN5Py5zZWNvbmRDbGFzcz8udG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgICA+PC9zYmItdGltZXRhYmxlLW9jY3VwYW5jeT5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7KG5vdGljZUF0dHJpYnV0ZXMgJiYgbm90aWNlQXR0cmlidXRlcy5sZW5ndGgpIHx8IHRoaXMuYm9hcmRpbmdcbiAgICAgICAgICAgICAgPyBodG1sYDx1bCBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy1oaW50c1wiIHJvbGU9XCJsaXN0XCI+XG4gICAgICAgICAgICAgICAgICAke25vdGljZUF0dHJpYnV0ZXM/Lm1hcCgobm90aWNlLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPCA0XG4gICAgICAgICAgICAgICAgICAgICAgPyBodG1sYDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItdHJhdmVsLWhpbnRzX19pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSR7J3NhLScgKyBub3RpY2UubmFtZT8udG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7bm90aWNlLnRleHQ/LnRlbXBsYXRlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+YFxuICAgICAgICAgICAgICAgICAgICAgIDogbm90aGluZyxcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAke3RoaXMuYm9hcmRpbmdcbiAgICAgICAgICAgICAgICAgICAgPyBodG1sYDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi10cmF2ZWwtaGludHNfX2l0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSR7dGhpcy5ib2FyZGluZz8ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYm9hcmRpbmc/LnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5gXG4gICAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICA8L3VsPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgJHtkdXJhdGlvbiAmJiBkdXJhdGlvbiA+IDBcbiAgICAgICAgICAgICAgPyBodG1sYDx0aW1lPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICR7YCR7aTE4blRyaXBEdXJhdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkdXJhdGlvbk9iaiEubG9uZ31gfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHtkdXJhdGlvbk9iaiEuc2hvcnR9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdGltZT5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7aGFzSGltQ3VzICYmIChoaW1DdXMuY3VzIHx8IGhpbUN1cy5oaW0pXG4gICAgICAgICAgICAgID8gaHRtbGA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy13YXJuaW5nXCI+XG4gICAgICAgICAgICAgICAgICA8c2JiLWljb24gbmFtZT0keyhoaW1DdXMuY3VzIHx8IGhpbUN1cy5oaW0pIS5uYW1lfT48L3NiYi1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+JHsoaGltQ3VzLmN1cyB8fCBoaW1DdXMuaGltKSEudGV4dH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2JiLWNhcmQ+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXRpbWV0YWJsZS1yb3cnOiBTYmJUaW1ldGFibGVSb3dFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMERBLElBQWEscUJBQXFCLE1BQWMsU0FBZ0M7QUFDOUUsUUFBTyxJQUFJO3FCQUNRLEtBQUk7MkNBQ2tCLEtBQUk7OztBQUkvQyxJQUFhLHVCQUF1QixhQUFxQixTQUF3QztDQUMvRixNQUFNLFFBQVE7RUFBQztFQUFLO0VBQUs7RUFBSSxDQUFDLFNBQVMsWUFBWSxHQUFHLE1BQU07QUFDNUQsUUFBTyxJQUFJO01BQ1AsU0FB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