@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,448 @@
1
+ import { Injectable, inject, signal, computed } from '@angular/core';
2
+ import { map, catchError, throwError } from 'rxjs';
3
+ import { ApiService } from '../../../shared/services/api.service';
4
+ import { ActivatedRoute } from '@angular/router';
5
+ import { environments } from '../../../shared/environments/environment';
6
+ import { HotelManageBookingService } from '../../shared/services/hotel-manage-booking/hotel-manage-booking.service';
7
+ import { AlmatarHotelAutoCancellationEndpointsEnum } from '../enums/almatar-hotel-auto-cancellation-endpoints.enum';
8
+ import { resolveMyTripsViewedEntrySourceFromQueryParams } from '../../../shared/services/webengage-tracking.service';
9
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
10
+ import * as i0 from "@angular/core";
11
+ export class AlmatarHotelAutoCancellationEndpointsService {
12
+ constructor() {
13
+ this.api = inject(ApiService);
14
+ this.route = inject(ActivatedRoute);
15
+ this.hotelManageBookingService = inject(HotelManageBookingService);
16
+ this._almatarBookingId = signal('');
17
+ this._confirmationNumber = signal('');
18
+ this._isNusukFlow = signal(environments.isTenant || false);
19
+ this._selectedPackageIds = signal([]);
20
+ this.almatarBookingId = computed(() => this._almatarBookingId());
21
+ this.confirmationNumber = computed(() => this._confirmationNumber());
22
+ this.isNusukFlow = computed(() => this._isNusukFlow());
23
+ this.initializeBookingData();
24
+ }
25
+ initializeBookingData() {
26
+ this.hotelManageBookingService.selectedHotelBooking
27
+ .pipe(takeUntilDestroyed())
28
+ .subscribe((selectedHotelBooking) => {
29
+ // console.log('Selected Hotel Booking:', selectedHotelBooking);
30
+ if (selectedHotelBooking) {
31
+ this._almatarBookingId.set(selectedHotelBooking.bookingId || '');
32
+ this._confirmationNumber.set(selectedHotelBooking.bookingId || '');
33
+ }
34
+ });
35
+ }
36
+ getRefundDetails(packageIds = []) {
37
+ const endpoint = AlmatarHotelAutoCancellationEndpointsEnum.getRefundDetails;
38
+ const payload = {
39
+ bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
40
+ ''}`,
41
+ product: 'hotels',
42
+ packageIds: [...new Set(packageIds)] // Ensure unique package IDs
43
+ };
44
+ // return of({
45
+ // data: {
46
+ // bookingId: 144368,
47
+ // currency: 'SAR',
48
+ // status: 'Partially refunded',
49
+ // message: 'Refund details calculated successfully',
50
+ // flags: {
51
+ // refundable: true,
52
+ // partial: false,
53
+ // goldenGift: false
54
+ // },
55
+ // selection: {
56
+ // packageIds: ['f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95']
57
+ // },
58
+ // totals: {
59
+ // paid: 6866,
60
+ // beforeCoupon: 6865.61,
61
+ // roomsBooked: 4,
62
+ // coupon: 0,
63
+ // gifts: 0,
64
+ // serviceFee: 0,
65
+ // wallet: 0,
66
+ // card: 0,
67
+ // tabby: 0,
68
+ // tamara: 220,
69
+ // mokafa: 0,
70
+ // qitaf: 0,
71
+ // wala: 0,
72
+ // hassad: 0,
73
+ // anb: 0,
74
+ // ygg: 0
75
+ // },
76
+ // previous: [
77
+ // {
78
+ // packageId: '5eb33d59-2607-4057-9d26-4f7be745f67f',
79
+ // roomName: 'Standard Room',
80
+ // cancelledAt: '2026-09-02T13:42:54.848Z',
81
+ // amount: 2990.79,
82
+ // fee: 0,
83
+ // refunded: 2990.79
84
+ // }
85
+ // ],
86
+ // current: {
87
+ // rooms: [
88
+ // {
89
+ // packageId: 'f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95',
90
+ // roomId: '0229e622-a89a-469d-adb8-8615deb971ca',
91
+ // roomName: 'Scene Room Twin',
92
+ // basis: 'Room only RO',
93
+ // pax: {
94
+ // adults: 2,
95
+ // children: 0,
96
+ // total: 2
97
+ // },
98
+ // nights: 4,
99
+ // amount: 1887.61,
100
+ // fee: 0,
101
+ // serviceFee: 50,
102
+ // refund: 1887.61,
103
+ // refundable: true,
104
+ // route: 'AUTO'
105
+ // },
106
+ // {
107
+ // packageId: 'f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95',
108
+ // roomId: 'b8aed26e-d91a-4234-ae37-94b2c6232dbd',
109
+ // roomName: 'Scene Room Twin',
110
+ // basis: 'Room only RO',
111
+ // pax: {
112
+ // adults: 2,
113
+ // children: 0,
114
+ // total: 2
115
+ // },
116
+ // nights: 4,
117
+ // amount: 1887.6,
118
+ // fee: 0,
119
+ // serviceFee: 50,
120
+ // refund: 1887.6,
121
+ // refundable: true,
122
+ // route: 'AUTO'
123
+ // }
124
+ // ],
125
+ // amount: 3775.21,
126
+ // fee: 0,
127
+ // surcharge: 0,
128
+ // refund: 3775.21
129
+ // },
130
+ // payout: {
131
+ // alreadyRefunded: 2990.79,
132
+ // current: 1600,
133
+ // afterThis: 6766,
134
+ // feesTotal: 0,
135
+ // wallet: 0,
136
+ // card: 0,
137
+ // tabby: 0,
138
+ // tamara: 200,
139
+ // amwal: 0,
140
+ // mis: 0,
141
+ // bnplManual: 0,
142
+ // loyaltyToWallet: 600,
143
+ // note: null
144
+ // },
145
+ // summaries: [
146
+ // {
147
+ // code: 'CARD',
148
+ // label: 'Card',
149
+ // paid: 6866,
150
+ // refund: 3775.21,
151
+ // refundable: true,
152
+ // gateway: 'CH'
153
+ // },
154
+ // {
155
+ // code: 'SERVICE_FEE',
156
+ // label: 'Service Fee',
157
+ // paid: 100,
158
+ // refund: 0,
159
+ // refundable: false
160
+ // }
161
+ // ],
162
+ // gifts: []
163
+ // },
164
+ // status: 200,
165
+ // errors: null
166
+ // });
167
+ return this.api
168
+ .post({
169
+ endpoint,
170
+ ...payload
171
+ })
172
+ .pipe(catchError((error) => this.handleError(error, 'Failed to get refund details')));
173
+ }
174
+ mapApiResponseToRooms(data) {
175
+ return this.getAllRooms(data);
176
+ }
177
+ mapApiResponseToRefundSummary(data) {
178
+ return {
179
+ totalPaid: data.totals?.paid || 0,
180
+ totalRefund: data.current?.refund || data.current?.refund || 0,
181
+ totalFees: data.current?.fee || 0,
182
+ rooms: this.getAllRooms(data),
183
+ packages: this.getAllPackages(data),
184
+ summaries: data.summaries,
185
+ payout: data.payout,
186
+ totals: data.totals,
187
+ // Additional breakdown fields
188
+ coupon: data.totals?.coupon || 0,
189
+ giftsTotal: data.totals?.gifts || 0,
190
+ giftsDetails: data.gifts || [],
191
+ serviceFee: data.totals?.serviceFee || 0,
192
+ surcharge: data.current?.surcharge || 0,
193
+ goldenGift: data.flags?.goldenGift || false,
194
+ previousRooms: data.previous || []
195
+ };
196
+ }
197
+ getAllPackages(data) {
198
+ const packages = [];
199
+ const packageMap = new Map();
200
+ // Process previous (cancelled) rooms - group by packageId
201
+ if (data.previous?.length) {
202
+ data.previous.forEach((room) => {
203
+ const existingPkg = packageMap.get(room.packageId);
204
+ if (existingPkg) {
205
+ existingPkg.rooms.push({
206
+ roomId: room.roomId || room.packageId,
207
+ roomName: room.roomName,
208
+ basis: room.basis,
209
+ nights: room.nights
210
+ });
211
+ existingPkg.amount += room.amount || 0;
212
+ existingPkg.fee += room.fee || 0;
213
+ existingPkg.refund += room.refunded || 0;
214
+ }
215
+ else {
216
+ packageMap.set(room.packageId, {
217
+ packageId: room.packageId,
218
+ packageName: room.roomName,
219
+ rooms: [
220
+ {
221
+ roomId: room.roomId || room.packageId,
222
+ roomName: room.roomName,
223
+ basis: room.basis,
224
+ nights: room.nights
225
+ }
226
+ ],
227
+ amount: room.amount || 0,
228
+ fee: room.fee || 0,
229
+ serviceFee: 0,
230
+ refund: room.refunded || 0,
231
+ refundable: false,
232
+ cancelledBefore: true,
233
+ cancellationDate: room.cancelledAt
234
+ });
235
+ }
236
+ });
237
+ }
238
+ // Process current rooms - group by packageId
239
+ if (data.current?.rooms?.length) {
240
+ data.current.rooms.forEach((room) => {
241
+ const existingPkg = packageMap.get(room.packageId);
242
+ if (existingPkg && !existingPkg.cancelledBefore) {
243
+ existingPkg.rooms.push({
244
+ roomId: room.roomId || room.packageId,
245
+ roomName: room.roomName,
246
+ basis: room.basis,
247
+ nights: room.nights,
248
+ pax: room.pax,
249
+ adults: room.pax?.adults,
250
+ children: room.pax?.children
251
+ });
252
+ existingPkg.amount += room.amount || 0;
253
+ existingPkg.fee += room.fee || 0;
254
+ existingPkg.serviceFee += room.serviceFee || 0;
255
+ existingPkg.refund += room.refund || 0;
256
+ }
257
+ else {
258
+ packageMap.set(room.packageId, {
259
+ packageId: room.packageId,
260
+ packageName: room.roomName,
261
+ rooms: [
262
+ {
263
+ roomId: room.roomId || room.packageId,
264
+ roomName: room.roomName,
265
+ basis: room.basis,
266
+ nights: room.nights,
267
+ pax: room.pax,
268
+ adults: room.pax?.adults,
269
+ children: room.pax?.children
270
+ }
271
+ ],
272
+ amount: room.amount || 0,
273
+ fee: room.fee || 0,
274
+ serviceFee: room.serviceFee || 0,
275
+ refund: room.refund || 0,
276
+ refundable: room.refundable,
277
+ route: room.route,
278
+ cancelledBefore: false,
279
+ cancellationDate: new Date().toISOString()
280
+ });
281
+ }
282
+ });
283
+ }
284
+ packageMap.forEach((pkg) => packages.push(pkg));
285
+ return packages;
286
+ }
287
+ getAllRooms(data) {
288
+ const allRooms = [];
289
+ if (data.previous?.length) {
290
+ data.previous.forEach((room) => {
291
+ allRooms.push({
292
+ packageId: room.packageId,
293
+ roomId: room?.roomId,
294
+ roomName: room.roomName,
295
+ isRefundable: false,
296
+ isSelected: false,
297
+ cancelledBefore: true,
298
+ roomAmount: room.amount,
299
+ cancellationFee: room.fee,
300
+ refundAmount: room.refunded,
301
+ currentCancellation: false,
302
+ cancellationDate: room.cancelledAt,
303
+ nights: room.nights ?? 1
304
+ });
305
+ });
306
+ }
307
+ if (data.current?.rooms?.length) {
308
+ data.current.rooms.forEach((room) => {
309
+ allRooms.push({
310
+ packageId: room.packageId,
311
+ roomId: room?.roomId,
312
+ roomName: room.roomName,
313
+ isRefundable: room.refundable,
314
+ isSelected: false,
315
+ roomAmount: room.amount,
316
+ cancellationFee: room.fee,
317
+ cancelledBefore: false,
318
+ refundAmount: room.refund,
319
+ route: room.route,
320
+ currentCancellation: true,
321
+ cancellationDate: `${new Date()}`,
322
+ nights: room.nights ?? 1
323
+ });
324
+ });
325
+ }
326
+ return allRooms;
327
+ }
328
+ processAutoCancellation(packageIds, refundOption = 'originalPaymentMethod') {
329
+ const endpoint = AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation;
330
+ const uniquePackageIds = [...new Set(packageIds)]; // Ensure unique package IDs
331
+ const payload = {
332
+ bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
333
+ ''}`,
334
+ product: 'hotels',
335
+ packageIds: uniquePackageIds,
336
+ preferredPaymentMethod: refundOption
337
+ };
338
+ this._selectedPackageIds.set(uniquePackageIds);
339
+ // return of({
340
+ // data: {
341
+ // error: '1',
342
+ // message:
343
+ // 'Cancel requested — supplier cancellation failed; ticket created',
344
+ // bookingId: 144368,
345
+ // preferredPaymentMethod: 'wallet',
346
+ // cancel: {
347
+ // status: 'failed',
348
+ // packageIds: ['f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95'],
349
+ // },
350
+ // refund: {
351
+ // status: 'skipped',
352
+ // bookingStatus: 'Cancelled',
353
+ // amount: 1050,
354
+ // currency: 'SAR',
355
+ // breakdown: {
356
+ // wallet: 750,
357
+ // mokafa: 200,
358
+ // qitaf: 100,
359
+ // card: 0,
360
+ // tabby: 0,
361
+ // tamara: 0,
362
+ // },
363
+ // },
364
+ // },
365
+ // status: 200,
366
+ // errors: null,
367
+ // });
368
+ return this.api
369
+ .post({
370
+ endpoint,
371
+ ...payload
372
+ })
373
+ .pipe(map((response) => {
374
+ this._selectedPackageIds.set([]);
375
+ return response;
376
+ }), catchError((error) => this.handleError(error, 'Failed to process cancellation')));
377
+ }
378
+ processNonRefundableCancellation(packageId, attachmentUrl, language = 'en') {
379
+ const endpoint = AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation;
380
+ const payload = {
381
+ bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
382
+ ''}`,
383
+ product: 'hotels',
384
+ packageIds: [packageId],
385
+ preferredPaymentMethod: 'originalPaymentMethod',
386
+ processedMode: 'auto',
387
+ language,
388
+ attachmentUrl
389
+ };
390
+ return this.api
391
+ .post({
392
+ endpoint,
393
+ ...payload
394
+ })
395
+ .pipe(catchError((error) => this.handleError(error, 'Failed to process non-refundable cancellation')));
396
+ }
397
+ calculateLocalRefundSummary(rooms) {
398
+ const selectedRooms = rooms.filter((room) => room.isSelected);
399
+ const totalPaid = rooms.reduce((sum, room) => sum + room.roomAmount, 0);
400
+ const totalRefund = selectedRooms.reduce((sum, room) => sum + room.refundAmount, 0);
401
+ return {
402
+ totalPaid,
403
+ totalRefund,
404
+ rooms: selectedRooms.map((room) => ({
405
+ ...room,
406
+ currentCancellation: true,
407
+ cancellationDate: new Date().toISOString()
408
+ }))
409
+ };
410
+ }
411
+ getSelectedPackageIds() {
412
+ return this._selectedPackageIds();
413
+ }
414
+ clearSelectedPackageIds() {
415
+ this._selectedPackageIds.set([]);
416
+ }
417
+ getEntrySourceDeviceBrand() {
418
+ return {
419
+ entrySource: this.getEntrySource(),
420
+ device: this.getDevice()
421
+ };
422
+ }
423
+ getEntrySource() {
424
+ return resolveMyTripsViewedEntrySourceFromQueryParams(this.route.snapshot.queryParams);
425
+ }
426
+ getDevice() {
427
+ let device = 'web';
428
+ if (this.route.snapshot.queryParams['mobileAuth']) {
429
+ device = this.route.snapshot.queryParams['device'] || 'mobile';
430
+ }
431
+ localStorage.setItem('deviceType', device);
432
+ return device;
433
+ }
434
+ handleError(error, message) {
435
+ // console.log(message, error);
436
+ const errorMessage = error?.error?.message || error?.message || message;
437
+ return throwError(() => new Error(errorMessage));
438
+ }
439
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationEndpointsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
440
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationEndpointsService, providedIn: 'root' }); }
441
+ }
442
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationEndpointsService, decorators: [{
443
+ type: Injectable,
444
+ args: [{
445
+ providedIn: 'root'
446
+ }]
447
+ }], ctorParameters: () => [] });
448
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvc2VydmljZXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBTSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUNwSCxPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQVFwSCxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNySCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUErRGhFLE1BQU0sT0FBTyw0Q0FBNEM7SUFtQnZEO1FBbEJpQixRQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pCLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsOEJBQXlCLEdBQUcsTUFBTSxDQUNqRCx5QkFBeUIsQ0FDMUIsQ0FBQztRQUVlLHNCQUFpQixHQUFHLE1BQU0s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LE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQzsrR0FsZ0JVLDRDQUE0QzttSEFBNUMsNENBQTRDLGNBRjNDLE1BQU07OzRGQUVQLDRDQUE0QztrQkFIeEQsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgY2F0Y2hFcnJvciwgdGhyb3dFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZW52aXJvbm1lbnRzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2hvdGVsLW1hbmFnZS1ib29raW5nL2hvdGVsLW1hbmFnZS1ib29raW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0gfSBmcm9tICcuLi9lbnVtcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLWVuZHBvaW50cy5lbnVtJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5LFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFBhY2thZ2UsXG4gIElSZWZ1bmREZXRhaWxzQXBpUmVzcG9uc2UsXG4gIElSZWZ1bmREZXRhaWxzRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ktYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcmVzb2x2ZU15VHJpcHNWaWV3ZWRFbnRyeVNvdXJjZUZyb21RdWVyeVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy93ZWJlbmdhZ2UtdHJhY2tpbmcuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZnVuZERldGFpbHNSZXF1ZXN0IHtcbiAgYm9va2luZ0lkOiBzdHJpbmc7XG4gIHByb2R1Y3Q6ICdob3RlbHMnO1xuICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUHJvY2Vzc0NhbmNlbGxhdGlvblJlcXVlc3Qge1xuICBib29raW5nSWQ6IHN0cmluZztcbiAgcHJvZHVjdDogJ2hvdGVscyc7XG4gIHBhY2thZ2VJZHM6IHN0cmluZ1tdO1xuICBwcmVmZXJyZWRQYXltZW50TWV0aG9kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQcm9jZXNzTm9uUmVmdW5kYWJsZUNhbmNlbGxhdGlvblJlcXVlc3Qge1xuICBib29raW5nSWQ6IHN0cmluZztcbiAgcHJvZHVjdDogJ2hvdGVscyc7XG4gIHBhY2thZ2VJZHM6IHN0cmluZ1tdO1xuICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiBzdHJpbmc7XG4gIHByb2Nlc3NlZE1vZGU6ICdhdXRvJztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgYXR0YWNobWVudFVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlIHtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIGRhdGE6IHtcbiAgICBlcnJvcjogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBib29raW5nSWQ6IG51bWJlcjtcbiAgICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiBzdHJpbmc7XG4gICAgaXNXaGF0c0FwcD86IGJvb2xlYW47XG4gICAgY2FuY2VsOiB7XG4gICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgIHBhY2thZ2VJZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVmdW5kOiB7XG4gICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgIGJvb2tpbmdTdGF0dXM6IHN0cmluZztcbiAgICAgIGFtb3VudDogbnVtYmVyO1xuICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgIGJyZWFrZG93bjoge1xuICAgICAgICB3YWxsZXQ6IG51bWJlcjtcbiAgICAgICAgbW9rYWZhOiBudW1iZXI7XG4gICAgICAgIHFpdGFmOiBudW1iZXI7XG4gICAgICAgIGNhcmQ6IG51bWJlcjtcbiAgICAgICAgdGFiYnk6IG51bWJlcjtcbiAgICAgICAgdGFtYXJhOiBudW1iZXI7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG4gIGVycm9yczogYW55O1xufVxuXG5pbnRlcmZhY2UgSUVudHJ5U291cmNlRGV2aWNlQnJhbmQge1xuICBlbnRyeVNvdXJjZTogc3RyaW5nO1xuICBkZXZpY2U6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaSA9IGluamVjdChBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxtYXRhckJvb2tpbmdJZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uTnVtYmVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc051c3VrRmxvdyA9IHNpZ25hbDxib29sZWFuPihcbiAgICBlbnZpcm9ubWVudHMuaXNUZW5hbnQgfHwgZmFsc2VcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZFBhY2thZ2VJZHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICByZWFkb25seSBhbG1hdGFyQm9va2luZ0lkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYWxtYXRhckJvb2tpbmdJZCgpKTtcbiAgcmVhZG9ubHkgY29uZmlybWF0aW9uTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fY29uZmlybWF0aW9uTnVtYmVyKCkpO1xuICByZWFkb25seSBpc051c3VrRmxvdyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2lzTnVzdWtGbG93KCkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUJvb2tpbmdEYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVCb29raW5nRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2VsZWN0ZWRIb3RlbEJvb2tpbmdcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWRIb3RlbEJvb2tpbmc6IGFueSkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnU2VsZWN0ZWQgSG90ZWwgQm9va2luZzonLCBzZWxlY3RlZEhvdGVsQm9va2luZyk7XG4gICAgICAgIGlmIChzZWxlY3RlZEhvdGVsQm9va2luZykge1xuICAgICAgICAgIHRoaXMuX2FsbWF0YXJCb29raW5nSWQuc2V0KHNlbGVjdGVkSG90ZWxCb29raW5nLmJvb2tpbmdJZCB8fCAnJyk7XG4gICAgICAgICAgdGhpcy5fY29uZmlybWF0aW9uTnVtYmVyLnNldChzZWxlY3RlZEhvdGVsQm9va2luZy5ib29raW5nSWQgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFJlZnVuZERldGFpbHMoXG4gICAgcGFja2FnZUlkczogc3RyaW5nW10gPSBbXVxuICApOiBPYnNlcnZhYmxlPElSZWZ1bmREZXRhaWxzQXBpUmVzcG9uc2U+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtLmdldFJlZnVuZERldGFpbHM7XG5cbiAgICBjb25zdCBwYXlsb2FkOiBJUmVmdW5kRGV0YWlsc1JlcXVlc3QgPSB7XG4gICAgICBib29raW5nSWQ6IGAke1xuICAgICAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2VsZWN0ZWRIb3RlbEJvb2tpbmcudmFsdWU/LmJvb2tpbmdJZCB8fFxuICAgICAgICAnJ1xuICAgICAgfWAsXG4gICAgICBwcm9kdWN0OiAnaG90ZWxzJyxcbiAgICAgIHBhY2thZ2VJZHM6IFsuLi5uZXcgU2V0KHBhY2thZ2VJZHMpXSAvLyBFbnN1cmUgdW5pcXVlIHBhY2thZ2UgSURzXG4gICAgfTtcblxuICAgIC8vIHJldHVybiBvZih7XG4gICAgLy8gICBkYXRhOiB7XG4gICAgLy8gICAgIGJvb2tpbmdJZDogMTQ0MzY4LFxuICAgIC8vICAgICBjdXJyZW5jeTogJ1NBUicsXG4gICAgLy8gICAgIHN0YXR1czogJ1BhcnRpYWxseSByZWZ1bmRlZCcsXG4gICAgLy8gICAgIG1lc3NhZ2U6ICdSZWZ1bmQgZGV0YWlscyBjYWxjdWxhdGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgLy8gICAgIGZsYWdzOiB7XG4gICAgLy8gICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAvLyAgICAgICBnb2xkZW5HaWZ0OiBmYWxzZVxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzZWxlY3Rpb246IHtcbiAgICAvLyAgICAgICBwYWNrYWdlSWRzOiBbJ2YwMzgzOGJkLWVhOGQtNGZlNS1iZmM4LWRkMzFjOWJkZWU5NSddXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHRvdGFsczoge1xuICAgIC8vICAgICAgIHBhaWQ6IDY4NjYsXG4gICAgLy8gICAgICAgYmVmb3JlQ291cG9uOiA2ODY1LjYxLFxuICAgIC8vICAgICAgIHJvb21zQm9va2VkOiA0LFxuICAgIC8vICAgICAgIGNvdXBvbjogMCxcbiAgICAvLyAgICAgICBnaWZ0czogMCxcbiAgICAvLyAgICAgICBzZXJ2aWNlRmVlOiAwLFxuICAgIC8vICAgICAgIHdhbGxldDogMCxcbiAgICAvLyAgICAgICBjYXJkOiAwLFxuICAgIC8vICAgICAgIHRhYmJ5OiAwLFxuICAgIC8vICAgICAgIHRhbWFyYTogMjIwLFxuICAgIC8vICAgICAgIG1va2FmYTogMCxcbiAgICAvLyAgICAgICBxaXRhZjogMCxcbiAgICAvLyAgICAgICB3YWxhOiAwLFxuICAgIC8vICAgICAgIGhhc3NhZDogMCxcbiAgICAvLyAgICAgICBhbmI6IDAsXG4gICAgLy8gICAgICAgeWdnOiAwXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHByZXZpb3VzOiBbXG4gICAgLy8gICAgICAge1xuICAgIC8vICAgICAgICAgcGFja2FnZUlkOiAnNWViMzNkNTktMjYwNy00MDU3LTlkMjYtNGY3YmU3NDVmNjdmJyxcbiAgICAvLyAgICAgICAgIHJvb21OYW1lOiAnU3RhbmRhcmQgUm9vbScsXG4gICAgLy8gICAgICAgICBjYW5jZWxsZWRBdDogJzIwMjYtMDktMDJUMTM6NDI6NTQuODQ4WicsXG4gICAgLy8gICAgICAgICBhbW91bnQ6IDI5OTAuNzksXG4gICAgLy8gICAgICAgICBmZWU6IDAsXG4gICAgLy8gICAgICAgICByZWZ1bmRlZDogMjk5MC43OVxuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgXSxcbiAgICAvLyAgICAgY3VycmVudDoge1xuICAgIC8vICAgICAgIHJvb21zOiBbXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgIHBhY2thZ2VJZDogJ2YwMzgzOGJkLWVhOGQtNGZlNS1iZmM4LWRkMzFjOWJkZWU5NScsXG4gICAgLy8gICAgICAgICAgIHJvb21JZDogJzAyMjllNjIyLWE4OWEtNDY5ZC1hZGI4LTg2MTVkZWI5NzFjYScsXG4gICAgLy8gICAgICAgICAgIHJvb21OYW1lOiAnU2NlbmUgUm9vbSBUd2luJyxcbiAgICAvLyAgICAgICAgICAgYmFzaXM6ICdSb29tIG9ubHkgUk8nLFxuICAgIC8vICAgICAgICAgICBwYXg6IHtcbiAgICAvLyAgICAgICAgICAgICBhZHVsdHM6IDIsXG4gICAgLy8gICAgICAgICAgICAgY2hpbGRyZW46IDAsXG4gICAgLy8gICAgICAgICAgICAgdG90YWw6IDJcbiAgICAvLyAgICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgICAgbmlnaHRzOiA0LFxuICAgIC8vICAgICAgICAgICBhbW91bnQ6IDE4ODcuNjEsXG4gICAgLy8gICAgICAgICAgIGZlZTogMCxcbiAgICAvLyAgICAgICAgICAgc2VydmljZUZlZTogNTAsXG4gICAgLy8gICAgICAgICAgIHJlZnVuZDogMTg4Ny42MSxcbiAgICAvLyAgICAgICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICAgICAgcm91dGU6ICdBVVRPJ1xuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgcGFja2FnZUlkOiAnZjAzODM4YmQtZWE4ZC00ZmU1LWJmYzgtZGQzMWM5YmRlZTk1JyxcbiAgICAvLyAgICAgICAgICAgcm9vbUlkOiAnYjhhZWQyNmUtZDkxYS00MjM0LWFlMzctOTRiMmM2MjMyZGJkJyxcbiAgICAvLyAgICAgICAgICAgcm9vbU5hbWU6ICdTY2VuZSBSb29tIFR3aW4nLFxuICAgIC8vICAgICAgICAgICBiYXNpczogJ1Jvb20gb25seSBSTycsXG4gICAgLy8gICAgICAgICAgIHBheDoge1xuICAgIC8vICAgICAgICAgICAgIGFkdWx0czogMixcbiAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogMCxcbiAgICAvLyAgICAgICAgICAgICB0b3RhbDogMlxuICAgIC8vICAgICAgICAgICB9LFxuICAgIC8vICAgICAgICAgICBuaWdodHM6IDQsXG4gICAgLy8gICAgICAgICAgIGFtb3VudDogMTg4Ny42LFxuICAgIC8vICAgICAgICAgICBmZWU6IDAsXG4gICAgLy8gICAgICAgICAgIHNlcnZpY2VGZWU6IDUwLFxuICAgIC8vICAgICAgICAgICByZWZ1bmQ6IDE4ODcuNixcbiAgICAvLyAgICAgICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICAgICAgcm91dGU6ICdBVVRPJ1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgIF0sXG4gICAgLy8gICAgICAgYW1vdW50OiAzNzc1LjIxLFxuICAgIC8vICAgICAgIGZlZTogMCxcbiAgICAvLyAgICAgICBzdXJjaGFyZ2U6IDAsXG4gICAgLy8gICAgICAgcmVmdW5kOiAzNzc1LjIxXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHBheW91dDoge1xuICAgIC8vICAgICAgIGFscmVhZHlSZWZ1bmRlZDogMjk5MC43OSxcbiAgICAvLyAgICAgICBjdXJyZW50OiAxNjAwLFxuICAgIC8vICAgICAgIGFmdGVyVGhpczogNjc2NixcbiAgICAvLyAgICAgICBmZWVzVG90YWw6IDAsXG4gICAgLy8gICAgICAgd2FsbGV0OiAwLFxuICAgIC8vICAgICAgIGNhcmQ6IDAsXG4gICAgLy8gICAgICAgdGFiYnk6IDAsXG4gICAgLy8gICAgICAgdGFtYXJhOiAyMDAsXG4gICAgLy8gICAgICAgYW13YWw6IDAsXG4gICAgLy8gICAgICAgbWlzOiAwLFxuICAgIC8vICAgICAgIGJucGxNYW51YWw6IDAsXG4gICAgLy8gICAgICAgbG95YWx0eVRvV2FsbGV0OiA2MDAsXG4gICAgLy8gICAgICAgbm90ZTogbnVsbFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdW1tYXJpZXM6IFtcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBjb2RlOiAnQ0FSRCcsXG4gICAgLy8gICAgICAgICBsYWJlbDogJ0NhcmQnLFxuICAgIC8vICAgICAgICAgcGFpZDogNjg2NixcbiAgICAvLyAgICAgICAgIHJlZnVuZDogMzc3NS4yMSxcbiAgICAvLyAgICAgICAgIHJlZnVuZGFibGU6IHRydWUsXG4gICAgLy8gICAgICAgICBnYXRld2F5OiAnQ0gnXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBjb2RlOiAnU0VSVklDRV9GRUUnLFxuICAgIC8vICAgICAgICAgbGFiZWw6ICdTZXJ2aWNlIEZlZScsXG4gICAgLy8gICAgICAgICBwYWlkOiAxMDAsXG4gICAgLy8gICAgICAgICByZWZ1bmQ6IDAsXG4gICAgLy8gICAgICAgICByZWZ1bmRhYmxlOiBmYWxzZVxuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgXSxcbiAgICAvLyAgICAgZ2lmdHM6IFtdXG4gICAgLy8gICB9LFxuICAgIC8vICAgc3RhdHVzOiAyMDAsXG4gICAgLy8gICBlcnJvcnM6IG51bGxcbiAgICAvLyB9KTtcblxuICAgIHJldHVybiB0aGlzLmFwaVxuICAgICAgLnBvc3Q8SVJlZnVuZERldGFpbHNBcGlSZXNwb25zZT4oe1xuICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgLi4ucGF5bG9hZFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yLCAnRmFpbGVkIHRvIGdldCByZWZ1bmQgZGV0YWlscycpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBtYXBBcGlSZXNwb25zZVRvUm9vbXMoXG4gICAgZGF0YTogSVJlZnVuZERldGFpbHNEYXRhXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxSb29tcyhkYXRhKTtcbiAgfVxuXG4gIG1hcEFwaVJlc3BvbnNlVG9SZWZ1bmRTdW1tYXJ5KFxuICAgIGRhdGE6IElSZWZ1bmREZXRhaWxzRGF0YVxuICApOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFN1bW1hcnkge1xuICAgIHJldHVybiB7XG4gICAgICB0b3RhbFBhaWQ6IGRhdGEudG90YWxzPy5wYWlkIHx8IDAsXG4gICAgICB0b3RhbFJlZnVuZDogZGF0YS5jdXJyZW50Py5yZWZ1bmQgfHwgZGF0YS5jdXJyZW50Py5yZWZ1bmQgfHwgMCxcbiAgICAgIHRvdGFsRmVlczogZGF0YS5jdXJyZW50Py5mZWUgfHwgMCxcbiAgICAgIHJvb21zOiB0aGlzLmdldEFsbFJvb21zKGRhdGEpLFxuICAgICAgcGFja2FnZXM6IHRoaXMuZ2V0QWxsUGFja2FnZXMoZGF0YSksXG4gICAgICBzdW1tYXJpZXM6IGRhdGEuc3VtbWFyaWVzLFxuICAgICAgcGF5b3V0OiBkYXRhLnBheW91dCxcbiAgICAgIHRvdGFsczogZGF0YS50b3RhbHMsXG4gICAgICAvLyBBZGRpdGlvbmFsIGJyZWFrZG93biBmaWVsZHNcbiAgICAgIGNvdXBvbjogZGF0YS50b3RhbHM/LmNvdXBvbiB8fCAwLFxuICAgICAgZ2lmdHNUb3RhbDogZGF0YS50b3RhbHM/LmdpZnRzIHx8IDAsXG4gICAgICBnaWZ0c0RldGFpbHM6IGRhdGEuZ2lmdHMgfHwgW10sXG4gICAgICBzZXJ2aWNlRmVlOiBkYXRhLnRvdGFscz8uc2VydmljZUZlZSB8fCAwLFxuICAgICAgc3VyY2hhcmdlOiBkYXRhLmN1cnJlbnQ/LnN1cmNoYXJnZSB8fCAwLFxuICAgICAgZ29sZGVuR2lmdDogZGF0YS5mbGFncz8uZ29sZGVuR2lmdCB8fCBmYWxzZSxcbiAgICAgIHByZXZpb3VzUm9vbXM6IGRhdGEucHJldmlvdXMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0QWxsUGFja2FnZXMoXG4gICAgZGF0YTogSVJlZnVuZERldGFpbHNEYXRhXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kUGFja2FnZVtdIHtcbiAgICBjb25zdCBwYWNrYWdlczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlW10gPSBbXTtcbiAgICBjb25zdCBwYWNrYWdlTWFwID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kUGFja2FnZVxuICAgID4oKTtcblxuICAgIC8vIFByb2Nlc3MgcHJldmlvdXMgKGNhbmNlbGxlZCkgcm9vbXMgLSBncm91cCBieSBwYWNrYWdlSWRcbiAgICBpZiAoZGF0YS5wcmV2aW91cz8ubGVuZ3RoKSB7XG4gICAgICBkYXRhLnByZXZpb3VzLmZvckVhY2goKHJvb206IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ1BrZyA9IHBhY2thZ2VNYXAuZ2V0KHJvb20ucGFja2FnZUlkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUGtnKSB7XG4gICAgICAgICAgZXhpc3RpbmdQa2cucm9vbXMucHVzaCh7XG4gICAgICAgICAgICByb29tSWQ6IHJvb20ucm9vbUlkIHx8IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgICAgcm9vbU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICBiYXNpczogcm9vbS5iYXNpcyxcbiAgICAgICAgICAgIG5pZ2h0czogcm9vbS5uaWdodHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBleGlzdGluZ1BrZy5hbW91bnQgKz0gcm9vbS5hbW91bnQgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5mZWUgKz0gcm9vbS5mZWUgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yZWZ1bmQgKz0gcm9vbS5yZWZ1bmRlZCB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhY2thZ2VNYXAuc2V0KHJvb20ucGFja2FnZUlkLCB7XG4gICAgICAgICAgICBwYWNrYWdlSWQ6IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgICAgcGFja2FnZU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICByb29tczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm9vbUlkOiByb29tLnJvb21JZCB8fCByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgICAgICBiYXNpczogcm9vbS5iYXNpcyxcbiAgICAgICAgICAgICAgICBuaWdodHM6IHJvb20ubmlnaHRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhbW91bnQ6IHJvb20uYW1vdW50IHx8IDAsXG4gICAgICAgICAgICBmZWU6IHJvb20uZmVlIHx8IDAsXG4gICAgICAgICAgICBzZXJ2aWNlRmVlOiAwLFxuICAgICAgICAgICAgcmVmdW5kOiByb29tLnJlZnVuZGVkIHx8IDAsXG4gICAgICAgICAgICByZWZ1bmRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbmNlbGxlZEJlZm9yZTogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IHJvb20uY2FuY2VsbGVkQXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBjdXJyZW50IHJvb21zIC0gZ3JvdXAgYnkgcGFja2FnZUlkXG4gICAgaWYgKGRhdGEuY3VycmVudD8ucm9vbXM/Lmxlbmd0aCkge1xuICAgICAgZGF0YS5jdXJyZW50LnJvb21zLmZvckVhY2goKHJvb206IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ1BrZyA9IHBhY2thZ2VNYXAuZ2V0KHJvb20ucGFja2FnZUlkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUGtnICYmICFleGlzdGluZ1BrZy5jYW5jZWxsZWRCZWZvcmUpIHtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yb29tcy5wdXNoKHtcbiAgICAgICAgICAgIHJvb21JZDogcm9vbS5yb29tSWQgfHwgcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgIGJhc2lzOiByb29tLmJhc2lzLFxuICAgICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyxcbiAgICAgICAgICAgIHBheDogcm9vbS5wYXgsXG4gICAgICAgICAgICBhZHVsdHM6IHJvb20ucGF4Py5hZHVsdHMsXG4gICAgICAgICAgICBjaGlsZHJlbjogcm9vbS5wYXg/LmNoaWxkcmVuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZXhpc3RpbmdQa2cuYW1vdW50ICs9IHJvb20uYW1vdW50IHx8IDA7XG4gICAgICAgICAgZXhpc3RpbmdQa2cuZmVlICs9IHJvb20uZmVlIHx8IDA7XG4gICAgICAgICAgZXhpc3RpbmdQa2cuc2VydmljZUZlZSArPSByb29tLnNlcnZpY2VGZWUgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yZWZ1bmQgKz0gcm9vbS5yZWZ1bmQgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWNrYWdlTWFwLnNldChyb29tLnBhY2thZ2VJZCwge1xuICAgICAgICAgICAgcGFja2FnZUlkOiByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgICAgcm9vbXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJvb21JZDogcm9vbS5yb29tSWQgfHwgcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgICAgICAgcm9vbU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICAgICAgYmFzaXM6IHJvb20uYmFzaXMsXG4gICAgICAgICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyxcbiAgICAgICAgICAgICAgICBwYXg6IHJvb20ucGF4LFxuICAgICAgICAgICAgICAgIGFkdWx0czogcm9vbS5wYXg/LmFkdWx0cyxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogcm9vbS5wYXg/LmNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhbW91bnQ6IHJvb20uYW1vdW50IHx8IDAsXG4gICAgICAgICAgICBmZWU6IHJvb20uZmVlIHx8IDAsXG4gICAgICAgICAgICBzZXJ2aWNlRmVlOiByb29tLnNlcnZpY2VGZWUgfHwgMCxcbiAgICAgICAgICAgIHJlZnVuZDogcm9vbS5yZWZ1bmQgfHwgMCxcbiAgICAgICAgICAgIHJlZnVuZGFibGU6IHJvb20ucmVmdW5kYWJsZSxcbiAgICAgICAgICAgIHJvdXRlOiByb29tLnJvdXRlLFxuICAgICAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwYWNrYWdlTWFwLmZvckVhY2goKHBrZykgPT4gcGFja2FnZXMucHVzaChwa2cpKTtcbiAgICByZXR1cm4gcGFja2FnZXM7XG4gIH1cblxuICBnZXRBbGxSb29tcyhkYXRhOiBJUmVmdW5kRGV0YWlsc0RhdGEpOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXSB7XG4gICAgY29uc3QgYWxsUm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdID0gW107XG5cbiAgICBpZiAoZGF0YS5wcmV2aW91cz8ubGVuZ3RoKSB7XG4gICAgICBkYXRhLnByZXZpb3VzLmZvckVhY2goKHJvb20pID0+IHtcbiAgICAgICAgYWxsUm9vbXMucHVzaCh7XG4gICAgICAgICAgcGFja2FnZUlkOiByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICByb29tSWQ6IHJvb20/LnJvb21JZCxcbiAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICBpc1JlZnVuZGFibGU6IGZhbHNlLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGNhbmNlbGxlZEJlZm9yZTogdHJ1ZSxcbiAgICAgICAgICByb29tQW1vdW50OiByb29tLmFtb3VudCxcbiAgICAgICAgICBjYW5jZWxsYXRpb25GZWU6IHJvb20uZmVlLFxuICAgICAgICAgIHJlZnVuZEFtb3VudDogcm9vbS5yZWZ1bmRlZCxcbiAgICAgICAgICBjdXJyZW50Q2FuY2VsbGF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBjYW5jZWxsYXRpb25EYXRlOiByb29tLmNhbmNlbGxlZEF0LFxuICAgICAgICAgIG5pZ2h0czogcm9vbS5uaWdodHMgPz8gMVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmN1cnJlbnQ/LnJvb21zPy5sZW5ndGgpIHtcbiAgICAgIGRhdGEuY3VycmVudC5yb29tcy5mb3JFYWNoKChyb29tKSA9PiB7XG4gICAgICAgIGFsbFJvb21zLnB1c2goe1xuICAgICAgICAgIHBhY2thZ2VJZDogcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgcm9vbUlkOiByb29tPy5yb29tSWQsXG4gICAgICAgICAgcm9vbU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgaXNSZWZ1bmRhYmxlOiByb29tLnJlZnVuZGFibGUsXG4gICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgcm9vbUFtb3VudDogcm9vbS5hbW91bnQsXG4gICAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiByb29tLmZlZSxcbiAgICAgICAgICBjYW5jZWxsZWRCZWZvcmU6IGZhbHNlLFxuICAgICAgICAgIHJlZnVuZEFtb3VudDogcm9vbS5yZWZ1bmQsXG4gICAgICAgICAgcm91dGU6IHJvb20ucm91dGUsXG4gICAgICAgICAgY3VycmVudENhbmNlbGxhdGlvbjogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxsYXRpb25EYXRlOiBgJHtuZXcgRGF0ZSgpfWAsXG4gICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyA/PyAxXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFJvb21zO1xuICB9XG5cbiAgcHJvY2Vzc0F1dG9DYW5jZWxsYXRpb24oXG4gICAgcGFja2FnZUlkczogc3RyaW5nW10sXG4gICAgcmVmdW5kT3B0aW9uID0gJ29yaWdpbmFsUGF5bWVudE1ldGhvZCdcbiAgKTogT2JzZXJ2YWJsZTxJQXV0b0NhbmNlbGxhdGlvblByb2Nlc3NSZXNwb25zZT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gXG4gICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0ucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb247XG5cbiAgICBjb25zdCB1bmlxdWVQYWNrYWdlSWRzID0gWy4uLm5ldyBTZXQocGFja2FnZUlkcyldOyAvLyBFbnN1cmUgdW5pcXVlIHBhY2thZ2UgSURzXG4gICAgY29uc3QgcGF5bG9hZDogSVByb2Nlc3NDYW5jZWxsYXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYm9va2luZ0lkOiBgJHtcbiAgICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nLnZhbHVlPy5ib29raW5nSWQgfHxcbiAgICAgICAgJydcbiAgICAgIH1gLFxuICAgICAgcHJvZHVjdDogJ2hvdGVscycsXG4gICAgICBwYWNrYWdlSWRzOiB1bmlxdWVQYWNrYWdlSWRzLFxuICAgICAgcHJlZmVycmVkUGF5bWVudE1ldGhvZDogcmVmdW5kT3B0aW9uXG4gICAgfTtcblxuICAgIHRoaXMuX3NlbGVjdGVkUGFja2FnZUlkcy5zZXQodW5pcXVlUGFja2FnZUlkcyk7XG5cbiAgICAvLyByZXR1cm4gb2Yoe1xuICAgIC8vICAgZGF0YToge1xuICAgIC8vICAgICBlcnJvcjogJzEnLFxuICAgIC8vICAgICBtZXNzYWdlOlxuICAgIC8vICAgICAgICdDYW5jZWwgcmVxdWVzdGVkIOKAlCBzdXBwbGllciBjYW5jZWxsYXRpb24gZmFpbGVkOyB0aWNrZXQgY3JlYXRlZCcsXG4gICAgLy8gICAgIGJvb2tpbmdJZDogMTQ0MzY4LFxuICAgIC8vICAgICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiAnd2FsbGV0JyxcbiAgICAvLyAgICAgY2FuY2VsOiB7XG4gICAgLy8gICAgICAgc3RhdHVzOiAnZmFpbGVkJyxcbiAgICAvLyAgICAgICBwYWNrYWdlSWRzOiBbJ2YwMzgzOGJkLWVhOGQtNGZlNS1iZmM4LWRkMzFjOWJkZWU5NSddLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICByZWZ1bmQ6IHtcbiAgICAvLyAgICAgICBzdGF0dXM6ICdza2lwcGVkJyxcbiAgICAvLyAgICAgICBib29raW5nU3RhdHVzOiAnQ2FuY2VsbGVkJyxcbiAgICAvLyAgICAgICBhbW91bnQ6IDEwNTAsXG4gICAgLy8gICAgICAgY3VycmVuY3k6ICdTQVInLFxuICAgIC8vICAgICAgIGJyZWFrZG93bjoge1xuICAgIC8vICAgICAgICAgd2FsbGV0OiA3NTAsXG4gICAgLy8gICAgICAgICBtb2thZmE6IDIwMCxcbiAgICAvLyAgICAgICAgIHFpdGFmOiAxMDAsXG4gICAgLy8gICAgICAgICBjYXJkOiAwLFxuICAgIC8vICAgICAgICAgdGFiYnk6IDAsXG4gICAgLy8gICAgICAgICB0YW1hcmE6IDAsXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzdGF0dXM6IDIwMCxcbiAgICAvLyAgIGVycm9yczogbnVsbCxcbiAgICAvLyB9KTtcblxuICAgIHJldHVybiB0aGlzLmFwaVxuICAgICAgLnBvc3Q8SUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2U+KHtcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIC4uLnBheWxvYWRcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUGFja2FnZUlkcy5zZXQoW10pO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gcHJvY2VzcyBjYW5jZWxsYXRpb24nKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgcHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb24oXG4gICAgcGFja2FnZUlkOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudFVybDogc3RyaW5nLFxuICAgIGxhbmd1YWdlID0gJ2VuJ1xuICApOiBPYnNlcnZhYmxlPElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPVxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0ucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb247XG5cbiAgICBjb25zdCBwYXlsb2FkOiBJUHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYm9va2luZ0lkOiBgJHtcbiAgICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nLnZhbHVlPy5ib29raW5nSWQgfHxcbiAgICAgICAgJydcbiAgICAgIH1gLFxuICAgICAgcHJvZHVjdDogJ2hvdGVscycsXG4gICAgICBwYWNrYWdlSWRzOiBbcGFja2FnZUlkXSxcbiAgICAgIHByZWZlcnJlZFBheW1lbnRNZXRob2Q6ICdvcmlnaW5hbFBheW1lbnRNZXRob2QnLFxuICAgICAgcHJvY2Vzc2VkTW9kZTogJ2F1dG8nLFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBhdHRhY2htZW50VXJsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmFwaVxuICAgICAgLnBvc3Q8SUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2U+KHtcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIC4uLnBheWxvYWRcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgJ0ZhaWxlZCB0byBwcm9jZXNzIG5vbi1yZWZ1bmRhYmxlIGNhbmNlbGxhdGlvbidcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVMb2NhbFJlZnVuZFN1bW1hcnkoXG4gICAgcm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb29tcyA9IHJvb21zLmZpbHRlcigocm9vbSkgPT4gcm9vbS5pc1NlbGVjdGVkKTtcbiAgICBjb25zdCB0b3RhbFBhaWQgPSByb29tcy5yZWR1Y2UoKHN1bSwgcm9vbSkgPT4gc3VtICsgcm9vbS5yb29tQW1vdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbFJlZnVuZCA9IHNlbGVjdGVkUm9vbXMucmVkdWNlKFxuICAgICAgKHN1bSwgcm9vbSkgPT4gc3VtICsgcm9vbS5yZWZ1bmRBbW91bnQsXG4gICAgICAwXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0b3RhbFBhaWQsXG4gICAgICB0b3RhbFJlZnVuZCxcbiAgICAgIHJvb21zOiBzZWxlY3RlZFJvb21zLm1hcCgocm9vbSkgPT4gKHtcbiAgICAgICAgLi4ucm9vbSxcbiAgICAgICAgY3VycmVudENhbmNlbGxhdGlvbjogdHJ1ZSxcbiAgICAgICAgY2FuY2VsbGF0aW9uRGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRQYWNrYWdlSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRQYWNrYWdlSWRzKCk7XG4gIH1cblxuICBjbGVhclNlbGVjdGVkUGFja2FnZUlkcygpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZFBhY2thZ2VJZHMuc2V0KFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW50cnlTb3VyY2VEZXZpY2VCcmFuZCgpOiBJRW50cnlTb3VyY2VEZXZpY2VCcmFuZCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJ5U291cmNlOiB0aGlzLmdldEVudHJ5U291cmNlKCksXG4gICAgICBkZXZpY2U6IHRoaXMuZ2V0RGV2aWNlKClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbnRyeVNvdXJjZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlTXlUcmlwc1ZpZXdlZEVudHJ5U291cmNlRnJvbVF1ZXJ5UGFyYW1zKFxuICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldERldmljZSgpOiBzdHJpbmcge1xuICAgIGxldCBkZXZpY2UgPSAnd2ViJztcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snbW9iaWxlQXV0aCddKSB7XG4gICAgICBkZXZpY2UgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydkZXZpY2UnXSB8fCAnbW9iaWxlJztcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2RldmljZVR5cGUnLCBkZXZpY2UpO1xuICAgIHJldHVybiBkZXZpY2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIG1lc3NhZ2U6IHN0cmluZyk6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhtZXNzYWdlLCBlcnJvcik7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgIGVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnJvcj8ubWVzc2FnZSB8fCBtZXNzYWdlO1xuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,55 @@
1
+ import { Injectable, signal, computed } from '@angular/core';
2
+ import { AlmatarHotelAutoCancellationStepEnum } from '../enums/almatar-hotel-auto-cancellation-step.enum';
3
+ import * as i0 from "@angular/core";
4
+ export class AlmatarHotelAutoCancellationService {
5
+ constructor() {
6
+ this.currentStep = signal(AlmatarHotelAutoCancellationStepEnum.selectRooms);
7
+ this.selectedRooms = signal([]);
8
+ this.hotelInfo = signal(null);
9
+ this.refundSummary = signal(null);
10
+ this.selectedRoomsCount = computed(() => this.selectedRooms().filter((room) => room.isSelected).length);
11
+ this.hasSelectedRooms = computed(() => this.selectedRoomsCount() > 0);
12
+ this.totalRefundAmount = computed(() => {
13
+ const summary = this.refundSummary();
14
+ return summary?.totalRefund ?? 0;
15
+ });
16
+ }
17
+ setCurrentStep(step) {
18
+ this.currentStep.set(step);
19
+ }
20
+ setSelectedRooms(rooms) {
21
+ this.selectedRooms.set(rooms);
22
+ }
23
+ setHotelInfo(info) {
24
+ this.hotelInfo.set(info);
25
+ }
26
+ setRefundSummary(summary) {
27
+ this.refundSummary.set(summary);
28
+ }
29
+ toggleRoomSelection(packageId) {
30
+ this.selectedRooms.update((rooms) => rooms.map((room) => room.packageId === packageId
31
+ ? { ...room, isSelected: !room.isSelected }
32
+ : room));
33
+ }
34
+ calculateRefundSummary(rooms, totalPaid) {
35
+ const selected = rooms.filter((room) => room.isSelected);
36
+ const totalRefund = selected.reduce((sum, room) => sum + room.refundAmount, 0);
37
+ return {
38
+ totalPaid,
39
+ totalRefund,
40
+ rooms: selected,
41
+ };
42
+ }
43
+ reset() {
44
+ this.currentStep.set(AlmatarHotelAutoCancellationStepEnum.selectRooms);
45
+ this.selectedRooms.set([]);
46
+ this.hotelInfo.set(null);
47
+ this.refundSummary.set(null);
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
50
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationService }); }
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationService, decorators: [{
53
+ type: Injectable
54
+ }] });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9zZXJ2aWNlcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOztBQVExRyxNQUFNLE9BQU8sbUNBQW1DO0lBRGhEO1FBRVcsZ0JBQVcsR0FBRyxNQUFNLENBQzNCLG9DQUFvQyxDQUFDLFdBQVcsQ0FDakQsQ0FBQztRQUVPLGtCQUFhLEdBQUcsTUFBTSxDQUFzQyxFQUFFLENBQUMsQ0FBQztRQUNoRSxjQUFTLEdBQUcsTUFBTSxDQUN6QixJQUFJLENBQ0wsQ0FBQztRQUVPLGtCQUFhLEdBQ3BCLE1BQU0sQ0FBb0QsSUFBSSxDQUFDLENBQUM7UUFFekQsdUJBQWtCLEdBQUcsUUFBUSxDQUNwQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUNwRSxDQUFDO1FBRU8scUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWpFLHNCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7S0FtREo7SUFqREMsY0FBYyxDQUFDLElBQTBDO1FBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUEwQztRQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQTRDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFtRDtRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsU0FBaUI7UUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNsQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDakIsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQzFCLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0MsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsc0JBQXNCLENBQ3BCLEtBQTBDLEVBQzFDLFNBQWlCO1FBRWpCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUNqQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUN0QyxDQUFDLENBQ0YsQ0FBQztRQUVGLE9BQU87WUFDTCxTQUFTO1lBQ1QsV0FBVztZQUNYLEtBQUssRUFBRSxRQUFRO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7K0dBeEVVLG1DQUFtQzttSEFBbkMsbUNBQW1DOzs0RkFBbkMsbUNBQW1DO2tCQUQvQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtIH0gZnJvbSAnLi4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1zdGVwLmVudW0nO1xuaW1wb3J0IHtcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tLFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5LFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ktYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uge1xuICByZWFkb25seSBjdXJyZW50U3RlcCA9IHNpZ25hbDxBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0+KFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5zZWxlY3RSb29tcyxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZFJvb21zID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdPihbXSk7XG4gIHJlYWRvbmx5IGhvdGVsSW5mbyA9IHNpZ25hbDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyB8IG51bGw+KFxuICAgIG51bGwsXG4gICk7XG5cbiAgcmVhZG9ubHkgcmVmdW5kU3VtbWFyeSA9XG4gICAgc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkUm9vbXNDb3VudCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2VsZWN0ZWRSb29tcygpLmZpbHRlcigocm9vbSkgPT4gcm9vbS5pc1NlbGVjdGVkKS5sZW5ndGgsXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzU2VsZWN0ZWRSb29tcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRSb29tc0NvdW50KCkgPiAwKTtcblxuICByZWFkb25seSB0b3RhbFJlZnVuZEFtb3VudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5yZWZ1bmRTdW1tYXJ5KCk7XG4gICAgcmV0dXJuIHN1bW1hcnk/LnRvdGFsUmVmdW5kID8/IDA7XG4gIH0pO1xuXG4gIHNldEN1cnJlbnRTdGVwKHN0ZXA6IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFN0ZXAuc2V0KHN0ZXApO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRSb29tcyhyb29tczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUm9vbXMuc2V0KHJvb21zKTtcbiAgfVxuXG4gIHNldEhvdGVsSW5mbyhpbmZvOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyk6IHZvaWQge1xuICAgIHRoaXMuaG90ZWxJbmZvLnNldChpbmZvKTtcbiAgfVxuXG4gIHNldFJlZnVuZFN1bW1hcnkoc3VtbWFyeTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5KTogdm9pZCB7XG4gICAgdGhpcy5yZWZ1bmRTdW1tYXJ5LnNldChzdW1tYXJ5KTtcbiAgfVxuXG4gIHRvZ2dsZVJvb21TZWxlY3Rpb24ocGFja2FnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUm9vbXMudXBkYXRlKChyb29tcykgPT5cbiAgICAgIHJvb21zLm1hcCgocm9vbSkgPT5cbiAgICAgICAgcm9vbS5wYWNrYWdlSWQgPT09IHBhY2thZ2VJZFxuICAgICAgICAgID8geyAuLi5yb29tLCBpc1NlbGVjdGVkOiAhcm9vbS5pc1NlbGVjdGVkIH1cbiAgICAgICAgICA6IHJvb20sXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVSZWZ1bmRTdW1tYXJ5KFxuICAgIHJvb21zOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXSxcbiAgICB0b3RhbFBhaWQ6IG51bWJlcixcbiAgKTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHJvb21zLmZpbHRlcigocm9vbSkgPT4gcm9vbS5pc1NlbGVjdGVkKTtcbiAgICBjb25zdCB0b3RhbFJlZnVuZCA9IHNlbGVjdGVkLnJlZHVjZShcbiAgICAgIChzdW0sIHJvb20pID0+IHN1bSArIHJvb20ucmVmdW5kQW1vdW50LFxuICAgICAgMCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsUGFpZCxcbiAgICAgIHRvdGFsUmVmdW5kLFxuICAgICAgcm9vbXM6IHNlbGVjdGVkLFxuICAgIH07XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTdGVwLnNldChBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0uc2VsZWN0Um9vbXMpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb29tcy5zZXQoW10pO1xuICAgIHRoaXMuaG90ZWxJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLnJlZnVuZFN1bW1hcnkuc2V0KG51bGwpO1xuICB9XG59XG4iXX0=