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

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