ctt-babylon 0.24.73 → 0.24.74
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.
- package/esm2022/lib/components/external/core/lis-c2-img-txt-cta/lis-c2-img-txt-cta.component.mjs +68 -36
- package/fesm2022/ctt-babylon.mjs +67 -35
- package/fesm2022/ctt-babylon.mjs.map +1 -1
- package/lib/components/external/core/lis-c2-img-txt-cta/lis-c2-img-txt-cta.component.d.ts +3 -0
- package/package.json +1 -1
package/esm2022/lib/components/external/core/lis-c2-img-txt-cta/lis-c2-img-txt-cta.component.mjs
CHANGED
|
@@ -39,14 +39,14 @@ export class LisC2ImgTxtCtaComponent {
|
|
|
39
39
|
if (!isPlatformBrowser(this.platformId))
|
|
40
40
|
return;
|
|
41
41
|
const url = window.location.pathname + window.location.search;
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const
|
|
46
|
-
? decodeURIComponent(param)
|
|
47
|
-
: undefined;
|
|
42
|
+
const parsedUrl = this.router.parseUrl(url);
|
|
43
|
+
const currentDestination = parsedUrl.queryParamMap.get('destinations') ?? undefined;
|
|
44
|
+
const currentBrand = parsedUrl.queryParamMap.get('brand') ?? undefined;
|
|
45
|
+
const currentHotelType = parsedUrl.queryParamMap.get('hotelType') ?? undefined;
|
|
48
46
|
// Evitar procesar cambios de URL ajenos al filtro (modales, analytics, etc.)
|
|
49
|
-
if (currentDestination === this.lastDestinationFromUrl
|
|
47
|
+
if (currentDestination === this.lastDestinationFromUrl &&
|
|
48
|
+
currentBrand === this.lastBrandFromUrl &&
|
|
49
|
+
currentHotelType === this.lastHotelTypeFromUrl)
|
|
50
50
|
return;
|
|
51
51
|
this.applyDestinationsFromUrl(url);
|
|
52
52
|
};
|
|
@@ -68,6 +68,21 @@ export class LisC2ImgTxtCtaComponent {
|
|
|
68
68
|
this.updateFilteredItems();
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
+
syncFiltersToUrl() {
|
|
72
|
+
const params = {
|
|
73
|
+
destinations: this.selectedDestination || null,
|
|
74
|
+
brand: this.selectedBrand || null,
|
|
75
|
+
hotelType: this.selectedHotelType || null,
|
|
76
|
+
};
|
|
77
|
+
this.isSyncingFromUrl = true;
|
|
78
|
+
this.lastDestinationFromUrl = this.selectedDestination || undefined;
|
|
79
|
+
this.lastBrandFromUrl = this.selectedBrand || undefined;
|
|
80
|
+
this.lastHotelTypeFromUrl = this.selectedHotelType || undefined;
|
|
81
|
+
this.router.navigate([], {
|
|
82
|
+
queryParams: params,
|
|
83
|
+
replaceUrl: true,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
71
86
|
/**
|
|
72
87
|
* Devuelve el label del botón en la posición index, buscando en item.buttons[index].label
|
|
73
88
|
* y si no existe, en item.multimedia.imagenes[0].buttons[index].label
|
|
@@ -126,21 +141,32 @@ export class LisC2ImgTxtCtaComponent {
|
|
|
126
141
|
this.filterLabelToSlug = opts.filterLabelToSlug;
|
|
127
142
|
this.destinationLabelToSlug = opts.destinationLabelToSlug;
|
|
128
143
|
this.brandLabelToSlug = opts.brandLabelToSlug;
|
|
129
|
-
// Sincronizar con
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
144
|
+
// Sincronizar con los filtros de la URL actual
|
|
145
|
+
const parsedUrl = this.router.parseUrl(this.router.url);
|
|
146
|
+
const destinationsParam = parsedUrl.queryParamMap.get('destinations');
|
|
147
|
+
const brandParam = parsedUrl.queryParamMap.get('brand');
|
|
148
|
+
const hotelTypeParam = parsedUrl.queryParamMap.get('hotelType');
|
|
133
149
|
if (destinationsParam) {
|
|
134
|
-
this.pendingDestination =
|
|
150
|
+
this.pendingDestination =
|
|
151
|
+
decodeURIComponent(destinationsParam);
|
|
135
152
|
this.findAndSelectDestination(this.pendingDestination);
|
|
136
153
|
}
|
|
137
154
|
else {
|
|
138
|
-
// No hay filtro en la URL → resetear los filtros
|
|
139
155
|
this.pendingDestination = undefined;
|
|
140
|
-
this.selectedHotelType = '';
|
|
141
156
|
this.selectedDestination = '';
|
|
157
|
+
}
|
|
158
|
+
if (brandParam) {
|
|
159
|
+
this.selectedBrand = decodeURIComponent(brandParam);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
142
162
|
this.selectedBrand = '';
|
|
143
163
|
}
|
|
164
|
+
if (hotelTypeParam) {
|
|
165
|
+
this.selectedHotelType = decodeURIComponent(hotelTypeParam);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
this.selectedHotelType = '';
|
|
169
|
+
}
|
|
144
170
|
// Actualizar items filtrados
|
|
145
171
|
this.updateFilteredItems();
|
|
146
172
|
}
|
|
@@ -192,32 +218,46 @@ export class LisC2ImgTxtCtaComponent {
|
|
|
192
218
|
this.historyPatched = false;
|
|
193
219
|
}
|
|
194
220
|
applyDestinationsFromUrl(url) {
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
221
|
+
const parsedUrl = this.router.parseUrl(url);
|
|
222
|
+
const destinationsParam = parsedUrl.queryParamMap.get('destinations');
|
|
223
|
+
const brandParam = parsedUrl.queryParamMap.get('brand');
|
|
224
|
+
const hotelTypeParam = parsedUrl.queryParamMap.get('hotelType');
|
|
225
|
+
// Actualizar last* para que handleExternalUrlChange no re-procese
|
|
198
226
|
this.lastDestinationFromUrl = destinationsParam
|
|
199
227
|
? decodeURIComponent(destinationsParam)
|
|
200
228
|
: undefined;
|
|
201
|
-
|
|
202
|
-
|
|
229
|
+
this.lastBrandFromUrl = brandParam
|
|
230
|
+
? decodeURIComponent(brandParam)
|
|
231
|
+
: undefined;
|
|
232
|
+
this.lastHotelTypeFromUrl = hotelTypeParam
|
|
233
|
+
? decodeURIComponent(hotelTypeParam)
|
|
234
|
+
: undefined;
|
|
235
|
+
// Si el cambio de URL lo originó el propio componente (syncFiltersToUrl),
|
|
236
|
+
// el componente ya tiene los valores correctos → no re-hidratar.
|
|
203
237
|
const syncing = this.isSyncingFromUrl;
|
|
204
238
|
this.isSyncingFromUrl = false;
|
|
239
|
+
if (syncing)
|
|
240
|
+
return;
|
|
205
241
|
if (destinationsParam) {
|
|
206
242
|
const decodedDestination = decodeURIComponent(destinationsParam);
|
|
207
243
|
this.pendingDestination = decodedDestination;
|
|
208
|
-
// Si ya tenemos destinationOptions, buscar y seleccionar
|
|
209
244
|
if (this.destinationOptions?.length) {
|
|
210
245
|
this.findAndSelectDestination(decodedDestination);
|
|
211
246
|
}
|
|
212
247
|
}
|
|
213
248
|
else {
|
|
214
|
-
// El filtro ya no está en la URL → limpiar el destino seleccionado
|
|
215
249
|
this.pendingDestination = undefined;
|
|
216
|
-
if (
|
|
250
|
+
if (this.selectedDestination) {
|
|
217
251
|
this.selectedDestination = '';
|
|
218
|
-
this.updateFilteredItems();
|
|
219
252
|
}
|
|
220
253
|
}
|
|
254
|
+
this.selectedBrand = brandParam
|
|
255
|
+
? decodeURIComponent(brandParam)
|
|
256
|
+
: '';
|
|
257
|
+
this.selectedHotelType = hotelTypeParam
|
|
258
|
+
? decodeURIComponent(hotelTypeParam)
|
|
259
|
+
: '';
|
|
260
|
+
this.updateFilteredItems();
|
|
221
261
|
this.cdr.markForCheck();
|
|
222
262
|
}
|
|
223
263
|
ngOnDestroy() {
|
|
@@ -274,32 +314,24 @@ export class LisC2ImgTxtCtaComponent {
|
|
|
274
314
|
onHotelTypeChange(value) {
|
|
275
315
|
this.selectedHotelType = value ?? '';
|
|
276
316
|
this.updateFilteredItems();
|
|
317
|
+
this.syncFiltersToUrl();
|
|
277
318
|
}
|
|
278
319
|
onDestinationChange(value) {
|
|
279
320
|
this.selectedDestination = value ?? '';
|
|
280
321
|
this.updateFilteredItems();
|
|
281
|
-
|
|
282
|
-
const hasDestinationFilter = this.router
|
|
283
|
-
.parseUrl(this.router.url)
|
|
284
|
-
.queryParamMap.has('destinations');
|
|
285
|
-
if (hasDestinationFilter) {
|
|
286
|
-
this.isSyncingFromUrl = true;
|
|
287
|
-
this.lastDestinationFromUrl = undefined;
|
|
288
|
-
this.router.navigate([], {
|
|
289
|
-
queryParams: { destinations: null },
|
|
290
|
-
queryParamsHandling: 'merge',
|
|
291
|
-
});
|
|
292
|
-
}
|
|
322
|
+
this.syncFiltersToUrl();
|
|
293
323
|
}
|
|
294
324
|
onBrandChange(value) {
|
|
295
325
|
this.selectedBrand = value ?? '';
|
|
296
326
|
this.updateFilteredItems();
|
|
327
|
+
this.syncFiltersToUrl();
|
|
297
328
|
}
|
|
298
329
|
clearFilters() {
|
|
299
330
|
this.selectedHotelType = '';
|
|
300
331
|
this.selectedDestination = '';
|
|
301
332
|
this.selectedBrand = '';
|
|
302
333
|
this.updateFilteredItems();
|
|
334
|
+
this.syncFiltersToUrl();
|
|
303
335
|
}
|
|
304
336
|
trackFilter(index) {
|
|
305
337
|
return index;
|
|
@@ -334,4 +366,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
334
366
|
}], showFilters: [{
|
|
335
367
|
type: Input
|
|
336
368
|
}] } });
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzLWMyLWltZy10eHQtY3RhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhYnlsb24vc3JjL2xpYi9jb21wb25lbnRzL2V4dGVybmFsL2NvcmUvbGlzLWMyLWltZy10eHQtY3RhL2xpcy1jMi1pbWctdHh0LWN0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9leHRlcm5hbC9jb3JlL2xpcy1jMi1pbWctdHh0LWN0YS9saXMtYzItaW1nLXR4dC1jdGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDSCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQU1oRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixZQUFZLEdBQ2YsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4QyxPQUFPLEVBQ0gsaUJBQWlCLEdBS3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFnQixNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBRSw0QkFB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RyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxXQUFXLENBQUMsS0FBYTtRQUNyQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsVUFBVSxDQUFDLEtBQWE7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzsrR0F0WlEsdUJBQXVCO21HQUF2Qix1QkFBdUIsK1FDakRwQyxnM2RBNFFBLDgxdDJCRHBPUSxZQUFZLG1JQUNaLHdCQUF3Qiw4SkFDeEIsbUJBQW1CLHNEQUNuQixXQUFXOzs0RkFNTix1QkFBdUI7a0JBYm5DLFNBQVM7K0JBQ0ksb0JBQW9CLGNBQ2xCLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3dCQUNuQixXQUFXO3FCQUNkLGlCQUdjLGlCQUFpQixDQUFDLFFBQVE7OEJBR2hDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFieWxvbkxpbmtUeXBlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGlyZWN0aXZlcy9saW5rLXR5cGUvbGluay10eXBlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICAgIEJhYnlsb25CdXR0b25JLFxuICAgIEJhYnlsb25JbWFnZUksXG4gICAgQmFieWxvblRleHRJbmZvSSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCYWJ5bG9uQ3VycmVuY3lQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcGlwZXMvYmFieWxvbi1jdXJyZW5jeS5waXBlJztcbmltcG9ydCB7XG4gICAgYnVpbGRGaWx0ZXJPcHRpb25zLFxuICAgIGZpbHRlcmVkSXRlbXMsXG4gICAgZ2V0SXRlbUJyYW5kLFxufSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9maWx0ZXIudXRpbHMnO1xuXG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYWJ5bG9uR2xvYmFsSXRlbSB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvYmFieWxvbi1nbG9iYWwtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBnZXRGaXJzdEltYWdlQnlUYWdGcm9tSW1hZ2VzIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvbXV0aW1lZGlhLnV0aWxzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUdsb2JhbEl0ZW1zIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvbm9ybWFsaXplLWl0ZW1zLnV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaXMtYzItaW1nLXR4dC1jdGEnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEJhYnlsb25MaW5rVHlwZURpcmVjdGl2ZSxcbiAgICAgICAgQmFieWxvbkN1cnJlbmN5UGlwZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGlzLWMyLWltZy10eHQtY3RhLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vbGlzLWMyLWltZy10eHQtY3RhLmNvbXBvbmVudC5zY3NzJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbn0pXG5leHBvcnQgY2xhc3MgTGlzQzJJbWdUeHRDdGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSB0ZXh0cz86IEJhYnlsb25UZXh0SW5mb0k7XG4gICAgQElucHV0KCkgaXRlbXM/OiBCYWJ5bG9uR2xvYmFsSXRlbVtdO1xuICAgIEBJbnB1dCgpIGxpbmtzPzogQmFieWxvbkJ1dHRvbklbXTtcbiAgICBASW5wdXQoKSBhZGRpdGlvbmFsMUxpa2VNYXJjYT86IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93Q2xlYW5GaWx0ZXJzOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93RmlsdGVyczogYm9vbGVhbiA9IHRydWU7IC8vIHRvIHNob3cgb3IgaGlkZSBmaWx0ZXJzIHNlY3Rpb25cblxuICAgIHRhZ05hbWU6IHN0cmluZyA9ICdMaXNDMkltZ1R4dEN0YSc7XG5cbiAgICBzZWxlY3RlZEhvdGVsVHlwZTogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWREZXN0aW5hdGlvbjogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWRCcmFuZDogc3RyaW5nID0gJyc7XG5cbiAgICBob3RlbFR5cGVPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGRlc3RpbmF0aW9uT3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBicmFuZE9wdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmaWx0ZXJMYWJlbFRvU2x1ZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgZGVzdGluYXRpb25MYWJlbFRvU2x1ZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgYnJhbmRMYWJlbFRvU2x1ZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICAgIHByaXZhdGUgcm91dGVyU3ViPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgcGVuZGluZ0Rlc3RpbmF0aW9uPzogc3RyaW5nO1xuICAgIHByaXZhdGUgbGFzdERlc3RpbmF0aW9uRnJvbVVybD86IHN0cmluZztcbiAgICBwcml2YXRlIGlzU3luY2luZ0Zyb21VcmwgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgaGlzdG9yeVBhdGNoZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIG9yaWdpbmFsUHVzaFN0YXRlPzogdHlwZW9mIGhpc3RvcnkucHVzaFN0YXRlO1xuICAgIHByaXZhdGUgb3JpZ2luYWxSZXBsYWNlU3RhdGU/OiB0eXBlb2YgaGlzdG9yeS5yZXBsYWNlU3RhdGU7XG4gICAgcHJpdmF0ZSBwYXRjaGVkUHVzaFN0YXRlPzogdHlwZW9mIGhpc3RvcnkucHVzaFN0YXRlO1xuICAgIHByaXZhdGUgcGF0Y2hlZFJlcGxhY2VTdGF0ZT86IHR5cGVvZiBoaXN0b3J5LnJlcGxhY2VTdGF0ZTtcblxuICAgIC8vIEl0ZW1zIGZpbHRyYWRvcyBzaW4gbm9ybWFsaXphciAodXNhZG9zIHBhcmEgbMOzZ2ljYSlcbiAgICBwcml2YXRlIF9maWx0ZXJlZEl0ZW1zUmF3OiBCYWJ5bG9uR2xvYmFsSXRlbVtdID0gW107XG5cbiAgICBwcml2YXRlIGZpbmRBbmRTZWxlY3REZXN0aW5hdGlvbihkZXN0aW5hdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IGRlc3RpbmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpPy50cmltKCk7XG5cbiAgICAgICAgLy8gUHJpbWVybyBidXNjYXIgZW4gZWwgYXJyYXkgZGUgc3RyaW5ncyBkZSBkZXN0aW5vc1xuICAgICAgICBsZXQgZm91bmQgPSB0aGlzLmRlc3RpbmF0aW9uT3B0aW9ucz8uZmluZChcbiAgICAgICAgICAgIChkZXN0aW5hdGlvbikgPT5cbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi50b0xvd2VyQ2FzZSgpPy50cmltKCkgPT09IG5vcm1hbGl6ZWROYW1lXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSBmb3VuZDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2kgbm8gZW5jdWVudHJhIGVuIGRlc3RpbmF0aW9uT3B0aW9ucywgYnVzY2FyIGVuIGxvcyBpdGVtcyBwb3IgY291bnRyeVxuICAgICAgICBjb25zdCBpdGVtV2l0aENvdW50cnkgPSB0aGlzLml0ZW1zPy5maW5kKFxuICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uY291bnRyeT8udG9Mb3dlckNhc2UoKT8udHJpbSgpID09PSBub3JtYWxpemVkTmFtZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpdGVtV2l0aENvdW50cnkgJiYgaXRlbVdpdGhDb3VudHJ5LmNvdW50cnkpIHtcbiAgICAgICAgICAgIC8vIEZpbHRyYXIgZGlyZWN0YW1lbnRlIHBvciBjb3VudHJ5IGF1bnF1ZSBubyBleGlzdGEgZW4gZGVzdGluYXRpb25PcHRpb25zXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSBpdGVtV2l0aENvdW50cnkuY291bnRyeTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV2dWVsdmUgZWwgbGFiZWwgZGVsIGJvdMOzbiBlbiBsYSBwb3NpY2nDs24gaW5kZXgsIGJ1c2NhbmRvIGVuIGl0ZW0uYnV0dG9uc1tpbmRleF0ubGFiZWxcbiAgICAgKiB5IHNpIG5vIGV4aXN0ZSwgZW4gaXRlbS5tdWx0aW1lZGlhLmltYWdlbmVzWzBdLmJ1dHRvbnNbaW5kZXhdLmxhYmVsXG4gICAgICovXG4gICAgZ2V0QnV0dG9uTGFiZWwoaXRlbTogQmFieWxvbkdsb2JhbEl0ZW0sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXRlbT8uYnV0dG9ucz8uW2luZGV4XT8ubGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmJ1dHRvbnNbaW5kZXhdLmxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdPy5idXR0b25zPy5baW5kZXhdPy5sYWJlbDtcbiAgICB9XG5cbiAgICBnZXRCdXR0b25VcmwoaXRlbTogQmFieWxvbkdsb2JhbEl0ZW0sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5idWlsZE1lbnVVcmwoXG4gICAgICAgICAgICAgICAgaXRlbT8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXT8uYnV0dG9ucz8uW2luZGV4XVxuICAgICAgICAgICAgKSB8fCB0aGlzLmJ1aWxkTWVudVVybChpdGVtPy5idXR0b25zPy5baW5kZXhdKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldEJ1dHRvbkxpbmtUeXBlKGl0ZW06IEJhYnlsb25HbG9iYWxJdGVtLCBpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGl0ZW0/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0/LmJ1dHRvbnM/LltpbmRleF0/LmxpbmtUeXBlIHx8XG4gICAgICAgICAgICBpdGVtPy5idXR0b25zPy5baW5kZXhdPy5saW5rVHlwZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldExpbmtMYWJlbChpdGVtOiBCYWJ5bG9uR2xvYmFsSXRlbSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpdGVtPy5saW5rcz8uW2luZGV4XT8ubGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmxpbmtzW2luZGV4XS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbT8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXT8ubGlua3M/LltpbmRleF0/LmxhYmVsO1xuICAgIH1cblxuICAgIGdldExpbmtVcmwoaXRlbTogQmFieWxvbkdsb2JhbEl0ZW0sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5idWlsZE1lbnVVcmwoXG4gICAgICAgICAgICAgICAgaXRlbT8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXT8ubGlua3M/LltpbmRleF1cbiAgICAgICAgICAgICkgfHwgdGhpcy5idWlsZE1lbnVVcmwoaXRlbT8ubGlua3M/LltpbmRleF0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0TGlua0xpbmtUeXBlKGl0ZW06IEJhYnlsb25HbG9iYWxJdGVtLCBpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGl0ZW0/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0/LmxpbmtzPy5baW5kZXhdPy5saW5rVHlwZSB8fFxuICAgICAgICAgICAgaXRlbT8ubGlua3M/LltpbmRleF0/LmxpbmtUeXBlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYnVpbGRNZW51VXJsKGl0ZW06IEJhYnlsb25CdXR0b25JIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFpdGVtPy51cmwpIHJldHVybiAnJztcblxuICAgICAgICBjb25zdCBiYXNlVXJsID0gaXRlbS51cmwucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gKGl0ZW0udmFycyA/PyAnJykudG9TdHJpbmcoKT8udHJpbSgpO1xuXG4gICAgICAgIGlmICghZGVzdGluYXRpb24pIHJldHVybiBiYXNlVXJsO1xuXG4gICAgICAgIGNvbnN0IHNsdWcgPSBVdGlscy50b1NsdWcoZGVzdGluYXRpb24pO1xuICAgICAgICBpZiAoIXNsdWcpIHJldHVybiBiYXNlVXJsO1xuXG4gICAgICAgIHJldHVybiBgJHtiYXNlVXJsfT9kZXN0aW5hdGlvbnM9JHtkZXN0aW5hdGlvbn1gO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBidWlsZEZpbHRlck9wdGlvbnMoXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA/PyBbXSxcbiAgICAgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWwxTGlrZU1hcmNhID8/IGZhbHNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ob3RlbFR5cGVPcHRpb25zID0gb3B0cy5ob3RlbFR5cGVPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk9wdGlvbnMgPSBvcHRzLmRlc3RpbmF0aW9uT3B0aW9ucztcblxuICAgICAgICAgICAgLy8gUmVsbGVuYXIgYnJhbmRPcHRpb25zIHVzYW5kbyBnZXRJdGVtQnJhbmQgcGFyYSBjb2hlcmVuY2lhXG4gICAgICAgICAgICBjb25zdCBicmFuZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICh0aGlzLml0ZW1zID8/IFtdKS5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyYW5kID0gZ2V0SXRlbUJyYW5kKFxuICAgICAgICAgICAgICAgICAgICBpdCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsMUxpa2VNYXJjYSA/PyBmYWxzZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGJyYW5kKSBicmFuZHMuYWRkKGJyYW5kKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5icmFuZE9wdGlvbnMgPSBBcnJheS5mcm9tKGJyYW5kcyk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckxhYmVsVG9TbHVnID0gb3B0cy5maWx0ZXJMYWJlbFRvU2x1ZztcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb25MYWJlbFRvU2x1ZyA9IG9wdHMuZGVzdGluYXRpb25MYWJlbFRvU2x1ZztcbiAgICAgICAgICAgIHRoaXMuYnJhbmRMYWJlbFRvU2x1ZyA9IG9wdHMuYnJhbmRMYWJlbFRvU2x1ZztcblxuICAgICAgICAgICAgLy8gU2luY3Jvbml6YXIgY29uIGVsIGZpbHRybyBkZSBkZXN0aW5vIGRlIGxhIFVSTCBhY3R1YWxcbiAgICAgICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uc1BhcmFtID0gdGhpcy5yb3V0ZXJcbiAgICAgICAgICAgICAgICAucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKVxuICAgICAgICAgICAgICAgIC5xdWVyeVBhcmFtTWFwLmdldCgnZGVzdGluYXRpb25zJyk7XG5cbiAgICAgICAgICAgIGlmIChkZXN0aW5hdGlvbnNQYXJhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0Rlc3RpbmF0aW9uID0gZGVjb2RlVVJJQ29tcG9uZW50KGRlc3RpbmF0aW9uc1BhcmFtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmRBbmRTZWxlY3REZXN0aW5hdGlvbih0aGlzLnBlbmRpbmdEZXN0aW5hdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE5vIGhheSBmaWx0cm8gZW4gbGEgVVJMIOKGkiByZXNldGVhciBsb3MgZmlsdHJvc1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0Rlc3RpbmF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWN0dWFsaXphciBpdGVtcyBmaWx0cmFkb3NcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEFwbGljYXIgZWwgZGVzdGlubyBkZSBsYSBVUkwgYWN0dWFsICh0YW1iacOpbiBjdWJyZSBlbCBwcmltZXIgcmVuZGVyaXphZG8pXG4gICAgICAgIHRoaXMuYXBwbHlEZXN0aW5hdGlvbnNGcm9tVXJsKHRoaXMucm91dGVyLnVybCk7XG5cbiAgICAgICAgLy8gUmVhY2Npb25hciBhIGN1YWxxdWllciBuYXZlZ2FjacOzbiAoaW5jbHVpZGEgbGEgbWlzbWEgcnV0YSBjYW1iaWFuZG8gc29sbyBsYSBxdWVyeSlcbiAgICAgICAgdGhpcy5yb3V0ZXJTdWIgPSB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50KTogZXZlbnQgaXMgTmF2aWdhdGlvbkVuZCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseURlc3RpbmF0aW9uc0Zyb21VcmwodGhpcy5yb3V0ZXIudXJsKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIERldGVjdGFyIGNhbWJpb3MgZGUgVVJMIGhlY2hvcyBmdWVyYSBkZWwgUm91dGVyIGRlIEFuZ3VsYXIgKFNTUi1zYWZlKVxuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgdGhpcy5oYW5kbGVFeHRlcm5hbFVybENoYW5nZSk7XG4gICAgICAgICAgICB0aGlzLnBhdGNoSGlzdG9yeSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVFeHRlcm5hbFVybENoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLnJvdXRlclxuICAgICAgICAgICAgLnBhcnNlVXJsKHVybClcbiAgICAgICAgICAgIC5xdWVyeVBhcmFtTWFwLmdldCgnZGVzdGluYXRpb25zJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREZXN0aW5hdGlvbiA9IHBhcmFtXG4gICAgICAgICAgICA/IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIEV2aXRhciBwcm9jZXNhciBjYW1iaW9zIGRlIFVSTCBhamVub3MgYWwgZmlsdHJvIChtb2RhbGVzLCBhbmFseXRpY3MsIGV0Yy4pXG4gICAgICAgIGlmIChjdXJyZW50RGVzdGluYXRpb24gPT09IHRoaXMubGFzdERlc3RpbmF0aW9uRnJvbVVybCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuYXBwbHlEZXN0aW5hdGlvbnNGcm9tVXJsKHVybCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcGF0Y2hIaXN0b3J5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oaXN0b3J5UGF0Y2hlZCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMub3JpZ2luYWxQdXNoU3RhdGUgPSB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGU7XG4gICAgICAgIHRoaXMub3JpZ2luYWxSZXBsYWNlU3RhdGUgPSB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGU7XG5cbiAgICAgICAgdGhpcy5wYXRjaGVkUHVzaFN0YXRlID0gKFxuICAgICAgICAgICAgZGF0YTogdW5rbm93bixcbiAgICAgICAgICAgIHVudXNlZDogc3RyaW5nLFxuICAgICAgICAgICAgdXJsPzogc3RyaW5nIHwgVVJMIHwgbnVsbFxuICAgICAgICApOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxQdXNoU3RhdGU/LmNhbGwod2luZG93Lmhpc3RvcnksIGRhdGEsIHVudXNlZCwgdXJsKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXh0ZXJuYWxVcmxDaGFuZ2UoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5wYXRjaGVkUmVwbGFjZVN0YXRlID0gKFxuICAgICAgICAgICAgZGF0YTogdW5rbm93bixcbiAgICAgICAgICAgIHVudXNlZDogc3RyaW5nLFxuICAgICAgICAgICAgdXJsPzogc3RyaW5nIHwgVVJMIHwgbnVsbFxuICAgICAgICApOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxSZXBsYWNlU3RhdGU/LmNhbGwod2luZG93Lmhpc3RvcnksIGRhdGEsIHVudXNlZCwgdXJsKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXh0ZXJuYWxVcmxDaGFuZ2UoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgPSB0aGlzLnBhdGNoZWRQdXNoU3RhdGU7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSA9IHRoaXMucGF0Y2hlZFJlcGxhY2VTdGF0ZTtcbiAgICAgICAgdGhpcy5oaXN0b3J5UGF0Y2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0b3JlSGlzdG9yeSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhpc3RvcnlQYXRjaGVkKSByZXR1cm47XG5cbiAgICAgICAgLy8gU29sbyByZXN0YXVyYXIgc2kgbGEgZnVuY2nDs24gYWN0dWFsIHNpZ3VlIHNpZW5kbyBsYSBxdWUgaW5zdGFsYW1vc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBhdGNoZWRQdXNoU3RhdGUgJiZcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSA9PT0gdGhpcy5wYXRjaGVkUHVzaFN0YXRlXG4gICAgICAgICkge1xuICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlID0gdGhpcy5vcmlnaW5hbFB1c2hTdGF0ZSE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wYXRjaGVkUmVwbGFjZVN0YXRlICYmXG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUgPT09IHRoaXMucGF0Y2hlZFJlcGxhY2VTdGF0ZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSA9IHRoaXMub3JpZ2luYWxSZXBsYWNlU3RhdGUhO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oaXN0b3J5UGF0Y2hlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlEZXN0aW5hdGlvbnNGcm9tVXJsKHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uc1BhcmFtID0gdGhpcy5yb3V0ZXJcbiAgICAgICAgICAgIC5wYXJzZVVybCh1cmwpXG4gICAgICAgICAgICAucXVlcnlQYXJhbU1hcC5nZXQoJ2Rlc3RpbmF0aW9ucycpO1xuICAgICAgICB0aGlzLmxhc3REZXN0aW5hdGlvbkZyb21VcmwgPSBkZXN0aW5hdGlvbnNQYXJhbVxuICAgICAgICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQoZGVzdGluYXRpb25zUGFyYW0pXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBTaSBlbCBjYW1iaW8gZGUgVVJMIGxvIG9yaWdpbsOzIGVsIHByb3BpbyBjb21wb25lbnRlIChjYW1iaW8gZGUgc2VsZWN0b3IpLFxuICAgICAgICAvLyBubyBsaW1waWFyIGxhIHNlbGVjY2nDs24gcXVlIGVsIHVzdWFyaW8gYWNhYmEgZGUgaGFjZXIuXG4gICAgICAgIGNvbnN0IHN5bmNpbmcgPSB0aGlzLmlzU3luY2luZ0Zyb21Vcmw7XG4gICAgICAgIHRoaXMuaXNTeW5jaW5nRnJvbVVybCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChkZXN0aW5hdGlvbnNQYXJhbSkge1xuICAgICAgICAgICAgY29uc3QgZGVjb2RlZERlc3RpbmF0aW9uID0gZGVjb2RlVVJJQ29tcG9uZW50KGRlc3RpbmF0aW9uc1BhcmFtKTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0Rlc3RpbmF0aW9uID0gZGVjb2RlZERlc3RpbmF0aW9uO1xuXG4gICAgICAgICAgICAvLyBTaSB5YSB0ZW5lbW9zIGRlc3RpbmF0aW9uT3B0aW9ucywgYnVzY2FyIHkgc2VsZWNjaW9uYXJcbiAgICAgICAgICAgIGlmICh0aGlzLmRlc3RpbmF0aW9uT3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maW5kQW5kU2VsZWN0RGVzdGluYXRpb24oZGVjb2RlZERlc3RpbmF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEVsIGZpbHRybyB5YSBubyBlc3TDoSBlbiBsYSBVUkwg4oaSIGxpbXBpYXIgZWwgZGVzdGlubyBzZWxlY2Npb25hZG9cbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0Rlc3RpbmF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFzeW5jaW5nICYmIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGVyU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgJ3BvcHN0YXRlJyxcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUV4dGVybmFsVXJsQ2hhbmdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlSGlzdG9yeSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV2dWVsdmUgdW4gYXJyYXkgbm9ybWFsaXphZG8gZGUgQmFieWxvbkdsb2JhbEl0ZW1cbiAgICAgKi9cbiAgICBnZXQgbm9ybWFsaXplZEl0ZW1zKCk6IEJhYnlsb25HbG9iYWxJdGVtW10ge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplR2xvYmFsSXRlbXModGhpcy5pdGVtcyk7XG4gICAgfVxuXG4gICAgZ2V0Rmlyc3RJbWFnZUJ5VGFnKHRhZ05hbWU6IHN0cmluZywgaW1hZ2VuZXM6IEJhYnlsb25JbWFnZUlbXSkge1xuICAgICAgICByZXR1cm4gZ2V0Rmlyc3RJbWFnZUJ5VGFnRnJvbUltYWdlcyhpbWFnZW5lcywgdGFnTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0IGZpbHRlcmVkSXRlbXMoKSB7XG4gICAgICAgIC8vIERldm9sdmVyIGxvcyBpdGVtcyBmaWx0cmFkb3Mgbm9ybWFsaXphZG9zXG4gICAgICAgIHJldHVybiBub3JtYWxpemVHbG9iYWxJdGVtcyh0aGlzLl9maWx0ZXJlZEl0ZW1zUmF3KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUZpbHRlcmVkSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGxldCBpdGVtcyA9IGZpbHRlcmVkSXRlbXMoe1xuICAgICAgICAgICAgaXRlbXM6IHRoaXMuaXRlbXMgPz8gW10sXG4gICAgICAgICAgICBzZWxlY3RlZEhvdGVsVHlwZTogdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSxcbiAgICAgICAgICAgIHNlbGVjdGVkRGVzdGluYXRpb246IHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbixcbiAgICAgICAgICAgIHNlbGVjdGVkQnJhbmQ6IHRoaXMuc2VsZWN0ZWRCcmFuZCxcbiAgICAgICAgICAgIGFkZGl0aW9uYWwxTGlrZU1hcmNhOiB0aGlzLmFkZGl0aW9uYWwxTGlrZU1hcmNhID8/IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTaSBoYXkgZGVzdGluYXRpb25TZWxlY3RlZCB5IG5vIHRpZW5lIHJlc3VsdGFkb3MsIGludGVudGFyIGZpbHRyYXIgcG9yIGNvdW50cnlcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiAmJiBpdGVtcy5sZW5ndGggPT09IDAgJiYgdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdGVsVHlwZU9rID1cbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW0gYXMgYW55KT8uaG90ZWx0eXBlID09PSB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGVzdGluYXRpb25PayA9XG4gICAgICAgICAgICAgICAgICAgICF0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jb3VudHJ5Py50b0xvd2VyQ2FzZSgpPy50cmltKCkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24udG9Mb3dlckNhc2UoKT8udHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYnJhbmRPayA9XG4gICAgICAgICAgICAgICAgICAgICF0aGlzLnNlbGVjdGVkQnJhbmQgfHxcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMudG9TbHVnKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SXRlbUJyYW5kKGl0ZW0sIHRoaXMuYWRkaXRpb25hbDFMaWtlTWFyY2EgPz8gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICkgPT09IFV0aWxzLnRvU2x1Zyh0aGlzLnNlbGVjdGVkQnJhbmQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdGVsVHlwZU9rICYmIGRlc3RpbmF0aW9uT2sgJiYgYnJhbmRPaztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtc1JhdyA9IGl0ZW1zO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzQWN0aXZlRmlsdGVycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24sXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQsXG4gICAgICAgIF0uc29tZSgodikgPT4gdiAmJiB2ICE9PSAnJyk7XG4gICAgfVxuXG4gICAgb25Ib3RlbFR5cGVDaGFuZ2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlID0gdmFsdWUgPz8gJyc7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgIH1cblxuICAgIG9uRGVzdGluYXRpb25DaGFuZ2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG5cbiAgICAgICAgLy8gU2kgbGEgVVJMIHRpZW5lIGZpbHRybyBkZSBkZXN0aW5vLCBxdWl0YXJsbyBhbCBjYW1iaWFyIGVsIHNlbGVjdG9yXG4gICAgICAgIGNvbnN0IGhhc0Rlc3RpbmF0aW9uRmlsdGVyID0gdGhpcy5yb3V0ZXJcbiAgICAgICAgICAgIC5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpXG4gICAgICAgICAgICAucXVlcnlQYXJhbU1hcC5oYXMoJ2Rlc3RpbmF0aW9ucycpO1xuICAgICAgICBpZiAoaGFzRGVzdGluYXRpb25GaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTeW5jaW5nRnJvbVVybCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxhc3REZXN0aW5hdGlvbkZyb21VcmwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGRlc3RpbmF0aW9uczogbnVsbCB9LFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQnJhbmRDaGFuZ2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgfVxuXG4gICAgY2xlYXJGaWx0ZXJzKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlID0gJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSAnJztcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgfVxuXG4gICAgdHJhY2tGaWx0ZXIoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgdHJhY2tPcHRpb24oaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgdHJhY2tPZmZlcihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwYWdlLWNvbnRhaW5lciBmaXJzdC1tb2R1bGUgb2ZmZXJzLXBhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYmlnLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXAtcGFnZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJnbG9iYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXAtZ2xvYmFsLWhlYWRlciB2aXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAodGV4dHM/LnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJnbG9iYWwtaGVhZGVyLXRpdGxlXCI+e3sgdGV4dHM/LnRpdGxlIH19PC9oMT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKHRleHRzPy5zdWJ0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdsb2JhbC1oZWFkZXItc3VidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidGV4dHM/LnN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3A+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9mZmVycy1pbnB1dHNcIiAqbmdJZj1cInNob3dGaWx0ZXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWhlYWRlci1mb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWZpbHRlcnMtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEJyYW5kIGZpbHRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWZvcm0tZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZWxlbWVudCBzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwLWlucHV0LWVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHRleHRzPy5tYXJjYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWVsZW1lbnQtdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0cz8ubWFyY2EgPz8gJ21hcmNhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWVsZW1lbnQtZmllbGQganMtZmlsdGVyLW9mZmVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRCcmFuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25CcmFuZENoYW5nZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0cz8ubWFyY2EgPz8gJ21hcmNhJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQgb2YgYnJhbmRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwib3B0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gc2VydmljZXMtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWZvcm0tZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZWxlbWVudCBzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwLWlucHV0LWVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHRleHRzPy5kZXN0aW5hdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1lbGVtZW50LXRleHRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHM/LmRlc3RpbmF0aW9ucyA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXN0aW5vcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1lbGVtZW50LWZpZWxkIGpzLWZpbHRlci1vZmZlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGVzdGluYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRGVzdGluYXRpb25DaGFuZ2UoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0cz8uZGVzdGluYXRpb25zID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXN0aW5vcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdCBvZiBkZXN0aW5hdGlvbk9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWVuZCBmaWx0ZXJzLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxzZWN0aW9uIGNsYXNzPVwicHJvbW8tbW9kdWxlIG9mZmVycy1wYWdlXCI+XG4gICAgPGRpdiBjbGFzcz1cImJpZy13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwLXByb21vLW1vZHVsZSBtb2R1bGUtc3BhY2VyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvbW8tbW9kdWxlLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICBAaWYgKGZpbHRlcmVkSXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZpbHRlcmVkSXRlbXM7IHRyYWNrIHRyYWNrT2ZmZXIoJGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb21vLW1vZHVsZS1lbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXAtcHJvbW8tZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZ2V0QnV0dG9uVXJsKGl0ZW0sIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJnZXRCdXR0b25MaW5rVHlwZShpdGVtLCAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb21vLWVsZW1lbnQtbWVkaWEganMtc2VjdGlvbi1hcnJvd3Mtem9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rmlyc3RJbWFnZUJ5VGFnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/Lm11bHRpbWVkaWE/LmltYWdlbmVzID8/IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlndXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb21vLWVsZW1lbnQtbWVkaWFfaW1nIHJlc3BvbnNpdmUtcmVzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJpbWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc/LmltZz8uYWx0ID8/ICdpdGVtSW1hZ2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1maWxlbmFtZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc/LmltZz8uYWx0ID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0ZW1GaWxlTmFtZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKCcgKyBpbWc/LmltZz8uc3JjICsgJyknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9maWd1cmU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvbW8tZWxlbWVudC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtPy50ZXh0cz8uYWRkaXRpb25hbDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvbW8tZWxlbWVudC1pbmZvX3RhZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy50ZXh0cz8uYWRkaXRpb25hbDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8udGV4dHM/LnRpdGxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LnRleHRzPy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb21vLWVsZW1lbnQtaW5mb190aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LnRleHRzPy50aXRsZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LnRleHRzPy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0/LnRleHRzPy5hZGRpdGlvbmFsMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9tby1lbGVtZW50LWluZm9fc3VidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy50ZXh0cz8uYWRkaXRpb25hbDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb21vLWVsZW1lbnQtZm9vdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb21vLWVsZW1lbnQtcHJpY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbT8ucHJpY2UgfHwgaXRlbT8uZGlzY291bnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LnRleHRzPy5hZGRpdGlvbmFsMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9tby1lbGVtZW50LXByaWNlX3NpbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LnRleHRzPy5hZGRpdGlvbmFsMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0/LnByaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb21vLWVsZW1lbnQtcHJpY2VfbnVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbT8ucHJpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PHNtYWxsPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY3VycmVuY3kgfHwgJ0VVUidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjdXJyZW5jeVN5bWJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5kaXNjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9tby1lbGVtZW50LXByaWNlX251bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0/LmRpc2NvdW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzbWFsbD4gJTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9tby1lbGVtZW50LWJ0bnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdldEJ1dHRvbkxhYmVsKGl0ZW0sIDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tY29ycFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QnV0dG9uVXJsKGl0ZW0sIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlua1R5cGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEJ1dHRvbkxpbmtUeXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tY29ycC10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRCdXR0b25MYWJlbChpdGVtLCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdldEJ1dHRvbkxhYmVsKGl0ZW0sIDEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJnZXRCdXR0b25VcmwoaXRlbSwgMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtUeXBlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEJ1dHRvbkxpbmtUeXBlKGl0ZW0sIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tbGlua2VyIHRvcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWxpbmtlci10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRCdXR0b25MYWJlbChpdGVtLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0TGlua0xhYmVsKGl0ZW0sIDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJnZXRMaW5rVXJsKGl0ZW0sIDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMaW5rTGlua1R5cGUoaXRlbSwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1saW5rZXIgdG9yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tbGlua2VyLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExpbmtMYWJlbChpdGVtLCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvZmZlcnMtbWVzc2FnZVwiIFtjbGFzcy5zaG93XT1cImZpbHRlcmVkSXRlbXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0ZXh0cz8ubm90Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZXNzYWdlLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidGV4dHM/Lm5vdEZvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3A+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRlbXAtdHJhc2hcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
|
|
369
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzLWMyLWltZy10eHQtY3RhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhYnlsb24vc3JjL2xpYi9jb21wb25lbnRzL2V4dGVybmFsL2NvcmUvbGlzLWMyLWltZy10eHQtY3RhL2xpcy1jMi1pbWctdHh0LWN0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9leHRlcm5hbC9jb3JlL2xpcy1jMi1pbWctdHh0LWN0YS9saXMtYzItaW1nLXR4dC1jdGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDSCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQU1oRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixZQUFZLEdBQ2YsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4QyxPQUFPLEVBQ0gsaUJBQWlCLEdBS3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFnQixNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBRSw0QkFB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QUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFieWxvbkxpbmtUeXBlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGlyZWN0aXZlcy9saW5rLXR5cGUvbGluay10eXBlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICAgIEJhYnlsb25CdXR0b25JLFxuICAgIEJhYnlsb25JbWFnZUksXG4gICAgQmFieWxvblRleHRJbmZvSSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCYWJ5bG9uQ3VycmVuY3lQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcGlwZXMvYmFieWxvbi1jdXJyZW5jeS5waXBlJztcbmltcG9ydCB7XG4gICAgYnVpbGRGaWx0ZXJPcHRpb25zLFxuICAgIGZpbHRlcmVkSXRlbXMsXG4gICAgZ2V0SXRlbUJyYW5kLFxufSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9maWx0ZXIudXRpbHMnO1xuXG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYWJ5bG9uR2xvYmFsSXRlbSB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvYmFieWxvbi1nbG9iYWwtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBnZXRGaXJzdEltYWdlQnlUYWdGcm9tSW1hZ2VzIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvbXV0aW1lZGlhLnV0aWxzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUdsb2JhbEl0ZW1zIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvbm9ybWFsaXplLWl0ZW1zLnV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaXMtYzItaW1nLXR4dC1jdGEnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEJhYnlsb25MaW5rVHlwZURpcmVjdGl2ZSxcbiAgICAgICAgQmFieWxvbkN1cnJlbmN5UGlwZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGlzLWMyLWltZy10eHQtY3RhLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vbGlzLWMyLWltZy10eHQtY3RhLmNvbXBvbmVudC5zY3NzJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbn0pXG5leHBvcnQgY2xhc3MgTGlzQzJJbWdUeHRDdGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSB0ZXh0cz86IEJhYnlsb25UZXh0SW5mb0k7XG4gICAgQElucHV0KCkgaXRlbXM/OiBCYWJ5bG9uR2xvYmFsSXRlbVtdO1xuICAgIEBJbnB1dCgpIGxpbmtzPzogQmFieWxvbkJ1dHRvbklbXTtcbiAgICBASW5wdXQoKSBhZGRpdGlvbmFsMUxpa2VNYXJjYT86IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93Q2xlYW5GaWx0ZXJzOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93RmlsdGVyczogYm9vbGVhbiA9IHRydWU7IC8vIHRvIHNob3cgb3IgaGlkZSBmaWx0ZXJzIHNlY3Rpb25cblxuICAgIHRhZ05hbWU6IHN0cmluZyA9ICdMaXNDMkltZ1R4dEN0YSc7XG5cbiAgICBzZWxlY3RlZEhvdGVsVHlwZTogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWREZXN0aW5hdGlvbjogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWRCcmFuZDogc3RyaW5nID0gJyc7XG5cbiAgICBob3RlbFR5cGVPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGRlc3RpbmF0aW9uT3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBicmFuZE9wdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmaWx0ZXJMYWJlbFRvU2x1ZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgZGVzdGluYXRpb25MYWJlbFRvU2x1ZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgYnJhbmRMYWJlbFRvU2x1ZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICAgIHByaXZhdGUgcm91dGVyU3ViPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgcGVuZGluZ0Rlc3RpbmF0aW9uPzogc3RyaW5nO1xuICAgIHByaXZhdGUgbGFzdERlc3RpbmF0aW9uRnJvbVVybD86IHN0cmluZztcbiAgICBwcml2YXRlIGxhc3RCcmFuZEZyb21Vcmw/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBsYXN0SG90ZWxUeXBlRnJvbVVybD86IHN0cmluZztcbiAgICBwcml2YXRlIGlzU3luY2luZ0Zyb21VcmwgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgaGlzdG9yeVBhdGNoZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIG9yaWdpbmFsUHVzaFN0YXRlPzogdHlwZW9mIGhpc3RvcnkucHVzaFN0YXRlO1xuICAgIHByaXZhdGUgb3JpZ2luYWxSZXBsYWNlU3RhdGU/OiB0eXBlb2YgaGlzdG9yeS5yZXBsYWNlU3RhdGU7XG4gICAgcHJpdmF0ZSBwYXRjaGVkUHVzaFN0YXRlPzogdHlwZW9mIGhpc3RvcnkucHVzaFN0YXRlO1xuICAgIHByaXZhdGUgcGF0Y2hlZFJlcGxhY2VTdGF0ZT86IHR5cGVvZiBoaXN0b3J5LnJlcGxhY2VTdGF0ZTtcblxuICAgIC8vIEl0ZW1zIGZpbHRyYWRvcyBzaW4gbm9ybWFsaXphciAodXNhZG9zIHBhcmEgbMOzZ2ljYSlcbiAgICBwcml2YXRlIF9maWx0ZXJlZEl0ZW1zUmF3OiBCYWJ5bG9uR2xvYmFsSXRlbVtdID0gW107XG5cbiAgICBwcml2YXRlIGZpbmRBbmRTZWxlY3REZXN0aW5hdGlvbihkZXN0aW5hdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IGRlc3RpbmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpPy50cmltKCk7XG5cbiAgICAgICAgLy8gUHJpbWVybyBidXNjYXIgZW4gZWwgYXJyYXkgZGUgc3RyaW5ncyBkZSBkZXN0aW5vc1xuICAgICAgICBsZXQgZm91bmQgPSB0aGlzLmRlc3RpbmF0aW9uT3B0aW9ucz8uZmluZChcbiAgICAgICAgICAgIChkZXN0aW5hdGlvbikgPT5cbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi50b0xvd2VyQ2FzZSgpPy50cmltKCkgPT09IG5vcm1hbGl6ZWROYW1lXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSBmb3VuZDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2kgbm8gZW5jdWVudHJhIGVuIGRlc3RpbmF0aW9uT3B0aW9ucywgYnVzY2FyIGVuIGxvcyBpdGVtcyBwb3IgY291bnRyeVxuICAgICAgICBjb25zdCBpdGVtV2l0aENvdW50cnkgPSB0aGlzLml0ZW1zPy5maW5kKFxuICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uY291bnRyeT8udG9Mb3dlckNhc2UoKT8udHJpbSgpID09PSBub3JtYWxpemVkTmFtZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpdGVtV2l0aENvdW50cnkgJiYgaXRlbVdpdGhDb3VudHJ5LmNvdW50cnkpIHtcbiAgICAgICAgICAgIC8vIEZpbHRyYXIgZGlyZWN0YW1lbnRlIHBvciBjb3VudHJ5IGF1bnF1ZSBubyBleGlzdGEgZW4gZGVzdGluYXRpb25PcHRpb25zXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSBpdGVtV2l0aENvdW50cnkuY291bnRyeTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jRmlsdGVyc1RvVXJsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+ID0ge1xuICAgICAgICAgICAgZGVzdGluYXRpb25zOiB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gfHwgbnVsbCxcbiAgICAgICAgICAgIGJyYW5kOiB0aGlzLnNlbGVjdGVkQnJhbmQgfHwgbnVsbCxcbiAgICAgICAgICAgIGhvdGVsVHlwZTogdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSB8fCBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaXNTeW5jaW5nRnJvbVVybCA9IHRydWU7XG4gICAgICAgIHRoaXMubGFzdERlc3RpbmF0aW9uRnJvbVVybCA9IHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiB8fCB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubGFzdEJyYW5kRnJvbVVybCA9IHRoaXMuc2VsZWN0ZWRCcmFuZCB8fCB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubGFzdEhvdGVsVHlwZUZyb21VcmwgPSB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlIHx8IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldnVlbHZlIGVsIGxhYmVsIGRlbCBib3TDs24gZW4gbGEgcG9zaWNpw7NuIGluZGV4LCBidXNjYW5kbyBlbiBpdGVtLmJ1dHRvbnNbaW5kZXhdLmxhYmVsXG4gICAgICogeSBzaSBubyBleGlzdGUsIGVuIGl0ZW0ubXVsdGltZWRpYS5pbWFnZW5lc1swXS5idXR0b25zW2luZGV4XS5sYWJlbFxuICAgICAqL1xuICAgIGdldEJ1dHRvbkxhYmVsKGl0ZW06IEJhYnlsb25HbG9iYWxJdGVtLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGl0ZW0/LmJ1dHRvbnM/LltpbmRleF0/LmxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5idXR0b25zW2luZGV4XS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbT8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXT8uYnV0dG9ucz8uW2luZGV4XT8ubGFiZWw7XG4gICAgfVxuXG4gICAgZ2V0QnV0dG9uVXJsKGl0ZW06IEJhYnlsb25HbG9iYWxJdGVtLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNZW51VXJsKFxuICAgICAgICAgICAgICAgIGl0ZW0/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0/LmJ1dHRvbnM/LltpbmRleF1cbiAgICAgICAgICAgICkgfHwgdGhpcy5idWlsZE1lbnVVcmwoaXRlbT8uYnV0dG9ucz8uW2luZGV4XSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRCdXR0b25MaW5rVHlwZShpdGVtOiBCYWJ5bG9uR2xvYmFsSXRlbSwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpdGVtPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdPy5idXR0b25zPy5baW5kZXhdPy5saW5rVHlwZSB8fFxuICAgICAgICAgICAgaXRlbT8uYnV0dG9ucz8uW2luZGV4XT8ubGlua1R5cGVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRMaW5rTGFiZWwoaXRlbTogQmFieWxvbkdsb2JhbEl0ZW0sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXRlbT8ubGlua3M/LltpbmRleF0/LmxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5saW5rc1tpbmRleF0ubGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0/LmxpbmtzPy5baW5kZXhdPy5sYWJlbDtcbiAgICB9XG5cbiAgICBnZXRMaW5rVXJsKGl0ZW06IEJhYnlsb25HbG9iYWxJdGVtLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNZW51VXJsKFxuICAgICAgICAgICAgICAgIGl0ZW0/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0/LmxpbmtzPy5baW5kZXhdXG4gICAgICAgICAgICApIHx8IHRoaXMuYnVpbGRNZW51VXJsKGl0ZW0/LmxpbmtzPy5baW5kZXhdKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldExpbmtMaW5rVHlwZShpdGVtOiBCYWJ5bG9uR2xvYmFsSXRlbSwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpdGVtPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdPy5saW5rcz8uW2luZGV4XT8ubGlua1R5cGUgfHxcbiAgICAgICAgICAgIGl0ZW0/LmxpbmtzPy5baW5kZXhdPy5saW5rVHlwZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGJ1aWxkTWVudVVybChpdGVtOiBCYWJ5bG9uQnV0dG9uSSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXRlbT8udXJsKSByZXR1cm4gJyc7XG5cbiAgICAgICAgY29uc3QgYmFzZVVybCA9IGl0ZW0udXJsLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICAgICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IChpdGVtLnZhcnMgPz8gJycpLnRvU3RyaW5nKCk/LnRyaW0oKTtcblxuICAgICAgICBpZiAoIWRlc3RpbmF0aW9uKSByZXR1cm4gYmFzZVVybDtcblxuICAgICAgICBjb25zdCBzbHVnID0gVXRpbHMudG9TbHVnKGRlc3RpbmF0aW9uKTtcbiAgICAgICAgaWYgKCFzbHVnKSByZXR1cm4gYmFzZVVybDtcblxuICAgICAgICByZXR1cm4gYCR7YmFzZVVybH0/ZGVzdGluYXRpb25zPSR7ZGVzdGluYXRpb259YDtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWydpdGVtcyddKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gYnVpbGRGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPz8gW10sXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsMUxpa2VNYXJjYSA/PyBmYWxzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuaG90ZWxUeXBlT3B0aW9ucyA9IG9wdHMuaG90ZWxUeXBlT3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb25PcHRpb25zID0gb3B0cy5kZXN0aW5hdGlvbk9wdGlvbnM7XG5cbiAgICAgICAgICAgIC8vIFJlbGxlbmFyIGJyYW5kT3B0aW9ucyB1c2FuZG8gZ2V0SXRlbUJyYW5kIHBhcmEgY29oZXJlbmNpYVxuICAgICAgICAgICAgY29uc3QgYnJhbmRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICAodGhpcy5pdGVtcyA/PyBbXSkuZm9yRWFjaCgoaXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBicmFuZCA9IGdldEl0ZW1CcmFuZChcbiAgICAgICAgICAgICAgICAgICAgaXQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbDFMaWtlTWFyY2EgPz8gZmFsc2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChicmFuZCkgYnJhbmRzLmFkZChicmFuZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYnJhbmRPcHRpb25zID0gQXJyYXkuZnJvbShicmFuZHMpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJMYWJlbFRvU2x1ZyA9IG9wdHMuZmlsdGVyTGFiZWxUb1NsdWc7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTGFiZWxUb1NsdWcgPSBvcHRzLmRlc3RpbmF0aW9uTGFiZWxUb1NsdWc7XG4gICAgICAgICAgICB0aGlzLmJyYW5kTGFiZWxUb1NsdWcgPSBvcHRzLmJyYW5kTGFiZWxUb1NsdWc7XG5cbiAgICAgICAgICAgIC8vIFNpbmNyb25pemFyIGNvbiBsb3MgZmlsdHJvcyBkZSBsYSBVUkwgYWN0dWFsXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICAgICAgY29uc3QgZGVzdGluYXRpb25zUGFyYW0gPVxuICAgICAgICAgICAgICAgIHBhcnNlZFVybC5xdWVyeVBhcmFtTWFwLmdldCgnZGVzdGluYXRpb25zJyk7XG4gICAgICAgICAgICBjb25zdCBicmFuZFBhcmFtID0gcGFyc2VkVXJsLnF1ZXJ5UGFyYW1NYXAuZ2V0KCdicmFuZCcpO1xuICAgICAgICAgICAgY29uc3QgaG90ZWxUeXBlUGFyYW0gPSBwYXJzZWRVcmwucXVlcnlQYXJhbU1hcC5nZXQoJ2hvdGVsVHlwZScpO1xuXG4gICAgICAgICAgICBpZiAoZGVzdGluYXRpb25zUGFyYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdEZXN0aW5hdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIGRlY29kZVVSSUNvbXBvbmVudChkZXN0aW5hdGlvbnNQYXJhbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maW5kQW5kU2VsZWN0RGVzdGluYXRpb24odGhpcy5wZW5kaW5nRGVzdGluYXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdEZXN0aW5hdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGJyYW5kUGFyYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSBkZWNvZGVVUklDb21wb25lbnQoYnJhbmRQYXJhbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCcmFuZCA9ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaG90ZWxUeXBlUGFyYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlID0gZGVjb2RlVVJJQ29tcG9uZW50KGhvdGVsVHlwZVBhcmFtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSA9ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBY3R1YWxpemFyIGl0ZW1zIGZpbHRyYWRvc1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gQXBsaWNhciBlbCBkZXN0aW5vIGRlIGxhIFVSTCBhY3R1YWwgKHRhbWJpw6luIGN1YnJlIGVsIHByaW1lciByZW5kZXJpemFkbylcbiAgICAgICAgdGhpcy5hcHBseURlc3RpbmF0aW9uc0Zyb21VcmwodGhpcy5yb3V0ZXIudXJsKTtcblxuICAgICAgICAvLyBSZWFjY2lvbmFyIGEgY3VhbHF1aWVyIG5hdmVnYWNpw7NuIChpbmNsdWlkYSBsYSBtaXNtYSBydXRhIGNhbWJpYW5kbyBzb2xvIGxhIHF1ZXJ5KVxuICAgICAgICB0aGlzLnJvdXRlclN1YiA9IHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RGVzdGluYXRpb25zRnJvbVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRGV0ZWN0YXIgY2FtYmlvcyBkZSBVUkwgaGVjaG9zIGZ1ZXJhIGRlbCBSb3V0ZXIgZGUgQW5ndWxhciAoU1NSLXNhZmUpXG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLmhhbmRsZUV4dGVybmFsVXJsQ2hhbmdlKTtcbiAgICAgICAgICAgIHRoaXMucGF0Y2hIaXN0b3J5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUV4dGVybmFsVXJsQ2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh1cmwpO1xuICAgICAgICBjb25zdCBjdXJyZW50RGVzdGluYXRpb24gPVxuICAgICAgICAgICAgcGFyc2VkVXJsLnF1ZXJ5UGFyYW1NYXAuZ2V0KCdkZXN0aW5hdGlvbnMnKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRCcmFuZCA9XG4gICAgICAgICAgICBwYXJzZWRVcmwucXVlcnlQYXJhbU1hcC5nZXQoJ2JyYW5kJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBjdXJyZW50SG90ZWxUeXBlID1cbiAgICAgICAgICAgIHBhcnNlZFVybC5xdWVyeVBhcmFtTWFwLmdldCgnaG90ZWxUeXBlJykgPz8gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIEV2aXRhciBwcm9jZXNhciBjYW1iaW9zIGRlIFVSTCBhamVub3MgYWwgZmlsdHJvIChtb2RhbGVzLCBhbmFseXRpY3MsIGV0Yy4pXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGN1cnJlbnREZXN0aW5hdGlvbiA9PT0gdGhpcy5sYXN0RGVzdGluYXRpb25Gcm9tVXJsICYmXG4gICAgICAgICAgICBjdXJyZW50QnJhbmQgPT09IHRoaXMubGFzdEJyYW5kRnJvbVVybCAmJlxuICAgICAgICAgICAgY3VycmVudEhvdGVsVHlwZSA9PT0gdGhpcy5sYXN0SG90ZWxUeXBlRnJvbVVybFxuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5hcHBseURlc3RpbmF0aW9uc0Zyb21VcmwodXJsKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBwYXRjaEhpc3RvcnkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhpc3RvcnlQYXRjaGVkKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5vcmlnaW5hbFB1c2hTdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlcGxhY2VTdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZTtcblxuICAgICAgICB0aGlzLnBhdGNoZWRQdXNoU3RhdGUgPSAoXG4gICAgICAgICAgICBkYXRhOiB1bmtub3duLFxuICAgICAgICAgICAgdW51c2VkOiBzdHJpbmcsXG4gICAgICAgICAgICB1cmw/OiBzdHJpbmcgfCBVUkwgfCBudWxsXG4gICAgICAgICk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFB1c2hTdGF0ZT8uY2FsbCh3aW5kb3cuaGlzdG9yeSwgZGF0YSwgdW51c2VkLCB1cmwpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFeHRlcm5hbFVybENoYW5nZSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBhdGNoZWRSZXBsYWNlU3RhdGUgPSAoXG4gICAgICAgICAgICBkYXRhOiB1bmtub3duLFxuICAgICAgICAgICAgdW51c2VkOiBzdHJpbmcsXG4gICAgICAgICAgICB1cmw/OiBzdHJpbmcgfCBVUkwgfCBudWxsXG4gICAgICAgICk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFJlcGxhY2VTdGF0ZT8uY2FsbCh3aW5kb3cuaGlzdG9yeSwgZGF0YSwgdW51c2VkLCB1cmwpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFeHRlcm5hbFVybENoYW5nZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSA9IHRoaXMucGF0Y2hlZFB1c2hTdGF0ZTtcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlID0gdGhpcy5wYXRjaGVkUmVwbGFjZVN0YXRlO1xuICAgICAgICB0aGlzLmhpc3RvcnlQYXRjaGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc3RvcmVIaXN0b3J5KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGlzdG9yeVBhdGNoZWQpIHJldHVybjtcblxuICAgICAgICAvLyBTb2xvIHJlc3RhdXJhciBzaSBsYSBmdW5jacOzbiBhY3R1YWwgc2lndWUgc2llbmRvIGxhIHF1ZSBpbnN0YWxhbW9zXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGF0Y2hlZFB1c2hTdGF0ZSAmJlxuICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlID09PSB0aGlzLnBhdGNoZWRQdXNoU3RhdGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgPSB0aGlzLm9yaWdpbmFsUHVzaFN0YXRlITtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBhdGNoZWRSZXBsYWNlU3RhdGUgJiZcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSA9PT0gdGhpcy5wYXRjaGVkUmVwbGFjZVN0YXRlXG4gICAgICAgICkge1xuICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlID0gdGhpcy5vcmlnaW5hbFJlcGxhY2VTdGF0ZSE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhpc3RvcnlQYXRjaGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseURlc3RpbmF0aW9uc0Zyb21VcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodXJsKTtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25zUGFyYW0gPVxuICAgICAgICAgICAgcGFyc2VkVXJsLnF1ZXJ5UGFyYW1NYXAuZ2V0KCdkZXN0aW5hdGlvbnMnKTtcbiAgICAgICAgY29uc3QgYnJhbmRQYXJhbSA9IHBhcnNlZFVybC5xdWVyeVBhcmFtTWFwLmdldCgnYnJhbmQnKTtcbiAgICAgICAgY29uc3QgaG90ZWxUeXBlUGFyYW0gPSBwYXJzZWRVcmwucXVlcnlQYXJhbU1hcC5nZXQoJ2hvdGVsVHlwZScpO1xuXG4gICAgICAgIC8vIEFjdHVhbGl6YXIgbGFzdCogcGFyYSBxdWUgaGFuZGxlRXh0ZXJuYWxVcmxDaGFuZ2Ugbm8gcmUtcHJvY2VzZVxuICAgICAgICB0aGlzLmxhc3REZXN0aW5hdGlvbkZyb21VcmwgPSBkZXN0aW5hdGlvbnNQYXJhbVxuICAgICAgICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQoZGVzdGluYXRpb25zUGFyYW0pXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5sYXN0QnJhbmRGcm9tVXJsID0gYnJhbmRQYXJhbVxuICAgICAgICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQoYnJhbmRQYXJhbSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhc3RIb3RlbFR5cGVGcm9tVXJsID0gaG90ZWxUeXBlUGFyYW1cbiAgICAgICAgICAgID8gZGVjb2RlVVJJQ29tcG9uZW50KGhvdGVsVHlwZVBhcmFtKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gU2kgZWwgY2FtYmlvIGRlIFVSTCBsbyBvcmlnaW7DsyBlbCBwcm9waW8gY29tcG9uZW50ZSAoc3luY0ZpbHRlcnNUb1VybCksXG4gICAgICAgIC8vIGVsIGNvbXBvbmVudGUgeWEgdGllbmUgbG9zIHZhbG9yZXMgY29ycmVjdG9zIOKGkiBubyByZS1oaWRyYXRhci5cbiAgICAgICAgY29uc3Qgc3luY2luZyA9IHRoaXMuaXNTeW5jaW5nRnJvbVVybDtcbiAgICAgICAgdGhpcy5pc1N5bmNpbmdGcm9tVXJsID0gZmFsc2U7XG4gICAgICAgIGlmIChzeW5jaW5nKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uc1BhcmFtKSB7XG4gICAgICAgICAgICBjb25zdCBkZWNvZGVkRGVzdGluYXRpb24gPSBkZWNvZGVVUklDb21wb25lbnQoZGVzdGluYXRpb25zUGFyYW0pO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nRGVzdGluYXRpb24gPSBkZWNvZGVkRGVzdGluYXRpb247XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRlc3RpbmF0aW9uT3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maW5kQW5kU2VsZWN0RGVzdGluYXRpb24oZGVjb2RlZERlc3RpbmF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0Rlc3RpbmF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEJyYW5kID0gYnJhbmRQYXJhbVxuICAgICAgICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQoYnJhbmRQYXJhbSlcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgPSBob3RlbFR5cGVQYXJhbVxuICAgICAgICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQoaG90ZWxUeXBlUGFyYW0pXG4gICAgICAgICAgICA6ICcnO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3V0ZXJTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAncG9wc3RhdGUnLFxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXh0ZXJuYWxVcmxDaGFuZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVIaXN0b3J5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXZ1ZWx2ZSB1biBhcnJheSBub3JtYWxpemFkbyBkZSBCYWJ5bG9uR2xvYmFsSXRlbVxuICAgICAqL1xuICAgIGdldCBub3JtYWxpemVkSXRlbXMoKTogQmFieWxvbkdsb2JhbEl0ZW1bXSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVHbG9iYWxJdGVtcyh0aGlzLml0ZW1zKTtcbiAgICB9XG5cbiAgICBnZXRGaXJzdEltYWdlQnlUYWcodGFnTmFtZTogc3RyaW5nLCBpbWFnZW5lczogQmFieWxvbkltYWdlSVtdKSB7XG4gICAgICAgIHJldHVybiBnZXRGaXJzdEltYWdlQnlUYWdGcm9tSW1hZ2VzKGltYWdlbmVzLCB0YWdOYW1lKTtcbiAgICB9XG5cbiAgICBnZXQgZmlsdGVyZWRJdGVtcygpIHtcbiAgICAgICAgLy8gRGV2b2x2ZXIgbG9zIGl0ZW1zIGZpbHRyYWRvcyBub3JtYWxpemFkb3NcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUdsb2JhbEl0ZW1zKHRoaXMuX2ZpbHRlcmVkSXRlbXNSYXcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRmlsdGVyZWRJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgbGV0IGl0ZW1zID0gZmlsdGVyZWRJdGVtcyh7XG4gICAgICAgICAgICBpdGVtczogdGhpcy5pdGVtcyA/PyBbXSxcbiAgICAgICAgICAgIHNlbGVjdGVkSG90ZWxUeXBlOiB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlLFxuICAgICAgICAgICAgc2VsZWN0ZWREZXN0aW5hdGlvbjogdGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uLFxuICAgICAgICAgICAgc2VsZWN0ZWRCcmFuZDogdGhpcy5zZWxlY3RlZEJyYW5kLFxuICAgICAgICAgICAgYWRkaXRpb25hbDFMaWtlTWFyY2E6IHRoaXMuYWRkaXRpb25hbDFMaWtlTWFyY2EgPz8gZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNpIGhheSBkZXN0aW5hdGlvblNlbGVjdGVkIHkgbm8gdGllbmUgcmVzdWx0YWRvcywgaW50ZW50YXIgZmlsdHJhciBwb3IgY291bnRyeVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uICYmIGl0ZW1zLmxlbmd0aCA9PT0gMCAmJiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG90ZWxUeXBlT2sgPVxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAoaXRlbSBhcyBhbnkpPy5ob3RlbHR5cGUgPT09IHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkZXN0aW5hdGlvbk9rID1cbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmNvdW50cnk/LnRvTG93ZXJDYXNlKCk/LnRyaW0oKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbi50b0xvd2VyQ2FzZSgpPy50cmltKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBicmFuZE9rID1cbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2VsZWN0ZWRCcmFuZCB8fFxuICAgICAgICAgICAgICAgICAgICBVdGlscy50b1NsdWcoXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRJdGVtQnJhbmQoaXRlbSwgdGhpcy5hZGRpdGlvbmFsMUxpa2VNYXJjYSA/PyBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgKSA9PT0gVXRpbHMudG9TbHVnKHRoaXMuc2VsZWN0ZWRCcmFuZCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaG90ZWxUeXBlT2sgJiYgZGVzdGluYXRpb25PayAmJiBicmFuZE9rO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zUmF3ID0gaXRlbXM7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGdldCBoYXNBY3RpdmVGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbixcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCcmFuZCxcbiAgICAgICAgXS5zb21lKCh2KSA9PiB2ICYmIHYgIT09ICcnKTtcbiAgICB9XG5cbiAgICBvbkhvdGVsVHlwZUNoYW5nZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgICAgIHRoaXMuc3luY0ZpbHRlcnNUb1VybCgpO1xuICAgIH1cblxuICAgIG9uRGVzdGluYXRpb25DaGFuZ2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgICAgIHRoaXMuc3luY0ZpbHRlcnNUb1VybCgpO1xuICAgIH1cblxuICAgIG9uQnJhbmRDaGFuZ2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgICAgIHRoaXMuc3luY0ZpbHRlcnNUb1VybCgpO1xuICAgIH1cblxuICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSAnJztcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJyYW5kID0gJyc7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgICAgICB0aGlzLnN5bmNGaWx0ZXJzVG9VcmwoKTtcbiAgICB9XG5cbiAgICB0cmFja0ZpbHRlcihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgICB0cmFja09wdGlvbihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgICB0cmFja09mZmVyKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBhZ2UtY29udGFpbmVyIGZpcnN0LW1vZHVsZSBvZmZlcnMtcGFnZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJiaWctd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcC1wYWdlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cImdsb2JhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcC1nbG9iYWwtaGVhZGVyIHZpc2libGVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0ZXh0cz8udGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cImdsb2JhbC1oZWFkZXItdGl0bGVcIj57eyB0ZXh0cz8udGl0bGUgfX08L2gxPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAodGV4dHM/LnN1YnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ2xvYmFsLWhlYWRlci1zdWJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0ZXh0cz8uc3VidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2ZmZXJzLWlucHV0c1wiICpuZ0lmPVwic2hvd0ZpbHRlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnbG9iYWwtaGVhZGVyLWZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tZmlsdGVycy0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQnJhbmQgZmlsdGVyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItZm9ybS1lbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1lbGVtZW50IHNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXAtaW5wdXQtZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodGV4dHM/Lm1hcmNhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZWxlbWVudC10ZXh0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRzPy5tYXJjYSA/PyAnbWFyY2EnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZWxlbWVudC1maWVsZCBqcy1maWx0ZXItb2ZmZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEJyYW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkJyYW5kQ2hhbmdlKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHRzPy5tYXJjYSA/PyAnbWFyY2EnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdCBvZiBicmFuZE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBzZXJ2aWNlcy0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItZm9ybS1lbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1lbGVtZW50IHNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXAtaW5wdXQtZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodGV4dHM/LmRlc3RpbmF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWVsZW1lbnQtdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0cz8uZGVzdGluYXRpb25zID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc3Rpbm9zJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWVsZW1lbnQtZmllbGQganMtZmlsdGVyLW9mZmVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWREZXN0aW5hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25EZXN0aW5hdGlvbkNoYW5nZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRzPy5kZXN0aW5hdGlvbnMgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc3Rpbm9zJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0IG9mIGRlc3RpbmF0aW9uT3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9wdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tZW5kIGZpbHRlcnMtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPHNlY3Rpb24gY2xhc3M9XCJwcm9tby1tb2R1bGUgb2ZmZXJzLXBhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYmlnLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXAtcHJvbW8tbW9kdWxlIG1vZHVsZS1zcGFjZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9tby1tb2R1bGUtY29udGVudFwiPlxuICAgICAgICAgICAgICAgIEBpZiAoZmlsdGVyZWRJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZmlsdGVyZWRJdGVtczsgdHJhY2sgdHJhY2tPZmZlcigkaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvbW8tbW9kdWxlLWVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcC1wcm9tby1lbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJnZXRCdXR0b25VcmwoaXRlbSwgMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtUeXBlXT1cImdldEJ1dHRvbkxpbmtUeXBlKGl0ZW0sIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvbW8tZWxlbWVudC1tZWRpYSBqcy1zZWN0aW9uLWFycm93cy16b25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaXJzdEltYWdlQnlUYWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8ubXVsdGltZWRpYT8uaW1hZ2VuZXMgPz8gW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgaW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWd1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvbW8tZWxlbWVudC1tZWRpYV9pbWcgcmVzcG9uc2l2ZS1yZXNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImltZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZz8uaW1nPy5hbHQgPz8gJ2l0ZW1JbWFnZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZpbGVuYW1lXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZz8uaW1nPy5hbHQgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRlbUZpbGVOYW1lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoJyArIGltZz8uaW1nPy5zcmMgKyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZpZ3VyZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9tby1lbGVtZW50LWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0/LnRleHRzPy5hZGRpdGlvbmFsMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9tby1lbGVtZW50LWluZm9fdGFnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LnRleHRzPy5hZGRpdGlvbmFsM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy50ZXh0cz8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8udGV4dHM/Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvbW8tZWxlbWVudC1pbmZvX3RpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8udGV4dHM/LnRpdGxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8udGV4dHM/Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbT8udGV4dHM/LmFkZGl0aW9uYWwyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb21vLWVsZW1lbnQtaW5mb19zdWJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LnRleHRzPy5hZGRpdGlvbmFsMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvbW8tZWxlbWVudC1mb290XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvbW8tZWxlbWVudC1wcmljZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtPy5wcmljZSB8fCBpdGVtPy5kaXNjb3VudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8udGV4dHM/LmFkZGl0aW9uYWwxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb21vLWVsZW1lbnQtcHJpY2Vfc2luY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8udGV4dHM/LmFkZGl0aW9uYWwxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbT8ucHJpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvbW8tZWxlbWVudC1wcmljZV9udW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtPy5wcmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08c21hbGw+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jdXJyZW5jeSB8fCAnRVVSJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGN1cnJlbmN5U3ltYm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmRpc2NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb21vLWVsZW1lbnQtcHJpY2VfbnVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbT8uZGlzY291bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PHNtYWxsPiAlPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb21vLWVsZW1lbnQtYnRuc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0QnV0dG9uTGFiZWwoaXRlbSwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb3JwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRCdXR0b25VcmwoaXRlbSwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QnV0dG9uTGlua1R5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1jb3JwLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEJ1dHRvbkxhYmVsKGl0ZW0sIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0QnV0dG9uTGFiZWwoaXRlbSwgMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImdldEJ1dHRvblVybChpdGVtLCAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlua1R5cGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QnV0dG9uTGlua1R5cGUoaXRlbSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1saW5rZXIgdG9yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tbGlua2VyLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEJ1dHRvbkxhYmVsKGl0ZW0sIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChnZXRMaW5rTGFiZWwoaXRlbSwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImdldExpbmtVcmwoaXRlbSwgMClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtUeXBlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExpbmtMaW5rVHlwZShpdGVtLCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWxpbmtlciB0b3JpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1saW5rZXItdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TGlua0xhYmVsKGl0ZW0sIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9mZmVycy1tZXNzYWdlXCIgW2NsYXNzLnNob3ddPVwiZmlsdGVyZWRJdGVtcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXAtbWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHRleHRzPy5ub3RGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2UtdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0ZXh0cz8ubm90Rm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVtcC10cmFzaFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
|
package/fesm2022/ctt-babylon.mjs
CHANGED
|
@@ -29593,14 +29593,14 @@ class LisC2ImgTxtCtaComponent {
|
|
|
29593
29593
|
if (!isPlatformBrowser(this.platformId))
|
|
29594
29594
|
return;
|
|
29595
29595
|
const url = window.location.pathname + window.location.search;
|
|
29596
|
-
const
|
|
29597
|
-
|
|
29598
|
-
|
|
29599
|
-
const
|
|
29600
|
-
? decodeURIComponent(param)
|
|
29601
|
-
: undefined;
|
|
29596
|
+
const parsedUrl = this.router.parseUrl(url);
|
|
29597
|
+
const currentDestination = parsedUrl.queryParamMap.get('destinations') ?? undefined;
|
|
29598
|
+
const currentBrand = parsedUrl.queryParamMap.get('brand') ?? undefined;
|
|
29599
|
+
const currentHotelType = parsedUrl.queryParamMap.get('hotelType') ?? undefined;
|
|
29602
29600
|
// Evitar procesar cambios de URL ajenos al filtro (modales, analytics, etc.)
|
|
29603
|
-
if (currentDestination === this.lastDestinationFromUrl
|
|
29601
|
+
if (currentDestination === this.lastDestinationFromUrl &&
|
|
29602
|
+
currentBrand === this.lastBrandFromUrl &&
|
|
29603
|
+
currentHotelType === this.lastHotelTypeFromUrl)
|
|
29604
29604
|
return;
|
|
29605
29605
|
this.applyDestinationsFromUrl(url);
|
|
29606
29606
|
};
|
|
@@ -29622,6 +29622,21 @@ class LisC2ImgTxtCtaComponent {
|
|
|
29622
29622
|
this.updateFilteredItems();
|
|
29623
29623
|
}
|
|
29624
29624
|
}
|
|
29625
|
+
syncFiltersToUrl() {
|
|
29626
|
+
const params = {
|
|
29627
|
+
destinations: this.selectedDestination || null,
|
|
29628
|
+
brand: this.selectedBrand || null,
|
|
29629
|
+
hotelType: this.selectedHotelType || null,
|
|
29630
|
+
};
|
|
29631
|
+
this.isSyncingFromUrl = true;
|
|
29632
|
+
this.lastDestinationFromUrl = this.selectedDestination || undefined;
|
|
29633
|
+
this.lastBrandFromUrl = this.selectedBrand || undefined;
|
|
29634
|
+
this.lastHotelTypeFromUrl = this.selectedHotelType || undefined;
|
|
29635
|
+
this.router.navigate([], {
|
|
29636
|
+
queryParams: params,
|
|
29637
|
+
replaceUrl: true,
|
|
29638
|
+
});
|
|
29639
|
+
}
|
|
29625
29640
|
/**
|
|
29626
29641
|
* Devuelve el label del botón en la posición index, buscando en item.buttons[index].label
|
|
29627
29642
|
* y si no existe, en item.multimedia.imagenes[0].buttons[index].label
|
|
@@ -29680,21 +29695,32 @@ class LisC2ImgTxtCtaComponent {
|
|
|
29680
29695
|
this.filterLabelToSlug = opts.filterLabelToSlug;
|
|
29681
29696
|
this.destinationLabelToSlug = opts.destinationLabelToSlug;
|
|
29682
29697
|
this.brandLabelToSlug = opts.brandLabelToSlug;
|
|
29683
|
-
// Sincronizar con
|
|
29684
|
-
const
|
|
29685
|
-
|
|
29686
|
-
|
|
29698
|
+
// Sincronizar con los filtros de la URL actual
|
|
29699
|
+
const parsedUrl = this.router.parseUrl(this.router.url);
|
|
29700
|
+
const destinationsParam = parsedUrl.queryParamMap.get('destinations');
|
|
29701
|
+
const brandParam = parsedUrl.queryParamMap.get('brand');
|
|
29702
|
+
const hotelTypeParam = parsedUrl.queryParamMap.get('hotelType');
|
|
29687
29703
|
if (destinationsParam) {
|
|
29688
|
-
this.pendingDestination =
|
|
29704
|
+
this.pendingDestination =
|
|
29705
|
+
decodeURIComponent(destinationsParam);
|
|
29689
29706
|
this.findAndSelectDestination(this.pendingDestination);
|
|
29690
29707
|
}
|
|
29691
29708
|
else {
|
|
29692
|
-
// No hay filtro en la URL → resetear los filtros
|
|
29693
29709
|
this.pendingDestination = undefined;
|
|
29694
|
-
this.selectedHotelType = '';
|
|
29695
29710
|
this.selectedDestination = '';
|
|
29711
|
+
}
|
|
29712
|
+
if (brandParam) {
|
|
29713
|
+
this.selectedBrand = decodeURIComponent(brandParam);
|
|
29714
|
+
}
|
|
29715
|
+
else {
|
|
29696
29716
|
this.selectedBrand = '';
|
|
29697
29717
|
}
|
|
29718
|
+
if (hotelTypeParam) {
|
|
29719
|
+
this.selectedHotelType = decodeURIComponent(hotelTypeParam);
|
|
29720
|
+
}
|
|
29721
|
+
else {
|
|
29722
|
+
this.selectedHotelType = '';
|
|
29723
|
+
}
|
|
29698
29724
|
// Actualizar items filtrados
|
|
29699
29725
|
this.updateFilteredItems();
|
|
29700
29726
|
}
|
|
@@ -29746,32 +29772,46 @@ class LisC2ImgTxtCtaComponent {
|
|
|
29746
29772
|
this.historyPatched = false;
|
|
29747
29773
|
}
|
|
29748
29774
|
applyDestinationsFromUrl(url) {
|
|
29749
|
-
const
|
|
29750
|
-
|
|
29751
|
-
|
|
29775
|
+
const parsedUrl = this.router.parseUrl(url);
|
|
29776
|
+
const destinationsParam = parsedUrl.queryParamMap.get('destinations');
|
|
29777
|
+
const brandParam = parsedUrl.queryParamMap.get('brand');
|
|
29778
|
+
const hotelTypeParam = parsedUrl.queryParamMap.get('hotelType');
|
|
29779
|
+
// Actualizar last* para que handleExternalUrlChange no re-procese
|
|
29752
29780
|
this.lastDestinationFromUrl = destinationsParam
|
|
29753
29781
|
? decodeURIComponent(destinationsParam)
|
|
29754
29782
|
: undefined;
|
|
29755
|
-
|
|
29756
|
-
|
|
29783
|
+
this.lastBrandFromUrl = brandParam
|
|
29784
|
+
? decodeURIComponent(brandParam)
|
|
29785
|
+
: undefined;
|
|
29786
|
+
this.lastHotelTypeFromUrl = hotelTypeParam
|
|
29787
|
+
? decodeURIComponent(hotelTypeParam)
|
|
29788
|
+
: undefined;
|
|
29789
|
+
// Si el cambio de URL lo originó el propio componente (syncFiltersToUrl),
|
|
29790
|
+
// el componente ya tiene los valores correctos → no re-hidratar.
|
|
29757
29791
|
const syncing = this.isSyncingFromUrl;
|
|
29758
29792
|
this.isSyncingFromUrl = false;
|
|
29793
|
+
if (syncing)
|
|
29794
|
+
return;
|
|
29759
29795
|
if (destinationsParam) {
|
|
29760
29796
|
const decodedDestination = decodeURIComponent(destinationsParam);
|
|
29761
29797
|
this.pendingDestination = decodedDestination;
|
|
29762
|
-
// Si ya tenemos destinationOptions, buscar y seleccionar
|
|
29763
29798
|
if (this.destinationOptions?.length) {
|
|
29764
29799
|
this.findAndSelectDestination(decodedDestination);
|
|
29765
29800
|
}
|
|
29766
29801
|
}
|
|
29767
29802
|
else {
|
|
29768
|
-
// El filtro ya no está en la URL → limpiar el destino seleccionado
|
|
29769
29803
|
this.pendingDestination = undefined;
|
|
29770
|
-
if (
|
|
29804
|
+
if (this.selectedDestination) {
|
|
29771
29805
|
this.selectedDestination = '';
|
|
29772
|
-
this.updateFilteredItems();
|
|
29773
29806
|
}
|
|
29774
29807
|
}
|
|
29808
|
+
this.selectedBrand = brandParam
|
|
29809
|
+
? decodeURIComponent(brandParam)
|
|
29810
|
+
: '';
|
|
29811
|
+
this.selectedHotelType = hotelTypeParam
|
|
29812
|
+
? decodeURIComponent(hotelTypeParam)
|
|
29813
|
+
: '';
|
|
29814
|
+
this.updateFilteredItems();
|
|
29775
29815
|
this.cdr.markForCheck();
|
|
29776
29816
|
}
|
|
29777
29817
|
ngOnDestroy() {
|
|
@@ -29828,32 +29868,24 @@ class LisC2ImgTxtCtaComponent {
|
|
|
29828
29868
|
onHotelTypeChange(value) {
|
|
29829
29869
|
this.selectedHotelType = value ?? '';
|
|
29830
29870
|
this.updateFilteredItems();
|
|
29871
|
+
this.syncFiltersToUrl();
|
|
29831
29872
|
}
|
|
29832
29873
|
onDestinationChange(value) {
|
|
29833
29874
|
this.selectedDestination = value ?? '';
|
|
29834
29875
|
this.updateFilteredItems();
|
|
29835
|
-
|
|
29836
|
-
const hasDestinationFilter = this.router
|
|
29837
|
-
.parseUrl(this.router.url)
|
|
29838
|
-
.queryParamMap.has('destinations');
|
|
29839
|
-
if (hasDestinationFilter) {
|
|
29840
|
-
this.isSyncingFromUrl = true;
|
|
29841
|
-
this.lastDestinationFromUrl = undefined;
|
|
29842
|
-
this.router.navigate([], {
|
|
29843
|
-
queryParams: { destinations: null },
|
|
29844
|
-
queryParamsHandling: 'merge',
|
|
29845
|
-
});
|
|
29846
|
-
}
|
|
29876
|
+
this.syncFiltersToUrl();
|
|
29847
29877
|
}
|
|
29848
29878
|
onBrandChange(value) {
|
|
29849
29879
|
this.selectedBrand = value ?? '';
|
|
29850
29880
|
this.updateFilteredItems();
|
|
29881
|
+
this.syncFiltersToUrl();
|
|
29851
29882
|
}
|
|
29852
29883
|
clearFilters() {
|
|
29853
29884
|
this.selectedHotelType = '';
|
|
29854
29885
|
this.selectedDestination = '';
|
|
29855
29886
|
this.selectedBrand = '';
|
|
29856
29887
|
this.updateFilteredItems();
|
|
29888
|
+
this.syncFiltersToUrl();
|
|
29857
29889
|
}
|
|
29858
29890
|
trackFilter(index) {
|
|
29859
29891
|
return index;
|