@almatar/smart-booking-dashboard 0.0.1 → 0.0.2-alpha.2

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 (90) hide show
  1. package/esm2022/lib/components/action-card/action-card.component.mjs +3 -3
  2. package/esm2022/lib/components/add-note-dialog/add-note-dialog.component.mjs +3 -3
  3. package/esm2022/lib/components/almatar-aside/aside-back-button.service.mjs +24 -0
  4. package/esm2022/lib/components/almatar-aside/aside.component.mjs +123 -0
  5. package/esm2022/lib/components/booking-input/booking-input.component.mjs +4 -3
  6. package/esm2022/lib/components/cancel-dialog/cancel-dialog.component.mjs +53 -4
  7. package/esm2022/lib/components/data-search/data-search.component.mjs +3 -3
  8. package/esm2022/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +544 -0
  9. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.mjs +43 -0
  10. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.mjs +296 -0
  11. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.mjs +88 -0
  12. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.mjs +242 -0
  13. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.mjs +48 -0
  14. package/esm2022/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.mjs +129 -0
  15. package/esm2022/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.mjs +321 -0
  16. package/esm2022/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.mjs +52 -0
  17. package/esm2022/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.mjs +9 -0
  18. package/esm2022/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.mjs +7 -0
  19. package/esm2022/lib/components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface.mjs +2 -0
  20. package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.mjs +448 -0
  21. package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.mjs +55 -0
  22. package/esm2022/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.mjs +48 -0
  23. package/esm2022/lib/components/result-panel/result-panel.component.mjs +3 -3
  24. package/esm2022/lib/components/shared/components/confirm-modal/confirm-modal.component.mjs +75 -0
  25. package/esm2022/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.mjs +46 -0
  26. package/esm2022/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.mjs +9 -0
  27. package/esm2022/lib/components/shared/interfaces/i-flight-refund-details.mjs +86 -0
  28. package/esm2022/lib/components/shared/models/cancel-hotel-booking.model.mjs +7 -0
  29. package/esm2022/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.mjs +27 -0
  30. package/esm2022/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.mjs +17 -0
  31. package/esm2022/lib/config/hotel-actions.config.mjs +21 -1
  32. package/esm2022/lib/models/booking.types.mjs +73 -2
  33. package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +25 -7
  34. package/esm2022/lib/services/booking.service.mjs +6 -2
  35. package/esm2022/lib/shared/components/currency-code-icon/currency-code-icon.component.mjs +35 -0
  36. package/esm2022/lib/shared/enums/brand-enums.enum.mjs +7 -0
  37. package/esm2022/lib/shared/environments/environment.mjs +10 -0
  38. package/esm2022/lib/shared/models/index.mjs +6 -0
  39. package/esm2022/lib/shared/modules/almatar-icon/almatar-icon.module.mjs +36 -0
  40. package/esm2022/lib/shared/modules/loader/loader.module.mjs +43 -0
  41. package/esm2022/lib/shared/pipes/exchange.pipe.mjs +49 -0
  42. package/esm2022/lib/shared/services/api.service.mjs +42 -0
  43. package/esm2022/lib/shared/services/shared.service.mjs +34 -0
  44. package/esm2022/lib/shared/services/translation.service.mjs +61 -0
  45. package/esm2022/lib/shared/services/webengage-tracking.service.mjs +28 -0
  46. package/esm2022/lib/shared/store/selectors/currency.selectors.mjs +9 -0
  47. package/fesm2022/almatar-smart-booking-dashboard.mjs +3278 -180
  48. package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
  49. package/lib/components/almatar-aside/aside-back-button.service.d.ts +11 -0
  50. package/lib/components/almatar-aside/aside.component.d.ts +47 -0
  51. package/lib/components/cancel-dialog/cancel-dialog.component.d.ts +7 -0
  52. package/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.d.ts +97 -0
  53. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.d.ts +25 -0
  54. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.d.ts +91 -0
  55. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.d.ts +39 -0
  56. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.d.ts +44 -0
  57. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.d.ts +19 -0
  58. package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +38 -0
  59. package/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.d.ts +142 -0
  60. package/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.d.ts +23 -0
  61. package/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.d.ts +7 -0
  62. package/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.d.ts +5 -0
  63. package/lib/components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface.d.ts +252 -0
  64. package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.d.ts +82 -0
  65. package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.d.ts +21 -0
  66. package/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.d.ts +16 -0
  67. package/lib/components/shared/components/confirm-modal/confirm-modal.component.d.ts +17 -0
  68. package/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.d.ts +10 -0
  69. package/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.d.ts +7 -0
  70. package/lib/components/shared/interfaces/i-flight-refund-details.d.ts +73 -0
  71. package/lib/components/shared/models/cancel-hotel-booking.model.d.ts +6 -0
  72. package/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.d.ts +11 -0
  73. package/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.d.ts +7 -0
  74. package/lib/models/booking.types.d.ts +28 -0
  75. package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +1 -0
  76. package/lib/shared/components/currency-code-icon/currency-code-icon.component.d.ts +13 -0
  77. package/lib/shared/enums/brand-enums.enum.d.ts +5 -0
  78. package/lib/shared/environments/environment.d.ts +7 -0
  79. package/lib/shared/models/index.d.ts +11 -0
  80. package/lib/shared/modules/almatar-icon/almatar-icon.module.d.ts +13 -0
  81. package/lib/shared/modules/loader/loader.module.d.ts +13 -0
  82. package/lib/shared/pipes/exchange.pipe.d.ts +17 -0
  83. package/lib/shared/services/api.service.d.ts +43 -0
  84. package/lib/shared/services/shared.service.d.ts +12 -0
  85. package/lib/shared/services/translation.service.d.ts +17 -0
  86. package/lib/shared/services/webengage-tracking.service.d.ts +8 -0
  87. package/lib/shared/store/selectors/currency.selectors.d.ts +2 -0
  88. package/package.json +2 -19
  89. package/LICENSE +0 -21
  90. package/README.md +0 -132
@@ -0,0 +1,321 @@
1
+ import { Component, EventEmitter, Input, Output, computed, input, signal, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TranslationService } from '../../../../shared/services/translation.service';
4
+ import { CurrencyCodeIconComponent } from '../../../../shared/components/currency-code-icon/currency-code-icon.component';
5
+ import { CurrencySizeEnum } from '../../../../shared/components/currency-code-icon/currency-code-icon.component';
6
+ import { INSTALLMENT_GATEWAY_CODES, INTERNAL_GATEWAY_CODES, LOYALTY_GATEWAY_CODES, MADA_GATEWAY_CODES, normalizePaymentGatewayCode, PAYMENT_GATEWAY_LABELS, PaymentGatewayCode, } from '../../../shared/interfaces/i-flight-refund-details';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ /**
10
+ * Hotel Refund-method selection screen ("You will get back … / Wallet / Card /
11
+ * Split Refund"). Takes the raw refund snapshot (`data`) as its single
12
+ * source of truth and derives every display/eligibility decision from it
13
+ * internally — which options are eligible, the split breakdown, gateway and
14
+ * loyalty-program label resolution — so callers don't need to replicate any
15
+ * of that logic themselves.
16
+ */
17
+ export class HotelRefundMethodSelectorComponent {
18
+ constructor() {
19
+ this._data = signal(null);
20
+ this.currencyObj = null;
21
+ this.refundMethod = 'wallet';
22
+ /** Whether the header's Back button is shown at all — off by default; callers that want it opt in. */
23
+ this.showBack = false;
24
+ /** Whether the close button is shown — off by default; callers that want it opt in. */
25
+ this.showCloseButton = input(false);
26
+ /** Whether to show the loyalty points note explaining points are refunded as permanent wallet points. */
27
+ this.showLoyaltyPointsNote = input(false);
28
+ /** Left arrow — abandons the cancellation flow entirely (closes the whole manage-booking modal). */
29
+ this.closed = new EventEmitter();
30
+ /** Right ✕ — steps back to the Refund Details screen only (mirrors the native dialog close this screen's custom header replaced). */
31
+ this.backRequested = new EventEmitter();
32
+ this.methodSelected = new EventEmitter();
33
+ this.currencySizeEnum = CurrencySizeEnum.LG;
34
+ this.translateService = new TranslationService();
35
+ this.displayBookingId = computed(() => this._data()?.bookingId ?? this.bookingId);
36
+ this.totalRefundAmount = computed(() => this._data()?.totalRefundAmount);
37
+ this.walletRefundAmount = computed(() => Number(this._data()?.walletRefundAmount ?? 0));
38
+ this.gatewayCode = computed(() => normalizePaymentGatewayCode(this._data()?.paymentMethodCustomerUsed));
39
+ /** Whether the customer paid via an installment gateway (Tamara, Tabby, …). */
40
+ this.isInstallmentMethod = computed(() => {
41
+ const code = this.gatewayCode();
42
+ return !!code && INSTALLMENT_GATEWAY_CODES.includes(code);
43
+ });
44
+ /** Whether the customer paid via a loyalty-program gateway (Al Rajhi Mokafaa, …). */
45
+ this.isLoyaltyMethod = computed(() => this.isLoyaltyGateway(this.gatewayCode()));
46
+ /**
47
+ * Whether the payment was 100% loyalty points (no card portion).
48
+ * Used for description/badge when loyaltyPaymentType is set but no gateway code.
49
+ */
50
+ this.isLoyaltyOnlyPayment = computed(() => {
51
+ const d = this._data();
52
+ return (!!d?.loyaltyPaymentType && Number(d?.totalCardRefundAmount ?? 0) === 0);
53
+ });
54
+ /** Whether to show loyalty-style description/badge (either loyalty gateway OR 100% loyalty payment). */
55
+ this.showAsLoyalty = computed(() => this.isLoyaltyMethod() || this.isLoyaltyOnlyPayment());
56
+ /** Whether the original card was a Mada card — its refund row reads "Mada Card" instead of the generic gateway label. */
57
+ this.isMadaMethod = computed(() => {
58
+ const code = this.gatewayCode();
59
+ return !!code && MADA_GATEWAY_CODES.includes(code);
60
+ });
61
+ /** Any gateway that refunds somewhere other than a plain card — used for the wallet-style icon. */
62
+ this.isSpecialGatewayMethod = computed(() => this.isInstallmentMethod() || this.showAsLoyalty());
63
+ /** Settlement-time badge — differs per installment gateway (Tamara settles slower than Tabby). */
64
+ this.paymentBadgeKey = computed(() => {
65
+ if (this.isInstallmentMethod()) {
66
+ return this.gatewayCode() === PaymentGatewayCode.Tamara
67
+ ? '7-10 business days'
68
+ : '3-5 business days';
69
+ }
70
+ if (this.showAsLoyalty()) {
71
+ return 'Instant';
72
+ }
73
+ return '5-7 business days';
74
+ });
75
+ /**
76
+ * Display label for `paymentMethodCustomerUsed`, localized. `loyaltyPaymentType`
77
+ * (once the backend sends it) wins when present — it names the specific
78
+ * loyalty program (e.g. Al Rajhi vs Qitaf) behind a gateway like STC that
79
+ * doesn't say which one on its own.
80
+ */
81
+ this.customerPaymentLabel = computed(() => {
82
+ const d = this._data();
83
+ const gateway = this.gatewayCode();
84
+ // `loyaltyPaymentType` only disambiguates a genuinely ambiguous gateway
85
+ // (STC spans more than one loyalty program) — it must never override an
86
+ // unambiguous gateway like Tamara/Tabby/Card just because the backend
87
+ // happened to also send a `loyaltyPaymentType` value on that booking.
88
+ const code = (gateway === PaymentGatewayCode.Stc && d?.loyaltyPaymentType) || gateway;
89
+ if (code && INTERNAL_GATEWAY_CODES.includes(code)) {
90
+ // Never surface an internal processor name (e.g. Hyperpay) to the
91
+ // customer — falls back to a generic "Card"/original-payment label.
92
+ return '';
93
+ }
94
+ const entry = code ? PAYMENT_GATEWAY_LABELS[code] : undefined;
95
+ if (!entry) {
96
+ return '';
97
+ }
98
+ return this.translateService.currentLang?.startsWith('ar')
99
+ ? entry.ar
100
+ : entry.en;
101
+ });
102
+ /**
103
+ * Label for the standalone "Original Payment Method" option card (shown
104
+ * when the whole refund goes to one destination — no separate loyalty
105
+ * row exists here, so unlike `splitRefundRows`, the loyalty program name
106
+ * (e.g. "Wala") is still shown when that's what was used). Mada wins over
107
+ * everything else, reading "Mada Card" instead of the generic gateway
108
+ * name or the "Original Payment Method" fallback.
109
+ */
110
+ this.originalPaymentLabel = computed(() => {
111
+ if (this.isMadaMethod()) {
112
+ return this.translateService.instant('manage-booking.smart-cancel.result.mada-card');
113
+ }
114
+ return (this.customerPaymentLabel() ||
115
+ this.walletOrLoyaltyLabel(this._data(), 'manage-booking.smart-cancel.refund-method.original'));
116
+ });
117
+ // Wallet card's own name always reads "Almatar Wallet" — the loyalty
118
+ // program name (e.g. "Qitaf") is surfaced via the note below instead of
119
+ // replacing the card's title.
120
+ this.walletLabel = computed(() => this.translateService.instant('manage-booking.smart-cancel.refund-method.wallet'));
121
+ /**
122
+ * Part of the refund came from converting external loyalty points into
123
+ * wallet funds — surfaced as a note under the wallet destination so the
124
+ * customer knows those points land as permanent wallet balance, not cash.
125
+ */
126
+ this.hasLoyaltyPointsRefund = computed(() => Number(this._data()?.totalLoyaltyPoints ?? 0) > 0);
127
+ /** How many of {wallet, card, loyalty} the refund is actually split across. */
128
+ this.splitPartsCount = computed(() => {
129
+ const d = this._data();
130
+ if (!d) {
131
+ return 0;
132
+ }
133
+ return [
134
+ d.walletRefundAmount,
135
+ d.totalCardRefundAmount,
136
+ d.totalLoyaltyPointsRefundAmount,
137
+ this.forfeitedLoyaltyPointsFallback(d),
138
+ ].filter((v) => Number(v ?? 0) > 0).length;
139
+ });
140
+ /**
141
+ * A portion of the refund is forced to the wallet (e.g. loyalty points used)
142
+ * — in that case offer a "Split Refund" option instead of a pure
143
+ * original-payment-method option, since the whole amount can't go to card.
144
+ */
145
+ this.hasSplitRefund = computed(() => Number(this._data()?.totalRefundAmount ?? 0) > 0 &&
146
+ this.splitPartsCount() >= 2);
147
+ /**
148
+ * Wallet covers the whole refund (no card or loyalty portion at all) — show
149
+ * the wallet option alone rather than a "split" with empty other sides.
150
+ */
151
+ this.isWalletOnlyRefund = computed(() => {
152
+ const d = this._data();
153
+ return (Number(d?.walletRefundAmount ?? 0) > 0 &&
154
+ Number(d?.totalCardRefundAmount ?? 0) === 0 &&
155
+ Number(d?.totalLoyaltyPointsRefundAmount ?? 0) === 0 &&
156
+ this.forfeitedLoyaltyPointsFallback(d) === 0);
157
+ });
158
+ this.showWallet = computed(() => !!(this._data()?.isFullWalletRefundAllowed || this.isWalletOnlyRefund()));
159
+ this.showOriginal = computed(() => !this.hasSplitRefund() && !this.isWalletOnlyRefund());
160
+ this.showSplit = computed(() => this.hasSplitRefund());
161
+ /**
162
+ * Only one refund-method card is eligible — there's nothing to choose
163
+ * between, so the radio button and active-selection highlight (which imply
164
+ * a choice) are hidden; the single card is used automatically.
165
+ */
166
+ this.hasSingleOption = computed(() => [this.showWallet(), this.showOriginal(), this.showSplit()].filter(Boolean)
167
+ .length === 1);
168
+ /**
169
+ * Split-refund destination rows — up to three: Almatar Wallet, the
170
+ * original payment method (card/installment gateway), and a separate
171
+ * loyalty-program row (Al Rajhi Mokafaa, Qitaf, …) when the refund is
172
+ * actually spread across a loyalty balance *and* something else.
173
+ */
174
+ this.splitRefundRows = computed(() => {
175
+ const d = this._data();
176
+ if (!d) {
177
+ return [];
178
+ }
179
+ const rows = [];
180
+ const wallet = Number(d.walletRefundAmount ?? 0);
181
+ if (wallet > 0) {
182
+ // Always the generic "Wallet" row — the loyalty program that funded it
183
+ // (e.g. Wala) gets its own dedicated row below via
184
+ // `forfeitedLoyaltyPointsFallback`, so the two stay visually distinct.
185
+ rows.push({
186
+ label: this.translateService.instant('manage-booking.smart-cancel.refund-method.wallet'),
187
+ value: wallet,
188
+ instant: true,
189
+ isLoyalty: false,
190
+ });
191
+ }
192
+ const card = Number(d.totalCardRefundAmount ?? 0);
193
+ if (card > 0) {
194
+ rows.push({
195
+ // When a separate loyalty row is also shown, this row is purely the
196
+ // card/original-payment-method portion — don't relabel it with the
197
+ // loyalty program name too.
198
+ label: this.isMadaMethod()
199
+ ? this.translateService.instant('manage-booking.smart-cancel.result.mada-card')
200
+ : (!this.isLoyaltyMethod() && this.customerPaymentLabel()) ||
201
+ this.translateService.instant('manage-booking.smart-cancel.refund-method.original'),
202
+ value: card,
203
+ instant: false,
204
+ isLoyalty: false,
205
+ isMada: this.isMadaMethod(),
206
+ });
207
+ }
208
+ const loyalty = Number(d.totalLoyaltyPointsRefundAmount ?? 0);
209
+ if (loyalty > 0) {
210
+ rows.push({
211
+ // when paying with card and loyalty program all backed as card
212
+ label: this.walletOrLoyaltyLabel(d, 'manage-booking.smart-cancel.refunds.loyalty'),
213
+ value: loyalty,
214
+ instant: true,
215
+ isLoyalty: true,
216
+ });
217
+ }
218
+ const forfeitedLoyalty = this.forfeitedLoyaltyPointsFallback(d);
219
+ if (forfeitedLoyalty > 0) {
220
+ rows.push({
221
+ label: this.walletOrLoyaltyLabel(d),
222
+ value: forfeitedLoyalty,
223
+ instant: true,
224
+ isLoyalty: true,
225
+ });
226
+ }
227
+ return rows;
228
+ });
229
+ }
230
+ set data(value) {
231
+ this._data.set(value);
232
+ }
233
+ get data() {
234
+ return this._data();
235
+ }
236
+ isLoyaltyGateway(code) {
237
+ return !!code && LOYALTY_GATEWAY_CODES.includes(code);
238
+ }
239
+ /**
240
+ * "Almatar Wallet" row label — when the backend names a specific loyalty
241
+ * program via `loyaltyPaymentType` (e.g. Qitaf, Al Rajhi Mokafaa), that
242
+ * program's name replaces the generic "Almatar Wallet" label, since the
243
+ * amount is actually a loyalty-program redemption rather than a plain
244
+ * wallet balance.
245
+ */
246
+ walletOrLoyaltyLabel(d, fallbackKey = 'manage-booking.smart-cancel.refund-method.wallet') {
247
+ const loyalty = d?.loyaltyPaymentType;
248
+ const entry = loyalty ? PAYMENT_GATEWAY_LABELS[loyalty] : undefined;
249
+ if (entry) {
250
+ return this.translateService.currentLang?.startsWith('ar')
251
+ ? entry.ar
252
+ : entry.en;
253
+ }
254
+ return this.translateService.instant(fallbackKey);
255
+ }
256
+ /**
257
+ * `totalLoyaltyPoints` is normally the forfeited-at-booking points count
258
+ * (no refund destination of its own). But when the backend never
259
+ * populates `totalLoyaltyPointsRefundAmount` for a `loyaltyPaymentType`
260
+ * booking, this is the only signal that a loyalty program was involved,
261
+ * so it doubles as a split-refund row (alongside Card) rather than
262
+ * disappearing from the refund breakdown entirely.
263
+ */
264
+ forfeitedLoyaltyPointsFallback(d) {
265
+ if (!d?.loyaltyPaymentType) {
266
+ return 0;
267
+ }
268
+ if (Number(d.totalLoyaltyPointsRefundAmount ?? 0) > 0) {
269
+ return 0;
270
+ }
271
+ return Number(d.totalLoyaltyPoints ?? 0);
272
+ }
273
+ select(method) {
274
+ this.methodSelected.emit(method);
275
+ }
276
+ close() {
277
+ this.closed.emit();
278
+ }
279
+ back() {
280
+ this.backRequested.emit();
281
+ }
282
+ /** Format an amount without the currency suffix (for interpolated copy). */
283
+ fmtAmount(value) {
284
+ return Number(value || 0).toLocaleString(undefined, {
285
+ minimumFractionDigits: 2,
286
+ maximumFractionDigits: 2,
287
+ });
288
+ }
289
+ /** Get the description for the original payment method */
290
+ getOriginalPaymentDescription() {
291
+ const key = this.isInstallmentMethod()
292
+ ? 'manage-booking.smart-cancel.refund-method.installment-desc'
293
+ : this.showAsLoyalty()
294
+ ? 'manage-booking.smart-cancel.refund-method.loyalty-desc'
295
+ : 'manage-booking.smart-cancel.refund-method.original-desc';
296
+ return this.translateService.instant(key, { method: this.originalPaymentLabel() });
297
+ }
298
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HotelRefundMethodSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
299
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: HotelRefundMethodSelectorComponent, isStandalone: true, selector: "almatar-hotel-refund-method-selector", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, bookingId: { classPropertyName: "bookingId", publicName: "bookingId", isSignal: false, isRequired: false, transformFunction: null }, currencyObj: { classPropertyName: "currencyObj", publicName: "currencyObj", isSignal: false, isRequired: false, transformFunction: null }, refundMethod: { classPropertyName: "refundMethod", publicName: "refundMethod", isSignal: false, isRequired: false, transformFunction: null }, showBack: { classPropertyName: "showBack", publicName: "showBack", isSignal: false, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, showLoyaltyPointsNote: { classPropertyName: "showLoyaltyPointsNote", publicName: "showLoyaltyPointsNote", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", backRequested: "backRequested", methodSelected: "methodSelected" }, ngImport: i0, template: "<div class=\"refund-method-selector\">\n <div class=\"refund-method-selector__header\">\n @if (showBack) {\n <button\n type=\"button\"\n class=\"refund-method-selector__close\"\n (click)=\"back()\"\n aria-label=\"Back\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M19 12H5M12 19l-7-7 7-7\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n <div class=\"refund-method-selector__header-text\">\n <h3 class=\"refund-method-selector__title\">\n Refund Method\n </h3>\n <span class=\"refund-method-selector__sub\"\n >Booking ID #{{\n displayBookingId()\n }}</span\n >\n </div>\n <!-- @if (showCloseButton()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__close\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 18L18 6M6 6L18 18\"\n stroke=\"#1B1A1F\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n } -->\n </div>\n\n <div class=\"refund-method-selector__amount\">\n <span>You will get back</span>\n <strong>\n @if (currencyObj) {\n <app-currency-code-icon\n [size]=\"currencySizeEnum\"\n [currency]=\"currencyObj\"\n ></app-currency-code-icon>\n }\n {{ fmtAmount(totalRefundAmount()) }}\n </strong>\n </div>\n\n <!-- Wallet option -->\n @if (showWallet()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'wallet' && !hasSingleOption()\n \"\n (click)=\"select('wallet')\"\n >\n <span class=\"refund-method-selector__icon\">\n <svg\n width=\"22\"\n height=\"24\"\n viewBox=\"0 0 22 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_25478_1880)\">\n <path\n d=\"M2.67676 20.8852C1.74902 20.8852 1.04704 20.6533 0.570801 20.1894C0.100749 19.7256 -0.134277 19.0359 -0.134277 18.1206V8.51852C-0.134277 7.77015 0.0265299 7.1764 0.348145 6.73727C0.675944 6.29815 1.18929 5.97344 1.88818 5.76315L13.7817 2.3027C14.4559 2.11097 15.0589 2.06149 15.5908 2.15427C16.1289 2.24704 16.5495 2.49443 16.8525 2.89645C17.1618 3.29229 17.3164 3.85511 17.3164 4.58493V6.25485L15.8042 6.38473V4.45505C15.8042 4.04684 15.6898 3.76543 15.4609 3.61081C15.2321 3.45619 14.895 3.44382 14.4497 3.5737L7.27832 5.55905C7.19173 5.5776 7.15153 5.61471 7.15771 5.67038C7.1639 5.71986 7.20719 5.7446 7.2876 5.7446H17.5947C18.5286 5.7446 19.2275 5.97962 19.6914 6.44968C20.1615 6.91354 20.3965 7.60316 20.3965 8.51852V10.8564H18.8936V8.60202C18.8936 8.15671 18.7791 7.81963 18.5503 7.59079C18.3215 7.36195 17.9937 7.24753 17.5669 7.24753H2.69531C2.26855 7.24753 1.94076 7.36195 1.71191 7.59079C1.48926 7.81963 1.37793 8.15671 1.37793 8.60202V18.0371C1.37793 18.4824 1.48926 18.8164 1.71191 19.039C1.94076 19.2679 2.26855 19.3823 2.69531 19.3823H17.5669C17.9937 19.3823 18.3215 19.2679 18.5503 19.039C18.7791 18.8164 18.8936 18.4824 18.8936 18.0371V15.4394H20.3965V18.1206C20.3965 19.0359 20.1615 19.7256 19.6914 20.1894C19.2275 20.6533 18.5286 20.8852 17.5947 20.8852H2.67676ZM16.769 14.2334C16.5093 14.2334 16.2866 14.1437 16.1011 13.9643C15.9217 13.7788 15.832 13.5561 15.832 13.2964C15.832 13.0366 15.9217 12.817 16.1011 12.6377C16.2866 12.4521 16.5093 12.3593 16.769 12.3593C17.0288 12.3593 17.2484 12.4521 17.4277 12.6377C17.6133 12.817 17.7061 13.0366 17.7061 13.2964C17.7061 13.5561 17.6133 13.7788 17.4277 13.9643C17.2484 14.1437 17.0288 14.2334 16.769 14.2334ZM16.6763 16.2187C15.7424 16.2187 14.9878 15.9775 14.4126 15.4951C13.8374 15.0065 13.5498 14.2767 13.5498 13.3056C13.5498 12.3346 13.8374 11.6079 14.4126 11.1255C14.9878 10.643 15.7424 10.4018 16.6763 10.4018H20.1089C20.6903 10.4018 21.1479 10.5812 21.4819 10.9399C21.8221 11.2986 21.9922 11.7439 21.9922 12.2758V14.3354C21.9922 14.8673 21.8221 15.3157 21.4819 15.6806C21.1479 16.0394 20.6903 16.2187 20.1089 16.2187H16.6763ZM16.769 14.9756H19.7842C20.1058 14.9756 20.347 14.8921 20.5078 14.7251C20.6748 14.5519 20.7583 14.3138 20.7583 14.0107V12.6006C20.7583 12.2975 20.6748 12.0625 20.5078 11.8955C20.347 11.7223 20.1058 11.6357 19.7842 11.6357H16.769C16.1196 11.6357 15.6372 11.7841 15.3218 12.081C15.0125 12.3779 14.8579 12.7861 14.8579 13.3056C14.8579 13.8252 15.0125 14.2334 15.3218 14.5302C15.6372 14.8271 16.1196 14.9756 16.769 14.9756Z\"\n fill=\"black\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_25478_1880\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">{{ walletLabel() }}</span>\n <span class=\"refund-method-selector__desc\">Usable for future bookings</span>\n <span\n class=\"refund-method-selector__badge refund-method-selector__badge--instant\"\n >\n <svg\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n Instant\n </span>\n </span>\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n </button>\n }\n\n <!-- Original Payment Method option -->\n @if (showOriginal()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'originalPaymentMethod' && !hasSingleOption()\n \"\n (click)=\"select('originalPaymentMethod')\"\n >\n <span class=\"refund-method-selector__icon\">\n @if (isSpecialGatewayMethod()) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M21 12a2.25 2.25 0 0 0-2.25-2.25H15a3 3 0 1 1-6 0H5.25A2.25 2.25 0 0 0 3 12m18 0v6a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 18v-6m18 0V9M3 12V9m18 0a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 9m18 0V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v3\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n } @else {\n <ng-container *ngTemplateOutlet=\"cardIcon\"></ng-container>\n }\n <ng-template #cardIcon>\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.25 8.25H21.75M2.25 9H21.75M5.25 14.25H11.25M5.25 16.5H8.25M4.5 19.5H19.5C20.0967 19.5 20.669 19.2629 21.091 18.841C21.5129 18.419 21.75 17.8467 21.75 17.25V6.75C21.75 6.15326 21.5129 5.58097 21.091 5.15901C20.669 4.73705 20.0967 4.5 19.5 4.5H4.5C3.90326 4.5 3.33097 4.73705 2.90901 5.15901C2.48705 5.58097 2.25 6.15326 2.25 6.75V17.25C2.25 17.8467 2.48705 18.419 2.90901 18.841C3.33097 19.2629 3.90326 19.5 4.5 19.5Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </ng-template>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">{{\n originalPaymentLabel()\n }}</span>\n <span class=\"refund-method-selector__desc\">{{\n getOriginalPaymentDescription()\n }}</span>\n @if (!showAsLoyalty()) {\n <span\n class=\"refund-method-selector__badge\"\n [class.refund-method-selector__badge--days]=\"!showAsLoyalty()\"\n [class.refund-method-selector__badge--loyalty]=\"showAsLoyalty()\"\n >\n @if (!showAsLoyalty()) {\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.30078 6.50195C3.20312 6.50195 3.12174 6.4694 3.05664 6.4043C2.99154 6.33919 2.95898 6.25781 2.95898 6.16016C2.95898 6.06576 2.99154 5.986 3.05664 5.9209C3.12174 5.85579 3.20312 5.82324 3.30078 5.82324H5.5127V2.86914C5.5127 2.77474 5.54525 2.69499 5.61035 2.62988C5.67546 2.56478 5.75521 2.53223 5.84961 2.53223C5.94727 2.53223 6.02865 2.56478 6.09375 2.62988C6.15885 2.69499 6.19141 2.77474 6.19141 2.86914V6.16016C6.19141 6.25781 6.15885 6.33919 6.09375 6.4043C6.02865 6.4694 5.94727 6.50195 5.84961 6.50195H3.30078ZM5.85449 10.9551C5.16764 10.9551 4.52311 10.8249 3.9209 10.5645C3.31868 10.3073 2.78971 9.95085 2.33398 9.49512C1.87826 9.03939 1.52018 8.51042 1.25977 7.9082C1.0026 7.30599 0.874023 6.66146 0.874023 5.97461C0.874023 5.28776 1.0026 4.64323 1.25977 4.04102C1.52018 3.4388 1.87826 2.90983 2.33398 2.4541C2.78971 1.99512 3.31868 1.63704 3.9209 1.37988C4.52311 1.12272 5.16764 0.994141 5.85449 0.994141C6.54134 0.994141 7.18587 1.12272 7.78809 1.37988C8.3903 1.63704 8.91927 1.99512 9.375 2.4541C9.83073 2.90983 10.1872 3.4388 10.4443 4.04102C10.7048 4.64323 10.835 5.28776 10.835 5.97461C10.835 6.66146 10.7048 7.30599 10.4443 7.9082C10.1872 8.51042 9.83073 9.03939 9.375 9.49512C8.91927 9.95085 8.3903 10.3073 7.78809 10.5645C7.18587 10.8249 6.54134 10.9551 5.85449 10.9551ZM5.85449 10.125C6.42741 10.125 6.96452 10.0176 7.46582 9.80273C7.96712 9.58789 8.4082 9.29004 8.78906 8.90918C9.16992 8.52832 9.46777 8.08724 9.68262 7.58594C9.89746 7.08464 10.0049 6.54753 10.0049 5.97461C10.0049 5.40169 9.89746 4.86458 9.68262 4.36328C9.46777 3.85872 9.16992 3.41764 8.78906 3.04004C8.4082 2.65918 7.96712 2.36133 7.46582 2.14648C6.96452 1.93164 6.42741 1.82422 5.85449 1.82422C5.28158 1.82422 4.74447 1.93164 4.24316 2.14648C3.74186 2.36133 3.30078 2.65918 2.91992 3.04004C2.53906 3.41764 2.24121 3.85872 2.02637 4.36328C1.81152 4.86458 1.7041 5.40169 1.7041 5.97461C1.7041 6.54753 1.81152 7.08464 2.02637 7.58594C2.24121 8.08724 2.53906 8.52832 2.91992 8.90918C3.30078 9.29004 3.74186 9.58789 4.24316 9.80273C4.74447 10.0176 5.28158 10.125 5.85449 10.125Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n } @else {\n <ng-container *ngTemplateOutlet=\"loyaltyBadgeIcon\"></ng-container>\n }\n <ng-template #loyaltyBadgeIcon>\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"5\"\n stroke=\"#0B54C2\"\n stroke-width=\"1.2\"\n />\n <path\n d=\"M6 5.5v3M6 3.9v.01\"\n stroke=\"#0B54C2\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </ng-template>\n\n {{ paymentBadgeKey() }}\n </span>\n }\n <!-- showing loyalty note for hotels -->\n @if (showLoyaltyPointsNote() && showAsLoyalty()) {\n <div\n class=\"refund-method-selector__notice refund-method-selector__notice--info\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M4.1582 21.1777C3.60482 21.1777 3.12956 21.0605 2.73242 20.8262C2.33529 20.5918 2.0293 20.2728 1.81445 19.8691C1.59961 19.472 1.49219 19.026 1.49219 18.5312C1.49219 18.056 1.61914 17.6003 1.87305 17.1641L9.45117 3.96094C9.69857 3.51823 10.0273 3.1862 10.4375 2.96484C10.8477 2.73698 11.2773 2.62305 11.7266 2.62305C12.1758 2.62305 12.6022 2.73698 13.0059 2.96484C13.416 3.1862 13.748 3.51823 14.002 3.96094L21.5801 17.1641C21.7038 17.3789 21.7982 17.6035 21.8633 17.8379C21.9284 18.0723 21.9609 18.3034 21.9609 18.5312C21.9609 19.026 21.8535 19.472 21.6387 19.8691C21.4238 20.2728 21.1178 20.5918 20.7207 20.8262C20.3236 21.0605 19.8483 21.1777 19.2949 21.1777H4.1582ZM4.16797 19.6445H19.2754C19.6139 19.6445 19.8809 19.5306 20.0762 19.3027C20.278 19.0814 20.3789 18.821 20.3789 18.5215C20.3789 18.3132 20.3268 18.1081 20.2227 17.9062L12.6543 4.70312C12.5501 4.52083 12.4134 4.39062 12.2441 4.3125C12.0814 4.22786 11.9089 4.18555 11.7266 4.18555C11.5443 4.18555 11.3685 4.22786 11.1992 4.3125C11.0299 4.39062 10.8932 4.52083 10.7891 4.70312L3.2207 17.8965C3.16862 18.0007 3.12956 18.1081 3.10352 18.2188C3.08398 18.3294 3.07422 18.4303 3.07422 18.5215C3.07422 18.821 3.17188 19.0814 3.36719 19.3027C3.5625 19.5306 3.82943 19.6445 4.16797 19.6445ZM11.7266 14.5859C11.2253 14.5859 10.9681 14.3288 10.9551 13.8145L10.8281 8.64844C10.8216 8.40104 10.8997 8.19596 11.0625 8.0332C11.2318 7.87044 11.4499 7.78906 11.7168 7.78906C11.9772 7.78906 12.1921 7.8737 12.3613 8.04297C12.5371 8.20573 12.6217 8.41081 12.6152 8.6582L12.4688 13.8145C12.4622 14.3288 12.2148 14.5859 11.7266 14.5859ZM11.7266 17.7598C11.4401 17.7598 11.1927 17.6621 10.9844 17.4668C10.776 17.265 10.6719 17.0241 10.6719 16.7441C10.6719 16.4642 10.776 16.2266 10.9844 16.0312C11.1927 15.8294 11.4401 15.7285 11.7266 15.7285C12.013 15.7285 12.2604 15.8262 12.4688 16.0215C12.6771 16.2168 12.7812 16.4577 12.7812 16.7441C12.7812 17.0306 12.6738 17.2715 12.459 17.4668C12.2507 17.6621 12.0065 17.7598 11.7266 17.7598Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n <span>Loyalty points will be refunded instantly to your account</span>\n </div>\n }\n </span>\n <span class=\"refund-method-selector__option-end\">\n @if (isMadaMethod()) {\n <span class=\"refund-method-selector__mada-logo\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n </span>\n </button>\n }\n\n <!-- Split Refund option -->\n @if (showSplit()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option refund-method-selector__option--split\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'split' && !hasSingleOption()\n \"\n (click)=\"select('split')\"\n >\n <span class=\"refund-method-selector__icon\">\n <svg\n width=\"45\"\n height=\"45\"\n viewBox=\"0 0 45 45\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"0.5\"\n y=\"0.5\"\n width=\"44\"\n height=\"44\"\n rx=\"7.5\"\n stroke=\"#D9D9DE\"\n />\n <g clip-path=\"url(#clip0_24079_7906_selector)\">\n <path\n d=\"M28.1621 14.9951C28.1621 14.7998 28.2142 14.6501 28.3184 14.5459C28.429 14.4417 28.5853 14.3896 28.7871 14.3896C28.8783 14.3896 28.9661 14.4059 29.0508 14.4385C29.1419 14.4645 29.2233 14.5068 29.2949 14.5654L32.9863 17.6318C33.1426 17.7686 33.2207 17.9248 33.2207 18.1006C33.2207 18.2764 33.1426 18.4294 32.9863 18.5596L29.2949 21.6162C29.2233 21.6748 29.1419 21.7204 29.0508 21.7529C28.9661 21.7855 28.8783 21.8018 28.7871 21.8018C28.5853 21.8018 28.429 21.7497 28.3184 21.6455C28.2142 21.5348 28.1621 21.3818 28.1621 21.1865V14.9951ZM10.7793 28.2373C10.7793 27.9964 10.8607 27.8011 11.0234 27.6514C11.1927 27.5016 11.4108 27.4268 11.6777 27.4268H13.9531C14.4479 27.4268 14.8841 27.3258 15.2617 27.124C15.6458 26.9222 16.0495 26.5739 16.4727 26.0791L22.3809 19.1748C22.9668 18.4912 23.5332 18.016 24.0801 17.749C24.627 17.4821 25.3073 17.3486 26.1211 17.3486H29.5977C29.8255 17.3486 30.0176 17.43 30.1738 17.5928C30.3366 17.749 30.418 17.9411 30.418 18.1689C30.418 18.3903 30.3366 18.5824 30.1738 18.7451C30.0176 18.9014 29.8255 18.9795 29.5977 18.9795H26.1699C25.8118 18.9795 25.4863 19.0251 25.1934 19.1162C24.9069 19.2008 24.6302 19.3408 24.3633 19.5361C24.1029 19.7314 23.8327 19.9919 23.5527 20.3174L17.6348 27.2217C17.0423 27.9053 16.4727 28.3805 15.9258 28.6475C15.3854 28.9144 14.7116 29.0479 13.9043 29.0479H11.6777C11.4108 29.0479 11.1927 28.973 11.0234 28.8232C10.8607 28.6735 10.7793 28.4782 10.7793 28.2373ZM28.1621 31.4795V25.2881C28.1621 25.0928 28.2142 24.943 28.3184 24.8389C28.429 24.7282 28.5853 24.6729 28.7871 24.6729C28.8783 24.6729 28.9661 24.6891 29.0508 24.7217C29.1419 24.7542 29.2233 24.7998 29.2949 24.8584L32.9863 27.915C33.1426 28.0452 33.2207 28.1982 33.2207 28.374C33.2207 28.5498 33.1426 28.7061 32.9863 28.8428L29.2949 31.9092C29.2233 31.9678 29.1419 32.0101 29.0508 32.0361C28.9661 32.0687 28.8783 32.085 28.7871 32.085C28.5853 32.085 28.429 32.0329 28.3184 31.9287C28.2142 31.8245 28.1621 31.6748 28.1621 31.4795ZM10.7793 18.2373C10.7793 17.9964 10.8607 17.8011 11.0234 17.6514C11.1927 17.5016 11.4108 17.4268 11.6777 17.4268H13.9043C14.7116 17.4268 15.3854 17.5602 15.9258 17.8271C16.4727 18.0941 17.0423 18.5693 17.6348 19.2529L23.5527 26.1572C23.8327 26.4827 24.1029 26.7432 24.3633 26.9385C24.6302 27.1338 24.9069 27.277 25.1934 27.3682C25.4863 27.4528 25.8118 27.4951 26.1699 27.4951H29.5977C29.8255 27.4951 30.0176 27.5765 30.1738 27.7393C30.3366 27.8955 30.418 28.0843 30.418 28.3057C30.418 28.5335 30.3366 28.7288 30.1738 28.8916C30.0176 29.0479 29.8255 29.126 29.5977 29.126H26.1211C25.3073 29.126 24.627 28.9925 24.0801 28.7256C23.5332 28.4587 22.9668 27.9834 22.3809 27.2998L16.4727 20.3955C16.0495 19.9007 15.6458 19.5524 15.2617 19.3506C14.8841 19.1488 14.4479 19.0479 13.9531 19.0479H11.6777C11.4108 19.0479 11.1927 18.973 11.0234 18.8232C10.8607 18.6735 10.7793 18.4782 10.7793 18.2373Z\"\n fill=\"#1B1A1F\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_24079_7906_selector\">\n <rect\n width=\"24\"\n height=\"24\"\n fill=\"white\"\n transform=\"translate(10 11.5)\"\n />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">Split Refund</span>\n <span class=\"refund-method-selector__desc\">Returned to your original payment method</span>\n </span>\n <strong class=\"refund-method-selector__split-total\">\n @if (currencyObj) {\n <app-currency-code-icon\n [currency]=\"currencyObj\"\n ></app-currency-code-icon>\n }\n {{ fmtAmount(totalRefundAmount()) }}\n </strong>\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n\n <span class=\"refund-method-selector__split-breakdown\">\n @for (row of splitRefundRows(); track $index) {\n <span class=\"refund-method-selector__split-row\">\n <span class=\"refund-method-selector__split-label\">\n {{ row.label }}\n @if (row.isMada) {\n <span\n class=\"refund-method-selector__mada-logo\"\n aria-hidden=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n </span>\n <strong>\n @if (currencyObj) {\n <app-currency-code-icon\n [currency]=\"currencyObj\"\n ></app-currency-code-icon>\n }\n {{ fmtAmount(row.value) }}\n </strong>\n </span>\n <span\n class=\"refund-method-selector__badge\"\n [class.refund-method-selector__badge--instant]=\"row.instant\"\n [class.refund-method-selector__badge--days]=\"!row.instant\"\n >\n @if (row.instant) {\n <svg\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n }\n @if (!row.instant) {\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.30078 6.50195C3.20312 6.50195 3.12174 6.4694 3.05664 6.4043C2.99154 6.33919 2.95898 6.25781 2.95898 6.16016C2.95898 6.06576 2.99154 5.986 3.05664 5.9209C3.12174 5.85579 3.20312 5.82324 3.30078 5.82324H5.5127V2.86914C5.5127 2.77474 5.54525 2.69499 5.61035 2.62988C5.67546 2.56478 5.75521 2.53223 5.84961 2.53223C5.94727 2.53223 6.02865 2.56478 6.09375 2.62988C6.15885 2.69499 6.19141 2.77474 6.19141 2.86914V6.16016C6.19141 6.25781 6.15885 6.33919 6.09375 6.4043C6.02865 6.4694 5.94727 6.50195 5.84961 6.50195H3.30078ZM5.85449 10.9551C5.16764 10.9551 4.52311 10.8249 3.9209 10.5645C3.31868 10.3073 2.78971 9.95085 2.33398 9.49512C1.87826 9.03939 1.52018 8.51042 1.25977 7.9082C1.0026 7.30599 0.874023 6.66146 0.874023 5.97461C0.874023 5.28776 1.0026 4.64323 1.25977 4.04102C1.52018 3.4388 1.87826 2.90983 2.33398 2.4541C2.78971 1.99512 3.31868 1.63704 3.9209 1.37988C4.52311 1.12272 5.16764 0.994141 5.85449 0.994141C6.54134 0.994141 7.18587 1.12272 7.78809 1.37988C8.3903 1.63704 8.91927 1.99512 9.375 2.4541C9.83073 2.90983 10.1872 3.4388 10.4443 4.04102C10.7048 4.64323 10.835 5.28776 10.835 5.97461C10.835 6.66146 10.7048 7.30599 10.4443 7.9082C10.1872 8.51042 9.83073 9.03939 9.375 9.49512C8.91927 9.95085 8.3903 10.3073 7.78809 10.5645C7.18587 10.8249 6.54134 10.9551 5.85449 10.9551ZM5.85449 10.125C6.42741 10.125 6.96452 10.0176 7.46582 9.80273C7.96712 9.58789 8.4082 9.29004 8.78906 8.90918C9.16992 8.52832 9.46777 8.08724 9.68262 7.58594C9.89746 7.08464 10.0049 6.54753 10.0049 5.97461C10.0049 5.40169 9.89746 4.86458 9.68262 4.36328C9.46777 3.85872 9.16992 3.41764 8.78906 3.04004C8.4082 2.65918 7.96712 2.36133 7.46582 2.14648C6.96452 1.93164 6.42741 1.82422 5.85449 1.82422C5.28158 1.82422 4.74447 1.93164 4.24316 2.14648C3.74186 2.36133 3.30078 2.65918 2.91992 3.04004C2.53906 3.41764 2.24121 3.85872 2.02637 4.36328C1.81152 4.86458 1.7041 5.40169 1.7041 5.97461C1.7041 6.54753 1.81152 7.08464 2.02637 7.58594C2.24121 8.08724 2.53906 8.52832 2.91992 8.90918C3.30078 9.29004 3.74186 9.58789 4.24316 9.80273C4.74447 10.0176 5.28158 10.125 5.85449 10.125Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n }\n {{ row.instant ? 'Instant' : paymentBadgeKey() }}\n </span>\n\n @if (row.isLoyalty) {\n <div\n class=\"refund-method-selector__notice refund-method-selector__notice--info\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n />\n <path\n d=\"M12 11v5.5M12 8v.01\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span>Loyalty points will be refunded instantly to your account</span>\n </div>\n }\n }\n </span>\n </button>\n }\n</div>\n\n<ng-template #madaLogo>\n <svg\n width=\"43\"\n height=\"15\"\n viewBox=\"0 0 43 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_rms_mada)\">\n <path d=\"M18.1894 8.6543H0V14.9933H18.1894V8.6543Z\" fill=\"#84B740\" />\n <path d=\"M18.1894 0H0V6.34463H18.1894V0Z\" fill=\"#259BD6\" />\n <path\n d=\"M36.3779 13.7034L36.2969 13.7203C36.016 13.7768 35.9134 13.7994 35.7082 13.7994C35.233 13.7994 34.6713 13.5452 34.6713 12.3475C34.6713 11.7316 34.7685 10.9124 35.6542 10.9124H35.6596C35.8108 10.9237 35.9836 10.9407 36.3077 11.0424L36.3779 11.065V13.7034ZM36.5237 7.73164L36.3779 7.75989V9.97458L36.2483 9.93503L36.2105 9.92373C36.0647 9.87853 35.7298 9.77684 35.4058 9.77684C33.6344 9.77684 33.2617 11.178 33.2617 12.3531C33.2617 13.9633 34.1258 14.8898 35.6326 14.8898C36.2699 14.8898 36.7397 14.822 37.215 14.6582C37.6524 14.5113 37.8091 14.3023 37.8091 13.8559V7.5C37.3878 7.5791 36.9504 7.65819 36.5237 7.73164Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M41.651 13.7385L41.5754 13.7611L41.3053 13.8345C41.0515 13.9023 40.8247 13.9419 40.6519 13.9419C40.236 13.9419 39.9876 13.7272 39.9876 13.36C39.9876 13.1227 40.0902 12.7215 40.7707 12.7215H41.651V13.7385ZM41.0299 9.74414C40.4844 9.74414 39.9228 9.84584 39.2261 10.0718L38.7724 10.2131L38.9236 11.2865L39.3665 11.134C39.831 10.9758 40.4088 10.8741 40.8409 10.8741C41.0353 10.8741 41.6294 10.8741 41.6294 11.5464V11.8402H40.8031C39.2963 11.8402 38.5996 12.343 38.5996 13.4221C38.5996 14.343 39.2423 14.8967 40.3224 14.8967C40.6573 14.8967 41.1217 14.8289 41.5214 14.7272L41.543 14.7215L41.5646 14.7272L41.6996 14.7498C42.1208 14.8289 42.5583 14.908 42.9849 14.9927V11.4673C42.9849 10.3261 42.3261 9.74414 41.0299 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M31.1527 13.7385L31.0771 13.7611L30.807 13.8345C30.5532 13.9023 30.3318 13.9419 30.1536 13.9419C29.7377 13.9419 29.4893 13.7272 29.4893 13.36C29.4893 13.1227 29.5919 12.7215 30.267 12.7215H31.1473L31.1527 13.7385ZM30.537 9.74414C29.9861 9.74414 29.4299 9.84584 28.7332 10.0718L28.2795 10.2131L28.4308 11.2865L28.8736 11.134C29.3381 10.9758 29.9159 10.8741 30.348 10.8741C30.5424 10.8741 31.1365 10.8741 31.1365 11.5464V11.8402H30.3102C28.8034 11.8402 28.1013 12.343 28.1013 13.4221C28.1013 14.343 28.744 14.8967 29.8295 14.8967C30.1644 14.8967 30.6288 14.8289 31.0285 14.7272L31.0501 14.7215L31.0717 14.7272L31.2013 14.7498C31.6279 14.8289 32.06 14.908 32.4866 14.9984V11.473C32.492 10.3204 31.8332 9.74414 30.537 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M25.4701 9.7576C24.7842 9.7576 24.2172 9.99489 24.0065 10.0966L23.9525 10.1248L23.9039 10.0853C23.6123 9.86495 23.1856 9.75195 22.5916 9.75195C22.0677 9.75195 21.5762 9.83105 21.0416 9.99489C20.5825 10.1418 20.4043 10.3734 20.4043 10.8085V14.8367H21.8409V11.1135L21.9111 11.0909C22.2027 10.9892 22.3755 10.9723 22.543 10.9723C22.9588 10.9723 23.1694 11.2039 23.1694 11.6559V14.8423H24.5844V11.5938C24.5844 11.4017 24.5466 11.2887 24.5412 11.2661L24.4926 11.17L24.5898 11.1248C24.8058 11.0231 25.0435 10.9723 25.2919 10.9723C25.5781 10.9723 25.9184 11.0909 25.9184 11.6559V14.8423H27.3279V11.509C27.3279 10.3282 26.7231 9.7576 25.4701 9.7576Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M40.5866 4.13559C40.3759 4.13559 40.0249 4.113 39.7495 4.0565L39.6684 4.03955V1.86441C39.6684 1.68362 39.636 1.57062 39.6306 1.55367L39.5874 1.46328L39.6793 1.42373C39.7009 1.41243 39.7225 1.40678 39.7495 1.39548L39.7657 1.38418C39.7981 1.37288 39.8305 1.36158 39.8629 1.35028C39.8791 1.34463 39.8899 1.33898 39.9007 1.33898C40.2193 1.24859 40.511 1.25989 40.6406 1.24859H40.646C41.5263 1.24859 41.6289 2.0678 41.6289 2.68362C41.6235 3.88136 41.0564 4.13559 40.5866 4.13559ZM40.5812 0C40.5704 0 40.5542 0 40.5434 0C39.7171 0 38.8692 0.237288 38.5667 0.700565C38.4047 0.926554 38.3129 1.20904 38.3075 1.54237V3.78531C38.3075 3.9774 38.2697 4.05085 38.2643 4.0678L38.2157 4.16384H35.6072V2.60452H35.6018C35.5694 0.960452 34.6404 0.0564972 33.2957 0.0564972H33.1391H31.9833C31.9293 0.457627 31.8861 0.740113 31.8321 1.14124H33.1391C33.8249 1.14124 34.1868 1.75141 34.1868 2.68927V4.25989L34.095 4.20904C34.0788 4.20339 33.9654 4.16384 33.7871 4.16384H31.5297C31.4865 4.46328 31.4325 4.85311 31.373 5.24294H38.3129C38.5505 5.19209 38.8259 5.14689 39.0636 5.10735C39.4146 5.28814 40.0681 5.38418 40.5164 5.38418C42.0231 5.38418 43.0007 4.32768 43.0007 2.70057C42.9953 1.0904 42.0501 0.0338983 40.5812 0Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M28.4189 5.90821H28.4837C29.9905 5.90821 30.6925 5.38844 30.6925 4.10595C30.6925 3.18505 30.0499 2.45059 28.9697 2.45059H27.5818C27.1659 2.45059 26.9175 2.202 26.9175 1.78392C26.9175 1.50143 27.0201 1.15115 27.7006 1.15115H30.7357C30.8006 0.738723 30.833 0.478836 30.8924 0.0664062H27.7384C26.2694 0.0664062 25.5295 0.710474 25.5295 1.78392C25.5295 2.84607 26.1722 3.39974 27.2523 3.39974H28.6403C29.0561 3.39974 29.3046 3.74437 29.3046 4.10595C29.3046 4.34324 29.202 4.83477 28.5269 4.83477H28.2947L23.8499 4.82347H23.0398C22.3539 4.82347 21.8733 4.41669 21.8733 3.47319V2.82347C21.8733 1.84042 22.2459 1.23025 23.0398 1.23025H24.3576C24.417 0.812169 24.4548 0.546632 24.5088 0.151152H22.867H22.7104C21.3656 0.151152 20.4367 1.09466 20.4043 2.73872V2.80087V3.47319C20.4367 5.11725 21.3656 5.90256 22.7104 5.90256H22.867H24.0227L26.4314 5.90821H27.868H28.4189Z\"\n fill=\"#747583\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_rms_mada\">\n <rect width=\"43\" height=\"15\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n</ng-template>\n", styles: [".refund-method-selector{display:flex;flex-direction:column;gap:16px}.refund-method-selector strong{direction:ltr;display:inline-flex;align-items:center;gap:4px}.refund-method-selector__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin:-40px -16px 0;padding:16px;background:var(--almatar-neutral-surface-card, #fff);border-bottom:1px solid var(--almatar-primary-border-disabled)}.refund-method-selector__close{flex-shrink:0;display:flex;align-items:center;justify-content:center;background:none;border:none;padding:2px;color:var(--almatar-neutral-text-primary-static, #1c1c28);cursor:pointer}.refund-method-selector__close svg{display:block;flex-shrink:0;stroke:currentColor}:host-context(.rtl) .refund-method-selector__close:first-child svg{transform:scaleX(-1)}.refund-method-selector__header-text{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:4px;text-align:start}.refund-method-selector__title{font-size:calc(17 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:var(--almatar-neutral-text-primary-static);margin:0}.refund-method-selector__sub{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static)}.refund-method-selector__amount{display:flex;align-items:center;justify-content:space-between;padding:20px;background:linear-gradient(135deg,#f0fdf5,#dcfce7);border:1px solid #bbf7d0;border-radius:12px;box-shadow:0 2px 8px #15803c1a}.refund-method-selector__amount span{font-size:calc(15 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:600;color:#15803c}.refund-method-selector__amount strong{display:inline-flex;align-items:center;gap:6px;font-size:calc(28 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;color:#15803c;font-variant-numeric:tabular-nums}.refund-method-selector__option{display:flex;align-items:flex-start;gap:14px;width:100%;text-align:start;padding:18px;border-radius:12px;border:2px solid #e2e8f0;background:#fff;cursor:pointer;transition:all .2s ease;box-shadow:0 1px 3px #0000000d}.refund-method-selector__option:hover:not(.refund-method-selector__option--active){border-color:#cbd5e1;box-shadow:0 4px 12px #00000014;transform:translateY(-1px)}.refund-method-selector__option--active{border-color:#3b82f6;background:linear-gradient(135deg,#eff6ff,#dbeafe);box-shadow:0 0 0 3px #3b82f61a,0 4px 12px #3b82f626}.refund-method-selector__option--static{flex-direction:column;align-items:stretch;cursor:default}.refund-method-selector__option--static .refund-method-selector__name{font-weight:var(--almatar-font-weight-medium)}.refund-method-selector__credit-shell-row{display:flex;align-items:flex-start;gap:12px}.refund-method-selector__section-title{margin:0;font-size:calc(15 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:var(--almatar-neutral-text-primary-static)}.refund-method-selector__name-row{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%}.refund-method-selector__item-amount{flex-shrink:0;font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:var(--almatar-neutral-text-primary-static);font-variant-numeric:tabular-nums}.refund-method-selector__option--addons{flex-direction:column;align-items:stretch;cursor:default;gap:0}.refund-method-selector__option--addons .refund-method-selector__notice{margin-top:14px}.refund-method-selector__addon-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 0;font-size:calc(15 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-primary-static);border-bottom:1px solid var(--almatar-primary-border-disabled)}.refund-method-selector__addon-row:first-of-type{padding-top:0}.refund-method-selector__addon-row strong{color:var(--almatar-neutral-text-secondary-static);font-weight:var(--almatar-font-weight-regular)}.refund-method-selector__addon-row--total{padding-bottom:0;border-bottom:none;font-weight:var(--almatar-font-weight-semibold);color:var(--almatar-neutral-text-primary-static)}.refund-method-selector__addon-row--total strong{color:var(--almatar-neutral-text-primary-static);font-weight:var(--almatar-font-weight-semibold)}.refund-method-selector__icon{flex-shrink:0;width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#f8fafc,#f1f5f9);border:1px solid #e2e8f0;color:#1e293b;box-shadow:0 2px 4px #0000000a;transition:all .2s ease}.refund-method-selector__option:hover .refund-method-selector__icon{background:linear-gradient(135deg,#eff6ff,#dbeafe);border-color:#3b82f6;box-shadow:0 4px 8px #3b82f626}.refund-method-selector__option--active .refund-method-selector__icon{background:linear-gradient(135deg,#3b82f6,#2563eb);border-color:#2563eb;color:#fff;box-shadow:0 4px 12px #3b82f64d}.refund-method-selector__body{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:4px}.refund-method-selector__name{font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:var(--almatar-neutral-text-primary-static);display:inline-flex;align-items:center;gap:6px}.refund-method-selector__desc{font-size:calc(13 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static)}.refund-method-selector__badge{margin-top:6px;font-size:calc(11 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:5px 12px;border-radius:20px;display:inline-flex;align-items:center;gap:5px;box-shadow:0 2px 4px #00000014}.refund-method-selector__badge svg{flex-shrink:0}.refund-method-selector__badge--instant{background:linear-gradient(135deg,#dcfce7,#bbf7d0);color:#15803c;border:1px solid #86efac}.refund-method-selector__badge--days,.refund-method-selector__badge--loyalty{background:linear-gradient(135deg,#dbeafe,#bfdbfe);color:#1e40af;border:1px solid #93c5fd}.refund-method-selector__option-end{flex-shrink:0;display:flex;align-items:center;gap:8px}.refund-method-selector__radio{flex-shrink:0;width:22px;height:22px;margin-top:2px;border-radius:50%;border:2px solid #cbd5e1;position:relative;background:#fff;transition:all .2s ease;box-shadow:0 1px 3px #0000001a}.refund-method-selector__option:hover .refund-method-selector__radio{border-color:#3b82f6;box-shadow:0 2px 6px #3b82f633}.refund-method-selector__option--active .refund-method-selector__radio{border-color:#3b82f6;background:#fff;box-shadow:0 0 0 3px #3b82f61a,0 2px 6px #3b82f633}.refund-method-selector__option--active .refund-method-selector__radio:after{content:\"\";position:absolute;inset:4px;border-radius:50%;background:linear-gradient(135deg,#3b82f6,#2563eb);box-shadow:0 1px 2px #2563eb66}.refund-method-selector__option--split{flex-wrap:wrap}.refund-method-selector__split-total{flex-shrink:0;display:inline-flex;align-items:center;gap:4px;font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:var(--almatar-neutral-text-primary-static);font-variant-numeric:tabular-nums}.refund-method-selector__split-breakdown{flex-basis:calc(100% - 56px);width:calc(100% - 56px);margin-inline-start:56px;display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:12px;padding-top:12px;border-top:1px solid var(--almatar-primary-border-disabled)}.refund-method-selector__split-row{flex:1 1 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-primary-static)}.refund-method-selector__split-row strong{display:inline-flex;align-items:center;gap:4px;font-weight:var(--almatar-font-weight-semibold);font-variant-numeric:tabular-nums}.refund-method-selector__split-label{color:var(--almatar-neutral-text-primary-static);display:inline-flex;align-items:center;gap:6px}.refund-method-selector__mada-logo{display:inline-flex;align-items:center;flex-shrink:0}.refund-method-selector__mada-logo svg{display:block}.refund-method-selector__notice{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:10px;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:500;line-height:1.5}.refund-method-selector__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px}.refund-method-selector__notice--info{background:linear-gradient(135deg,#dbeafe,#eff6ff);border:1px solid #93c5fd;color:#1e40af;box-shadow:0 2px 4px #3b82f61a}.refund-method-selector__notice--info svg{color:#2563eb}.refund-method-selector__notice--muted{background:#f8fafc;border:1px solid #e2e8f0;color:#64748b;box-shadow:0 1px 3px #0000000d}.refund-method-selector__notice--muted svg{color:#94a3b8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
300
+ }
301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HotelRefundMethodSelectorComponent, decorators: [{
302
+ type: Component,
303
+ args: [{ selector: 'almatar-hotel-refund-method-selector', standalone: true, imports: [CommonModule, CurrencyCodeIconComponent], template: "<div class=\"refund-method-selector\">\n <div class=\"refund-method-selector__header\">\n @if (showBack) {\n <button\n type=\"button\"\n class=\"refund-method-selector__close\"\n (click)=\"back()\"\n aria-label=\"Back\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M19 12H5M12 19l-7-7 7-7\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n <div class=\"refund-method-selector__header-text\">\n <h3 class=\"refund-method-selector__title\">\n Refund Method\n </h3>\n <span class=\"refund-method-selector__sub\"\n >Booking ID #{{\n displayBookingId()\n }}</span\n >\n </div>\n <!-- @if (showCloseButton()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__close\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 18L18 6M6 6L18 18\"\n stroke=\"#1B1A1F\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n } -->\n </div>\n\n <div class=\"refund-method-selector__amount\">\n <span>You will get back</span>\n <strong>\n @if (currencyObj) {\n <app-currency-code-icon\n [size]=\"currencySizeEnum\"\n [currency]=\"currencyObj\"\n ></app-currency-code-icon>\n }\n {{ fmtAmount(totalRefundAmount()) }}\n </strong>\n </div>\n\n <!-- Wallet option -->\n @if (showWallet()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'wallet' && !hasSingleOption()\n \"\n (click)=\"select('wallet')\"\n >\n <span class=\"refund-method-selector__icon\">\n <svg\n width=\"22\"\n height=\"24\"\n viewBox=\"0 0 22 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_25478_1880)\">\n <path\n d=\"M2.67676 20.8852C1.74902 20.8852 1.04704 20.6533 0.570801 20.1894C0.100749 19.7256 -0.134277 19.0359 -0.134277 18.1206V8.51852C-0.134277 7.77015 0.0265299 7.1764 0.348145 6.73727C0.675944 6.29815 1.18929 5.97344 1.88818 5.76315L13.7817 2.3027C14.4559 2.11097 15.0589 2.06149 15.5908 2.15427C16.1289 2.24704 16.5495 2.49443 16.8525 2.89645C17.1618 3.29229 17.3164 3.85511 17.3164 4.58493V6.25485L15.8042 6.38473V4.45505C15.8042 4.04684 15.6898 3.76543 15.4609 3.61081C15.2321 3.45619 14.895 3.44382 14.4497 3.5737L7.27832 5.55905C7.19173 5.5776 7.15153 5.61471 7.15771 5.67038C7.1639 5.71986 7.20719 5.7446 7.2876 5.7446H17.5947C18.5286 5.7446 19.2275 5.97962 19.6914 6.44968C20.1615 6.91354 20.3965 7.60316 20.3965 8.51852V10.8564H18.8936V8.60202C18.8936 8.15671 18.7791 7.81963 18.5503 7.59079C18.3215 7.36195 17.9937 7.24753 17.5669 7.24753H2.69531C2.26855 7.24753 1.94076 7.36195 1.71191 7.59079C1.48926 7.81963 1.37793 8.15671 1.37793 8.60202V18.0371C1.37793 18.4824 1.48926 18.8164 1.71191 19.039C1.94076 19.2679 2.26855 19.3823 2.69531 19.3823H17.5669C17.9937 19.3823 18.3215 19.2679 18.5503 19.039C18.7791 18.8164 18.8936 18.4824 18.8936 18.0371V15.4394H20.3965V18.1206C20.3965 19.0359 20.1615 19.7256 19.6914 20.1894C19.2275 20.6533 18.5286 20.8852 17.5947 20.8852H2.67676ZM16.769 14.2334C16.5093 14.2334 16.2866 14.1437 16.1011 13.9643C15.9217 13.7788 15.832 13.5561 15.832 13.2964C15.832 13.0366 15.9217 12.817 16.1011 12.6377C16.2866 12.4521 16.5093 12.3593 16.769 12.3593C17.0288 12.3593 17.2484 12.4521 17.4277 12.6377C17.6133 12.817 17.7061 13.0366 17.7061 13.2964C17.7061 13.5561 17.6133 13.7788 17.4277 13.9643C17.2484 14.1437 17.0288 14.2334 16.769 14.2334ZM16.6763 16.2187C15.7424 16.2187 14.9878 15.9775 14.4126 15.4951C13.8374 15.0065 13.5498 14.2767 13.5498 13.3056C13.5498 12.3346 13.8374 11.6079 14.4126 11.1255C14.9878 10.643 15.7424 10.4018 16.6763 10.4018H20.1089C20.6903 10.4018 21.1479 10.5812 21.4819 10.9399C21.8221 11.2986 21.9922 11.7439 21.9922 12.2758V14.3354C21.9922 14.8673 21.8221 15.3157 21.4819 15.6806C21.1479 16.0394 20.6903 16.2187 20.1089 16.2187H16.6763ZM16.769 14.9756H19.7842C20.1058 14.9756 20.347 14.8921 20.5078 14.7251C20.6748 14.5519 20.7583 14.3138 20.7583 14.0107V12.6006C20.7583 12.2975 20.6748 12.0625 20.5078 11.8955C20.347 11.7223 20.1058 11.6357 19.7842 11.6357H16.769C16.1196 11.6357 15.6372 11.7841 15.3218 12.081C15.0125 12.3779 14.8579 12.7861 14.8579 13.3056C14.8579 13.8252 15.0125 14.2334 15.3218 14.5302C15.6372 14.8271 16.1196 14.9756 16.769 14.9756Z\"\n fill=\"black\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_25478_1880\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">{{ walletLabel() }}</span>\n <span class=\"refund-method-selector__desc\">Usable for future bookings</span>\n <span\n class=\"refund-method-selector__badge refund-method-selector__badge--instant\"\n >\n <svg\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n Instant\n </span>\n </span>\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n </button>\n }\n\n <!-- Original Payment Method option -->\n @if (showOriginal()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'originalPaymentMethod' && !hasSingleOption()\n \"\n (click)=\"select('originalPaymentMethod')\"\n >\n <span class=\"refund-method-selector__icon\">\n @if (isSpecialGatewayMethod()) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M21 12a2.25 2.25 0 0 0-2.25-2.25H15a3 3 0 1 1-6 0H5.25A2.25 2.25 0 0 0 3 12m18 0v6a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 18v-6m18 0V9M3 12V9m18 0a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 9m18 0V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v3\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n } @else {\n <ng-container *ngTemplateOutlet=\"cardIcon\"></ng-container>\n }\n <ng-template #cardIcon>\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.25 8.25H21.75M2.25 9H21.75M5.25 14.25H11.25M5.25 16.5H8.25M4.5 19.5H19.5C20.0967 19.5 20.669 19.2629 21.091 18.841C21.5129 18.419 21.75 17.8467 21.75 17.25V6.75C21.75 6.15326 21.5129 5.58097 21.091 5.15901C20.669 4.73705 20.0967 4.5 19.5 4.5H4.5C3.90326 4.5 3.33097 4.73705 2.90901 5.15901C2.48705 5.58097 2.25 6.15326 2.25 6.75V17.25C2.25 17.8467 2.48705 18.419 2.90901 18.841C3.33097 19.2629 3.90326 19.5 4.5 19.5Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </ng-template>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">{{\n originalPaymentLabel()\n }}</span>\n <span class=\"refund-method-selector__desc\">{{\n getOriginalPaymentDescription()\n }}</span>\n @if (!showAsLoyalty()) {\n <span\n class=\"refund-method-selector__badge\"\n [class.refund-method-selector__badge--days]=\"!showAsLoyalty()\"\n [class.refund-method-selector__badge--loyalty]=\"showAsLoyalty()\"\n >\n @if (!showAsLoyalty()) {\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.30078 6.50195C3.20312 6.50195 3.12174 6.4694 3.05664 6.4043C2.99154 6.33919 2.95898 6.25781 2.95898 6.16016C2.95898 6.06576 2.99154 5.986 3.05664 5.9209C3.12174 5.85579 3.20312 5.82324 3.30078 5.82324H5.5127V2.86914C5.5127 2.77474 5.54525 2.69499 5.61035 2.62988C5.67546 2.56478 5.75521 2.53223 5.84961 2.53223C5.94727 2.53223 6.02865 2.56478 6.09375 2.62988C6.15885 2.69499 6.19141 2.77474 6.19141 2.86914V6.16016C6.19141 6.25781 6.15885 6.33919 6.09375 6.4043C6.02865 6.4694 5.94727 6.50195 5.84961 6.50195H3.30078ZM5.85449 10.9551C5.16764 10.9551 4.52311 10.8249 3.9209 10.5645C3.31868 10.3073 2.78971 9.95085 2.33398 9.49512C1.87826 9.03939 1.52018 8.51042 1.25977 7.9082C1.0026 7.30599 0.874023 6.66146 0.874023 5.97461C0.874023 5.28776 1.0026 4.64323 1.25977 4.04102C1.52018 3.4388 1.87826 2.90983 2.33398 2.4541C2.78971 1.99512 3.31868 1.63704 3.9209 1.37988C4.52311 1.12272 5.16764 0.994141 5.85449 0.994141C6.54134 0.994141 7.18587 1.12272 7.78809 1.37988C8.3903 1.63704 8.91927 1.99512 9.375 2.4541C9.83073 2.90983 10.1872 3.4388 10.4443 4.04102C10.7048 4.64323 10.835 5.28776 10.835 5.97461C10.835 6.66146 10.7048 7.30599 10.4443 7.9082C10.1872 8.51042 9.83073 9.03939 9.375 9.49512C8.91927 9.95085 8.3903 10.3073 7.78809 10.5645C7.18587 10.8249 6.54134 10.9551 5.85449 10.9551ZM5.85449 10.125C6.42741 10.125 6.96452 10.0176 7.46582 9.80273C7.96712 9.58789 8.4082 9.29004 8.78906 8.90918C9.16992 8.52832 9.46777 8.08724 9.68262 7.58594C9.89746 7.08464 10.0049 6.54753 10.0049 5.97461C10.0049 5.40169 9.89746 4.86458 9.68262 4.36328C9.46777 3.85872 9.16992 3.41764 8.78906 3.04004C8.4082 2.65918 7.96712 2.36133 7.46582 2.14648C6.96452 1.93164 6.42741 1.82422 5.85449 1.82422C5.28158 1.82422 4.74447 1.93164 4.24316 2.14648C3.74186 2.36133 3.30078 2.65918 2.91992 3.04004C2.53906 3.41764 2.24121 3.85872 2.02637 4.36328C1.81152 4.86458 1.7041 5.40169 1.7041 5.97461C1.7041 6.54753 1.81152 7.08464 2.02637 7.58594C2.24121 8.08724 2.53906 8.52832 2.91992 8.90918C3.30078 9.29004 3.74186 9.58789 4.24316 9.80273C4.74447 10.0176 5.28158 10.125 5.85449 10.125Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n } @else {\n <ng-container *ngTemplateOutlet=\"loyaltyBadgeIcon\"></ng-container>\n }\n <ng-template #loyaltyBadgeIcon>\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"5\"\n stroke=\"#0B54C2\"\n stroke-width=\"1.2\"\n />\n <path\n d=\"M6 5.5v3M6 3.9v.01\"\n stroke=\"#0B54C2\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </ng-template>\n\n {{ paymentBadgeKey() }}\n </span>\n }\n <!-- showing loyalty note for hotels -->\n @if (showLoyaltyPointsNote() && showAsLoyalty()) {\n <div\n class=\"refund-method-selector__notice refund-method-selector__notice--info\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M4.1582 21.1777C3.60482 21.1777 3.12956 21.0605 2.73242 20.8262C2.33529 20.5918 2.0293 20.2728 1.81445 19.8691C1.59961 19.472 1.49219 19.026 1.49219 18.5312C1.49219 18.056 1.61914 17.6003 1.87305 17.1641L9.45117 3.96094C9.69857 3.51823 10.0273 3.1862 10.4375 2.96484C10.8477 2.73698 11.2773 2.62305 11.7266 2.62305C12.1758 2.62305 12.6022 2.73698 13.0059 2.96484C13.416 3.1862 13.748 3.51823 14.002 3.96094L21.5801 17.1641C21.7038 17.3789 21.7982 17.6035 21.8633 17.8379C21.9284 18.0723 21.9609 18.3034 21.9609 18.5312C21.9609 19.026 21.8535 19.472 21.6387 19.8691C21.4238 20.2728 21.1178 20.5918 20.7207 20.8262C20.3236 21.0605 19.8483 21.1777 19.2949 21.1777H4.1582ZM4.16797 19.6445H19.2754C19.6139 19.6445 19.8809 19.5306 20.0762 19.3027C20.278 19.0814 20.3789 18.821 20.3789 18.5215C20.3789 18.3132 20.3268 18.1081 20.2227 17.9062L12.6543 4.70312C12.5501 4.52083 12.4134 4.39062 12.2441 4.3125C12.0814 4.22786 11.9089 4.18555 11.7266 4.18555C11.5443 4.18555 11.3685 4.22786 11.1992 4.3125C11.0299 4.39062 10.8932 4.52083 10.7891 4.70312L3.2207 17.8965C3.16862 18.0007 3.12956 18.1081 3.10352 18.2188C3.08398 18.3294 3.07422 18.4303 3.07422 18.5215C3.07422 18.821 3.17188 19.0814 3.36719 19.3027C3.5625 19.5306 3.82943 19.6445 4.16797 19.6445ZM11.7266 14.5859C11.2253 14.5859 10.9681 14.3288 10.9551 13.8145L10.8281 8.64844C10.8216 8.40104 10.8997 8.19596 11.0625 8.0332C11.2318 7.87044 11.4499 7.78906 11.7168 7.78906C11.9772 7.78906 12.1921 7.8737 12.3613 8.04297C12.5371 8.20573 12.6217 8.41081 12.6152 8.6582L12.4688 13.8145C12.4622 14.3288 12.2148 14.5859 11.7266 14.5859ZM11.7266 17.7598C11.4401 17.7598 11.1927 17.6621 10.9844 17.4668C10.776 17.265 10.6719 17.0241 10.6719 16.7441C10.6719 16.4642 10.776 16.2266 10.9844 16.0312C11.1927 15.8294 11.4401 15.7285 11.7266 15.7285C12.013 15.7285 12.2604 15.8262 12.4688 16.0215C12.6771 16.2168 12.7812 16.4577 12.7812 16.7441C12.7812 17.0306 12.6738 17.2715 12.459 17.4668C12.2507 17.6621 12.0065 17.7598 11.7266 17.7598Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n <span>Loyalty points will be refunded instantly to your account</span>\n </div>\n }\n </span>\n <span class=\"refund-method-selector__option-end\">\n @if (isMadaMethod()) {\n <span class=\"refund-method-selector__mada-logo\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n </span>\n </button>\n }\n\n <!-- Split Refund option -->\n @if (showSplit()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option refund-method-selector__option--split\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'split' && !hasSingleOption()\n \"\n (click)=\"select('split')\"\n >\n <span class=\"refund-method-selector__icon\">\n <svg\n width=\"45\"\n height=\"45\"\n viewBox=\"0 0 45 45\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"0.5\"\n y=\"0.5\"\n width=\"44\"\n height=\"44\"\n rx=\"7.5\"\n stroke=\"#D9D9DE\"\n />\n <g clip-path=\"url(#clip0_24079_7906_selector)\">\n <path\n d=\"M28.1621 14.9951C28.1621 14.7998 28.2142 14.6501 28.3184 14.5459C28.429 14.4417 28.5853 14.3896 28.7871 14.3896C28.8783 14.3896 28.9661 14.4059 29.0508 14.4385C29.1419 14.4645 29.2233 14.5068 29.2949 14.5654L32.9863 17.6318C33.1426 17.7686 33.2207 17.9248 33.2207 18.1006C33.2207 18.2764 33.1426 18.4294 32.9863 18.5596L29.2949 21.6162C29.2233 21.6748 29.1419 21.7204 29.0508 21.7529C28.9661 21.7855 28.8783 21.8018 28.7871 21.8018C28.5853 21.8018 28.429 21.7497 28.3184 21.6455C28.2142 21.5348 28.1621 21.3818 28.1621 21.1865V14.9951ZM10.7793 28.2373C10.7793 27.9964 10.8607 27.8011 11.0234 27.6514C11.1927 27.5016 11.4108 27.4268 11.6777 27.4268H13.9531C14.4479 27.4268 14.8841 27.3258 15.2617 27.124C15.6458 26.9222 16.0495 26.5739 16.4727 26.0791L22.3809 19.1748C22.9668 18.4912 23.5332 18.016 24.0801 17.749C24.627 17.4821 25.3073 17.3486 26.1211 17.3486H29.5977C29.8255 17.3486 30.0176 17.43 30.1738 17.5928C30.3366 17.749 30.418 17.9411 30.418 18.1689C30.418 18.3903 30.3366 18.5824 30.1738 18.7451C30.0176 18.9014 29.8255 18.9795 29.5977 18.9795H26.1699C25.8118 18.9795 25.4863 19.0251 25.1934 19.1162C24.9069 19.2008 24.6302 19.3408 24.3633 19.5361C24.1029 19.7314 23.8327 19.9919 23.5527 20.3174L17.6348 27.2217C17.0423 27.9053 16.4727 28.3805 15.9258 28.6475C15.3854 28.9144 14.7116 29.0479 13.9043 29.0479H11.6777C11.4108 29.0479 11.1927 28.973 11.0234 28.8232C10.8607 28.6735 10.7793 28.4782 10.7793 28.2373ZM28.1621 31.4795V25.2881C28.1621 25.0928 28.2142 24.943 28.3184 24.8389C28.429 24.7282 28.5853 24.6729 28.7871 24.6729C28.8783 24.6729 28.9661 24.6891 29.0508 24.7217C29.1419 24.7542 29.2233 24.7998 29.2949 24.8584L32.9863 27.915C33.1426 28.0452 33.2207 28.1982 33.2207 28.374C33.2207 28.5498 33.1426 28.7061 32.9863 28.8428L29.2949 31.9092C29.2233 31.9678 29.1419 32.0101 29.0508 32.0361C28.9661 32.0687 28.8783 32.085 28.7871 32.085C28.5853 32.085 28.429 32.0329 28.3184 31.9287C28.2142 31.8245 28.1621 31.6748 28.1621 31.4795ZM10.7793 18.2373C10.7793 17.9964 10.8607 17.8011 11.0234 17.6514C11.1927 17.5016 11.4108 17.4268 11.6777 17.4268H13.9043C14.7116 17.4268 15.3854 17.5602 15.9258 17.8271C16.4727 18.0941 17.0423 18.5693 17.6348 19.2529L23.5527 26.1572C23.8327 26.4827 24.1029 26.7432 24.3633 26.9385C24.6302 27.1338 24.9069 27.277 25.1934 27.3682C25.4863 27.4528 25.8118 27.4951 26.1699 27.4951H29.5977C29.8255 27.4951 30.0176 27.5765 30.1738 27.7393C30.3366 27.8955 30.418 28.0843 30.418 28.3057C30.418 28.5335 30.3366 28.7288 30.1738 28.8916C30.0176 29.0479 29.8255 29.126 29.5977 29.126H26.1211C25.3073 29.126 24.627 28.9925 24.0801 28.7256C23.5332 28.4587 22.9668 27.9834 22.3809 27.2998L16.4727 20.3955C16.0495 19.9007 15.6458 19.5524 15.2617 19.3506C14.8841 19.1488 14.4479 19.0479 13.9531 19.0479H11.6777C11.4108 19.0479 11.1927 18.973 11.0234 18.8232C10.8607 18.6735 10.7793 18.4782 10.7793 18.2373Z\"\n fill=\"#1B1A1F\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_24079_7906_selector\">\n <rect\n width=\"24\"\n height=\"24\"\n fill=\"white\"\n transform=\"translate(10 11.5)\"\n />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">Split Refund</span>\n <span class=\"refund-method-selector__desc\">Returned to your original payment method</span>\n </span>\n <strong class=\"refund-method-selector__split-total\">\n @if (currencyObj) {\n <app-currency-code-icon\n [currency]=\"currencyObj\"\n ></app-currency-code-icon>\n }\n {{ fmtAmount(totalRefundAmount()) }}\n </strong>\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n\n <span class=\"refund-method-selector__split-breakdown\">\n @for (row of splitRefundRows(); track $index) {\n <span class=\"refund-method-selector__split-row\">\n <span class=\"refund-method-selector__split-label\">\n {{ row.label }}\n @if (row.isMada) {\n <span\n class=\"refund-method-selector__mada-logo\"\n aria-hidden=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n </span>\n <strong>\n @if (currencyObj) {\n <app-currency-code-icon\n [currency]=\"currencyObj\"\n ></app-currency-code-icon>\n }\n {{ fmtAmount(row.value) }}\n </strong>\n </span>\n <span\n class=\"refund-method-selector__badge\"\n [class.refund-method-selector__badge--instant]=\"row.instant\"\n [class.refund-method-selector__badge--days]=\"!row.instant\"\n >\n @if (row.instant) {\n <svg\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n }\n @if (!row.instant) {\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.30078 6.50195C3.20312 6.50195 3.12174 6.4694 3.05664 6.4043C2.99154 6.33919 2.95898 6.25781 2.95898 6.16016C2.95898 6.06576 2.99154 5.986 3.05664 5.9209C3.12174 5.85579 3.20312 5.82324 3.30078 5.82324H5.5127V2.86914C5.5127 2.77474 5.54525 2.69499 5.61035 2.62988C5.67546 2.56478 5.75521 2.53223 5.84961 2.53223C5.94727 2.53223 6.02865 2.56478 6.09375 2.62988C6.15885 2.69499 6.19141 2.77474 6.19141 2.86914V6.16016C6.19141 6.25781 6.15885 6.33919 6.09375 6.4043C6.02865 6.4694 5.94727 6.50195 5.84961 6.50195H3.30078ZM5.85449 10.9551C5.16764 10.9551 4.52311 10.8249 3.9209 10.5645C3.31868 10.3073 2.78971 9.95085 2.33398 9.49512C1.87826 9.03939 1.52018 8.51042 1.25977 7.9082C1.0026 7.30599 0.874023 6.66146 0.874023 5.97461C0.874023 5.28776 1.0026 4.64323 1.25977 4.04102C1.52018 3.4388 1.87826 2.90983 2.33398 2.4541C2.78971 1.99512 3.31868 1.63704 3.9209 1.37988C4.52311 1.12272 5.16764 0.994141 5.85449 0.994141C6.54134 0.994141 7.18587 1.12272 7.78809 1.37988C8.3903 1.63704 8.91927 1.99512 9.375 2.4541C9.83073 2.90983 10.1872 3.4388 10.4443 4.04102C10.7048 4.64323 10.835 5.28776 10.835 5.97461C10.835 6.66146 10.7048 7.30599 10.4443 7.9082C10.1872 8.51042 9.83073 9.03939 9.375 9.49512C8.91927 9.95085 8.3903 10.3073 7.78809 10.5645C7.18587 10.8249 6.54134 10.9551 5.85449 10.9551ZM5.85449 10.125C6.42741 10.125 6.96452 10.0176 7.46582 9.80273C7.96712 9.58789 8.4082 9.29004 8.78906 8.90918C9.16992 8.52832 9.46777 8.08724 9.68262 7.58594C9.89746 7.08464 10.0049 6.54753 10.0049 5.97461C10.0049 5.40169 9.89746 4.86458 9.68262 4.36328C9.46777 3.85872 9.16992 3.41764 8.78906 3.04004C8.4082 2.65918 7.96712 2.36133 7.46582 2.14648C6.96452 1.93164 6.42741 1.82422 5.85449 1.82422C5.28158 1.82422 4.74447 1.93164 4.24316 2.14648C3.74186 2.36133 3.30078 2.65918 2.91992 3.04004C2.53906 3.41764 2.24121 3.85872 2.02637 4.36328C1.81152 4.86458 1.7041 5.40169 1.7041 5.97461C1.7041 6.54753 1.81152 7.08464 2.02637 7.58594C2.24121 8.08724 2.53906 8.52832 2.91992 8.90918C3.30078 9.29004 3.74186 9.58789 4.24316 9.80273C4.74447 10.0176 5.28158 10.125 5.85449 10.125Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n }\n {{ row.instant ? 'Instant' : paymentBadgeKey() }}\n </span>\n\n @if (row.isLoyalty) {\n <div\n class=\"refund-method-selector__notice refund-method-selector__notice--info\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n />\n <path\n d=\"M12 11v5.5M12 8v.01\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span>Loyalty points will be refunded instantly to your account</span>\n </div>\n }\n }\n </span>\n </button>\n }\n</div>\n\n<ng-template #madaLogo>\n <svg\n width=\"43\"\n height=\"15\"\n viewBox=\"0 0 43 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_rms_mada)\">\n <path d=\"M18.1894 8.6543H0V14.9933H18.1894V8.6543Z\" fill=\"#84B740\" />\n <path d=\"M18.1894 0H0V6.34463H18.1894V0Z\" fill=\"#259BD6\" />\n <path\n d=\"M36.3779 13.7034L36.2969 13.7203C36.016 13.7768 35.9134 13.7994 35.7082 13.7994C35.233 13.7994 34.6713 13.5452 34.6713 12.3475C34.6713 11.7316 34.7685 10.9124 35.6542 10.9124H35.6596C35.8108 10.9237 35.9836 10.9407 36.3077 11.0424L36.3779 11.065V13.7034ZM36.5237 7.73164L36.3779 7.75989V9.97458L36.2483 9.93503L36.2105 9.92373C36.0647 9.87853 35.7298 9.77684 35.4058 9.77684C33.6344 9.77684 33.2617 11.178 33.2617 12.3531C33.2617 13.9633 34.1258 14.8898 35.6326 14.8898C36.2699 14.8898 36.7397 14.822 37.215 14.6582C37.6524 14.5113 37.8091 14.3023 37.8091 13.8559V7.5C37.3878 7.5791 36.9504 7.65819 36.5237 7.73164Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M41.651 13.7385L41.5754 13.7611L41.3053 13.8345C41.0515 13.9023 40.8247 13.9419 40.6519 13.9419C40.236 13.9419 39.9876 13.7272 39.9876 13.36C39.9876 13.1227 40.0902 12.7215 40.7707 12.7215H41.651V13.7385ZM41.0299 9.74414C40.4844 9.74414 39.9228 9.84584 39.2261 10.0718L38.7724 10.2131L38.9236 11.2865L39.3665 11.134C39.831 10.9758 40.4088 10.8741 40.8409 10.8741C41.0353 10.8741 41.6294 10.8741 41.6294 11.5464V11.8402H40.8031C39.2963 11.8402 38.5996 12.343 38.5996 13.4221C38.5996 14.343 39.2423 14.8967 40.3224 14.8967C40.6573 14.8967 41.1217 14.8289 41.5214 14.7272L41.543 14.7215L41.5646 14.7272L41.6996 14.7498C42.1208 14.8289 42.5583 14.908 42.9849 14.9927V11.4673C42.9849 10.3261 42.3261 9.74414 41.0299 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M31.1527 13.7385L31.0771 13.7611L30.807 13.8345C30.5532 13.9023 30.3318 13.9419 30.1536 13.9419C29.7377 13.9419 29.4893 13.7272 29.4893 13.36C29.4893 13.1227 29.5919 12.7215 30.267 12.7215H31.1473L31.1527 13.7385ZM30.537 9.74414C29.9861 9.74414 29.4299 9.84584 28.7332 10.0718L28.2795 10.2131L28.4308 11.2865L28.8736 11.134C29.3381 10.9758 29.9159 10.8741 30.348 10.8741C30.5424 10.8741 31.1365 10.8741 31.1365 11.5464V11.8402H30.3102C28.8034 11.8402 28.1013 12.343 28.1013 13.4221C28.1013 14.343 28.744 14.8967 29.8295 14.8967C30.1644 14.8967 30.6288 14.8289 31.0285 14.7272L31.0501 14.7215L31.0717 14.7272L31.2013 14.7498C31.6279 14.8289 32.06 14.908 32.4866 14.9984V11.473C32.492 10.3204 31.8332 9.74414 30.537 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M25.4701 9.7576C24.7842 9.7576 24.2172 9.99489 24.0065 10.0966L23.9525 10.1248L23.9039 10.0853C23.6123 9.86495 23.1856 9.75195 22.5916 9.75195C22.0677 9.75195 21.5762 9.83105 21.0416 9.99489C20.5825 10.1418 20.4043 10.3734 20.4043 10.8085V14.8367H21.8409V11.1135L21.9111 11.0909C22.2027 10.9892 22.3755 10.9723 22.543 10.9723C22.9588 10.9723 23.1694 11.2039 23.1694 11.6559V14.8423H24.5844V11.5938C24.5844 11.4017 24.5466 11.2887 24.5412 11.2661L24.4926 11.17L24.5898 11.1248C24.8058 11.0231 25.0435 10.9723 25.2919 10.9723C25.5781 10.9723 25.9184 11.0909 25.9184 11.6559V14.8423H27.3279V11.509C27.3279 10.3282 26.7231 9.7576 25.4701 9.7576Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M40.5866 4.13559C40.3759 4.13559 40.0249 4.113 39.7495 4.0565L39.6684 4.03955V1.86441C39.6684 1.68362 39.636 1.57062 39.6306 1.55367L39.5874 1.46328L39.6793 1.42373C39.7009 1.41243 39.7225 1.40678 39.7495 1.39548L39.7657 1.38418C39.7981 1.37288 39.8305 1.36158 39.8629 1.35028C39.8791 1.34463 39.8899 1.33898 39.9007 1.33898C40.2193 1.24859 40.511 1.25989 40.6406 1.24859H40.646C41.5263 1.24859 41.6289 2.0678 41.6289 2.68362C41.6235 3.88136 41.0564 4.13559 40.5866 4.13559ZM40.5812 0C40.5704 0 40.5542 0 40.5434 0C39.7171 0 38.8692 0.237288 38.5667 0.700565C38.4047 0.926554 38.3129 1.20904 38.3075 1.54237V3.78531C38.3075 3.9774 38.2697 4.05085 38.2643 4.0678L38.2157 4.16384H35.6072V2.60452H35.6018C35.5694 0.960452 34.6404 0.0564972 33.2957 0.0564972H33.1391H31.9833C31.9293 0.457627 31.8861 0.740113 31.8321 1.14124H33.1391C33.8249 1.14124 34.1868 1.75141 34.1868 2.68927V4.25989L34.095 4.20904C34.0788 4.20339 33.9654 4.16384 33.7871 4.16384H31.5297C31.4865 4.46328 31.4325 4.85311 31.373 5.24294H38.3129C38.5505 5.19209 38.8259 5.14689 39.0636 5.10735C39.4146 5.28814 40.0681 5.38418 40.5164 5.38418C42.0231 5.38418 43.0007 4.32768 43.0007 2.70057C42.9953 1.0904 42.0501 0.0338983 40.5812 0Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M28.4189 5.90821H28.4837C29.9905 5.90821 30.6925 5.38844 30.6925 4.10595C30.6925 3.18505 30.0499 2.45059 28.9697 2.45059H27.5818C27.1659 2.45059 26.9175 2.202 26.9175 1.78392C26.9175 1.50143 27.0201 1.15115 27.7006 1.15115H30.7357C30.8006 0.738723 30.833 0.478836 30.8924 0.0664062H27.7384C26.2694 0.0664062 25.5295 0.710474 25.5295 1.78392C25.5295 2.84607 26.1722 3.39974 27.2523 3.39974H28.6403C29.0561 3.39974 29.3046 3.74437 29.3046 4.10595C29.3046 4.34324 29.202 4.83477 28.5269 4.83477H28.2947L23.8499 4.82347H23.0398C22.3539 4.82347 21.8733 4.41669 21.8733 3.47319V2.82347C21.8733 1.84042 22.2459 1.23025 23.0398 1.23025H24.3576C24.417 0.812169 24.4548 0.546632 24.5088 0.151152H22.867H22.7104C21.3656 0.151152 20.4367 1.09466 20.4043 2.73872V2.80087V3.47319C20.4367 5.11725 21.3656 5.90256 22.7104 5.90256H22.867H24.0227L26.4314 5.90821H27.868H28.4189Z\"\n fill=\"#747583\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_rms_mada\">\n <rect width=\"43\" height=\"15\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n</ng-template>\n", styles: [".refund-method-selector{display:flex;flex-direction:column;gap:16px}.refund-method-selector strong{direction:ltr;display:inline-flex;align-items:center;gap:4px}.refund-method-selector__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin:-40px -16px 0;padding:16px;background:var(--almatar-neutral-surface-card, #fff);border-bottom:1px solid var(--almatar-primary-border-disabled)}.refund-method-selector__close{flex-shrink:0;display:flex;align-items:center;justify-content:center;background:none;border:none;padding:2px;color:var(--almatar-neutral-text-primary-static, #1c1c28);cursor:pointer}.refund-method-selector__close svg{display:block;flex-shrink:0;stroke:currentColor}:host-context(.rtl) .refund-method-selector__close:first-child svg{transform:scaleX(-1)}.refund-method-selector__header-text{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:4px;text-align:start}.refund-method-selector__title{font-size:calc(17 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:var(--almatar-neutral-text-primary-static);margin:0}.refund-method-selector__sub{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static)}.refund-method-selector__amount{display:flex;align-items:center;justify-content:space-between;padding:20px;background:linear-gradient(135deg,#f0fdf5,#dcfce7);border:1px solid #bbf7d0;border-radius:12px;box-shadow:0 2px 8px #15803c1a}.refund-method-selector__amount span{font-size:calc(15 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:600;color:#15803c}.refund-method-selector__amount strong{display:inline-flex;align-items:center;gap:6px;font-size:calc(28 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;color:#15803c;font-variant-numeric:tabular-nums}.refund-method-selector__option{display:flex;align-items:flex-start;gap:14px;width:100%;text-align:start;padding:18px;border-radius:12px;border:2px solid #e2e8f0;background:#fff;cursor:pointer;transition:all .2s ease;box-shadow:0 1px 3px #0000000d}.refund-method-selector__option:hover:not(.refund-method-selector__option--active){border-color:#cbd5e1;box-shadow:0 4px 12px #00000014;transform:translateY(-1px)}.refund-method-selector__option--active{border-color:#3b82f6;background:linear-gradient(135deg,#eff6ff,#dbeafe);box-shadow:0 0 0 3px #3b82f61a,0 4px 12px #3b82f626}.refund-method-selector__option--static{flex-direction:column;align-items:stretch;cursor:default}.refund-method-selector__option--static .refund-method-selector__name{font-weight:var(--almatar-font-weight-medium)}.refund-method-selector__credit-shell-row{display:flex;align-items:flex-start;gap:12px}.refund-method-selector__section-title{margin:0;font-size:calc(15 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:var(--almatar-neutral-text-primary-static)}.refund-method-selector__name-row{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%}.refund-method-selector__item-amount{flex-shrink:0;font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:var(--almatar-neutral-text-primary-static);font-variant-numeric:tabular-nums}.refund-method-selector__option--addons{flex-direction:column;align-items:stretch;cursor:default;gap:0}.refund-method-selector__option--addons .refund-method-selector__notice{margin-top:14px}.refund-method-selector__addon-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 0;font-size:calc(15 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-primary-static);border-bottom:1px solid var(--almatar-primary-border-disabled)}.refund-method-selector__addon-row:first-of-type{padding-top:0}.refund-method-selector__addon-row strong{color:var(--almatar-neutral-text-secondary-static);font-weight:var(--almatar-font-weight-regular)}.refund-method-selector__addon-row--total{padding-bottom:0;border-bottom:none;font-weight:var(--almatar-font-weight-semibold);color:var(--almatar-neutral-text-primary-static)}.refund-method-selector__addon-row--total strong{color:var(--almatar-neutral-text-primary-static);font-weight:var(--almatar-font-weight-semibold)}.refund-method-selector__icon{flex-shrink:0;width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#f8fafc,#f1f5f9);border:1px solid #e2e8f0;color:#1e293b;box-shadow:0 2px 4px #0000000a;transition:all .2s ease}.refund-method-selector__option:hover .refund-method-selector__icon{background:linear-gradient(135deg,#eff6ff,#dbeafe);border-color:#3b82f6;box-shadow:0 4px 8px #3b82f626}.refund-method-selector__option--active .refund-method-selector__icon{background:linear-gradient(135deg,#3b82f6,#2563eb);border-color:#2563eb;color:#fff;box-shadow:0 4px 12px #3b82f64d}.refund-method-selector__body{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:4px}.refund-method-selector__name{font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:var(--almatar-neutral-text-primary-static);display:inline-flex;align-items:center;gap:6px}.refund-method-selector__desc{font-size:calc(13 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static)}.refund-method-selector__badge{margin-top:6px;font-size:calc(11 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:5px 12px;border-radius:20px;display:inline-flex;align-items:center;gap:5px;box-shadow:0 2px 4px #00000014}.refund-method-selector__badge svg{flex-shrink:0}.refund-method-selector__badge--instant{background:linear-gradient(135deg,#dcfce7,#bbf7d0);color:#15803c;border:1px solid #86efac}.refund-method-selector__badge--days,.refund-method-selector__badge--loyalty{background:linear-gradient(135deg,#dbeafe,#bfdbfe);color:#1e40af;border:1px solid #93c5fd}.refund-method-selector__option-end{flex-shrink:0;display:flex;align-items:center;gap:8px}.refund-method-selector__radio{flex-shrink:0;width:22px;height:22px;margin-top:2px;border-radius:50%;border:2px solid #cbd5e1;position:relative;background:#fff;transition:all .2s ease;box-shadow:0 1px 3px #0000001a}.refund-method-selector__option:hover .refund-method-selector__radio{border-color:#3b82f6;box-shadow:0 2px 6px #3b82f633}.refund-method-selector__option--active .refund-method-selector__radio{border-color:#3b82f6;background:#fff;box-shadow:0 0 0 3px #3b82f61a,0 2px 6px #3b82f633}.refund-method-selector__option--active .refund-method-selector__radio:after{content:\"\";position:absolute;inset:4px;border-radius:50%;background:linear-gradient(135deg,#3b82f6,#2563eb);box-shadow:0 1px 2px #2563eb66}.refund-method-selector__option--split{flex-wrap:wrap}.refund-method-selector__split-total{flex-shrink:0;display:inline-flex;align-items:center;gap:4px;font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:var(--almatar-neutral-text-primary-static);font-variant-numeric:tabular-nums}.refund-method-selector__split-breakdown{flex-basis:calc(100% - 56px);width:calc(100% - 56px);margin-inline-start:56px;display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:12px;padding-top:12px;border-top:1px solid var(--almatar-primary-border-disabled)}.refund-method-selector__split-row{flex:1 1 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-primary-static)}.refund-method-selector__split-row strong{display:inline-flex;align-items:center;gap:4px;font-weight:var(--almatar-font-weight-semibold);font-variant-numeric:tabular-nums}.refund-method-selector__split-label{color:var(--almatar-neutral-text-primary-static);display:inline-flex;align-items:center;gap:6px}.refund-method-selector__mada-logo{display:inline-flex;align-items:center;flex-shrink:0}.refund-method-selector__mada-logo svg{display:block}.refund-method-selector__notice{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:10px;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:500;line-height:1.5}.refund-method-selector__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px}.refund-method-selector__notice--info{background:linear-gradient(135deg,#dbeafe,#eff6ff);border:1px solid #93c5fd;color:#1e40af;box-shadow:0 2px 4px #3b82f61a}.refund-method-selector__notice--info svg{color:#2563eb}.refund-method-selector__notice--muted{background:#f8fafc;border:1px solid #e2e8f0;color:#64748b;box-shadow:0 1px 3px #0000000d}.refund-method-selector__notice--muted svg{color:#94a3b8}\n"] }]
304
+ }], propDecorators: { data: [{
305
+ type: Input
306
+ }], bookingId: [{
307
+ type: Input
308
+ }], currencyObj: [{
309
+ type: Input
310
+ }], refundMethod: [{
311
+ type: Input
312
+ }], showBack: [{
313
+ type: Input
314
+ }], closed: [{
315
+ type: Output
316
+ }], backRequested: [{
317
+ type: Output
318
+ }], methodSelected: [{
319
+ type: Output
320
+ }] } });
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90ZWwtcmVmdW5kLW1ldGhvZC1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvaG90ZWwtY2FuY2VsL2NvbXBvbmVudHMvaG90ZWwtcmVmdW5kLW1ldGhvZC1zZWxlY3Rvci9ob3RlbC1yZWZ1bmQtbWV0aG9kLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvY29tcG9uZW50cy9ob3RlbC1yZWZ1bmQtbWV0aG9kLXNlbGVjdG9yL2hvdGVsLXJlZnVuZC1tZXRob2Qtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDckYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0VBQStFLENBQUM7QUFDMUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0VBQStFLENBQUM7QUFFakgsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixzQkFBc0IsRUFFdEIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQiwyQkFBMkIsRUFDM0Isc0JBQXNCLEVBQ3RCLGtCQUFrQixHQUVuQixNQUFNLG9EQUFvRCxDQUFDOzs7QUFVNUQ7Ozs7Ozs7R0FPRztBQVFILE1BQU0sT0FBTyxr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LEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7K0dBN1dVLGtDQUFrQzttR0FBbEMsa0NBQWtDLGlxQ0NqRC9DLGtpaUNBaWNBLCtyUkRwWlksWUFBWTs7NEZBSVgsa0NBQWtDO2tCQVA5QyxTQUFTOytCQUNFLHNDQUFzQyxjQUNwQyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUseUJBQXlCLENBQUM7OEJBTXJDLElBQUk7c0JBQWhCLEtBQUs7Z0JBU0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFPSSxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDdXJyZW5jeUNvZGVJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvY3VycmVuY3ktY29kZS1pY29uL2N1cnJlbmN5LWNvZGUtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VycmVuY3lTaXplRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2N1cnJlbmN5LWNvZGUtaWNvbi9jdXJyZW5jeS1jb2RlLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IElDdXJyZW5jeSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgSU5TVEFMTE1FTlRfR0FURVdBWV9DT0RFUyxcbiAgSU5URVJOQUxfR0FURVdBWV9DT0RFUyxcbiAgSVJlZnVuZERldGFpbHNEYXRhLFxuICBMT1lBTFRZX0dBVEVXQVlfQ09ERVMsXG4gIE1BREFfR0FURVdBWV9DT0RFUyxcbiAgbm9ybWFsaXplUGF5bWVudEdhdGV3YXlDb2RlLFxuICBQQVlNRU5UX0dBVEVXQVlfTEFCRUxTLFxuICBQYXltZW50R2F0ZXdheUNvZGUsXG4gIFJlZnVuZFByZWZlcnJlZE1ldGhvZCxcbn0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvaS1mbGlnaHQtcmVmdW5kLWRldGFpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZnVuZE1ldGhvZFNwbGl0Um93IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbiAgaW5zdGFudDogYm9vbGVhbjtcbiAgaXNMb3lhbHR5OiBib29sZWFuO1xuICBpc01hZGE/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEhvdGVsIFJlZnVuZC1tZXRob2Qgc2VsZWN0aW9uIHNjcmVlbiAoXCJZb3Ugd2lsbCBnZXQgYmFjayDigKYgLyBXYWxsZXQgLyBDYXJkIC9cbiAqIFNwbGl0IFJlZnVuZFwiKS4gVGFrZXMgdGhlIHJhdyByZWZ1bmQgc25hcHNob3QgKGBkYXRhYCkgYXMgaXRzIHNpbmdsZVxuICogc291cmNlIG9mIHRydXRoIGFuZCBkZXJpdmVzIGV2ZXJ5IGRpc3BsYXkvZWxpZ2liaWxpdHkgZGVjaXNpb24gZnJvbSBpdFxuICogaW50ZXJuYWxseSDigJQgd2hpY2ggb3B0aW9ucyBhcmUgZWxpZ2libGUsIHRoZSBzcGxpdCBicmVha2Rvd24sIGdhdGV3YXkgYW5kXG4gKiBsb3lhbHR5LXByb2dyYW0gbGFiZWwgcmVzb2x1dGlvbiDigJQgc28gY2FsbGVycyBkb24ndCBuZWVkIHRvIHJlcGxpY2F0ZSBhbnlcbiAqIG9mIHRoYXQgbG9naWMgdGhlbXNlbHZlcy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWxtYXRhci1ob3RlbC1yZWZ1bmQtbWV0aG9kLXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ3VycmVuY3lDb2RlSWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ob3RlbC1yZWZ1bmQtbWV0aG9kLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaG90ZWwtcmVmdW5kLW1ldGhvZC1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBIb3RlbFJlZnVuZE1ldGhvZFNlbGVjdG9yQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfZGF0YSA9IHNpZ25hbDxJUmVmdW5kRGV0YWlsc0RhdGEgfCBudWxsIHwgdW5kZWZpbmVkPihudWxsKTtcbiAgQElucHV0KCkgc2V0IGRhdGEodmFsdWU6IElSZWZ1bmREZXRhaWxzRGF0YSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9kYXRhLnNldCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZGF0YSgpOiBJUmVmdW5kRGV0YWlsc0RhdGEgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSgpO1xuICB9XG5cbiAgLyoqIEZhbGxiYWNrIGJvb2tpbmcgaWQgdG8gZGlzcGxheSB3aGVuIGBkYXRhLmJvb2tpbmdJZGAgaXNuJ3Qgc2V0IHlldC4gKi9cbiAgQElucHV0KCkgYm9va2luZ0lkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBjdXJyZW5jeU9iajogSUN1cnJlbmN5IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHJlZnVuZE1ldGhvZDogUmVmdW5kUHJlZmVycmVkTWV0aG9kID0gJ3dhbGxldCc7XG4gIC8qKiBXaGV0aGVyIHRoZSBoZWFkZXIncyBCYWNrIGJ1dHRvbiBpcyBzaG93biBhdCBhbGwg4oCUIG9mZiBieSBkZWZhdWx0OyBjYWxsZXJzIHRoYXQgd2FudCBpdCBvcHQgaW4uICovXG4gIEBJbnB1dCgpIHNob3dCYWNrID0gZmFsc2U7XG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9zZSBidXR0b24gaXMgc2hvd24g4oCUIG9mZiBieSBkZWZhdWx0OyBjYWxsZXJzIHRoYXQgd2FudCBpdCBvcHQgaW4uICovXG4gIHJlYWRvbmx5IHNob3dDbG9zZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgbG95YWx0eSBwb2ludHMgbm90ZSBleHBsYWluaW5nIHBvaW50cyBhcmUgcmVmdW5kZWQgYXMgcGVybWFuZW50IHdhbGxldCBwb2ludHMuICovXG4gIHJlYWRvbmx5IHNob3dMb3lhbHR5UG9pbnRzTm90ZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKiogTGVmdCBhcnJvdyDigJQgYWJhbmRvbnMgdGhlIGNhbmNlbGxhdGlvbiBmbG93IGVudGlyZWx5IChjbG9zZXMgdGhlIHdob2xlIG1hbmFnZS1ib29raW5nIG1vZGFsKS4gKi9cbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIFJpZ2h0IOKclSDigJQgc3RlcHMgYmFjayB0byB0aGUgUmVmdW5kIERldGFpbHMgc2NyZWVuIG9ubHkgKG1pcnJvcnMgdGhlIG5hdGl2ZSBkaWFsb2cgY2xvc2UgdGhpcyBzY3JlZW4ncyBjdXN0b20gaGVhZGVyIHJlcGxhY2VkKS4gKi9cbiAgQE91dHB1dCgpIGJhY2tSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBtZXRob2RTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UmVmdW5kUHJlZmVycmVkTWV0aG9kPigpO1xuXG4gIGN1cnJlbmN5U2l6ZUVudW0gPSBDdXJyZW5jeVNpemVFbnVtLkxHO1xuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2UgPSBuZXcgVHJhbnNsYXRpb25TZXJ2aWNlKCk7XG5cbiAgZGlzcGxheUJvb2tpbmdJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2RhdGEoKT8uYm9va2luZ0lkID8/IHRoaXMuYm9va2luZ0lkKTtcbiAgdG90YWxSZWZ1bmRBbW91bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9kYXRhKCk/LnRvdGFsUmVmdW5kQW1vdW50KTtcbiAgd2FsbGV0UmVmdW5kQW1vdW50ID0gY29tcHV0ZWQoKCkgPT5cbiAgICBOdW1iZXIodGhpcy5fZGF0YSgpPy53YWxsZXRSZWZ1bmRBbW91bnQgPz8gMCksXG4gICk7XG5cbiAgcHJpdmF0ZSBnYXRld2F5Q29kZSA9IGNvbXB1dGVkKCgpID0+XG4gICAgbm9ybWFsaXplUGF5bWVudEdhdGV3YXlDb2RlKHRoaXMuX2RhdGEoKT8ucGF5bWVudE1ldGhvZEN1c3RvbWVyVXNlZCksXG4gICk7XG5cbiAgcHJpdmF0ZSBpc0xveWFsdHlHYXRld2F5KGNvZGU6IFBheW1lbnRHYXRld2F5Q29kZSB8ICcnIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhY29kZSAmJiBMT1lBTFRZX0dBVEVXQVlfQ09ERVMuaW5jbHVkZXMoY29kZSk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgY3VzdG9tZXIgcGFpZCB2aWEgYW4gaW5zdGFsbG1lbnQgZ2F0ZXdheSAoVGFtYXJhLCBUYWJieSwg4oCmKS4gKi9cbiAgaXNJbnN0YWxsbWVudE1ldGhvZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb2RlID0gdGhpcy5nYXRld2F5Q29kZSgpO1xuICAgIHJldHVybiAhIWNvZGUgJiYgSU5TVEFMTE1FTlRfR0FURVdBWV9DT0RFUy5pbmNsdWRlcyhjb2RlKTtcbiAgfSk7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGN1c3RvbWVyIHBhaWQgdmlhIGEgbG95YWx0eS1wcm9ncmFtIGdhdGV3YXkgKEFsIFJhamhpIE1va2FmYWEsIOKApikuICovXG4gIGlzTG95YWx0eU1ldGhvZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNMb3lhbHR5R2F0ZXdheSh0aGlzLmdhdGV3YXlDb2RlKCkpKTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGF5bWVudCB3YXMgMTAwJSBsb3lhbHR5IHBvaW50cyAobm8gY2FyZCBwb3J0aW9uKS5cbiAgICogVXNlZCBmb3IgZGVzY3JpcHRpb24vYmFkZ2Ugd2hlbiBsb3lhbHR5UGF5bWVudFR5cGUgaXMgc2V0IGJ1dCBubyBnYXRld2F5IGNvZGUuXG4gICAqL1xuICBpc0xveWFsdHlPbmx5UGF5bWVudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkID0gdGhpcy5fZGF0YSgpO1xuICAgIHJldHVybiAoXG4gICAgICAhIWQ/LmxveWFsdHlQYXltZW50VHlwZSAmJiBOdW1iZXIoZD8udG90YWxDYXJkUmVmdW5kQW1vdW50ID8/IDApID09PSAwXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBsb3lhbHR5LXN0eWxlIGRlc2NyaXB0aW9uL2JhZGdlIChlaXRoZXIgbG95YWx0eSBnYXRld2F5IE9SIDEwMCUgbG95YWx0eSBwYXltZW50KS4gKi9cbiAgc2hvd0FzTG95YWx0eSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuaXNMb3lhbHR5TWV0aG9kKCkgfHwgdGhpcy5pc0xveWFsdHlPbmx5UGF5bWVudCgpLFxuICApO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBvcmlnaW5hbCBjYXJkIHdhcyBhIE1hZGEgY2FyZCDigJQgaXRzIHJlZnVuZCByb3cgcmVhZHMgXCJNYWRhIENhcmRcIiBpbnN0ZWFkIG9mIHRoZSBnZW5lcmljIGdhdGV3YXkgbGFiZWwuICovXG4gIGlzTWFkYU1ldGhvZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb2RlID0gdGhpcy5nYXRld2F5Q29kZSgpO1xuICAgIHJldHVybiAhIWNvZGUgJiYgTUFEQV9HQVRFV0FZX0NPREVTLmluY2x1ZGVzKGNvZGUpO1xuICB9KTtcblxuICAvKiogQW55IGdhdGV3YXkgdGhhdCByZWZ1bmRzIHNvbWV3aGVyZSBvdGhlciB0aGFuIGEgcGxhaW4gY2FyZCDigJQgdXNlZCBmb3IgdGhlIHdhbGxldC1zdHlsZSBpY29uLiAqL1xuICBpc1NwZWNpYWxHYXRld2F5TWV0aG9kID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5pc0luc3RhbGxtZW50TWV0aG9kKCkgfHwgdGhpcy5zaG93QXNMb3lhbHR5KCksXG4gICk7XG5cbiAgLyoqIFNldHRsZW1lbnQtdGltZSBiYWRnZSDigJQgZGlmZmVycyBwZXIgaW5zdGFsbG1lbnQgZ2F0ZXdheSAoVGFtYXJhIHNldHRsZXMgc2xvd2VyIHRoYW4gVGFiYnkpLiAqL1xuICBwYXltZW50QmFkZ2VLZXkgPSBjb21wdXRlZCgoKTogc3RyaW5nID0+IHtcbiAgICBpZiAodGhpcy5pc0luc3RhbGxtZW50TWV0aG9kKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdhdGV3YXlDb2RlKCkgPT09IFBheW1lbnRHYXRld2F5Q29kZS5UYW1hcmFcbiAgICAgICAgPyAnNy0xMCBidXNpbmVzcyBkYXlzJ1xuICAgICAgICA6ICczLTUgYnVzaW5lc3MgZGF5cyc7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dBc0xveWFsdHkoKSkge1xuICAgICAgcmV0dXJuICdJbnN0YW50JztcbiAgICB9XG4gICAgcmV0dXJuICc1LTcgYnVzaW5lc3MgZGF5cyc7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGxhYmVsIGZvciBgcGF5bWVudE1ldGhvZEN1c3RvbWVyVXNlZGAsIGxvY2FsaXplZC4gYGxveWFsdHlQYXltZW50VHlwZWBcbiAgICogKG9uY2UgdGhlIGJhY2tlbmQgc2VuZHMgaXQpIHdpbnMgd2hlbiBwcmVzZW50IOKAlCBpdCBuYW1lcyB0aGUgc3BlY2lmaWNcbiAgICogbG95YWx0eSBwcm9ncmFtIChlLmcuIEFsIFJhamhpIHZzIFFpdGFmKSBiZWhpbmQgYSBnYXRld2F5IGxpa2UgU1RDIHRoYXRcbiAgICogZG9lc24ndCBzYXkgd2hpY2ggb25lIG9uIGl0cyBvd24uXG4gICAqL1xuICBjdXN0b21lclBheW1lbnRMYWJlbCA9IGNvbXB1dGVkKCgpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGQgPSB0aGlzLl9kYXRhKCk7XG4gICAgY29uc3QgZ2F0ZXdheSA9IHRoaXMuZ2F0ZXdheUNvZGUoKTtcbiAgICAvLyBgbG95YWx0eVBheW1lbnRUeXBlYCBvbmx5IGRpc2FtYmlndWF0ZXMgYSBnZW51aW5lbHkgYW1iaWd1b3VzIGdhdGV3YXlcbiAgICAvLyAoU1RDIHNwYW5zIG1vcmUgdGhhbiBvbmUgbG95YWx0eSBwcm9ncmFtKSDigJQgaXQgbXVzdCBuZXZlciBvdmVycmlkZSBhblxuICAgIC8vIHVuYW1iaWd1b3VzIGdhdGV3YXkgbGlrZSBUYW1hcmEvVGFiYnkvQ2FyZCBqdXN0IGJlY2F1c2UgdGhlIGJhY2tlbmRcbiAgICAvLyBoYXBwZW5lZCB0byBhbHNvIHNlbmQgYSBgbG95YWx0eVBheW1lbnRUeXBlYCB2YWx1ZSBvbiB0aGF0IGJvb2tpbmcuXG4gICAgY29uc3QgY29kZSA9XG4gICAgICAoZ2F0ZXdheSA9PT0gUGF5bWVudEdhdGV3YXlDb2RlLlN0YyAmJiBkPy5sb3lhbHR5UGF5bWVudFR5cGUpIHx8IGdhdGV3YXk7XG4gICAgaWYgKGNvZGUgJiYgSU5URVJOQUxfR0FURVdBWV9DT0RFUy5pbmNsdWRlcyhjb2RlKSkge1xuICAgICAgLy8gTmV2ZXIgc3VyZmFjZSBhbiBpbnRlcm5hbCBwcm9jZXNzb3IgbmFtZSAoZS5nLiBIeXBlcnBheSkgdG8gdGhlXG4gICAgICAvLyBjdXN0b21lciDigJQgZmFsbHMgYmFjayB0byBhIGdlbmVyaWMgXCJDYXJkXCIvb3JpZ2luYWwtcGF5bWVudCBsYWJlbC5cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgZW50cnkgPSBjb2RlID8gUEFZTUVOVF9HQVRFV0FZX0xBQkVMU1tjb2RlXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmc/LnN0YXJ0c1dpdGgoJ2FyJylcbiAgICAgID8gZW50cnkuYXJcbiAgICAgIDogZW50cnkuZW47XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBMYWJlbCBmb3IgdGhlIHN0YW5kYWxvbmUgXCJPcmlnaW5hbCBQYXltZW50IE1ldGhvZFwiIG9wdGlvbiBjYXJkIChzaG93blxuICAgKiB3aGVuIHRoZSB3aG9sZSByZWZ1bmQgZ29lcyB0byBvbmUgZGVzdGluYXRpb24g4oCUIG5vIHNlcGFyYXRlIGxveWFsdHlcbiAgICogcm93IGV4aXN0cyBoZXJlLCBzbyB1bmxpa2UgYHNwbGl0UmVmdW5kUm93c2AsIHRoZSBsb3lhbHR5IHByb2dyYW0gbmFtZVxuICAgKiAoZS5nLiBcIldhbGFcIikgaXMgc3RpbGwgc2hvd24gd2hlbiB0aGF0J3Mgd2hhdCB3YXMgdXNlZCkuIE1hZGEgd2lucyBvdmVyXG4gICAqIGV2ZXJ5dGhpbmcgZWxzZSwgcmVhZGluZyBcIk1hZGEgQ2FyZFwiIGluc3RlYWQgb2YgdGhlIGdlbmVyaWMgZ2F0ZXdheVxuICAgKiBuYW1lIG9yIHRoZSBcIk9yaWdpbmFsIFBheW1lbnQgTWV0aG9kXCIgZmFsbGJhY2suXG4gICAqL1xuICBvcmlnaW5hbFBheW1lbnRMYWJlbCA9IGNvbXB1dGVkKCgpOiBzdHJpbmcgPT4ge1xuICAgIGlmICh0aGlzLmlzTWFkYU1ldGhvZCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICdtYW5hZ2UtYm9va2luZy5zbWFydC1jYW5jZWwucmVzdWx0Lm1hZGEtY2FyZCcsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21lclBheW1lbnRMYWJlbCgpIHx8XG4gICAgICB0aGlzLndhbGxldE9yTG95YWx0eUxhYmVsKFxuICAgICAgICB0aGlzLl9kYXRhKCksXG4gICAgICAgICdtYW5hZ2UtYm9va2luZy5zbWFydC1jYW5jZWwucmVmdW5kLW1ldGhvZC5vcmlnaW5hbCcsXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFwiQWxtYXRhciBXYWxsZXRcIiByb3cgbGFiZWwg4oCUIHdoZW4gdGhlIGJhY2tlbmQgbmFtZXMgYSBzcGVjaWZpYyBsb3lhbHR5XG4gICAqIHByb2dyYW0gdmlhIGBsb3lhbHR5UGF5bWVudFR5cGVgIChlLmcuIFFpdGFmLCBBbCBSYWpoaSBNb2thZmFhKSwgdGhhdFxuICAgKiBwcm9ncmFtJ3MgbmFtZSByZXBsYWNlcyB0aGUgZ2VuZXJpYyBcIkFsbWF0YXIgV2FsbGV0XCIgbGFiZWwsIHNpbmNlIHRoZVxuICAgKiBhbW91bnQgaXMgYWN0dWFsbHkgYSBsb3lhbHR5LXByb2dyYW0gcmVkZW1wdGlvbiByYXRoZXIgdGhhbiBhIHBsYWluXG4gICAqIHdhbGxldCBiYWxhbmNlLlxuICAgKi9cbiAgcHJpdmF0ZSB3YWxsZXRPckxveWFsdHlMYWJlbChcbiAgICBkOiBJUmVmdW5kRGV0YWlsc0RhdGEgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGZhbGxiYWNrS2V5ID0gJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmQtbWV0aG9kLndhbGxldCcsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbG95YWx0eSA9IGQ/LmxveWFsdHlQYXltZW50VHlwZTtcbiAgICBjb25zdCBlbnRyeSA9IGxveWFsdHkgPyBQQVlNRU5UX0dBVEVXQVlfTEFCRUxTW2xveWFsdHldIDogdW5kZWZpbmVkO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZz8uc3RhcnRzV2l0aCgnYXInKVxuICAgICAgICA/IGVudHJ5LmFyXG4gICAgICAgIDogZW50cnkuZW47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmYWxsYmFja0tleSk7XG4gIH1cblxuICAvLyBXYWxsZXQgY2FyZCdzIG93biBuYW1lIGFsd2F5cyByZWFkcyBcIkFsbWF0YXIgV2FsbGV0XCIg4oCUIHRoZSBsb3lhbHR5XG4gIC8vIHByb2dyYW0gbmFtZSAoZS5nLiBcIlFpdGFmXCIpIGlzIHN1cmZhY2VkIHZpYSB0aGUgbm90ZSBiZWxvdyBpbnN0ZWFkIG9mXG4gIC8vIHJlcGxhY2luZyB0aGUgY2FyZCdzIHRpdGxlLlxuICB3YWxsZXRMYWJlbCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAnbWFuYWdlLWJvb2tpbmcuc21hcnQtY2FuY2VsLnJlZnVuZC1tZXRob2Qud2FsbGV0JyxcbiAgICApLFxuICApO1xuXG4gIC8qKlxuICAgKiBQYXJ0IG9mIHRoZSByZWZ1bmQgY2FtZSBmcm9tIGNvbnZlcnRpbmcgZXh0ZXJuYWwgbG95YWx0eSBwb2ludHMgaW50b1xuICAgKiB3YWxsZXQgZnVuZHMg4oCUIHN1cmZhY2VkIGFzIGEgbm90ZSB1bmRlciB0aGUgd2FsbGV0IGRlc3RpbmF0aW9uIHNvIHRoZVxuICAgKiBjdXN0b21lciBrbm93cyB0aG9zZSBwb2ludHMgbGFuZCBhcyBwZXJtYW5lbnQgd2FsbGV0IGJhbGFuY2UsIG5vdCBjYXNoLlxuICAgKi9cbiAgaGFzTG95YWx0eVBvaW50c1JlZnVuZCA9IGNvbXB1dGVkKFxuICAgICgpID0+IE51bWJlcih0aGlzLl9kYXRhKCk/LnRvdGFsTG95YWx0eVBvaW50cyA/PyAwKSA+IDAsXG4gICk7XG5cbiAgLyoqXG4gICAqIGB0b3RhbExveWFsdHlQb2ludHNgIGlzIG5vcm1hbGx5IHRoZSBmb3JmZWl0ZWQtYXQtYm9va2luZyBwb2ludHMgY291bnRcbiAgICogKG5vIHJlZnVuZCBkZXN0aW5hdGlvbiBvZiBpdHMgb3duKS4gQnV0IHdoZW4gdGhlIGJhY2tlbmQgbmV2ZXJcbiAgICogcG9wdWxhdGVzIGB0b3RhbExveWFsdHlQb2ludHNSZWZ1bmRBbW91bnRgIGZvciBhIGBsb3lhbHR5UGF5bWVudFR5cGVgXG4gICAqIGJvb2tpbmcsIHRoaXMgaXMgdGhlIG9ubHkgc2lnbmFsIHRoYXQgYSBsb3lhbHR5IHByb2dyYW0gd2FzIGludm9sdmVkLFxuICAgKiBzbyBpdCBkb3VibGVzIGFzIGEgc3BsaXQtcmVmdW5kIHJvdyAoYWxvbmdzaWRlIENhcmQpIHJhdGhlciB0aGFuXG4gICAqIGRpc2FwcGVhcmluZyBmcm9tIHRoZSByZWZ1bmQgYnJlYWtkb3duIGVudGlyZWx5LlxuICAgKi9cbiAgcHJpdmF0ZSBmb3JmZWl0ZWRMb3lhbHR5UG9pbnRzRmFsbGJhY2soXG4gICAgZDogSVJlZnVuZERldGFpbHNEYXRhIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAoIWQ/LmxveWFsdHlQYXltZW50VHlwZSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGlmIChOdW1iZXIoZC50b3RhbExveWFsdHlQb2ludHNSZWZ1bmRBbW91bnQgPz8gMCkgPiAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIE51bWJlcihkLnRvdGFsTG95YWx0eVBvaW50cyA/PyAwKTtcbiAgfVxuXG4gIC8qKiBIb3cgbWFueSBvZiB7d2FsbGV0LCBjYXJkLCBsb3lhbHR5fSB0aGUgcmVmdW5kIGlzIGFjdHVhbGx5IHNwbGl0IGFjcm9zcy4gKi9cbiAgcHJpdmF0ZSBzcGxpdFBhcnRzQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZCA9IHRoaXMuX2RhdGEoKTtcbiAgICBpZiAoIWQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgZC53YWxsZXRSZWZ1bmRBbW91bnQsXG4gICAgICBkLnRvdGFsQ2FyZFJlZnVuZEFtb3VudCxcbiAgICAgIGQudG90YWxMb3lhbHR5UG9pbnRzUmVmdW5kQW1vdW50LFxuICAgICAgdGhpcy5mb3JmZWl0ZWRMb3lhbHR5UG9pbnRzRmFsbGJhY2soZCksXG4gICAgXS5maWx0ZXIoKHYpID0+IE51bWJlcih2ID8/IDApID4gMCkubGVuZ3RoO1xuICB9KTtcblxuICAvKipcbiAgICogQSBwb3J0aW9uIG9mIHRoZSByZWZ1bmQgaXMgZm9yY2VkIHRvIHRoZSB3YWxsZXQgKGUuZy4gbG95YWx0eSBwb2ludHMgdXNlZClcbiAgICog4oCUIGluIHRoYXQgY2FzZSBvZmZlciBhIFwiU3BsaXQgUmVmdW5kXCIgb3B0aW9uIGluc3RlYWQgb2YgYSBwdXJlXG4gICAqIG9yaWdpbmFsLXBheW1lbnQtbWV0aG9kIG9wdGlvbiwgc2luY2UgdGhlIHdob2xlIGFtb3VudCBjYW4ndCBnbyB0byBjYXJkLlxuICAgKi9cbiAgaGFzU3BsaXRSZWZ1bmQgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgTnVtYmVyKHRoaXMuX2RhdGEoKT8udG90YWxSZWZ1bmRBbW91bnQgPz8gMCkgPiAwICYmXG4gICAgICB0aGlzLnNwbGl0UGFydHNDb3VudCgpID49IDIsXG4gICk7XG5cbiAgLyoqXG4gICAqIFdhbGxldCBjb3ZlcnMgdGhlIHdob2xlIHJlZnVuZCAobm8gY2FyZCBvciBsb3lhbHR5IHBvcnRpb24gYXQgYWxsKSDigJQgc2hvd1xuICAgKiB0aGUgd2FsbGV0IG9wdGlvbiBhbG9uZSByYXRoZXIgdGhhbiBhIFwic3BsaXRcIiB3aXRoIGVtcHR5IG90aGVyIHNpZGVzLlxuICAgKi9cbiAgaXNXYWxsZXRPbmx5UmVmdW5kID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGQgPSB0aGlzLl9kYXRhKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIE51bWJlcihkPy53YWxsZXRSZWZ1bmRBbW91bnQgPz8gMCkgPiAwICYmXG4gICAgICBOdW1iZXIoZD8udG90YWxDYXJkUmVmdW5kQW1vdW50ID8/IDApID09PSAwICYmXG4gICAgICBOdW1iZXIoZD8udG90YWxMb3lhbHR5UG9pbnRzUmVmdW5kQW1vdW50ID8/IDApID09PSAwICYmXG4gICAgICB0aGlzLmZvcmZlaXRlZExveWFsdHlQb2ludHNGYWxsYmFjayhkKSA9PT0gMFxuICAgICk7XG4gIH0pO1xuXG4gIHNob3dXYWxsZXQgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgISEodGhpcy5fZGF0YSgpPy5pc0Z1bGxXYWxsZXRSZWZ1bmRBbGxvd2VkIHx8IHRoaXMuaXNXYWxsZXRPbmx5UmVmdW5kKCkpLFxuICApO1xuXG4gIHNob3dPcmlnaW5hbCA9IGNvbXB1dGVkKFxuICAgICgpID0+ICF0aGlzLmhhc1NwbGl0UmVmdW5kKCkgJiYgIXRoaXMuaXNXYWxsZXRPbmx5UmVmdW5kKCksXG4gICk7XG5cbiAgc2hvd1NwbGl0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5oYXNTcGxpdFJlZnVuZCgpKTtcblxuICAvKipcbiAgICogT25seSBvbmUgcmVmdW5kLW1ldGhvZCBjYXJkIGlzIGVsaWdpYmxlIOKAlCB0aGVyZSdzIG5vdGhpbmcgdG8gY2hvb3NlXG4gICAqIGJldHdlZW4sIHNvIHRoZSByYWRpbyBidXR0b24gYW5kIGFjdGl2ZS1zZWxlY3Rpb24gaGlnaGxpZ2h0ICh3aGljaCBpbXBseVxuICAgKiBhIGNob2ljZSkgYXJlIGhpZGRlbjsgdGhlIHNpbmdsZSBjYXJkIGlzIHVzZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGhhc1NpbmdsZU9wdGlvbiA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICBbdGhpcy5zaG93V2FsbGV0KCksIHRoaXMuc2hvd09yaWdpbmFsKCksIHRoaXMuc2hvd1NwbGl0KCldLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAubGVuZ3RoID09PSAxLFxuICApO1xuXG4gIC8qKlxuICAgKiBTcGxpdC1yZWZ1bmQgZGVzdGluYXRpb24gcm93cyDigJQgdXAgdG8gdGhyZWU6IEFsbWF0YXIgV2FsbGV0LCB0aGVcbiAgICogb3JpZ2luYWwgcGF5bWVudCBtZXRob2QgKGNhcmQvaW5zdGFsbG1lbnQgZ2F0ZXdheSksIGFuZCBhIHNlcGFyYXRlXG4gICAqIGxveWFsdHktcHJvZ3JhbSByb3cgKEFsIFJhamhpIE1va2FmYWEsIFFpdGFmLCDigKYpIHdoZW4gdGhlIHJlZnVuZCBpc1xuICAgKiBhY3R1YWxseSBzcHJlYWQgYWNyb3NzIGEgbG95YWx0eSBiYWxhbmNlICphbmQqIHNvbWV0aGluZyBlbHNlLlxuICAgKi9cbiAgc3BsaXRSZWZ1bmRSb3dzID0gY29tcHV0ZWQoKCk6IFJlZnVuZE1ldGhvZFNwbGl0Um93W10gPT4ge1xuICAgIGNvbnN0IGQgPSB0aGlzLl9kYXRhKCk7XG4gICAgaWYgKCFkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IHJvd3M6IFJlZnVuZE1ldGhvZFNwbGl0Um93W10gPSBbXTtcbiAgICBjb25zdCB3YWxsZXQgPSBOdW1iZXIoZC53YWxsZXRSZWZ1bmRBbW91bnQgPz8gMCk7XG4gICAgaWYgKHdhbGxldCA+IDApIHtcbiAgICAgIC8vIEFsd2F5cyB0aGUgZ2VuZXJpYyBcIldhbGxldFwiIHJvdyDigJQgdGhlIGxveWFsdHkgcHJvZ3JhbSB0aGF0IGZ1bmRlZCBpdFxuICAgICAgLy8gKGUuZy4gV2FsYSkgZ2V0cyBpdHMgb3duIGRlZGljYXRlZCByb3cgYmVsb3cgdmlhXG4gICAgICAvLyBgZm9yZmVpdGVkTG95YWx0eVBvaW50c0ZhbGxiYWNrYCwgc28gdGhlIHR3byBzdGF5IHZpc3VhbGx5IGRpc3RpbmN0LlxuICAgICAgcm93cy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICdtYW5hZ2UtYm9va2luZy5zbWFydC1jYW5jZWwucmVmdW5kLW1ldGhvZC53YWxsZXQnLFxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogd2FsbGV0LFxuICAgICAgICBpbnN0YW50OiB0cnVlLFxuICAgICAgICBpc0xveWFsdHk6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGNhcmQgPSBOdW1iZXIoZC50b3RhbENhcmRSZWZ1bmRBbW91bnQgPz8gMCk7XG4gICAgaWYgKGNhcmQgPiAwKSB7XG4gICAgICByb3dzLnB1c2goe1xuICAgICAgICAvLyBXaGVuIGEgc2VwYXJhdGUgbG95YWx0eSByb3cgaXMgYWxzbyBzaG93biwgdGhpcyByb3cgaXMgcHVyZWx5IHRoZVxuICAgICAgICAvLyBjYXJkL29yaWdpbmFsLXBheW1lbnQtbWV0aG9kIHBvcnRpb24g4oCUIGRvbid0IHJlbGFiZWwgaXQgd2l0aCB0aGVcbiAgICAgICAgLy8gbG95YWx0eSBwcm9ncmFtIG5hbWUgdG9vLlxuICAgICAgICBsYWJlbDogdGhpcy5pc01hZGFNZXRob2QoKVxuICAgICAgICAgID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICdtYW5hZ2UtYm9va2luZy5zbWFydC1jYW5jZWwucmVzdWx0Lm1hZGEtY2FyZCcsXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAoIXRoaXMuaXNMb3lhbHR5TWV0aG9kKCkgJiYgdGhpcy5jdXN0b21lclBheW1lbnRMYWJlbCgpKSB8fFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICdtYW5hZ2UtYm9va2luZy5zbWFydC1jYW5jZWwucmVmdW5kLW1ldGhvZC5vcmlnaW5hbCcsXG4gICAgICAgICAgICApLFxuICAgICAgICB2YWx1ZTogY2FyZCxcbiAgICAgICAgaW5zdGFudDogZmFsc2UsXG4gICAgICAgIGlzTG95YWx0eTogZmFsc2UsXG4gICAgICAgIGlzTWFkYTogdGhpcy5pc01hZGFNZXRob2QoKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBsb3lhbHR5ID0gTnVtYmVyKGQudG90YWxMb3lhbHR5UG9pbnRzUmVmdW5kQW1vdW50ID8/IDApO1xuICAgIGlmIChsb3lhbHR5ID4gMCkge1xuICAgICAgcm93cy5wdXNoKHtcbiAgICAgICAgLy8gd2hlbiBwYXlpbmcgd2l0aCBjYXJkIGFuZCBsb3lhbHR5IHByb2dyYW0gYWxsIGJhY2tlZCBhcyBjYXJkXG4gICAgICAgIGxhYmVsOiB0aGlzLndhbGxldE9yTG95YWx0eUxhYmVsKFxuICAgICAgICAgIGQsXG4gICAgICAgICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmRzLmxveWFsdHknLFxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogbG95YWx0eSxcbiAgICAgICAgaW5zdGFudDogdHJ1ZSxcbiAgICAgICAgaXNMb3lhbHR5OiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGZvcmZlaXRlZExveWFsdHkgPSB0aGlzLmZvcmZlaXRlZExveWFsdHlQb2ludHNGYWxsYmFjayhkKTtcbiAgICBpZiAoZm9yZmVpdGVkTG95YWx0eSA+IDApIHtcbiAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgIGxhYmVsOiB0aGlzLndhbGxldE9yTG95YWx0eUxhYmVsKGQpLFxuICAgICAgICB2YWx1ZTogZm9yZmVpdGVkTG95YWx0eSxcbiAgICAgICAgaW5zdGFudDogdHJ1ZSxcbiAgICAgICAgaXNMb3lhbHR5OiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9KTtcblxuICBzZWxlY3QobWV0aG9kOiBSZWZ1bmRQcmVmZXJyZWRNZXRob2QpIHtcbiAgICB0aGlzLm1ldGhvZFNlbGVjdGVkLmVtaXQobWV0aG9kKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIGJhY2soKSB7XG4gICAgdGhpcy5iYWNrUmVxdWVzdGVkLmVtaXQoKTtcbiAgfVxuXG4gIC8qKiBGb3JtYXQgYW4gYW1vdW50IHdpdGhvdXQgdGhlIGN1cnJlbmN5IHN1ZmZpeCAoZm9yIGludGVycG9sYXRlZCBjb3B5KS4gKi9cbiAgZm10QW1vdW50KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUgfHwgMCkudG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7XG4gICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIsXG4gICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIsXG4gICAgfSk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHBheW1lbnQgbWV0aG9kICovXG4gIGdldE9yaWdpbmFsUGF5bWVudERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5pc0luc3RhbGxtZW50TWV0aG9kKClcbiAgICAgID8gJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmQtbWV0aG9kLmluc3RhbGxtZW50LWRlc2MnXG4gICAgICA6IHRoaXMuc2hvd0FzTG95YWx0eSgpXG4gICAgICAgID8gJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmQtbWV0aG9kLmxveWFsdHktZGVzYydcbiAgICAgICAgOiAnbWFuYWdlLWJvb2tpbmcuc21hcnQtY2FuY2VsLnJlZnVuZC1tZXRob2Qub3JpZ2luYWwtZGVzYyc7XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoa2V5LCB7IG1ldGhvZDogdGhpcy5vcmlnaW5hbFBheW1lbnRMYWJlbCgpIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicmVmdW5kLW1ldGhvZC1zZWxlY3RvclwiPlxuICA8ZGl2IGNsYXNzPVwicmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9faGVhZGVyXCI+XG4gICAgQGlmIChzaG93QmFjaykge1xuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19jbG9zZVwiXG4gICAgICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiQmFja1wiXG4gICAgICA+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNMTkgMTJINU0xMiAxOWwtNy03IDctN1wiXG4gICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwicmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9faGVhZGVyLXRleHRcIj5cbiAgICAgIDxoMyBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX3RpdGxlXCI+XG4gICAgICAgIFJlZnVuZCBNZXRob2RcbiAgICAgIDwvaDM+XG4gICAgICA8c3BhbiBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX3N1YlwiXG4gICAgICAgID5Cb29raW5nIElEICN7e1xuICAgICAgICAgIGRpc3BsYXlCb29raW5nSWQoKVxuICAgICAgICB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gQGlmIChzaG93Q2xvc2VCdXR0b24oKSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19jbG9zZVwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgID5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgID5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZD1cIk02IDE4TDE4IDZNNiA2TDE4IDE4XCJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMxQjFBMUZcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgfSAtLT5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX2Ftb3VudFwiPlxuICAgIDxzcGFuPllvdSB3aWxsIGdldCBiYWNrPC9zcGFuPlxuICAgIDxzdHJvbmc+XG4gICAgICBAaWYgKGN1cnJlbmN5T2JqKSB7XG4gICAgICAgIDxhcHAtY3VycmVuY3ktY29kZS1pY29uXG4gICAgICAgICAgW3NpemVdPVwiY3VycmVuY3lTaXplRW51bVwiXG4gICAgICAgICAgW2N1cnJlbmN5XT1cImN1cnJlbmN5T2JqXCJcbiAgICAgICAgPjwvYXBwLWN1cnJlbmN5LWNvZGUtaWNvbj5cbiAgICAgIH1cbiAgICAgIHt7IGZtdEFtb3VudCh0b3RhbFJlZnVuZEFtb3VudCgpKSB9fVxuICAgIDwvc3Ryb25nPlxuICA8L2Rpdj5cblxuICA8IS0tIFdhbGxldCBvcHRpb24gLS0+XG4gIEBpZiAoc2hvd1dhbGxldCgpKSB7XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX29wdGlvblwiXG4gICAgICBbY2xhc3MucmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9fb3B0aW9uLS1hY3RpdmVdPVwiXG4gICAgICAgIHJlZnVuZE1ldGhvZCA9PT0gJ3dhbGxldCcgJiYgIWhhc1NpbmdsZU9wdGlvbigpXG4gICAgICBcIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdCgnd2FsbGV0JylcIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwicmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9faWNvblwiPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgd2lkdGg9XCIyMlwiXG4gICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjIgMjRcIlxuICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjU0NzhfMTg4MClcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMi42NzY3NiAyMC44ODUyQzEuNzQ5MDIgMjAuODg1MiAxLjA0NzA0IDIwLjY1MzMgMC41NzA4MDEgMjAuMTg5NEMwLjEwMDc0OSAxOS43MjU2IC0wLjEzNDI3NyAxOS4wMzU5IC0wLjEzNDI3NyAxOC4xMjA2VjguNTE4NTJDLTAuMTM0Mjc3IDcuNzcwMTUgMC4wMjY1Mjk5IDcuMTc2NCAwLjM0ODE0NSA2LjczNzI3QzAuNjc1OTQ0IDYuMjk4MTUgMS4xODkyOSA1Ljk3MzQ0IDEuODg4MTggNS43NjMxNUwxMy43ODE3IDIuMzAyN0MxNC40NTU5IDIuMTEwOTcgMTUuMDU4OSAyLjA2MTQ5IDE1LjU5MDggMi4xNTQyN0MxNi4xMjg5IDIuMjQ3MDQgMTYuNTQ5NSAyLjQ5NDQzIDE2Ljg1MjUgMi44OTY0NUMxNy4xNjE4IDMuMjkyMjkgMTcuMzE2NCAzLjg1NTExIDE3LjMxNjQgNC41ODQ5M1Y2LjI1NDg1TDE1LjgwNDIgNi4zODQ3M1Y0LjQ1NTA1QzE1LjgwNDIgNC4wNDY4NCAxNS42ODk4IDMuNzY1NDMgMTUuNDYwOSAzLjYxMDgxQzE1LjIzMjEgMy40NTYxOSAxNC44OTUgMy40NDM4MiAxNC40NDk3IDMuNTczN0w3LjI3ODMyIDUuNTU5MDVDNy4xOTE3MyA1LjU3NzYgNy4xNTE1MyA1LjYxNDcxIDcuMTU3NzEgNS42NzAzOEM3LjE2MzkgNS43MTk4NiA3LjIwNzE5IDUuNzQ0NiA3LjI4NzYgNS43NDQ2SDE3LjU5NDdDMTguNTI4NiA1Ljc0NDYgMTkuMjI3NSA1Ljk3OTYyIDE5LjY5MTQgNi40NDk2OEMyMC4xNjE1IDYuOTEzNTQgMjAuMzk2NSA3LjYwMzE2IDIwLjM5NjUgOC41MTg1MlYxMC44NTY0SDE4Ljg5MzZWOC42MDIwMkMxOC44OTM2IDguMTU2NzEgMTguNzc5MSA3LjgxOTYzIDE4LjU1MDMgNy41OTA3OUMxOC4zMjE1IDcuMzYxOTUgMTcuOTkzNyA3LjI0NzUzIDE3LjU2NjkgNy4yNDc1M0gyLjY5NTMxQzIuMjY4NTUgNy4yNDc1MyAxLjk0MDc2IDcuMzYxOTUgMS43MTE5MSA3LjU5MDc5QzEuNDg5MjYgNy44MTk2MyAxLjM3NzkzIDguMTU2NzEgMS4zNzc5MyA4LjYwMjAyVjE4LjAzNzFDMS4zNzc5MyAxOC40ODI0IDEuNDg5MjYgMTguODE2NCAxLjcxMTkxIDE5LjAzOUMxLjk0MDc2IDE5LjI2NzkgMi4yNjg1NSAxOS4zODIzIDIuNjk1MzEgMTkuMzgyM0gxNy41NjY5QzE3Ljk5MzcgMTkuMzgyMyAxOC4zMjE1IDE5LjI2NzkgMTguNTUwMyAxOS4wMzlDMTguNzc5MSAxOC44MTY0IDE4Ljg5MzYgMTguNDgyNCAxOC44OTM2IDE4LjAzNzFWMTUuNDM5NEgyMC4zOTY1VjE4LjEyMDZDMjAuMzk2NSAxOS4wMzU5IDIwLjE2MTUgMTkuNzI1NiAxOS42OTE0IDIwLjE4OTRDMTkuMjI3NSAyMC42NTMzIDE4LjUyODYgMjAuODg1MiAxNy41OTQ3IDIwLjg4NTJIMi42NzY3NlpNMTYuNzY5IDE0LjIzMzRDMTYuNTA5MyAxNC4yMzM0IDE2LjI4NjYgMTQuMTQzNyAxNi4xMDExIDEzLjk2NDNDMTUuOTIxNyAxMy43Nzg4IDE1LjgzMiAxMy41NTYxIDE1LjgzMiAxMy4yOTY0QzE1LjgzMiAxMy4wMzY2IDE1LjkyMTcgMTIuODE3IDE2LjEwMTEgMTIuNjM3N0MxNi4yODY2IDEyLjQ1MjEgMTYuNTA5MyAxMi4zNTkzIDE2Ljc2OSAxMi4zNTkzQzE3LjAyODggMTIuMzU5MyAxNy4yNDg0IDEyLjQ1MjEgMTcuNDI3NyAxMi42Mzc3QzE3LjYxMzMgMTIuODE3IDE3LjcwNjEgMTMuMDM2NiAxNy43MDYxIDEzLjI5NjRDMTcuNzA2MSAxMy41NTYxIDE3LjYxMzMgMTMuNzc4OCAxNy40Mjc3IDEzLjk2NDNDMTcuMjQ4NCAxNC4xNDM3IDE3LjAyODggMTQuMjMzNCAxNi43NjkgMTQuMjMzNFpNMTYuNjc2MyAxNi4yMTg3QzE1Ljc0MjQgMTYuMjE4NyAxNC45ODc4IDE1Ljk3NzUgMTQuNDEyNiAxNS40OTUxQzEzLjgzNzQgMTUuMDA2NSAxMy41NDk4IDE0LjI3NjcgMTMuNTQ5OCAxMy4zMDU2QzEzLjU0OTggMTIuMzM0NiAxMy44Mzc0IDExLjYwNzkgMTQuNDEyNiAxMS4xMjU1QzE0Ljk4NzggMTAuNjQzIDE1Ljc0MjQgMTAuNDAxOCAxNi42NzYzIDEwLjQwMThIMjAuMTA4OUMyMC42OTAzIDEwLjQwMTggMjEuMTQ3OSAxMC41ODEyIDIxLjQ4MTkgMTAuOTM5OUMyMS44MjIxIDExLjI5ODYgMjEuOTkyMiAxMS43NDM5IDIxLjk5MjIgMTIuMjc1OFYxNC4zMzU0QzIxLjk5MjIgMTQuODY3MyAyMS44MjIxIDE1LjMxNTcgMjEuNDgxOSAxNS42ODA2QzIxLjE0NzkgMTYuMDM5NCAyMC42OTAzIDE2LjIxODcgMjAuMTA4OSAxNi4yMTg3SDE2LjY3NjNaTTE2Ljc2OSAxNC45NzU2SDE5Ljc4NDJDMjAuMTA1OCAxNC45NzU2IDIwLjM0NyAxNC44OTIxIDIwLjUwNzggMTQuNzI1MUMyMC42NzQ4IDE0LjU1MTkgMjAuNzU4MyAxNC4zMTM4IDIwLjc1ODMgMTQuMDEwN1YxMi42MDA2QzIwLjc1ODMgMTIuMjk3NSAyMC42NzQ4IDEyLjA2MjUgMjAuNTA3OCAxMS44OTU1QzIwLjM0NyAxMS43MjIzIDIwLjEwNTggMTEuNjM1NyAxOS43ODQyIDExLjYzNTdIMTYuNzY5QzE2LjExOTYgMTEuNjM1NyAxNS42MzcyIDExLjc4NDEgMTUuMzIxOCAxMi4wODFDMTUuMDEyNSAxMi4zNzc5IDE0Ljg1NzkgMTIuNzg2MSAxNC44NTc5IDEzLjMwNTZDMTQuODU3OSAxMy44MjUyIDE1LjAxMjUgMTQuMjMzNCAxNS4zMjE4IDE0LjUzMDJDMTUuNjM3MiAxNC44MjcxIDE2LjExOTYgMTQuOTc1NiAxNi43NjkgMTQuOTc1NlpcIlxuICAgICAgICAgICAgICBmaWxsPVwiYmxhY2tcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2c+XG4gICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yNTQ3OF8xODgwXCI+XG4gICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX2JvZHlcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19uYW1lXCI+e3sgd2FsbGV0TGFiZWwoKSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19kZXNjXCI+VXNhYmxlIGZvciBmdXR1cmUgYm9va2luZ3M8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19iYWRnZSByZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19iYWRnZS0taW5zdGFudFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICB3aWR0aD1cIjEyXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjlcIlxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiA5XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNNy4zMTgxOCAwQzguNDI3MjcgMCA5LjQ5MDkzIDAuNDQwNTgzIDEwLjI3NTIgMS4yMjQ4M0MxMS4wNTk0IDIuMDA5MDcgMTEuNSAzLjA3MjczIDExLjUgNC4xODE4MkMxMS41IDUuMjkwOSAxMS4wNTk0IDYuMzU0NTcgMTAuMjc1MiA3LjEzODgxQzkuNDkwOTMgNy45MjMwNSA4LjQyNzI3IDguMzYzNjQgNy4zMTgxOCA4LjM2MzY0QzYuMjA5MDkgOC4zNjM2NCA1LjE0NTQzIDcuOTIzMDUgNC4zNjExOSA3LjEzODgxQzMuNTc2OTUgNi4zNTQ1NyAzLjEzNjM2IDUuMjkwOSAzLjEzNjM2IDQuMTgxODJDMy4xMzYzNiAzLjA3MjczIDMuNTc2OTUgMi4wMDkwNyA0LjM2MTE5IDEuMjI0ODNDNS4xNDU0MyAwLjQ0MDU4MyA2LjIwOTA5IDAgNy4zMTgxOCAwWk03LjMxODE4IDEuMDQ1NDVDNi40ODYzNyAxLjA0NTQ1IDUuNjg4NjIgMS4zNzU4OSA1LjEwMDQ0IDEuOTY0MDdDNC41MTIyNiAyLjU1MjI2IDQuMTgxODIgMy4zNSA0LjE4MTgyIDQuMTgxODJDNC4xODE4MiA1LjAxMzYzIDQuNTEyMjYgNS44MTEzOCA1LjEwMDQ0IDYuMzk5NTZDNS42ODg2MiA2Ljk4Nzc0IDYuNDg2MzcgNy4zMTgxOCA3LjMxODE4IDcuMzE4MThDOC4xNSA3LjMxODE4IDguOTQ3NzQgNi45ODc3NCA5LjUzNTkzIDYuMzk5NTZDMTAuMTI0MSA1LjgxMTM4IDEwLjQ1NDUgNS4wMTM2MyAxMC40NTQ1IDQuMTgxODJDMTAuNDU0NSAzLjM1IDEwLjEyNDEgMi41NTIyNiA5LjUzNTkzIDEuOTY0MDdDOC45NDc3NCAxLjM3NTg5IDguMTUgMS4wNDU0NSA3LjMxODE4IDEuMDQ1NDVaTTYuNzk1NDUgMi4wOTA5MUg3LjU3OTU1VjQuMDY2ODJMOC43OTc1IDUuMjg0NzdMOC4yNDM0MSA1LjgzODg2TDYuNzk1NDUgNC4zOTA5MVYyLjA5MDkxWk0wLjUyMjcyNyA3LjMxODE4QzAuMzg0MDkxIDcuMzE4MTggMC4yNTExMzQgNy4yNjMxMSAwLjE1MzEwMyA3LjE2NTA4QzAuMDU1MDcyOSA3LjA2NzA1IDAgNi45MzQwOSAwIDYuNzk1NDVDMCA2LjY1NjgyIDAuMDU1MDcyOSA2LjUyMzg2IDAuMTUzMTAzIDYuNDI1ODNDMC4yNTExMzQgNi4zMjc4IDAuMzg0MDkxIDYuMjcyNzMgMC41MjI3MjcgNi4yNzI3M0gyLjUyNDc3QzIuNjg2ODIgNi42NDM4NiAyLjg5NTkxIDYuOTk0MDkgMy4xMzYzNiA3LjMxODE4SDAuNTIyNzI3Wk0xLjA0NTQ1IDQuNzA0NTVDMC45MDY4MTkgNC43MDQ1NSAwLjc3Mzg2MSA0LjY0OTQ3IDAuNjc1ODMgNC41NTE0NEMwLjU3NzggNC40NTM0MSAwLjUyMjcyNyA0LjMyMDQ1IDAuNTIyNzI3IDQuMTgxODJDMC41MjI3MjcgNC4wNDMxOCAwLjU3NzggMy45MTAyMiAwLjY3NTgzIDMuODEyMTlDMC43NzM4NjEgMy43MTQxNiAwLjkwNjgxOSAzLjY1OTA5IDEuMDQ1NDUgMy42NTkwOUgyLjExNzA1TDIuMDkwOTEgNC4xODE4MkwyLjExNzA1IDQuNzA0NTVIMS4wNDU0NVpNMS41NjgxOCAyLjA5MDkxQzEuNDI5NTUgMi4wOTA5MSAxLjI5NjU5IDIuMDM1ODQgMS4xOTg1NiAxLjkzNzgxQzEuMTAwNTMgMS44Mzk3OCAxLjA0NTQ1IDEuNzA2ODIgMS4wNDU0NSAxLjU2ODE4QzEuMDQ1NDUgMS40Mjk1NSAxLjEwMDUzIDEuMjk2NTkgMS4xOTg1NiAxLjE5ODU2QzEuMjk2NTkgMS4xMDA1MyAxLjQyOTU1IDEuMDQ1NDUgMS41NjgxOCAxLjA0NTQ1SDMuMTM2MzZDMi44OTU5MSAxLjM2OTU1IDIuNjg2ODIgMS43MTk3NyAyLjUyNDc3IDIuMDkwOTFIMS41NjgxOFpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE1ODAzQ1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIEluc3RhbnRcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgQGlmICghaGFzU2luZ2xlT3B0aW9uKCkpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19yYWRpb1wiPjwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2J1dHRvbj5cbiAgfVxuXG4gIDwhLS0gT3JpZ2luYWwgUGF5bWVudCBNZXRob2Qgb3B0aW9uIC0tPlxuICBAaWYgKHNob3dPcmlnaW5hbCgpKSB7XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX29wdGlvblwiXG4gICAgICBbY2xhc3MucmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9fb3B0aW9uLS1hY3RpdmVdPVwiXG4gICAgICAgIHJlZnVuZE1ldGhvZCA9PT0gJ29yaWdpbmFsUGF5bWVudE1ldGhvZCcgJiYgIWhhc1NpbmdsZU9wdGlvbigpXG4gICAgICBcIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdCgnb3JpZ2luYWxQYXltZW50TWV0aG9kJylcIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwicmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9faWNvblwiPlxuICAgICAgICBAaWYgKGlzU3BlY2lhbEdhdGV3YXlNZXRob2QoKSkge1xuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTIxIDEyYTIuMjUgMi4yNSAwIDAgMC0yLjI1LTIuMjVIMTVhMyAzIDAgMSAxLTYgMEg1LjI1QTIuMjUgMi4yNSAwIDAgMCAzIDEybTE4IDB2NmEyLjI1IDIuMjUgMCAwIDEtMi4yNSAyLjI1SDUuMjVBMi4yNSAyLjI1IDAgMCAxIDMgMTh2LTZtMTggMFY5TTMgMTJWOW0xOCAwYTIuMjUgMi4yNSAwIDAgMC0yLjI1LTIuMjVINS4yNUEyLjI1IDIuMjUgMCAwIDAgMyA5bTE4IDBWNmEyLjI1IDIuMjUgMCAwIDAtMi4yNS0yLjI1SDUuMjVBMi4yNSAyLjI1IDAgMCAwIDMgNnYzXCJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXJkSWNvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZEljb24+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMi4yNSA4LjI1SDIxLjc1TTIuMjUgOUgyMS43NU01LjI1IDE0LjI1SDExLjI1TTUuMjUgMTYuNUg4LjI1TTQuNSAxOS41SDE5LjVDMjAuMDk2NyAxOS41IDIwLjY2OSAxOS4yNjI5IDIxLjA5MSAxOC44NDFDMjEuNTEyOSAxOC40MTkgMjEuNzUgMTcuODQ2NyAyMS43NSAxNy4yNVY2Ljc1QzIxLjc1IDYuMTUzMjYgMjEuNTEyOSA1LjU4MDk3IDIxLjA5MSA1LjE1OTAxQzIwLjY2OSA0LjczNzA1IDIwLjA5NjcgNC41IDE5LjUgNC41SDQuNUMzLjkwMzI2IDQuNSAzLjMzMDk3IDQuNzM3MDUgMi45MDkwMSA1LjE1OTAxQzIuNDg3MDUgNS41ODA5NyAyLjI1IDYuMTUzMjYgMi4yNSA2Ljc1VjE3LjI1QzIuMjUgMTcuODQ2NyAyLjQ4NzA1IDE4LjQxOSAyLjkwOTAxIDE4Ljg0MUMzLjMzMDk3IDE5LjI2MjkgMy45MDMyNiAxOS41IDQuNSAxOS41WlwiXG4gICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19ib2R5XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9fbmFtZVwiPnt7XG4gICAgICAgICAgb3JpZ2luYWxQYXltZW50TGFiZWwoKVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19kZXNjXCI+e3tcbiAgICAgICAgICBnZXRPcmlnaW5hbFBheW1lbnREZXNjcmlwdGlvbigpXG4gICAgICAgIH19PC9zcGFuPlxuICAgICAgICBAaWYgKCFzaG93QXNMb3lhbHR5KCkpIHtcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19iYWRnZVwiXG4gICAgICAgICAgICBbY2xhc3MucmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9fYmFkZ2UtLWRheXNdPVwiIXNob3dBc0xveWFsdHkoKVwiXG4gICAgICAgICAgICBbY2xhc3MucmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9fYmFkZ2UtLWxveWFsdHldPVwic2hvd0FzTG95YWx0eSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKCFzaG93QXNMb3lhbHR5KCkpIHtcbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTJcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjEyXCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEyIDEyXCJcbiAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgZD1cIk0zLjMwMDc4IDYuNTAxOTVDMy4yMDMxMiA2LjUwMTk1IDMuMTIxNzQgNi40Njk0IDMuMDU2NjQgNi40MDQzQzIuOTkxNTQgNi4zMzkxOSAyLjk1ODk4IDYuMjU3ODEgMi45NTg5OCA2LjE2MDE2QzIuOTU4OTggNi4wNjU3NiAyLjk5MTU0IDUuOTg2IDMuMDU2NjQgNS45MjA5QzMuMTIxNzQgNS44NTU3OSAzLjIwMzEyIDUuODIzMjQgMy4zMDA3OCA1LjgyMzI0SDUuNTEyN1YyLjg2OTE0QzUuNTEyNyAyLjc3NDc0IDUuNTQ1MjUgMi42OTQ5OSA1LjYxMDM1IDIuNjI5ODhDNS42NzU0NiAyLjU2NDc4IDUuNzU1MjEgMi41MzIyMyA1Ljg0OTYxIDIuNTMyMjNDNS45NDcyNyAyLjUzMjIzIDYuMDI4NjUgMi41NjQ3OCA2LjA5Mzc1IDIuNjI5ODhDNi4xNTg4NSAyLjY5NDk5IDYuMTkxNDEgMi43NzQ3NCA2LjE5MTQxIDIuODY5MTRWNi4xNjAxNkM2LjE5MTQxIDYuMjU3ODEgNi4xNTg4NSA2LjMzOTE5IDYuMDkzNzUgNi40MDQzQzYuMDI4NjUgNi40Njk0IDUuOTQ3MjcgNi41MDE5NSA1Ljg0OTYxIDYuNTAxOTVIMy4zMDA3OFpNNS44NTQ0OSAxMC45NTUxQzUuMTY3NjQgMTAuOTU1MSA0LjUyMzExIDEwLjgyNDkgMy45MjA5IDEwLjU2NDVDMy4zMTg2OCAxMC4zMDczIDIuNzg5NzEgOS45NTA4NSAyLjMzMzk4IDkuNDk1MTJDMS44NzgyNiA5LjAzOTM5IDEuNTIwMTggOC41MTA0MiAxLjI1OTc3IDcuOTA4MkMxLjAwMjYgNy4zMDU5OSAwLjg3NDAyMyA2LjY2MTQ2IDAuODc0MDIzIDUuOTc0NjFDMC44NzQwMjMgNS4yODc3NiAxLjAwMjYgNC42NDMyMyAxLjI1OTc3IDQuMDQxMDJDMS41MjAxOCAzLjQzODggMS44NzgyNiAyLjkwOTgzIDIuMzMzOTggMi40NTQxQzIuNzg5NzEgMS45OTUxMiAzLjMxODY4IDEuNjM3MDQgMy45MjA5IDEuMzc5ODhDNC41MjMxMSAxLjEyMjcyIDUuMTY3NjQgMC45OTQxNDEgNS44NTQ0OSAwLjk5NDE0MUM2LjU0MTM0IDAuOTk0MTQxIDcuMTg1ODcgMS4xMjI3MiA3Ljc4ODA5IDEuMzc5ODhDOC4zOTAzIDEuNjM3MDQgOC45MTkyNyAxLjk5NTEyIDkuMzc1IDIuNDU0MUM5LjgzMDczIDIuOTA5ODMgMTAuMTg3MiAzLjQzODggMTAuNDQ0MyA0LjA0MTAyQzEwLjcwNDggNC42NDMyMyAxMC44MzUgNS4yODc3NiAxMC44MzUgNS45NzQ2MUMxMC44MzUgNi42NjE0NiAxMC43MDQ4IDcuMzA1OTkgMTAuNDQ0MyA3LjkwODJDMTAuMTg3MiA4LjUxMDQyIDkuODMwNzMgOS4wMzkzOSA5LjM3NSA5LjQ5NTEyQzguOTE5MjcgOS45NTA4NSA4LjM5MDMgMTAuMzA3MyA3Ljc4ODA5IDEwLjU2NDVDNy4xODU4NyAxMC44MjQ5IDYuNTQxMzQgMTAuOTU1MSA1Ljg1NDQ5IDEwLjk1NTFaTTUuODU0NDkgMTAuMTI1QzYuNDI3NDEgMTAuMTI1IDYuOTY0NTIgMTAuMDE3NiA3LjQ2NTgyIDkuODAyNzNDNy45NjcxMiA5LjU4Nzg5IDguNDA4MiA5LjI5MDA0IDguNzg5MDYgOC45MDkxOEM5LjE2OTkyIDguNTI4MzIgOS40Njc3NyA4LjA4NzI0IDkuNjgyNjIgNy41ODU5NEM5Ljg5NzQ2IDcuMDg0NjQgMTAuMDA0OSA2LjU0NzUzIDEwLjAwNDkgNS45NzQ2MUMxMC4wMDQ5IDUuNDAxNjkgOS44OTc0NiA0Ljg2NDU4IDkuNjgyNjIgNC4zNjMyOEM5LjQ2Nzc3IDMuODU4NzIgOS4xNjk5MiAzLjQxNzY0IDguNzg5MDYgMy4wNDAwNEM4LjQwODIgMi42NTkxOCA3Ljk2NzEyIDIuMzYxMzMgNy40NjU4MiAyLjE0NjQ4QzYuOTY0NTIgMS45MzE2NCA2LjQyNzQxIDEuODI0MjIgNS44NTQ0OSAxLjgyNDIyQzUuMjgxNTggMS44MjQyMiA0Ljc0NDQ3IDEuOTMxNjQgNC4yNDMxNiAyLjE0NjQ4QzMuNzQxODYgMi4zNjEzMyAzLjMwMDc4IDIuNjU5MTggMi45MTk5MiAzLjA0MDA0QzIuNTM5MDYgMy40MTc2NCAyLjI0MTIxIDMuODU4NzIgMi4wMjYzNyA0LjM2MzI4QzEuODExNTIgNC44NjQ1OCAxLjcwNDEgNS40MDE2OSAxLjcwNDEgNS45NzQ2MUMxLjcwNDEgNi41NDc1MyAxLjgxMTUyIDcuMDg0NjQgMi4wMjYzNyA3LjU4NTk0QzIuMjQxMjEgOC4wODcyNCAyLjUzOTA2IDguNTI4MzIgMi45MTk5MiA4LjkwOTE4QzMuMzAwNzggOS4yOTAwNCAzLjc0MTg2IDkuNTg3ODkgNC4yNDMxNiA5LjgwMjczQzQuNzQ0NDcgMTAuMDE3NiA1LjI4MTU4IDEwLjEyNSA1Ljg1NDQ5IDEwLjEyNVpcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwQjU0QzJcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb3lhbHR5QmFkZ2VJY29uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xveWFsdHlCYWRnZUljb24+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEyXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMlwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiAxMlwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgY3g9XCI2XCJcbiAgICAgICAgICAgICAgICAgIGN5PVwiNlwiXG4gICAgICAgICAgICAgICAgICByPVwiNVwiXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMEI1NEMyXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgZD1cIk02IDUuNXYzTTYgMy45di4wMVwiXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMEI1NEMyXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMlwiXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIHt7IHBheW1lbnRCYWRnZUtleSgpIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gc2hvd2luZyBsb3lhbHR5IG5vdGUgZm9yIGhvdGVscyAtLT5cbiAgICAgICAgQGlmIChzaG93TG95YWx0eVBvaW50c05vdGUoKSAmJiBzaG93QXNMb3lhbHR5KCkpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX25vdGljZSByZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19ub3RpY2UtLWluZm9cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk00LjE1ODIgMjEuMTc3N0MzLjYwNDgyIDIxLjE3NzcgMy4xMjk1NiAyMS4wNjA1IDIuNzMyNDIgMjAuODI2MkMyLjMzNTI5IDIwLjU5MTggMi4wMjkzIDIwLjI3MjggMS44MTQ0NSAxOS44NjkxQzEuNTk5NjEgMTkuNDcyIDEuNDkyMTkgMTkuMDI2IDEuNDkyMTkgMTguNTMxMkMxLjQ5MjE5IDE4LjA1NiAxLjYxOTE0IDE3LjYwMDMgMS44NzMwNSAxNy4xNjQxTDkuNDUxMTcgMy45NjA5NEM5LjY5ODU3IDMuNTE4MjMgMTAuMDI3MyAzLjE4NjIgMTAuNDM3NSAyLjk2NDg0QzEwLjg0NzcgMi43MzY5OCAxMS4yNzczIDIuNjIzMDUgMTEuNzI2NiAyLjYyMzA1QzEyLjE3NTggMi42MjMwNSAxMi42MDIyIDIuNzM2OTggMTMuMDA1OSAyLjk2NDg0QzEzLjQxNiAzLjE4NjIgMTMuNzQ4IDMuNTE4MjMgMTQuMDAyIDMuOTYwOTRMMjEuNTgwMSAxNy4xNjQxQzIxLjcwMzggMTcuMzc4OSAyMS43OTgyIDE3LjYwMzUgMjEuODYzMyAxNy44Mzc5QzIxLjkyODQgMTguMDcyMyAyMS45NjA5IDE4LjMwMzQgMjEuOTYwOSAxOC41MzEyQzIxLjk2MDkgMTkuMDI2IDIxLjg1MzUgMTkuNDcyIDIxLjYzODcgMTkuODY5MUMyMS40MjM4IDIwLjI3MjggMjEuMTE3OCAyMC41OTE4IDIwLjcyMDcgMjAuODI2MkMyMC4zMjM2IDIxLjA2MDUgMTkuODQ4MyAyMS4xNzc3IDE5LjI5NDkgMjEuMTc3N0g0LjE1ODJaTTQuMTY3OTcgMTkuNjQ0NUgxOS4yNzU0QzE5LjYxMzkgMTkuNjQ0NSAxOS44ODA5IDE5LjUzMDYgMjAuMDc2MiAxOS4zMDI3QzIwLjI3OCAxOS4wODE0IDIwLjM3ODkgMTguODIxIDIwLjM3ODkgMTguNTIxNUMyMC4zNzg5IDE4LjMxMzIgMjAuMzI2OCAxOC4xMDgxIDIwLjIyMjcgMTcuOTA2MkwxMi42NTQzIDQuNzAzMTJDMTIuNTUwMSA0LjUyMDgzIDEyLjQxMzQgNC4zOTA2MiAxMi4yNDQxIDQuMzEyNUMxMi4wODE0IDQuMjI3ODYgMTEuOTA4OSA0LjE4NTU1IDExLjcyNjYgNC4xODU1NUMxMS41NDQzIDQuMTg1NTUgMTEuMzY4NSA0LjIyNzg2IDExLjE5OTIgNC4zMTI1QzExLjAyOTkgNC4zOTA2MiAxMC44OTMyIDQuNTIwODMgMTAuNzg5MSA0LjcwMzEyTDMuMjIwNyAxNy44OTY1QzMuMTY4NjIgMTguMDAwNyAzLjEyOTU2IDE4LjEwODEgMy4xMDM1MiAxOC4yMTg4QzMuMDgzOTggMTguMzI5NCAzLjA3NDIyIDE4LjQzMDMgMy4wNzQyMiAxOC41MjE1QzMuMDc0MjIgMTguODIxIDMuMTcxODggMTkuMDgxNCAzLjM2NzE5IDE5LjMwMjdDMy41NjI1IDE5LjUzMDYgMy44Mjk0MyAxOS42NDQ1IDQuMTY3OTcgMTkuNjQ0NVpNMTEuNzI2NiAxNC41ODU5QzExLjIyNTMgMTQuNTg1OSAxMC45NjgxIDE0LjMyODggMTAuOTU1MSAxMy44MTQ1TDEwLjgyODEgOC42NDg0NEMxMC44MjE2IDguNDAxMDQgMTAuODk5NyA4LjE5NTk2IDExLjA2MjUgOC4wMzMyQzExLjIzMTggNy44NzA0NCAxMS40NDk5IDcuNzg5MDYgMTEuNzE2OCA3Ljc4OTA2QzExLjk3NzIgNy43ODkwNiAxMi4xOTIxIDcuODczNyAxMi4zNjEzIDguMDQyOTdDMTIuNTM3MSA4LjIwNTczIDEyLjYyMTcgOC40MTA4MSAxMi42MTUyIDguNjU4MkwxMi40Njg4IDEzLjgxNDVDMTIuNDYyMiAxNC4zMjg4IDEyLjIxNDggMTQuNTg1OSAxMS43MjY2IDE0LjU4NTlaTTExLjcyNjYgMTcuNzU5OEMxMS40NDAxIDE3Ljc1OTggMTEuMTkyNyAxNy42NjIxIDEwLjk4NDQgMTcuNDY2OEMxMC43NzYgMTcuMjY1IDEwLjY3MTkgMTcuMDI0MSAxMC42NzE5IDE2Ljc0NDFDMTAuNjcxOSAxNi40NjQyIDEwLjc3NiAxNi4yMjY2IDEwLjk4NDQgMTYuMDMxMkMxMS4xOTI3IDE1LjgyOTQgMTEuNDQwMSAxNS43Mjg1IDExLjcyNjYgMTUuNzI4NUMxMi4wMTMgMTUuNzI4NSAxMi4yNjA0IDE1LjgyNjIgMTIuNDY4OCAxNi4wMjE1QzEyLjY3NzEgMTYuMjE2OCAxMi43ODEyIDE2LjQ1NzcgMTIuNzgxMiAxNi43NDQxQzEyLjc4MTIgMTcuMDMwNiAxMi42NzM4IDE3LjI3MTUgMTIuNDU5IDE3LjQ2NjhDMTIuMjUwNyAxNy42NjIxIDEyLjAwNjUgMTcuNzU5OCAxMS43MjY2IDE3Ljc1OThaXCJcbiAgICAgICAgICAgICAgICBmaWxsPVwiIzBCNTRDMlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDxzcGFuPkxveWFsdHkgcG9pbnRzIHdpbGwgYmUgcmVmdW5kZWQgaW5zdGFudGx5IHRvIHlvdXIgYWNjb3VudDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19vcHRpb24tZW5kXCI+XG4gICAgICAgIEBpZiAoaXNNYWRhTWV0aG9kKCkpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX21hZGEtbG9nb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hZGFMb2dvXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWhhc1NpbmdsZU9wdGlvbigpKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19yYWRpb1wiPjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICB9XG5cbiAgPCEtLSBTcGxpdCBSZWZ1bmQgb3B0aW9uIC0tPlxuICBAaWYgKHNob3dTcGxpdCgpKSB7XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX29wdGlvbiByZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19vcHRpb24tLXNwbGl0XCJcbiAgICAgIFtjbGFzcy5yZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19vcHRpb24tLWFjdGl2ZV09XCJcbiAgICAgICAgcmVmdW5kTWV0aG9kID09PSAnc3BsaXQnICYmICFoYXNTaW5nbGVPcHRpb24oKVxuICAgICAgXCJcbiAgICAgIChjbGljayk9XCJzZWxlY3QoJ3NwbGl0JylcIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwicmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9faWNvblwiPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgd2lkdGg9XCI0NVwiXG4gICAgICAgICAgaGVpZ2h0PVwiNDVcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNDUgNDVcIlxuICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICB4PVwiMC41XCJcbiAgICAgICAgICAgIHk9XCIwLjVcIlxuICAgICAgICAgICAgd2lkdGg9XCI0NFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCI0NFwiXG4gICAgICAgICAgICByeD1cIjcuNVwiXG4gICAgICAgICAgICBzdHJva2U9XCIjRDlEOURFXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjQwNzlfNzkwNl9zZWxlY3RvcilcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMjguMTYyMSAxNC45OTUxQzI4LjE2MjEgMTQuNzk5OCAyOC4yMTQyIDE0LjY1MDEgMjguMzE4NCAxNC41NDU5QzI4LjQyOSAxNC40NDE3IDI4LjU4NTMgMTQuMzg5NiAyOC43ODcxIDE0LjM4OTZDMjguODc4MyAxNC4zODk2IDI4Ljk2NjEgMTQuNDA1OSAyOS4wNTA4IDE0LjQzODVDMjkuMTQxOSAxNC40NjQ1IDI5LjIyMzMgMTQuNTA2OCAyOS4yOTQ5IDE0LjU2NTRMMzIuOTg2MyAxNy42MzE4QzMzLjE0MjYgMTcuNzY4NiAzMy4yMjA3IDE3LjkyNDggMzMuMjIwNyAxOC4xMDA2QzMzLjIyMDcgMTguMjc2NCAzMy4xNDI2IDE4LjQyOTQgMzIuOTg2MyAxOC41NTk2TDI5LjI5NDkgMjEuNjE2MkMyOS4yMjMzIDIxLjY3NDggMjkuMTQxOSAyMS43MjA0IDI5LjA1MDggMjEuNzUyOUMyOC45NjYxIDIxLjc4NTUgMjguODc4MyAyMS44MDE4IDI4Ljc4NzEgMjEuODAxOEMyOC41ODUzIDIxLjgwMTggMjguNDI5IDIxLjc0OTcgMjguMzE4NCAyMS42NDU1QzI4LjIxNDIgMjEuNTM0OCAyOC4xNjIxIDIxLjM4MTggMjguMTYyMSAyMS4xODY1VjE0Ljk5NTFaTTEwLjc3OTMgMjguMjM3M0MxMC43NzkzIDI3Ljk5NjQgMTAuODYwNyAyNy44MDExIDExLjAyMzQgMjcuNjUxNEMxMS4xOTI3IDI3LjUwMTYgMTEuNDEwOCAyNy40MjY4IDExLjY3NzcgMjcuNDI2OEgxMy45NTMxQzE0LjQ0NzkgMjcuNDI2OCAxNC44ODQxIDI3LjMyNTggMTUuMjYxNyAyNy4xMjRDMTUuNjQ1OCAyNi45MjIyIDE2LjA0OTUgMjYuNTczOSAxNi40NzI3IDI2LjA3OTFMMjIuMzgwOSAxOS4xNzQ4QzIyLjk2NjggMTguNDkxMiAyMy41MzMyIDE4LjAxNiAyNC4wODAxIDE3Ljc0OUMyNC42MjcgMTcuNDgyMSAyNS4zMDczIDE3LjM0ODYgMjYuMTIxMSAxNy4zNDg2SDI5LjU5NzdDMjkuODI1NSAxNy4zNDg2IDMwLjAxNzYgMTcuNDMgMzAuMTczOCAxNy41OTI4QzMwLjMzNjYgMTcuNzQ5IDMwLjQxOCAxNy45NDExIDMwLjQxOCAxOC4xNjg5QzMwLjQxOCAxOC4zOTAzIDMwLjMzNjYgMTguNTgyNCAzMC4xNzM4IDE4Ljc0NTFDMzAuMDE3NiAxOC45MDE0IDI5LjgyNTUgMTguOTc5NSAyOS41OTc3IDE4Ljk3OTVIMjYuMTY5OUMyNS44MTE4IDE4Ljk3OTUgMjUuNDg2MyAxOS4wMjUxIDI1LjE5MzQgMTkuMTE2MkMyNC45MDY5IDE5LjIwMDggMjQuNjMwMiAxOS4zNDA4IDI0LjM2MzMgMTkuNTM2MUMyNC4xMDI5IDE5LjczMTQgMjMuODMyNyAxOS45OTE5IDIzLjU1MjcgMjAuMzE3NEwxNy42MzQ4IDI3LjIyMTdDMTcuMDQyMyAyNy45MDUzIDE2LjQ3MjcgMjguMzgwNSAxNS45MjU4IDI4LjY0NzVDMTUuMzg1NCAyOC45MTQ0IDE0LjcxMTYgMjkuMDQ3OSAxMy45MDQzIDI5LjA0NzlIMTEuNjc3N0MxMS40MTA4IDI5LjA0NzkgMTEuMTkyNyAyOC45NzMgMTEuMDIzNCAyOC44MjMyQzEwLjg2MDcgMjguNjczNSAxMC43NzkzIDI4LjQ3ODIgMTAuNzc5MyAyOC4yMzczWk0yOC4xNjIxIDMxLjQ3OTVWMjUuMjg4MUMyOC4xNjIxIDI1LjA5MjggMjguMjE0MiAyNC45NDMgMjguMzE4NCAyNC44Mzg5QzI4LjQyOSAyNC43MjgyIDI4LjU4NTMgMjQuNjcyOSAyOC43ODcxIDI0LjY3MjlDMjguODc4MyAyNC42NzI5IDI4Ljk2NjEgMjQuNjg5MSAyOS4wNTA4IDI0LjcyMTdDMjkuMTQxOSAyNC43NTQyIDI5LjIyMzMgMjQuNzk5OCAyOS4yOTQ5IDI0Ljg1ODRMMzIuOTg2MyAyNy45MTVDMzMuMTQyNiAyOC4wNDUyIDMzLjIyMDcgMjguMTk4MiAzMy4yMjA3IDI4LjM3NEMzMy4yMjA3IDI4LjU0OTggMzMuMTQyNiAyOC43MDYxIDMyLjk4NjMgMjguODQyOEwyOS4yOTQ5IDMxLjkwOTJDMjkuMjIzMyAzMS45Njc4IDI5LjE0MTkgMzIuMDEwMSAyOS4wNTA4IDMyLjAzNjFDMjguOTY2MSAzMi4wNjg3IDI4Ljg3ODMgMzIuMDg1IDI4Ljc4NzEgMzIuMDg1QzI4LjU4NTMgMzIuMDg1IDI4LjQyOSAzMi4wMzI5IDI4LjMxODQgMzEuOTI4N0MyOC4yMTQyIDMxLjgyNDUgMjguMTYyMSAzMS42NzQ4IDI4LjE2MjEgMzEuNDc5NVpNMTAuNzc5MyAxOC4yMzczQzEwLjc3OTMgMTcuOTk2NCAxMC44NjA3IDE3LjgwMTEgMTEuMDIzNCAxNy42NTE0QzExLjE5MjcgMTcuNTAxNiAxMS40MTA4IDE3LjQyNjggMTEuNjc3NyAxNy40MjY4SDEzLjkwNDNDMTQuNzExNiAxNy40MjY4IDE1LjM4NTQgMTcuNTYwMiAxNS45MjU4IDE3LjgyNzFDMTYuNDcyNyAxOC4wOTQxIDE3LjA0MjMgMTguNTY5MyAxNy42MzQ4IDE5LjI1MjlMMjMuNTUyNyAyNi4xNTcyQzIzLjgzMjcgMjYuNDgyNyAyNC4xMDI5IDI2Ljc0MzIgMjQuMzYzMyAyNi45Mzg1QzI0LjYzMDIgMjcuMTMzOCAyNC45MDY5IDI3LjI3NyAyNS4xOTM0IDI3LjM2ODJDMjUuNDg2MyAyNy40NTI4IDI1LjgxMTggMjcuNDk1MSAyNi4xNjk5IDI3LjQ5NTFIMjkuNTk3N0MyOS44MjU1IDI3LjQ5NTEgMzAuMDE3NiAyNy41NzY1IDMwLjE3MzggMjcuNzM5M0MzMC4zMzY2IDI3Ljg5NTUgMzAuNDE4IDI4LjA4NDMgMzAuNDE4IDI4LjMwNTdDMzAuNDE4IDI4LjUzMzUgMzAuMzM2NiAyOC43Mjg4IDMwLjE3MzggMjguODkxNkMzMC4wMTc2IDI5LjA0NzkgMjkuODI1NSAyOS4xMjYgMjkuNTk3NyAyOS4xMjZIMjYuMTIxMUMyNS4zMDczIDI5LjEyNiAyNC42MjcgMjguOTkyNSAyNC4wODAxIDI4LjcyNTZDMjMuNTMzMiAyOC40NTg3IDIyLjk2NjggMjcuOTgzNCAyMi4zODA5IDI3LjI5OThMMTYuNDcyNyAyMC4zOTU1QzE2LjA0OTUgMTkuOTAwNyAxNS42NDU4IDE5LjU1MjQgMTUuMjYxNyAxOS4zNTA2QzE0Ljg4NDEgMTkuMTQ4OCAxNC40NDc5IDE5LjA0NzkgMTMuOTUzMSAxOS4wNDc5SDExLjY3NzdDMTEuNDEwOCAxOS4wNDc5IDExLjE5MjcgMTguOTczIDExLjAyMzQgMTguODIzMkMxMC44NjA3IDE4LjY3MzUgMTAuNzc5MyAxOC40NzgyIDEwLjc3OTMgMTguMjM3M1pcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzFCMUExRlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzI0MDc5Xzc5MDZfc2VsZWN0b3JcIj5cbiAgICAgICAgICAgICAgPHJlY3RcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMTAgMTEuNSlcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgICAgICA8L2RlZnM+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19ib2R5XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9fbmFtZVwiPlNwbGl0IFJlZnVuZDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19kZXNjXCI+UmV0dXJuZWQgdG8geW91ciBvcmlnaW5hbCBwYXltZW50IG1ldGhvZDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzdHJvbmcgY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19zcGxpdC10b3RhbFwiPlxuICAgICAgICBAaWYgKGN1cnJlbmN5T2JqKSB7XG4gICAgICAgICAgPGFwcC1jdXJyZW5jeS1jb2RlLWljb25cbiAgICAgICAgICAgIFtjdXJyZW5jeV09XCJjdXJyZW5jeU9ialwiXG4gICAgICAgICAgPjwvYXBwLWN1cnJlbmN5LWNvZGUtaWNvbj5cbiAgICAgICAgfVxuICAgICAgICB7eyBmbXRBbW91bnQodG90YWxSZWZ1bmRBbW91bnQoKSkgfX1cbiAgICAgIDwvc3Ryb25nPlxuICAgICAgQGlmICghaGFzU2luZ2xlT3B0aW9uKCkpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19yYWRpb1wiPjwvc3Bhbj5cbiAgICAgIH1cblxuICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19zcGxpdC1icmVha2Rvd25cIj5cbiAgICAgICAgQGZvciAocm93IG9mIHNwbGl0UmVmdW5kUm93cygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX3NwbGl0LXJvd1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19zcGxpdC1sYWJlbFwiPlxuICAgICAgICAgICAgICB7eyByb3cubGFiZWwgfX1cbiAgICAgICAgICAgICAgQGlmIChyb3cuaXNNYWRhKSB7XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9fbWFkYS1sb2dvXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hZGFMb2dvXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICBAaWYgKGN1cnJlbmN5T2JqKSB7XG4gICAgICAgICAgICAgICAgPGFwcC1jdXJyZW5jeS1jb2RlLWljb25cbiAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeV09XCJjdXJyZW5jeU9ialwiXG4gICAgICAgICAgICAgICAgPjwvYXBwLWN1cnJlbmN5LWNvZGUtaWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB7eyBmbXRBbW91bnQocm93LnZhbHVlKSB9fVxuICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInJlZnVuZC1tZXRob2Qtc2VsZWN0b3JfX2JhZGdlXCJcbiAgICAgICAgICAgIFtjbGFzcy5yZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19iYWRnZS0taW5zdGFudF09XCJyb3cuaW5zdGFudFwiXG4gICAgICAgICAgICBbY2xhc3MucmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9fYmFkZ2UtLWRheXNdPVwiIXJvdy5pbnN0YW50XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKHJvdy5pbnN0YW50KSB7XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEyXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCI5XCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEyIDlcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBkPVwiTTcuMzE4MTggMEM4LjQyNzI3IDAgOS40OTA5MyAwLjQ0MDU4MyAxMC4yNzUyIDEuMjI0ODNDMTEuMDU5NCAyLjAwOTA3IDExLjUgMy4wNzI3MyAxMS41IDQuMTgxODJDMTEuNSA1LjI5MDkgMTEuMDU5NCA2LjM1NDU3IDEwLjI3NTIgNy4xMzg4MUM5LjQ5MDkzIDcuOTIzMDUgOC40MjcyNyA4LjM2MzY0IDcuMzE4MTggOC4zNjM2NEM2LjIwOTA5IDguMzYzNjQgNS4xNDU0MyA3LjkyMzA1IDQuMzYxMTkgNy4xMzg4MUMzLjU3Njk1IDYuMzU0NTcgMy4xMzYzNiA1LjI5MDkgMy4xMzYzNiA0LjE4MTgyQzMuMTM2MzYgMy4wNzI3MyAzLjU3Njk1IDIuMDA5MDcgNC4zNjExOSAxLjIyNDgzQzUuMTQ1NDMgMC40NDA1ODMgNi4yMDkwOSAwIDcuMzE4MTggMFpNNy4zMTgxOCAxLjA0NTQ1QzYuNDg2MzcgMS4wNDU0NSA1LjY4ODYyIDEuMzc1ODkgNS4xMDA0NCAxLjk2NDA3QzQuNTEyMjYgMi41NTIyNiA0LjE4MTgyIDMuMzUgNC4xODE4MiA0LjE4MTgyQzQuMTgxODIgNS4wMTM2MyA0LjUxMjI2IDUuODExMzggNS4xMDA0NCA2LjM5OTU2QzUuNjg4NjIgNi45ODc3NCA2LjQ4NjM3IDcuMzE4MTggNy4zMTgxOCA3LjMxODE4QzguMTUgNy4zMTgxOCA4Ljk0Nzc0IDYuOTg3NzQgOS41MzU5MyA2LjM5OTU2QzEwLjEyNDEgNS44MTEzOCAxMC40NTQ1IDUuMDEzNjMgMTAuNDU0NSA0LjE4MTgyQzEwLjQ1NDUgMy4zNSAxMC4xMjQxIDIuNTUyMjYgOS41MzU5MyAxLjk2NDA3QzguOTQ3NzQgMS4zNzU4OSA4LjE1IDEuMDQ1NDUgNy4zMTgxOCAxLjA0NTQ1Wk02Ljc5NTQ1IDIuMDkwOTFINy41Nzk1NVY0LjA2NjgyTDguNzk3NSA1LjI4NDc3TDguMjQzNDEgNS44Mzg4Nkw2Ljc5NTQ1IDQuMzkwOTFWMi4wOTA5MVpNMC41MjI3MjcgNy4zMTgxOEMwLjM4NDA5MSA3LjMxODE4IDAuMjUxMTM0IDcuMjYzMTEgMC4xNTMxMDMgNy4xNjUwOEMwLjA1NTA3MjkgNy4wNjcwNSAwIDYuOTM0MDkgMCA2Ljc5NTQ1QzAgNi42NTY4MiAwLjA1NTA3MjkgNi41MjM4NiAwLjE1MzEwMyA2LjQyNTgzQzAuMjUxMTM0IDYuMzI3OCAwLjM4NDA5MSA2LjI3MjczIDAuNTIyNzI3IDYuMjcyNzNIMi41MjQ3N0MyLjY4NjgyIDYuNjQzODYgMi44OTU5MSA2Ljk5NDA5IDMuMTM2MzYgNy4zMTgxOEgwLjUyMjcyN1pNMS4wNDU0NSA0LjcwNDU1QzAuOTA2ODE5IDQuNzA0NTUgMC43NzM4NjEgNC42NDk0NyAwLjY3NTgzIDQuNTUxNDRDMC41Nzc4IDQuNDUzNDEgMC41MjI3MjcgNC4zMjA0NSAwLjUyMjcyNyA0LjE4MTgyQzAuNTIyNzI3IDQuMDQzMTggMC41Nzc4IDMuOTEwMjIgMC42NzU4MyAzLjgxMjE5QzAuNzczODYxIDMuNzE0MTYgMC45MDY4MTkgMy42NTkwOSAxLjA0NTQ1IDMuNjU5MDlIMi4xMTcwNUwyLjA5MDkxIDQuMTgxODJMMi4xMTcwNSA0LjcwNDU1SDEuMDQ1NDVaTTEuNTY4MTggMi4wOTA5MUMxLjQyOTU1IDIuMDkwOTEgMS4yOTY1OSAyLjAzNTg0IDEuMTk4NTYgMS45Mzc4MUMxLjEwMDUzIDEuODM5NzggMS4wNDU0NSAxLjcwNjgyIDEuMDQ1NDUgMS41NjgxOEMxLjA0NTQ1IDEuNDI5NTUgMS4xMDA1MyAxLjI5NjU5IDEuMTk4NTYgMS4xOTg1NkMxLjI5NjU5IDEuMTAwNTMgMS40Mjk1NSAxLjA0NTQ1IDEuNTY4MTggMS4wNDU0NUgzLjEzNjM2QzIuODk1OTEgMS4zNjk1NSAyLjY4NjgyIDEuNzE5NzcgMi41MjQ3NyAyLjA5MDkxSDEuNTY4MThaXCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMTU4MDNDXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIXJvdy5pbnN0YW50KSB7XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEyXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMlwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiAxMlwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMy4zMDA3OCA2LjUwMTk1QzMuMjAzMTIgNi41MDE5NSAzLjEyMTc0IDYuNDY5NCAzLjA1NjY0IDYuNDA0M0MyLjk5MTU0IDYuMzM5MTkgMi45NTg5OCA2LjI1NzgxIDIuOTU4OTggNi4xNjAxNkMyLjk1ODk4IDYuMDY1NzYgMi45OTE1NCA1Ljk4NiAzLjA1NjY0IDUuOTIwOUMzLjEyMTc0IDUuODU1NzkgMy4yMDMxMiA1LjgyMzI0IDMuMzAwNzggNS44MjMyNEg1LjUxMjdWMi44NjkxNEM1LjUxMjcgMi43NzQ3NCA1LjU0NTI1IDIuNjk0OTkgNS42MTAzNSAyLjYyOTg4QzUuNjc1NDYgMi41NjQ3OCA1Ljc1NTIxIDIuNTMyMjMgNS44NDk2MSAyLjUzMjIzQzUuOTQ3MjcgMi41MzIyMyA2LjAyODY1IDIuNTY0NzggNi4wOTM3NSAyLjYyOTg4QzYuMTU4ODUgMi42OTQ5OSA2LjE5MTQxIDIuNzc0NzQgNi4xOTE0MSAyLjg2OTE0VjYuMTYwMTZDNi4xOTE0MSA2LjI1NzgxIDYuMTU4ODUgNi4zMzkxOSA2LjA5Mzc1IDYuNDA0M0M2LjAyODY1IDYuNDY5NCA1Ljk0NzI3IDYuNTAxOTUgNS44NDk2MSA2LjUwMTk1SDMuMzAwNzhaTTUuODU0NDkgMTAuOTU1MUM1LjE2NzY0IDEwLjk1NTEgNC41MjMxMSAxMC44MjQ5IDMuOTIwOSAxMC41NjQ1QzMuMzE4NjggMTAuMzA3MyAyLjc4OTcxIDkuOTUwODUgMi4zMzM5OCA5LjQ5NTEyQzEuODc4MjYgOS4wMzkzOSAxLjUyMDE4IDguNTEwNDIgMS4yNTk3NyA3LjkwODJDMS4wMDI2IDcuMzA1OTkgMC44NzQwMjMgNi42NjE0NiAwLjg3NDAyMyA1Ljk3NDYxQzAuODc0MDIzIDUuMjg3NzYgMS4wMDI2IDQuNjQzMjMgMS4yNTk3NyA0LjA0MTAyQzEuNTIwMTggMy40Mzg4IDEuODc4MjYgMi45MDk4MyAyLjMzMzk4IDIuNDU0MUMyLjc4OTcxIDEuOTk1MTIgMy4zMTg2OCAxLjYzNzA0IDMuOTIwOSAxLjM3OTg4QzQuNTIzMTEgMS4xMjI3MiA1LjE2NzY0IDAuOTk0MTQxIDUuODU0NDkgMC45OTQxNDFDNi41NDEzNCAwLjk5NDE0MSA3LjE4NTg3IDEuMTIyNzIgNy43ODgwOSAxLjM3OTg4QzguMzkwMyAxLjYzNzA0IDguOTE5MjcgMS45OTUxMiA5LjM3NSAyLjQ1NDFDOS44MzA3MyAyLjkwOTgzIDEwLjE4NzIgMy40Mzg4IDEwLjQ0NDMgNC4wNDEwMkMxMC43MDQ4IDQuNjQzMjMgMTAuODM1IDUuMjg3NzYgMTAuODM1IDUuOTc0NjFDMTAuODM1IDYuNjYxNDYgMTAuNzA0OCA3LjMwNTk5IDEwLjQ0NDMgNy45MDgyQzEwLjE4NzIgOC41MTA0MiA5LjgzMDczIDkuMDM5MzkgOS4zNzUgOS40OTUxMkM4LjkxOTI3IDkuOTUwODUgOC4zOTAzIDEwLjMwNzMgNy43ODgwOSAxMC41NjQ1QzcuMTg1ODcgMTAuODI0OSA2LjU0MTM0IDEwLjk1NTEgNS44NTQ0OSAxMC45NTUxWk01Ljg1NDQ5IDEwLjEyNUM2LjQyNzQxIDEwLjEyNSA2Ljk2NDUyIDEwLjAxNzYgNy40NjU4MiA5LjgwMjczQzcuOTY3MTIgOS41ODc4OSA4LjQwODIgOS4yOTAwNCA4Ljc4OTA2IDguOTA5MThDOS4xNjk5MiA4LjUyODMyIDkuNDY3NzcgOC4wODcyNCA5LjY4MjYyIDcuNTg1OTRDOS44OTc0NiA3LjA4NDY0IDEwLjAwNDkgNi41NDc1MyAxMC4wMDQ5IDUuOTc0NjFDMTAuMDA0OSA1LjQwMTY5IDkuODk3NDYgNC44NjQ1OCA5LjY4MjYyIDQuMzYzMjhDOS40Njc3NyAzLjg1ODcyIDkuMTY5OTIgMy40MTc2NCA4Ljc4OTA2IDMuMDQwMDRDOC40MDgyIDIuNjU5MTggNy45NjcxMiAyLjM2MTMzIDcuNDY1ODIgMi4xNDY0OEM2Ljk2NDUyIDEuOTMxNjQgNi40Mjc0MSAxLjgyNDIyIDUuODU0NDkgMS44MjQyMkM1LjI4MTU4IDEuODI0MjIgNC43NDQ0NyAxLjkzMTY0IDQuMjQzMTYgMi4xNDY0OEMzLjc0MTg2IDIuMzYxMzMgMy4zMDA3OCAyLjY1OTE4IDIuOTE5OTIgMy4wNDAwNEMyLjUzOTA2IDMuNDE3NjQgMi4yNDEyMSAzLjg1ODcyIDIuMDI2MzcgNC4zNjMyOEMxLjgxMTUyIDQuODY0NTggMS43MDQxIDUuNDAxNjkgMS43MDQxIDUuOTc0NjFDMS43MDQxIDYuNTQ3NTMgMS44MTE1MiA3LjA4NDY0IDIuMDI2MzcgNy41ODU5NEMyLjI0MTIxIDguMDg3MjQgMi41MzkwNiA4LjUyODMyIDIuOTE5OTIgOC45MDkxOEMzLjMwMDc4IDkuMjkwMDQgMy43NDE4NiA5LjU4Nzg5IDQuMjQzMTYgOS44MDI3M0M0Ljc0NDQ3IDEwLjAxNzYgNS4yODE1OCAxMC4xMjUgNS44NTQ0OSAxMC4xMjVaXCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMEI1NEMyXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHt7IHJvdy5pbnN0YW50ID8gJ0luc3RhbnQnIDogcGF5bWVudEJhZGdlS2V5KCkgfX1cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICBAaWYgKHJvdy5pc0xveWFsdHkpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWZ1bmQtbWV0aG9kLXNlbGVjdG9yX19ub3RpY2UgcmVmdW5kLW1ldGhvZC1zZWxlY3Rvcl9fbm90aWNlLS1pbmZvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgICBjeD1cIjEyXCJcbiAgICAgICAgICAgICAgICAgIGN5PVwiMTJcIlxuICAgICAgICAgICAgICAgICAgcj1cIjlcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgZD1cIk0xMiAxMXY1LjVNMTIgOHYuMDFcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNlwiXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPHNwYW4+TG95YWx0eSBwb2ludHMgd2lsbCBiZSByZWZ1bmRlZCBpbnN0YW50bHkgdG8geW91ciBhY2NvdW50PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIH1cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21hZGFMb2dvPlxuICA8c3ZnXG4gICAgd2lkdGg9XCI0M1wiXG4gICAgaGVpZ2h0PVwiMTVcIlxuICAgIHZpZXdCb3g9XCIwIDAgNDMgMTVcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgPlxuICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfcm1zX21hZGEpXCI+XG4gICAgICA8cGF0aCBkPVwiTTE4LjE4OTQgOC42NTQzSDBWMTQuOTkzM0gxOC4xODk0VjguNjU0M1pcIiBmaWxsPVwiIzg0Qjc0MFwiIC8+XG4gICAgICA8cGF0aCBkPVwiTTE4LjE4OTQgMEgwVjYuMzQ0NjNIMTguMTg5NFYwWlwiIGZpbGw9XCIjMjU5QkQ2XCIgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMzYuMzc3OSAxMy43MDM0TDM2LjI5NjkgMTMuNzIwM0MzNi4wMTYgMTMuNzc2OCAzNS45MTM0IDEzLjc5OTQgMzUuNzA4MiAxMy43OTk0QzM1LjIzMyAxMy43OTk0IDM0LjY3MTMgMTMuNTQ1MiAzNC42NzEzIDEyLjM0NzVDMzQuNjcxMyAxMS43MzE2IDM0Ljc2ODUgMTAuOTEyNCAzNS42NTQyIDEwLjkxMjRIMzUuNjU5NkMzNS44MTA4IDEwLjkyMzcgMzUuOTgzNiAxMC45NDA3IDM2LjMwNzcgMTEuMDQyNEwzNi4zNzc5IDExLjA2NVYxMy43MDM0Wk0zNi41MjM3IDcuNzMxNjRMMzYuMzc3OSA3Ljc1OTg5VjkuOTc0NThMMzYuMjQ4MyA5LjkzNTAzTDM2LjIxMDUgOS45MjM3M0MzNi4wNjQ3IDkuODc4NTMgMzUuNzI5OCA5Ljc3Njg0IDM1LjQwNTggOS43NzY4NEMzMy42MzQ0IDkuNzc2ODQgMzMuMjYxNyAxMS4xNzggMzMuMjYxNyAxMi4zNTMxQzMzLjI2MTcgMTMuOTYzMyAzNC4xMjU4IDE0Ljg4OTggMzUuNjMyNiAxNC44ODk4QzM2LjI2OTkgMTQuODg5OCAzNi43Mzk3IDE0LjgyMiAzNy4yMTUgMTQuNjU4MkMzNy42NTI0IDE0LjUxMTMgMzcuODA5MSAxNC4zMDIzIDM3LjgwOTEgMTMuODU1OVY3LjVDMzcuMzg3OCA3LjU3OTEgMzYuOTUwNCA3LjY1ODE5IDM2LjUyMzcgNy43MzE2NFpcIlxuICAgICAgICBmaWxsPVwiIzc0NzU4M1wiXG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk00MS42NTEgMTMuNzM4NUw0MS41NzU0IDEzLjc2MTFMNDEuMzA1MyAxMy44MzQ1QzQxLjA1MTUgMTMuOTAyMyA0MC44MjQ3IDEzLjk0MTkgNDAuNjUxOSAxMy45NDE5QzQwLjIzNiAxMy45NDE5IDM5Ljk4NzYgMTMuNzI3MiAzOS45ODc2IDEzLjM2QzM5Ljk4NzYgMTMuMTIyNyA0MC4wOTAyIDEyLjcyMTUgNDAuNzcwNyAxMi43MjE1SDQxLjY1MVYxMy43Mzg1Wk00MS4wMjk5IDkuNzQ0MTRDNDAuNDg0NCA5Ljc0NDE0IDM5LjkyMjggOS44NDU4NCAzOS4yMjYxIDEwLjA3MThMMzguNzcyNCAxMC4yMTMxTDM4LjkyMzYgMTEuMjg2NUwzOS4zNjY1IDExLjEzNEMzOS44MzEgMTAuOTc1OCA0MC40MDg4IDEwLjg3NDEgNDAuODQwOSAxMC44NzQxQzQxLjAzNTMgMTAuODc0MSA0MS42Mjk0IDEwLjg3NDEgNDEuNjI5NCAxMS41NDY0VjExLjg0MDJINDAuODAzMUMzOS4yOTYzIDExLjg0MDIgMzguNTk5NiAxMi4zNDMgMzguNTk5NiAxMy40MjIxQzM4LjU5OTYgMTQuMzQzIDM5LjI0MjMgMTQuODk2NyA0MC4zMjI0IDE0Ljg5NjdDNDAuNjU3MyAxNC44OTY3IDQxLjEyMTcgMTQuODI4OSA0MS41MjE0IDE0LjcyNzJMNDEuNTQzIDE0LjcyMTVMNDEuNTY0NiAxNC43MjcyTDQxLjY5OTYgMTQuNzQ5OEM0Mi4xMjA4IDE0LjgyODkgNDIuNTU4MyAxNC45MDggNDIuOTg0OSAxNC45OTI3VjExLjQ2NzNDNDIuOTg0OSAxMC4zMjYxIDQyLjMyNjEgOS43NDQxNCA0MS4wMjk5IDkuNzQ0MTRaXCJcbiAgICAgICAgZmlsbD1cIiM3NDc1ODNcIlxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMzEuMTUyNyAxMy43Mzg1TDMxLjA3NzEgMTMuNzYxMUwzMC44MDcgMTMuODM0NUMzMC41NTMyIDEzLjkwMjMgMzAuMzMxOCAxMy45NDE5IDMwLjE1MzYgMTMuOTQxOUMyOS43Mzc3IDEzLjk0MTkgMjkuNDg5MyAxMy43MjcyIDI5LjQ4OTMgMTMuMzZDMjkuNDg5MyAxMy4xMjI3IDI5LjU5MTkgMTIuNzIxNSAzMC4yNjcgMTIuNzIxNUgzMS4xNDczTDMxLjE1MjcgMTMuNzM4NVpNMzAuNTM3IDkuNzQ0MTRDMjkuOTg2MSA5Ljc0NDE0IDI5LjQyOTkgOS44NDU4NCAyOC43MzMyIDEwLjA3MThMMjguMjc5NSAxMC4yMTMxTDI4LjQzMDggMTEuMjg2NUwyOC44NzM2IDExLjEzNEMyOS4zMzgxIDEwLjk3NTggMjkuOTE1OSAxMC44NzQxIDMwLjM0OCAxMC44NzQxQzMwLjU0MjQgMTAuODc0MSAzMS4xMzY1IDEwLjg3NDEgMzEuMTM2NSAxMS41NDY0VjExLjg0MDJIMzAuMzEwMkMyOC44MDM0IDExLjg0MDIgMjguMTAxMyAxMi4zNDMgMjguMTAxMyAxMy40MjIxQzI4LjEwMTMgMTQuMzQzIDI4Ljc0NCAxNC44OTY3IDI5LjgyOTUgMTQuODk2N0MzMC4xNjQ0IDE0Ljg5NjcgMzAuNjI4OCAxNC44Mjg5IDMxLjAyODUgMTQuNzI3MkwzMS4wNTAxIDE0LjcyMTVMMzEuMDcxNyAxNC43MjcyTDMxLjIwMTMgMTQuNzQ5OEMzMS42Mjc5IDE0LjgyODkgMzIuMDYgMTQuOTA4IDMyLjQ4NjYgMTQuOTk4NFYxMS40NzNDMzIuNDkyIDEwLjMyMDQgMzEuODMzMiA5Ljc0NDE0IDMwLjUzNyA5Ljc0NDE0WlwiXG4gICAgICAgIGZpbGw9XCIjNzQ3NTgzXCJcbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTI1LjQ3MDEgOS43NTc2QzI0Ljc4NDIgOS43NTc2IDI0LjIxNzIgOS45OTQ4OSAyNC4wMDY1IDEwLjA5NjZMMjMuOTUyNSAxMC4xMjQ4TDIzLjkwMzkgMTAuMDg1M0MyMy42MTIzIDkuODY0OTUgMjMuMTg1NiA5Ljc1MTk1IDIyLjU5MTYgOS43NTE5NUMyMi4wNjc3IDkuNzUxOTUgMjEuNTc2MiA5LjgzMTA1IDIxLjA0MTYgOS45OTQ4OUMyMC41ODI1IDEwLjE0MTggMjAuNDA0MyAxMC4zNzM0IDIwLjQwNDMgMTAuODA4NVYxNC44MzY3SDIxLjg0MDlWMTEuMTEzNUwyMS45MTExIDExLjA5MDlDMjIuMjAyNyAxMC45ODkyIDIyLjM3NTUgMTAuOTcyMyAyMi41NDMgMTAuOTcyM0MyMi45NTg4IDEwLjk3MjMgMjMuMTY5NCAxMS4yMDM5IDIzLjE2OTQgMTEuNjU1OVYxNC44NDIzSDI0LjU4NDRWMTEuNTkzOEMyNC41ODQ0IDExLjQwMTcgMjQuNTQ2NiAxMS4yODg3IDI0LjU0MTIgMTEuMjY2MUwyNC40OTI2IDExLjE3TDI0LjU4OTggMTEuMTI0OEMyNC44MDU4IDExLjAyMzEgMjUuMDQzNSAxMC45NzIzIDI1LjI5MTkgMTAuOTcyM0MyNS41NzgxIDEwLjk3MjMgMjUuOTE4NCAxMS4wOTA5IDI1LjkxODQgMTEuNjU1OVYxNC44NDIzSDI3LjMyNzlWMTEuNTA5QzI3LjMyNzkgMTAuMzI4MiAyNi43MjMxIDkuNzU3NiAyNS40NzAxIDkuNzU3NlpcIlxuICAgICAgICBmaWxsPVwiIzc0NzU4M1wiXG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk00MC41ODY2IDQuMTM1NTlDNDAuMzc1OSA0LjEzNTU5IDQwLjAyNDkgNC4xMTMgMzkuNzQ5NSA0LjA1NjVMMzkuNjY4NCA0LjAzOTU1VjEuODY0NDFDMzkuNjY4NCAxLjY4MzYyIDM5LjYzNiAxLjU3MDYyIDM5LjYzMDYgMS41NTM2N0wzOS41ODc0IDEuNDYzMjhMMzkuNjc5MyAxLjQyMzczQzM5LjcwMDkgMS40MTI0MyAzOS43MjI1IDEuNDA2NzggMzkuNzQ5NSAxLjM5NTQ4TDM5Ljc2NTcgMS4zODQxOEMzOS43OTgxIDEuMzcyODggMzkuODMwNSAxLjM2MTU4IDM5Ljg2MjkgMS4zNTAyOEMzOS44NzkxIDEuMzQ0NjMgMzkuODg5OSAxLjMzODk4IDM5LjkwMDcgMS4zMzg5OEM0MC4yMTkzIDEuMjQ4NTkgNDAuNTExIDEuMjU5ODkgNDAuNjQwNiAxLjI0ODU5SDQwLjY0NkM0MS41MjYzIDEuMjQ4NTkgNDEuNjI4OSAyLjA2NzggNDEuNjI4OSAyLjY4MzYyQzQxLjYyMzUgMy44ODEzNiA0MS4wNTY0IDQuMTM1NTkgNDAuNTg2NiA0LjEzNTU5Wk00MC41ODEyIDBDNDAuNTcwNCAwIDQwLjU1NDIgMCA0MC41NDM0IDBDMzkuNzE3MSAwIDM4Ljg2OTIgMC4yMzcyODggMzguNTY2NyAwLjcwMDU2NUMzOC40MDQ3IDAuOTI2NTU0IDM4LjMxMjkgMS4yMDkwNCAzOC4zMDc1IDEuNTQyMzdWMy43ODUzMUMzOC4zMDc1IDMuOTc3NCAzOC4yNjk3IDQuMDUwODUgMzguMjY0MyA0LjA2NzhMMzguMjE1NyA0LjE2Mzg0SDM1LjYwNzJWMi42MDQ1MkgzNS42MDE4QzM1LjU2OTQgMC45NjA0NTIgMzQuNjQwNCAwLjA1NjQ5NzIgMzMuMjk1NyAwLjA1NjQ5NzJIMzMuMTM5MUgzMS45ODMzQzMxLjkyOTMgMC40NTc2MjcgMzEuODg2MSAwLjc0MDExMyAzMS44MzIxIDEuMTQxMjRIMzMuMTM5MUMzMy44MjQ5IDEuMTQxMjQgMzQuMTg2OCAxLjc1MTQxIDM0LjE4NjggMi42ODkyN1Y0LjI1OTg5TDM0LjA5NSA0LjIwOTA0QzM0LjA3ODggNC4yMDMzOSAzMy45NjU0IDQuMTYzODQgMzMuNzg3MSA0LjE2Mzg0SDMxLjUyOTdDMzEuNDg2NSA0LjQ2MzI4IDMxLjQzMjUgNC44NTMxMSAzMS4zNzMgNS4yNDI5NEgzOC4zMTI5QzM4LjU1MDUgNS4xOTIwOSAzOC44MjU5IDUuMTQ2ODkgMzkuMDYzNiA1LjEwNzM1QzM5LjQxNDYgNS4yODgxNCA0MC4wNjgxIDUuMzg0MTggNDAuNTE2NCA1LjM4NDE4QzQyLjAyMzEgNS4zODQxOCA0My4wMDA3IDQuMzI3NjggNDMuMDAwNyAyLjcwMDU3QzQyLjk5NTMgMS4wOTA0IDQyLjA1MDEgMC4wMzM4OTgzIDQwLjU4MTIgMFpcIlxuICAgICAgICBmaWxsPVwiIzc0NzU4M1wiXG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0yOC40MTg5IDUuOTA4MjFIMjguNDgzN0MyOS45OTA1IDUuOTA4MjEgMzAuNjkyNSA1LjM4ODQ0IDMwLjY5MjUgNC4xMDU5NUMzMC42OTI1IDMuMTg1MDUgMzAuMDQ5OSAyLjQ1MDU5IDI4Ljk2OTcgMi40NTA1OUgyNy41ODE4QzI3LjE2NTkgMi40NTA1OSAyNi45MTc1IDIuMjAyIDI2LjkxNzUgMS43ODM5MkMyNi45MTc1IDEuNTAxNDMgMjcuMDIwMSAxLjE1MTE1IDI3LjcwMDYgMS4xNTExNUgzMC43MzU3QzMwLjgwMDYgMC43Mzg3MjMgMzAuODMzIDAuNDc4ODM2IDMwLjg5MjQgMC4wNjY0MDYySDI3LjczODRDMjYuMjY5NCAwLjA2NjQwNjIgMjUuNTI5NSAwLjcxMDQ3NCAyNS41Mjk1IDEuNzgzOTJDMjUuNTI5NSAyLjg0NjA3IDI2LjE3MjIgMy4zOTk3NCAyNy4yNTIzIDMuMzk5NzRIMjguNjQwM0MyOS4wNTYxIDMuMzk5NzQgMjkuMzA0NiAzLjc0NDM3IDI5LjMwNDYgNC4xMDU5NUMyOS4zMDQ2IDQuMzQzMjQgMjkuMjAyIDQuODM0NzcgMjguNTI2OSA0LjgzNDc3SDI4LjI5NDdMMjMuODQ5OSA0LjgyMzQ3SDIzLjAzOThDMjIuMzUzOSA0LjgyMzQ3IDIxLjg3MzMgNC40MTY2OSAyMS44NzMzIDMuNDczMTlWMi44MjM0N0MyMS44NzMzIDEuODQwNDIgMjIuMjQ1OSAxLjIzMDI1IDIzLjAzOTggMS4yMzAyNUgyNC4zNTc2QzI0LjQxNyAwLjgxMjE2OSAyNC40NTQ4IDAuNTQ2NjMyIDI0LjUwODggMC4xNTExNTJIMjIuODY3SDIyLjcxMDRDMjEuMzY1NiAwLjE1MTE1MiAyMC40MzY3IDEuMDk0NjYgMjAuNDA0MyAyLjczODcyVjIuODAwODdWMy40NzMxOUMyMC40MzY3IDUuMTE3MjUgMjEuMzY1NiA1LjkwMjU2IDIyLjcxMDQgNS45MDI1NkgyMi44NjdIMjQuMDIyN0wyNi40MzE0IDUuOTA4MjFIMjcuODY4SDI4LjQxODlaXCJcbiAgICAgICAgZmlsbD1cIiM3NDc1ODNcIlxuICAgICAgLz5cbiAgICA8L2c+XG4gICAgPGRlZnM+XG4gICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF9ybXNfbWFkYVwiPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjQzXCIgaGVpZ2h0PVwiMTVcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgPC9jbGlwUGF0aD5cbiAgICA8L2RlZnM+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==