@sunbird-cb/cbp-ai 0.1.78 → 0.1.80
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/edit-cbp-plan/edit-cbp-plan.component.mjs +3 -2
- package/esm2022/lib/components/reject-request-form/reject-request-form.component.mjs +2 -2
- package/esm2022/lib/components/review-request/review-request.component.mjs +2 -2
- package/esm2022/lib/components/role-mapping-list/role-mapping-list.component.mjs +17 -5
- package/esm2022/lib/components/suggest-more-courses/suggest-more-courses.component.mjs +98 -97
- package/esm2022/lib/components/view-course-recommendation/view-course-recommendation.component.mjs +9 -4
- package/fesm2022/sunbird-cb-cbp-ai.mjs +127 -108
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/edit-cbp-plan/edit-cbp-plan.component.d.ts.map +1 -1
- package/lib/components/role-mapping-list/role-mapping-list.component.d.ts +1 -0
- package/lib/components/role-mapping-list/role-mapping-list.component.d.ts.map +1 -1
- package/lib/components/suggest-more-courses/suggest-more-courses.component.d.ts.map +1 -1
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.80.tgz +0 -0
|
@@ -341,61 +341,62 @@ export class SuggestMoreCoursesComponent {
|
|
|
341
341
|
addCourses() {
|
|
342
342
|
this.loading = true;
|
|
343
343
|
// First, get existing suggested courses to avoid overwriting
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
};
|
|
362
|
-
if (this.planData.fromMdoPortal) {
|
|
363
|
-
let reqBodyNew = {
|
|
364
|
-
"item_id": this.planData.id,
|
|
365
|
-
"request_id": this.planData.cbp_plan_id,
|
|
366
|
-
"identifiers": allIdentifiers
|
|
367
|
-
};
|
|
368
|
-
if (this.planData.cbp_plan_id) {
|
|
369
|
-
this.sharedService.addMDOCourse(reqBodyNew).subscribe({
|
|
370
|
-
next: (res) => {
|
|
371
|
-
// Success handling
|
|
372
|
-
console.log('Success:', res);
|
|
373
|
-
this.loading = false;
|
|
374
|
-
this.dialogRef.close('saved');
|
|
375
|
-
this.snackBar.open('Courses Updated Successfully', 'X', {
|
|
376
|
-
duration: 3000,
|
|
377
|
-
panelClass: ['snackbar-success']
|
|
378
|
-
});
|
|
379
|
-
//this.successRoleMapping.emit(this.roleMappingForm)
|
|
380
|
-
},
|
|
381
|
-
error: (error) => {
|
|
382
|
-
console.log('error', error);
|
|
383
|
-
this.dialogRef.close();
|
|
384
|
-
// Handle 409 Conflict here
|
|
385
|
-
// alert('Conflict detected: The resource already exists or action conflicts.');
|
|
386
|
-
//this.get
|
|
387
|
-
// Or you can set a UI error message variable
|
|
388
|
-
this.snackBar.open(error?.error?.detail, 'X', {
|
|
389
|
-
duration: 3000,
|
|
390
|
-
panelClass: ['snackbar-error']
|
|
391
|
-
});
|
|
392
|
-
this.loading = false;
|
|
393
|
-
//this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)
|
|
394
|
-
}
|
|
344
|
+
if (this.planData.fromMdoPortal) {
|
|
345
|
+
const allIdentifiers = [...new Set([...this.selectFilterCourses])];
|
|
346
|
+
let reqBodyNew = {
|
|
347
|
+
"item_id": this.planData.id,
|
|
348
|
+
"request_id": this.planData.cbp_plan_id,
|
|
349
|
+
"identifiers": allIdentifiers
|
|
350
|
+
};
|
|
351
|
+
if (this.planData.cbp_plan_id) {
|
|
352
|
+
this.sharedService.addMDOCourse(reqBodyNew).subscribe({
|
|
353
|
+
next: (res) => {
|
|
354
|
+
// Success handling
|
|
355
|
+
console.log('Success:', res);
|
|
356
|
+
this.loading = false;
|
|
357
|
+
this.dialogRef.close('saved');
|
|
358
|
+
this.snackBar.open('Courses Updated Successfully', 'X', {
|
|
359
|
+
duration: 3000,
|
|
360
|
+
panelClass: ['snackbar-success']
|
|
395
361
|
});
|
|
362
|
+
//this.successRoleMapping.emit(this.roleMappingForm)
|
|
363
|
+
},
|
|
364
|
+
error: (error) => {
|
|
365
|
+
console.log('error', error);
|
|
366
|
+
this.dialogRef.close();
|
|
367
|
+
// Handle 409 Conflict here
|
|
368
|
+
// alert('Conflict detected: The resource already exists or action conflicts.');
|
|
369
|
+
//this.get
|
|
370
|
+
// Or you can set a UI error message variable
|
|
371
|
+
this.snackBar.open(error?.error?.detail, 'X', {
|
|
372
|
+
duration: 3000,
|
|
373
|
+
panelClass: ['snackbar-error']
|
|
374
|
+
});
|
|
375
|
+
this.loading = false;
|
|
376
|
+
//this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)
|
|
396
377
|
}
|
|
397
|
-
}
|
|
398
|
-
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
this.sharedService.getSuggestedCourses(this.planData.role_mapping_id).subscribe({
|
|
383
|
+
next: (existingRes) => {
|
|
384
|
+
console.log('Existing suggested courses:', existingRes);
|
|
385
|
+
// Extract existing course identifiers
|
|
386
|
+
let existingIdentifiers = [];
|
|
387
|
+
if (existingRes && Array.isArray(existingRes)) {
|
|
388
|
+
existingIdentifiers = existingRes.map(course => course.identifier).filter(id => id);
|
|
389
|
+
}
|
|
390
|
+
// Merge existing identifiers with new selections (avoiding duplicates)
|
|
391
|
+
const allIdentifiers = [...new Set([...existingIdentifiers, ...this.selectFilterCourses])];
|
|
392
|
+
console.log('Existing identifiers:', existingIdentifiers);
|
|
393
|
+
console.log('New selections:', this.selectFilterCourses);
|
|
394
|
+
console.log('Combined identifiers:', allIdentifiers);
|
|
395
|
+
// Prepare request body with combined identifiers
|
|
396
|
+
let reqBody = {
|
|
397
|
+
"role_mapping_id": this.planData.role_mapping_id,
|
|
398
|
+
"course_identifiers": allIdentifiers
|
|
399
|
+
};
|
|
399
400
|
// Save the combined list
|
|
400
401
|
this.sharedService.saveSuggestedCourse(reqBody).subscribe({
|
|
401
402
|
next: (res) => {
|
|
@@ -418,50 +419,50 @@ export class SuggestMoreCoursesComponent {
|
|
|
418
419
|
this.loading = false;
|
|
419
420
|
}
|
|
420
421
|
});
|
|
422
|
+
},
|
|
423
|
+
error: (error) => {
|
|
424
|
+
console.log('Error fetching existing courses:', error);
|
|
425
|
+
// If fetching existing courses fails, proceed with just new selections
|
|
426
|
+
// This could happen if no courses exist yet (404) which is normal
|
|
427
|
+
if (error.status === 404) {
|
|
428
|
+
console.log('No existing suggested courses found, proceeding with new selections only');
|
|
429
|
+
let reqBody = {
|
|
430
|
+
"role_mapping_id": this.planData.role_mapping_id,
|
|
431
|
+
"course_identifiers": this.selectFilterCourses
|
|
432
|
+
};
|
|
433
|
+
this.sharedService.saveSuggestedCourse(reqBody).subscribe({
|
|
434
|
+
next: (res) => {
|
|
435
|
+
console.log('Success:', res);
|
|
436
|
+
this.loading = false;
|
|
437
|
+
this.dialogRef.close('saved');
|
|
438
|
+
this.snackBar.open('Courses Added Successfully', 'X', {
|
|
439
|
+
duration: 3000,
|
|
440
|
+
panelClass: ['snackbar-success']
|
|
441
|
+
});
|
|
442
|
+
},
|
|
443
|
+
error: (saveError) => {
|
|
444
|
+
console.log('Save error', saveError);
|
|
445
|
+
this.dialogRef.close();
|
|
446
|
+
this.snackBar.open(saveError?.error?.detail || 'Failed to save courses', 'X', {
|
|
447
|
+
duration: 3000,
|
|
448
|
+
panelClass: ['snackbar-error']
|
|
449
|
+
});
|
|
450
|
+
this.loading = false;
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
// Other errors - show error message
|
|
456
|
+
console.error('Unexpected error fetching existing courses:', error);
|
|
457
|
+
this.loading = false;
|
|
458
|
+
this.snackBar.open('Failed to load existing courses. Please try again.', 'X', {
|
|
459
|
+
duration: 3000,
|
|
460
|
+
panelClass: ['snackbar-error']
|
|
461
|
+
});
|
|
462
|
+
}
|
|
421
463
|
}
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
console.log('Error fetching existing courses:', error);
|
|
425
|
-
// If fetching existing courses fails, proceed with just new selections
|
|
426
|
-
// This could happen if no courses exist yet (404) which is normal
|
|
427
|
-
if (error.status === 404) {
|
|
428
|
-
console.log('No existing suggested courses found, proceeding with new selections only');
|
|
429
|
-
let reqBody = {
|
|
430
|
-
"role_mapping_id": this.planData.role_mapping_id,
|
|
431
|
-
"course_identifiers": this.selectFilterCourses
|
|
432
|
-
};
|
|
433
|
-
this.sharedService.saveSuggestedCourse(reqBody).subscribe({
|
|
434
|
-
next: (res) => {
|
|
435
|
-
console.log('Success:', res);
|
|
436
|
-
this.loading = false;
|
|
437
|
-
this.dialogRef.close('saved');
|
|
438
|
-
this.snackBar.open('Courses Added Successfully', 'X', {
|
|
439
|
-
duration: 3000,
|
|
440
|
-
panelClass: ['snackbar-success']
|
|
441
|
-
});
|
|
442
|
-
},
|
|
443
|
-
error: (saveError) => {
|
|
444
|
-
console.log('Save error', saveError);
|
|
445
|
-
this.dialogRef.close();
|
|
446
|
-
this.snackBar.open(saveError?.error?.detail || 'Failed to save courses', 'X', {
|
|
447
|
-
duration: 3000,
|
|
448
|
-
panelClass: ['snackbar-error']
|
|
449
|
-
});
|
|
450
|
-
this.loading = false;
|
|
451
|
-
}
|
|
452
|
-
});
|
|
453
|
-
}
|
|
454
|
-
else {
|
|
455
|
-
// Other errors - show error message
|
|
456
|
-
console.error('Unexpected error fetching existing courses:', error);
|
|
457
|
-
this.loading = false;
|
|
458
|
-
this.snackBar.open('Failed to load existing courses. Please try again.', 'X', {
|
|
459
|
-
duration: 3000,
|
|
460
|
-
panelClass: ['snackbar-error']
|
|
461
|
-
});
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
});
|
|
464
|
+
});
|
|
465
|
+
}
|
|
465
466
|
}
|
|
466
467
|
selectAllCourses(event) {
|
|
467
468
|
if (event.checked) {
|
|
@@ -668,4 +669,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
668
669
|
type: Inject,
|
|
669
670
|
args: [MAT_DIALOG_DATA]
|
|
670
671
|
}] }, { type: i2.FormBuilder }, { type: i3.SharedService }, { type: i4.MatSnackBar }]; } });
|
|
671
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VnZ2VzdC1tb3JlLWNvdXJzZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVN6RSxNQUFNLE9BQU8sMkJBQTJCO0lBb0N0QyxZQUNTLFNBQW9ELEVBQzNCLElBQVMsRUFDakMsRUFBZSxFQUNoQixhQUE0QixFQUM1QixRQUFxQjtRQUpyQixjQUFTLEdBQVQsU0FBUyxDQUEyQztRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQXhDOUIsZUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUNmLHFCQUFnQixHQUFRLEVBQUUsQ0FBQTtRQUMxQixpQkFBWSxHQUFRLEVBQUUsQ0FBQTtRQUN0Qix3QkFBbUIsR0FBUSxFQUFFLENBQUE7UUFDN0IsYUFBUSxHQUFRLEVBQUUsQ0FBQTtRQUNsQixZQUFPLEdBQUcsS0FBSyxDQUFBO1FBRWYsd0JBQXdCO1FBQ3hCLGdCQUFXLEdBQUcsQ0FBQyxDQUFBO1FBQ2YsYUFBUSxHQUFHLEVB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bXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc3VnZ2VzdC1tb3JlLWNvdXJzZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VnZ2VzdC1tb3JlLWNvdXJzZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdWdnZXN0LW1vcmUtY291cnNlcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFN1Z2dlc3RNb3JlQ291cnNlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHNlYXJjaFRleHQgPSAnJ1xuICBzdWdnZXN0ZWRDb3Vyc2VzOiBhbnkgPSBbXVxuICBvcmlnaW5hbERhdGE6IGFueSA9IFtdXG4gIHNlbGVjdEZpbHRlckNvdXJzZXM6IGFueSA9IFtdXG4gIHBsYW5EYXRhOiBhbnkgPSB7fVxuICBsb2FkaW5nID0gZmFsc2VcblxuICAvLyBQYWdpbmF0aW9uIHByb3BlcnRpZXNcbiAgY3VycmVudFBhZ2UgPSAwXG4gIHBhZ2VTaXplID0gMTJcbiAgdG90YWxDb3VudCA9IDBcbiAgdG90YWxQYWdlcyA9IDBcbiAgZmlsdGVyRm9ybSE6IEZvcm1Hcm91cDtcbiAgY29tcGV0ZW5jaWVzVHlwZSA9IFsnQWxsJywgJ0JlaGF2aW91cmFsJywgJ0Z1bmN0aW9uYWwnLCAnRG9tYWluJ11cbiAgcmF0aW5ncyA9IFsnNC41IGFuZCBhYm92ZScsICc0LjAgYW5kIGFib3ZlJywgJzMuNSBhbmQgYWJvdmUnLCAnMi41IGFuZCBhYm92ZScsICcxIGFuZCBhYm92ZSddO1xuICBsYW5ndWFnZXMgPSBbJ0VuZ2xpc2gnLCAnSGluZGknLCAnVGFtaWwnLCAnS2FubmFkYScsICdUZWx1Z3UnLCAnTWFsYXlhbGFtJywgJ0Fzc2FtZXNlJywgJ0JlbmdhbGknLCAnR3VqYXJhdGknLCAnTWFyYXRoaScsICdPZGlhJywgJ1B1bmphYmknLCAnS29ua2FuaScsICdCb2RvJywgJ0RvZ3JpJywgJ0thc2htaXJpJywgJ01haXRoaWxpJywgJ01hbmlwdXJpJywgJ05lcGFsaScsICdTYW5za3JpdCcsICdTYW50YWxpJywgJ1NpbmRoaScsICdVcmR1J107XG4gIGR1cmF0aW9ucyA9IFtcbiAgICB7IGxhYmVsOiAnPCAxIEhvdXInLCB2YWx1ZTogJzM2MDAnIH0sXG4gICAgeyBsYWJlbDogJzEtNSBIb3VycycsIHZhbHVlOiAnNDM3NicgfSxcbiAgICB7IGxhYmVsOiAnNSsgSG91cnMnLCB2YWx1ZTogJzE4MDAwJyB9XG4gIF07XG4gIHByb3ZpZGVycyA9IFtdO1xuICBmaWx0ZXJlZENvbXBldGVuY3kgPSBbLi4udGhpcy5jb21wZXRlbmNpZXNUeXBlXTtcbiAgZmlsdGVyZWRSYXRpbmdzID0gWy4uLnRoaXMucmF0aW5nc107XG4gIGZpbHRlcmVkTGFuZ3VhZ2VzID0gWy4uLnRoaXMubGFuZ3VhZ2VzXTtcbiAgZmlsdGVyZWREdXJhdGlvbnMgPSBbLi4udGhpcy5kdXJhdGlvbnNdO1xuICBmaWx0ZXJlZFByb3ZpZGVycyA9IFsuLi50aGlzLnByb3ZpZGVyc107XG4gIGZ1bGxDb3Vyc2VMaXN0ID0gW11cbiAgLy8gU2VsZWN0ZWQgZmlsdGVyc1xuICBzZWxlY3RlZENvbXBldGVuY3kgPSAnQWxsJztcbiAgc2VsZWN0ZWRSYXRpbmc6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZExhbmd1YWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWREdXJhdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkUHJvdmlkZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBmaWx0ZXJkQ291cnNlczogYW55ID0gW11cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFN1Z2dlc3RNb3JlQ291cnNlc0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHVibGljIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXG4gICAgcHVibGljIHNuYWNrQmFyOiBNYXRTbmFja0JhclxuICApIHtcbiAgICB0aGlzLnBsYW5EYXRhID0gZGF0YVxuICB9XG5cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGNvbXBldGVuY3k6IFtbXV0sXG4gICAgICByYXRpbmc6IFtbXV0sXG4gICAgICBsYW5ndWFnZTogW1tdXSxcbiAgICAgIGR1cmF0aW9uOiBbW11dLFxuICAgICAgcHJvdmlkZXI6IFtbXV1cbiAgICB9KTtcbiAgICB0aGlzLmxvYWRBbGxDb3Vyc2VzKCk7XG4gIH1cblxuICBzZWFyY2hEYXRhKCkge1xuICAgIGNvbnNvbGUubG9nKCdzZWFyY2hEYXRhIGNhbGxlZCB3aXRoIHNlYXJjaFRleHQ6JywgdGhpcy5zZWFyY2hUZXh0KTtcblxuICAgIC8vIFJlc2V0IHRvIGZpcnN0IHBhZ2Ugd2hlbiBzZWFyY2hpbmdcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcblxuICAgIGlmICghdGhpcy5zZWFyY2hUZXh0LnRyaW0oKSkge1xuICAgICAgY29uc29sZS5sb2coJ1NlYXJjaCB0ZXh0IGlzIGVtcHR5LCBsb2FkaW5nIGFsbCBjb3Vyc2VzJyk7XG4gICAgICB0aGlzLmxvYWRBbGxDb3Vyc2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2FsbCB0aGUgZGVkaWNhdGVkIHNlYXJjaCBtZXRob2RcbiAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcbiAgfVxuXG4gIGxvYWRBbGxDb3Vyc2VzKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICBcInJlcXVlc3RcIjoge1xuICAgICAgICBcImZpbHRlcnNcIjoge1xuICAgICAgICAgIFwicHJpbWFyeUNhdGVnb3J5XCI6IFtcbiAgICAgICAgICAgIFwiQ291cnNlXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwic3RhdHVzXCI6IFtcbiAgICAgICAgICAgIFwiTGl2ZVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcImNvdXJzZUNhdGVnb3J5XCI6IFtcbiAgICAgICAgICAgIFwiQ291cnNlXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICdkb3dubG9hZFVybCcsXG4gICAgICAgICAgJ29yZ2FuaXNhdGlvbicsXG4gICAgICAgICAgJ2xhbmd1YWdlJyxcbiAgICAgICAgICAnc291cmNlJyxcbiAgICAgICAgICAnYXBwSWNvbicsXG4gICAgICAgICAgJ2lkZW50aWZpZXInLFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAncHJpbWFyeUNhdGVnb3J5JyxcbiAgICAgICAgICAnY29udGVudFR5cGUnLFxuICAgICAgICAgICdwb3N0ZXJJbWFnZScsXG4gICAgICAgICAgJ2NyZWF0ZWRPbicsXG4gICAgICAgICAgJ2R1cmF0aW9uJyxcbiAgICAgICAgICAnYXZnUmF0aW5nJyxcbiAgICAgICAgICAnYWRkaXRpb25hbFRhZ3MnLFxuICAgICAgICAgICdjb3Vyc2VDYXRlZ29yeScsXG4gICAgICAgICAgJ21pbWVUeXBlJyxcbiAgICAgICAgICAnY29udGVudElkJyxcbiAgICAgICAgICAnY3JlYXRvckxvZ28nLFxuICAgICAgICAgICdzZWN0b3JEZXRhaWxzX3YxJyxcbiAgICAgICAgICAnbGFuZ3VhZ2VNYXBWMScsXG4gICAgICAgICAgJ2xhbmd1YWdlJyxcbiAgICAgICAgICAnY29tcGxldGlvblN1cnZleUxpbmsnLFxuICAgICAgICAgICdkaWZmaWN1bHR5TGV2ZWwnLFxuICAgICAgICAgICdjb21wZXRlbmNpZXNfdjYuY29tcGV0ZW5jeUFyZWFOYW1lJ1xuICAgICAgICBdLFxuICAgICAgICBmYWNldHM6IFtcbiAgICAgICAgICAnYXZnUmF0aW5nJyxcbiAgICAgICAgICAnbGFuZ3VhZ2UnLFxuICAgICAgICAgICdvcmdhbmlzYXRpb24nLFxuICAgICAgICAgICdjb3Vyc2VDYXRlZ29yeScsXG4gICAgICAgICAgJ3NlY3RvckRldGFpbHNfdjEuc2VjdG9yTmFtZScsXG4gICAgICAgICAgJ3NlY3RvckRldGFpbHNfdjEuc3ViU2VjdG9yTmFtZScsXG4gICAgICAgICAgJ2NvbXBldGVuY2llc192Ni5jb21wZXRlbmN5QXJlYU5hbWUnLFxuICAgICAgICAgICdjb21wZXRlbmNpZXNfdjYuY29tcGV0ZW5jeVRoZW1lTmFtZScsXG4gICAgICAgICAgJ2NvbXBldGVuY2llc192Ni5jb21wZXRlbmN5U3ViVGhlbWVOYW1lJyxcbiAgICAgICAgICAnZHVyYXRpb24nXG4gICAgICAgIF0sXG4gICAgICAgIFwicXVlcnlcIjogdGhpcy5zZWFyY2hUZXh0LnRyaW0oKSxcbiAgICAgICAgXCJsaW1pdFwiOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICBcIm9mZnNldFwiOiB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgIGNyZWF0ZWRPbjogJ2Rlc2MnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2coJ0xvYWQgYWxsIGNvdXJzZXMgcmVxdWVzdCBib2R5OicsIHJlcUJvZHkpO1xuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldElHT1RTdWdnZXN0ZWRDb3Vyc2VzKHJlcUJvZHkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZygnQWxsIGNvdXJzZXMgbG9hZGVkOicsIHJlcyk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IGFsbENvdXJzZXMgPSByZXMucmVzdWx0LmNvbnRlbnQgfHwgW107XG4gICAgICAgICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzID0gcmVzLnJlc3VsdC5jb250ZW50IHx8IFtdO1xuICAgICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gcmVzLnJlc3VsdC5jb250ZW50IHx8IFtdO1xuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5yZXN1bHQudG90YWxIaXRzIHx8IHJlcy5yZXN1bHQuY291bnQgfHwgMDtcbiAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbENvdW50IC8gdGhpcy5wYWdlU2l6ZSk7XG5cbiAgICAgICAgICB0aGlzLnN1Z2dlc3RlZENvdXJzZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5vcmdhbmlzYXRpb24gJiYgaXRlbS5vcmdhbmlzYXRpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmVkUHJvdmlkZXJzLmluZGV4T2YoaXRlbS5vcmdhbmlzYXRpb25bMF0pIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRQcm92aWRlcnMucHVzaChpdGVtLm9yZ2FuaXNhdGlvblswXSlcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLmZ1bGxDb3Vyc2VMaXN0ID0gYWxsQ291cnNlc1xuICAgICAgICAgIGxldCBpZGVudGlmaWVyc0FyciA9IFtdXG4gICAgICAgICAgdGhpcy5mdWxsQ291cnNlTGlzdC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlkZW50aWZpZXJzQXJyLnB1c2goaXRlbT8uaWRlbnRpZmllcilcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdGVkQ291cnNlcyA9IFtdO1xuICAgICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gW107XG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSAwO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5lcnJvcignTG9hZCBjb3Vyc2VzIGVycm9yOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdGYWlsZWQgdG8gbG9hZCBjb3Vyc2VzLiBQbGVhc2UgdHJ5IGFnYWluLicsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuXG5cbiAgLy8gU2VwYXJhdGUgbWV0aG9kIGZvciBwZXJmb3JtaW5nIHNlYXJjaCB3aXRoIHF1ZXJ5XG4gIHBlcmZvcm1TZWFyY2goKSB7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmxvYWRBbGxDb3Vyc2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIGxldCByZXFCb2R5ID0ge1xuICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgICBcInByaW1hcnlDYXRlZ29yeVwiOiBbXG4gICAgICAgICAgICBcIkNvdXJzZVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcInN0YXR1c1wiOiBbXG4gICAgICAgICAgICBcIkxpdmVcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJjb3Vyc2VDYXRlZ29yeVwiOiBbXG4gICAgICAgICAgICBcIkNvdXJzZVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAnZG93bmxvYWRVcmwnLFxuICAgICAgICAgICdvcmdhbmlzYXRpb24nLFxuICAgICAgICAgICdsYW5ndWFnZScsXG4gICAgICAgICAgJ3NvdXJjZScsXG4gICAgICAgICAgJ2FwcEljb24nLFxuICAgICAgICAgICdpZGVudGlmaWVyJyxcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICAgJ3ByaW1hcnlDYXRlZ29yeScsXG4gICAgICAgICAgJ2NvbnRlbnRUeXBlJyxcbiAgICAgICAgICAncG9zdGVySW1hZ2UnLFxuICAgICAgICAgICdjcmVhdGVkT24nLFxuICAgICAgICAgICdkdXJhdGlvbicsXG4gICAgICAgICAgJ2F2Z1JhdGluZycsXG4gICAgICAgICAgJ2FkZGl0aW9uYWxUYWdzJyxcbiAgICAgICAgICAnY291cnNlQ2F0ZWdvcnknLFxuICAgICAgICAgICdtaW1lVHlwZScsXG4gICAgICAgICAgJ2NvbnRlbnRJZCcsXG4gICAgICAgICAgJ2NyZWF0b3JMb2dvJyxcbiAgICAgICAgICAnc2VjdG9yRGV0YWlsc192MScsXG4gICAgICAgICAgJ2xhbmd1YWdlTWFwVjEnLFxuICAgICAgICAgICdsYW5ndWFnZScsXG4gICAgICAgICAgJ2NvbXBsZXRpb25TdXJ2ZXlMaW5rJyxcbiAgICAgICAgICAnZGlmZmljdWx0eUxldmVsJyxcbiAgICAgICAgICAnY29tcGV0ZW5jaWVzX3Y2LmNvbXBldGVuY3lBcmVhTmFtZSdcbiAgICAgICAgXSxcbiAgICAgICAgZmFjZXRzOiBbXG4gICAgICAgICAgJ2F2Z1JhdGluZycsXG4gICAgICAgICAgJ2xhbmd1YWdlJyxcbiAgICAgICAgICAnb3JnYW5pc2F0aW9uJyxcbiAgICAgICAgICAnY291cnNlQ2F0ZWdvcnknLFxuICAgICAgICAgICdzZWN0b3JEZXRhaWxzX3YxLnNlY3Rvck5hbWUnLFxuICAgICAgICAgICdzZWN0b3JEZXRhaWxzX3YxLnN1YlNlY3Rvck5hbWUnLFxuICAgICAgICAgICdjb21wZXRlbmNpZXNfdjYuY29tcGV0ZW5jeUFyZWFOYW1lJyxcbiAgICAgICAgICAnY29tcGV0ZW5jaWVzX3Y2LmNvbXBldGVuY3lUaGVtZU5hbWUnLFxuICAgICAgICAgICdjb21wZXRlbmNpZXNfdjYuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZScsXG4gICAgICAgICAgJ2R1cmF0aW9uJ1xuICAgICAgICBdLFxuICAgICAgICBcInF1ZXJ5XCI6IHRoaXMuc2VhcmNoVGV4dC50cmltKCksXG4gICAgICAgIFwibGltaXRcIjogdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgXCJvZmZzZXRcIjogdGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucGFnZVNpemUsXG4gICAgICAgIHNvcnRfYnk6IHtcbiAgICAgICAgICBjcmVhdGVkT246ICdkZXNjJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnNvbGUubG9nKCdQZXJmb3JtIHNlYXJjaCByZXF1ZXN0IGJvZHk6JywgSlNPTi5zdHJpbmdpZnkocmVxQm9keSwgbnVsbCwgMikpO1xuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldElHT1RTdWdnZXN0ZWRDb3Vyc2VzKHJlcUJvZHkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZygnU2VhcmNoIHJlc3VsdHM6JywgcmVzKTtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzID0gcmVzLnJlc3VsdC5jb250ZW50IHx8IFtdO1xuICAgICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gcmVzLnJlc3VsdC5jb250ZW50IHx8IFtdO1xuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5yZXN1bHQudG90YWxIaXRzIHx8IHJlcy5yZXN1bHQuY291bnQgfHwgMDtcbiAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbENvdW50IC8gdGhpcy5wYWdlU2l6ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzID0gW107XG4gICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSBbXTtcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSAwO1xuICAgICAgICAgIHRoaXMudG90YWxQYWdlcyA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTZWFyY2ggZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1NlYXJjaCBmYWlsZWQuIFBsZWFzZSB0cnkgYWdhaW4uJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ29Ub0ZpcnN0UGFnZSgpIHtcbiAgICB0aGlzLm9uUGFnZUNoYW5nZSgwKTtcbiAgfVxuXG4gIGdvVG9QcmV2aW91c1BhZ2UoKSB7XG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UodGhpcy5jdXJyZW50UGFnZSAtIDEpO1xuICB9XG5cbiAgZ29Ub05leHRQYWdlKCkge1xuICAgIHRoaXMub25QYWdlQ2hhbmdlKHRoaXMuY3VycmVudFBhZ2UgKyAxKTtcbiAgfVxuXG4gIGdvVG9MYXN0UGFnZSgpIHtcbiAgICB0aGlzLm9uUGFnZUNoYW5nZSh0aGlzLnRvdGFsUGFnZXMgLSAxKTtcbiAgfVxuXG4gIGNsZWFyU2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgIHRoaXMubG9hZEFsbENvdXJzZXMoKTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzIGZvciBwYWdpbmF0aW9uIFVJXG4gIGdldCBoYXNQcmV2aW91c1BhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPiAwO1xuICB9XG5cbiAgZ2V0IGhhc05leHRQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlIDwgdGhpcy50b3RhbFBhZ2VzIC0gMTtcbiAgfVxuXG4gIGdldCBzdGFydEl0ZW0oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucGFnZVNpemUgKyAxO1xuICB9XG5cbiAgZ2V0IGVuZEl0ZW0oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5taW4oKHRoaXMuY3VycmVudFBhZ2UgKyAxKSAqIHRoaXMucGFnZVNpemUsIHRoaXMudG90YWxDb3VudCk7XG4gIH1cblxuICBmaWx0ZXJEYXRhKHNlYXJjaFRleHQ6IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzZWFyY2hUZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxEYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gdGhpcy5mbGF0dGVuT2JqZWN0VG9TdHJpbmcoaXRlbSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZmllZC5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZmxhdHRlbk9iamVjdFRvU3RyaW5nKG9iajogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlc3VsdCArPSAnICcgKyB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHZhbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgdGhpcy5mbGF0dGVuT2JqZWN0VG9TdHJpbmcodmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdCArPSAnICcgKyB0aGlzLmZsYXR0ZW5PYmplY3RUb1N0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFkZENvdXJzZXMoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIC8vIEZpcnN0LCBnZXQgZXhpc3Rpbmcgc3VnZ2VzdGVkIGNvdXJzZXMgdG8gYXZvaWQgb3ZlcndyaXRpbmdcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0U3VnZ2VzdGVkQ291cnNlcyh0aGlzLnBsYW5EYXRhLnJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChleGlzdGluZ1JlcykgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnRXhpc3Rpbmcgc3VnZ2VzdGVkIGNvdXJzZXM6JywgZXhpc3RpbmdSZXMpO1xuXG4gICAgICAgIC8vIEV4dHJhY3QgZXhpc3RpbmcgY291cnNlIGlkZW50aWZpZXJzXG4gICAgICAgIGxldCBleGlzdGluZ0lkZW50aWZpZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAoZXhpc3RpbmdSZXMgJiYgQXJyYXkuaXNBcnJheShleGlzdGluZ1JlcykpIHtcbiAgICAgICAgICBleGlzdGluZ0lkZW50aWZpZXJzID0gZXhpc3RpbmdSZXMubWFwKGNvdXJzZSA9PiBjb3Vyc2UuaWRlbnRpZmllcikuZmlsdGVyKGlkID0+IGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1lcmdlIGV4aXN0aW5nIGlkZW50aWZpZXJzIHdpdGggbmV3IHNlbGVjdGlvbnMgKGF2b2lkaW5nIGR1cGxpY2F0ZXMpXG4gICAgICAgIGNvbnN0IGFsbElkZW50aWZpZXJzID0gWy4uLm5ldyBTZXQoWy4uLmV4aXN0aW5nSWRlbnRpZmllcnMsIC4uLnRoaXMuc2VsZWN0RmlsdGVyQ291cnNlc10pXTtcblxuICAgICAgICBjb25zb2xlLmxvZygnRXhpc3RpbmcgaWRlbnRpZmllcnM6JywgZXhpc3RpbmdJZGVudGlmaWVycyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdOZXcgc2VsZWN0aW9uczonLCB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMpO1xuICAgICAgICBjb25zb2xlLmxvZygnQ29tYmluZWQgaWRlbnRpZmllcnM6JywgYWxsSWRlbnRpZmllcnMpO1xuXG4gICAgICAgIC8vIFByZXBhcmUgcmVxdWVzdCBib2R5IHdpdGggY29tYmluZWQgaWRlbnRpZmllcnNcbiAgICAgICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICAgICAgXCJyb2xlX21hcHBpbmdfaWRcIjogdGhpcy5wbGFuRGF0YS5yb2xlX21hcHBpbmdfaWQsXG4gICAgICAgICAgXCJjb3Vyc2VfaWRlbnRpZmllcnNcIjogYWxsSWRlbnRpZmllcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBsYW5EYXRhLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgICAgICBsZXQgcmVxQm9keU5ldyA9IHtcbiAgICAgICAgICAgIFwiaXRlbV9pZFwiOiB0aGlzLnBsYW5EYXRhLmlkLFxuICAgICAgICAgICAgXCJyZXF1ZXN0X2lkXCI6IHRoaXMucGxhbkRhdGEuY2JwX3BsYW5faWQsXG4gICAgICAgICAgICBcImlkZW50aWZpZXJzXCI6IGFsbElkZW50aWZpZXJzXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnBsYW5EYXRhLmNicF9wbGFuX2lkKSB7XG4gICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuYWRkTURPQ291cnNlKHJlcUJvZHlOZXcpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdzYXZlZCcpXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDb3Vyc2VzIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAgICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgICAgICAgICAgLy90aGlzLmdldFxuICAgICAgICAgICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2F2ZSB0aGUgY29tYmluZWQgbGlzdFxuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zYXZlU3VnZ2VzdGVkQ291cnNlKHJlcUJvZHkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJylcbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDb3Vyc2VzIEFkZGVkIFN1Y2Nlc3NmdWxseScsICdYJywge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1NhdmUgZXJyb3InLCBlcnJvcilcbiAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwgfHwgJ0ZhaWxlZCB0byBzYXZlIGNvdXJzZXMnLCAnWCcsIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgZmV0Y2hpbmcgZXhpc3RpbmcgY291cnNlczonLCBlcnJvcik7XG5cbiAgICAgICAgLy8gSWYgZmV0Y2hpbmcgZXhpc3RpbmcgY291cnNlcyBmYWlscywgcHJvY2VlZCB3aXRoIGp1c3QgbmV3IHNlbGVjdGlvbnNcbiAgICAgICAgLy8gVGhpcyBjb3VsZCBoYXBwZW4gaWYgbm8gY291cnNlcyBleGlzdCB5ZXQgKDQwNCkgd2hpY2ggaXMgbm9ybWFsXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBleGlzdGluZyBzdWdnZXN0ZWQgY291cnNlcyBmb3VuZCwgcHJvY2VlZGluZyB3aXRoIG5ldyBzZWxlY3Rpb25zIG9ubHknKTtcblxuICAgICAgICAgIGxldCByZXFCb2R5ID0ge1xuICAgICAgICAgICAgXCJyb2xlX21hcHBpbmdfaWRcIjogdGhpcy5wbGFuRGF0YS5yb2xlX21hcHBpbmdfaWQsXG4gICAgICAgICAgICBcImNvdXJzZV9pZGVudGlmaWVyc1wiOiB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2F2ZVN1Z2dlc3RlZENvdXJzZShyZXFCb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvdXJzZXMgQWRkZWQgU3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1NhdmUgZXJyb3InLCBzYXZlRXJyb3IpXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHNhdmVFcnJvcj8uZXJyb3I/LmRldGFpbCB8fCAnRmFpbGVkIHRvIHNhdmUgY291cnNlcycsICdYJywge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlciBlcnJvcnMgLSBzaG93IGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIGZldGNoaW5nIGV4aXN0aW5nIGNvdXJzZXM6JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdGYWlsZWQgdG8gbG9hZCBleGlzdGluZyBjb3Vyc2VzLiBQbGVhc2UgdHJ5IGFnYWluLicsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0QWxsQ291cnNlcyhldmVudCkge1xuICAgIGlmIChldmVudC5jaGVja2VkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3VnZ2VzdGVkQ291cnNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMucHVzaCh0aGlzLnN1Z2dlc3RlZENvdXJzZXNbaV0uaWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzID0gW11cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3RoaXMuc2VsZWN0RmlsdGVyQ291cnNlcycsIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcylcbiAgfVxuXG4gIHNlbGVjdGVkRmlsdGVyQ291cnNlcyhldmVudCwgaXRlbSkge1xuICAgIGNvbnNvbGUubG9nKCdldmVudCcsIGV2ZW50KVxuICAgIGNvbnNvbGUubG9nKCdpdGVtJywgaXRlbSlcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLnB1c2goaXRlbT8uaWRlbnRpZmllcilcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMuaW5kZXhPZihpdGVtPy5pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3RoaXMuc2VsZWN0RmlsdGVyQ291cnNlcycsIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcylcbiAgfVxuXG4gIGNoZWNrSWZDb3Vyc2VFeGlzdHMoaXRlbSkge1xuICAgIGxldCBmbGFnID0gZmFsc2VcbiAgICBpZiAodGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLmluZGV4T2YoaXRlbT8uaWRlbnRpZmllcikgPiAtMSkge1xuICAgICAgZmxhZyA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZsYWdcbiAgfVxuXG4gIG9uSW1nRXJyb3IoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgaW1nRWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGltZ0VsZW1lbnQuc3JjID0gJ2Fzc2V0cy9jYXJlZXIvY2FyZWVyczEucG5nJzsgLy8gcmVwbGFjZSB3aXRoIHlvdXIgZGVmYXVsdCBpbWFnZSBwYXRoXG4gIH1cblxuICByZWRpcmVjdFRvQ291cmUoaXRlbSkge1xuICAgIGlmIChpdGVtPy5wdWJsaWNfbGluaykge1xuICAgICAgd2luZG93Lm9wZW4oaXRlbT8ucHVibGljX2xpbmssICdfYmxhbmsnKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdXJsID0gYGh0dHBzOi8vcG9ydGFsLmlnb3RrYXJtYXlvZ2kuZ292LmluL2FwcC90b2MvJHtpdGVtPy5pZGVudGlmaWVyfS9vdmVydmlldz9gXG4gICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKVxuICAgIH1cbiAgfVxuXG4gIGFwcGx5RmlsdGVyKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygndGhpcy5zZWFyY2hUZXh0JywgdmFsdWUpXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWVcbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gdGhpcy5maWx0ZXJEYXRhKHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gICAgdGhpcy5sb2FkQ291cnNlc0J5RmlsdGVycygpO1xuICB9XG5cbiAgbG9hZENvdXJzZXNCeUZpbHRlcnMoKSB7XG5cblxuICAgIGNvbnN0IHtcbiAgICAgIGNvbXBldGVuY3kgPSBbXSxcbiAgICAgIHJhdGluZyA9IFtdLFxuICAgICAgbGFuZ3VhZ2UgPSBbXSxcbiAgICAgIGR1cmF0aW9uID0gW10sXG4gICAgICBwcm92aWRlciA9IFtdXG4gICAgfSA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZTtcblxuICAgIGNvbnN0IGZpbHRlcnM6IGFueSA9IHtcbiAgICAgIHByaW1hcnlDYXRlZ29yeTogWydDb3Vyc2UnXSxcbiAgICAgIHN0YXR1czogWydMaXZlJ10sXG4gICAgICBjb250ZW50VHlwZTogWydDb3Vyc2UnXSxcbiAgICAgIGNvdXJzZUNhdGVnb3J5OiB7XG4gICAgICAgICchPSc6IFsncHJlIGVucm9sbWVudCBhc3Nlc3NtZW50J11cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyogQ29tcGV0ZW5jeSAqL1xuICAgIGlmIChjb21wZXRlbmN5Py5sZW5ndGgpIHtcbiAgICAgIGZpbHRlcnNbJ2NvbXBldGVuY2llc192Ni5jb21wZXRlbmN5QXJlYU5hbWUnXSA9IGNvbXBldGVuY3k7XG4gICAgfVxuXG4gICAgLyogTGFuZ3VhZ2UgKi9cbiAgICBpZiAobGFuZ3VhZ2U/Lmxlbmd0aCkge1xuICAgICAgZmlsdGVycy5sYW5ndWFnZSA9IGxhbmd1YWdlLm1hcCgoeDogc3RyaW5nKSA9PlxuICAgICAgICB4LnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyogUHJvdmlkZXIgKi9cbiAgICBpZiAocHJvdmlkZXI/Lmxlbmd0aCkge1xuICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSBwcm92aWRlcjtcbiAgICB9XG5cbiAgICAvKiBSYXRpbmcgKi9cbiAgICBpZiAocmF0aW5nPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGhpZ2hlc3RSYXRpbmcgPSBNYXRoLm1heChcbiAgICAgICAgLi4ucmF0aW5nLm1hcCgocjogc3RyaW5nKSA9PlxuICAgICAgICAgIE51bWJlcihyLnNwbGl0KCcgJylbMF0pXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGZpbHRlcnMuYXZnUmF0aW5nID0ge1xuICAgICAgICAnPj0nOiBoaWdoZXN0UmF0aW5nXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qIER1cmF0aW9uICovXG4gICAgaWYgKGR1cmF0aW9uPy5sZW5ndGgpIHtcbiAgICAgIGZpbHRlcnMuZHVyYXRpb24gPSBkdXJhdGlvblswXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXFCb2R5ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAnZG93bmxvYWRVcmwnLFxuICAgICAgICAgICdvcmdhbmlzYXRpb24nLFxuICAgICAgICAgICdsYW5ndWFnZScsXG4gICAgICAgICAgJ3NvdXJjZScsXG4gICAgICAgICAgJ2FwcEljb24nLFxuICAgICAgICAgICdpZGVudGlmaWVyJyxcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICAgJ3ByaW1hcnlDYXRlZ29yeScsXG4gICAgICAgICAgJ2NvbnRlbnRUeXBlJyxcbiAgICAgICAgICAncG9zdGVySW1hZ2UnLFxuICAgICAgICAgICdjcmVhdGVkT24nLFxuICAgICAgICAgICdkdXJhdGlvbicsXG4gICAgICAgICAgJ2F2Z1JhdGluZycsXG4gICAgICAgICAgJ2FkZGl0aW9uYWxUYWdzJyxcbiAgICAgICAgICAnY291cnNlQ2F0ZWdvcnknLFxuICAgICAgICAgICdtaW1lVHlwZScsXG4gICAgICAgICAgJ2NvbnRlbnRJZCcsXG4gICAgICAgICAgJ2NyZWF0b3JMb2dvJyxcbiAgICAgICAgICAnc2VjdG9yRGV0YWlsc192MScsXG4gICAgICAgICAgJ2xhbmd1YWdlTWFwVjEnLFxuICAgICAgICAgICdsYW5ndWFnZScsXG4gICAgICAgICAgJ2NvbXBsZXRpb25TdXJ2ZXlMaW5rJyxcbiAgICAgICAgICAnZGlmZmljdWx0eUxldmVsJyxcbiAgICAgICAgICAnY29tcGV0ZW5jaWVzX3Y2LmNvbXBldGVuY3lBcmVhTmFtZSdcbiAgICAgICAgXSxcbiAgICAgICAgZmFjZXRzOiBbXG4gICAgICAgICAgJ2F2Z1JhdGluZycsXG4gICAgICAgICAgJ2xhbmd1YWdlJyxcbiAgICAgICAgICAnb3JnYW5pc2F0aW9uJyxcbiAgICAgICAgICAnY291cnNlQ2F0ZWdvcnknLFxuICAgICAgICAgICdzZWN0b3JEZXRhaWxzX3YxLnNlY3Rvck5hbWUnLFxuICAgICAgICAgICdzZWN0b3JEZXRhaWxzX3YxLnN1YlNlY3Rvck5hbWUnLFxuICAgICAgICAgICdjb21wZXRlbmNpZXNfdjYuY29tcGV0ZW5jeUFyZWFOYW1lJyxcbiAgICAgICAgICAnY29tcGV0ZW5jaWVzX3Y2LmNvbXBldGVuY3lUaGVtZU5hbWUnLFxuICAgICAgICAgICdjb21wZXRlbmNpZXNfdjYuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZScsXG4gICAgICAgICAgJ2R1cmF0aW9uJ1xuICAgICAgICBdLFxuICAgICAgICBxdWVyeTogdGhpcy5zZWFyY2hUZXh0Py50cmltKCkgfHwgJycsXG4gICAgICAgIGxpbWl0OiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICBzb3J0X2J5OiB7XG4gICAgICAgICAgY3JlYXRlZE9uOiAnZGVzYydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdBUEkgRklMVEVSIFBBWUxPQUQnLFxuICAgICAgSlNPTi5zdHJpbmdpZnkocmVxQm9keSwgbnVsbCwgMilcbiAgICApO1xuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldElHT1RTdWdnZXN0ZWRDb3Vyc2VzKHJlcUJvZHkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcblxuXG4gICAgICAgIHRoaXMuc3VnZ2VzdGVkQ291cnNlcyA9XG4gICAgICAgICAgcmVzPy5yZXN1bHQ/LmNvbnRlbnQgfHwgW107XG5cbiAgICAgICAgdGhpcy50b3RhbENvdW50ID1cbiAgICAgICAgICByZXM/LnJlc3VsdD8udG90YWxIaXRzIHx8XG4gICAgICAgICAgcmVzPy5yZXN1bHQ/LmNvdW50IHx8XG4gICAgICAgICAgMDtcblxuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwoXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50IC8gdGhpcy5wYWdlU2l6ZVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcblxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgb25TZWFyY2hDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuXG4gICAgdGhpcy5sb2FkQ291cnNlc0J5RmlsdGVycygpO1xuICB9XG5cbiAgb25QYWdlQ2hhbmdlKHBhZ2U6IG51bWJlcikge1xuICAgIGlmIChwYWdlID49IDAgJiYgcGFnZSA8IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XG4gICAgICB0aGlzLmxvYWRDb3Vyc2VzQnlGaWx0ZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRGaWx0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtLnJlc2V0KHtcbiAgICAgIGNvbXBldGVuY3k6IFtdLFxuICAgICAgcmF0aW5nOiBbXSxcbiAgICAgIGxhbmd1YWdlOiBbXSxcbiAgICAgIGR1cmF0aW9uOiBbXSxcbiAgICAgIHByb3ZpZGVyOiBbXVxuICAgIH0pO1xuXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG5cbiAgICB0aGlzLmxvYWRDb3Vyc2VzQnlGaWx0ZXJzKCk7XG4gIH1cblxuICBmaWx0ZXJMaXN0KHZhbHVlOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNlYXJjaCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvbXBldGVuY3knOlxuICAgICAgICB0aGlzLmZpbHRlcmVkQ29tcGV0ZW5jeSA9IHRoaXMuY29tcGV0ZW5jaWVzVHlwZS5maWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmF0aW5nJzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZFJhdGluZ3MgPSB0aGlzLnJhdGluZ3MuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhbmd1YWdlJzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZExhbmd1YWdlcyA9IHRoaXMubGFuZ3VhZ2VzLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkdXJhdGlvbic6XG4gICAgICAgIHRoaXMuZmlsdGVyZWREdXJhdGlvbnMgPSB0aGlzLmR1cmF0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKHY6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KSA9PlxuICAgICAgICAgICAgdi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaClcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwcm92aWRlcic6XG4gICAgICAgIHRoaXMuZmlsdGVyZWRQcm92aWRlcnMgPSB0aGlzLnByb3ZpZGVycy5maWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInN1Z2dlc3QtY291cnNlcy1wbGFuXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdC1jb3Vyc2VzLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBTdWdnZXN0IENvdXJzZXMgZnJvbSBpR09UXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmctdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhlc2UgY291cnNlcyBpcyBjb21pbmcgZnJvbSB0aGUgaUdPVCBwbGF0Zm9ybTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Z2dlc3QtY291cnNlLWNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkNhbmNlbFwiIChjbGljayk9XCJjYW5jZWwoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCJzZWxlY3RGaWx0ZXJDb3Vyc2VzPy5sZW5ndGggPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RGaWx0ZXJDb3Vyc2VzPy5sZW5ndGggPyAnYnRuLWFjdGl2ZSc6J2J0bi1kaXNhYmxlJ1wiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIkFkZFwiIChjbGljayk9XCJhZGRDb3Vyc2VzKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtZmlsdGVyLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCIgY2xhc3M9XCJmaWx0ZXJzLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLWltcHJvdmVkIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlYXJjaCBDb3Vyc2VzPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXItY29tcGFjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyc2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInNlYXJjaC1pY29uXCI+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwic2lucHV0LWNvbXBhY3RcIiBbdmFsdWVdPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25TZWFyY2hDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggQ291cnNlc1wiIHR5cGU9XCJ0ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBDb21wZXRlbmN5PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0udmFsdWUuY29tcGV0ZW5jeT8ubGVuZ3RoID8gJycgOiAnQ29tcGV0ZW5jeScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VsZWN0LXNlYXJjaC1wYW5lbFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiYXBwbHlGaWx0ZXJzKClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYm94IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggQ29tcGV0ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAnY29tcGV0ZW5jeScpXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgciBvZiBmaWx0ZXJlZENvbXBldGVuY3lcIiBbdmFsdWVdPVwiclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWxlY3QgUmF0aW5nPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0udmFsdWUucmF0aW5nPy5sZW5ndGggPyAnJyA6ICdSYXRpbmcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInJhdGluZ1wiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VsZWN0LXNlYXJjaC1wYW5lbFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiYXBwbHlGaWx0ZXJzKClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYm94IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggUmVhdGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ3JhdGluZycpXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgciBvZiBmaWx0ZXJlZFJhdGluZ3NcIiBbdmFsdWVdPVwiclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlci1pbXByb3ZlZC1zZWMtMiBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBMYW5ndWFnZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLmxhbmd1YWdlPy5sZW5ndGggPyAnJyA6ICdMYW5ndWFnZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwibGFuZ3VhZ2VcIiBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIExhbmd1YWdlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAnbGFuZ3VhZ2UnKVwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWRMYW5ndWFnZXNcIiBbdmFsdWVdPVwiclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IER1cmF0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0udmFsdWUuZHVyYXRpb24/Lmxlbmd0aCA/ICcnIDogJ0R1cmF0aW9uJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkdXJhdGlvblwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VsZWN0LXNlYXJjaC1wYW5lbFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiYXBwbHlGaWx0ZXJzKClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYm94IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggRHVyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ2R1cmF0aW9uJylcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZhbHVlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkIG9mIGR1cmF0aW9uc1wiIFt2YWx1ZV09XCJkLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IFByb3ZpZGVyPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyRm9ybS52YWx1ZS5wcm92aWRlcj8ubGVuZ3RoID8gJycgOiAnUHJvdmlkZXInIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInByb3ZpZGVyXCIgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2NjYzsgcGFkZGluZzogNXB4O3dpZHRoOiA5MiU7bWFyZ2luOiA1cHg7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAncHJvdmlkZXInKVwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWRQcm92aWRlcnNcIiBbdmFsdWVdPVwiclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDQ1cHg7bWFyZ2luLWxlZnQ6IDIwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiUmVzZXQgQWxsIEZpbHRlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcnMoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzAwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyZWQgQ291cnNlIENvdW50IDoge3tmaWx0ZXJkQ291cnNlcz8ubGVuZ3RofX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHN1Yi1oZWFkaW5nXCIgKm5nSWY9XCJmaWx0ZXJkQ291cnNlcz8ubGVuZ3RoID09PSAwIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5ObyBEYXRhIEZvdW5kPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCIgKm5nSWY9XCJzdWdnZXN0ZWRDb3Vyc2VzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdHMtaGVhZGVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT1cImZhbHNlXCIgKGNoYW5nZSk9XCJzZWxlY3RBbGxDb3Vyc2VzKCRldmVudClcIj5TZWxlY3QgQWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291cnNlczwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdHMtaW5mb1wiICpuZ0lmPVwidG90YWxDb3VudCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPlNob3dpbmcge3sgc3RhcnRJdGVtIH19IC0ge3sgZW5kSXRlbSB9fSBvZiB7eyB0b3RhbENvdW50IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtY2FyZC1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1jYXJkLWNvbnRhaW5lciBtdC0yXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3VnZ2VzdGVkQ291cnNlc1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g4pyFIENoZWNrYm94IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwiY2hlY2tJZkNvdXJzZUV4aXN0cyhpdGVtKVwiIGNsYXNzPVwiaW1hZ2UtY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdGVkRmlsdGVyQ291cnNlcygkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIOKchSBJbWFnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbT8ucG9zdGVySW1hZ2VcIiAoZXJyb3IpPVwib25JbWdFcnJvcigkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9jb3Vyc2Uuc3ZnXCI+PC9zcGFuPiZuYnNwOzxzcGFuPkNvdXJzZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nIG10LTIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVkaXJlY3RUb0NvdXJlKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e3sgaXRlbT8ubmFtZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZGVzY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7IGl0ZW0/LmRlc2NyaXB0aW9uIHwgc2xpY2U6IDA6MjAwIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUGFnaW5hdGlvbiBDb250cm9scyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRyb2xzIG10LTRcIiAqbmdJZj1cInRvdGFsUGFnZXMgPiAxXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2Rpc2FibGVkXT1cIiFoYXNQcmV2aW91c1BhZ2VcIiAoY2xpY2spPVwiZ29Ub0ZpcnN0UGFnZSgpXCIgdGl0bGU9XCJGaXJzdCBQYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5maXJzdF9wYWdlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCIhaGFzUHJldmlvdXNQYWdlXCIgKGNsaWNrKT1cImdvVG9QcmV2aW91c1BhZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUHJldmlvdXMgUGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2hldnJvbl9sZWZ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdGlvbi1pbmZvXCIgc3R5bGU9XCJtYXJnaW46IDAgMTVweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgUGFnZSB7eyBjdXJyZW50UGFnZSArIDEgfX0gb2Yge3sgdG90YWxQYWdlcyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCIhaGFzTmV4dFBhZ2VcIiAoY2xpY2spPVwiZ29Ub05leHRQYWdlKClcIiB0aXRsZT1cIk5leHQgUGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiIWhhc05leHRQYWdlXCIgKGNsaWNrKT1cImdvVG9MYXN0UGFnZSgpXCIgdGl0bGU9XCJMYXN0IFBhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmxhc3RfcGFnZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBObyBSZXN1bHRzIE1lc3NhZ2UgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tcmVzdWx0cyBtdC00XCIgKm5nSWY9XCIhbG9hZGluZyAmJiBzdWdnZXN0ZWRDb3Vyc2VzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDIwcHg7XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgc2VhcmNoVGV4dC50cmltKCkgPyAnTm8gY291cnNlcyBmb3VuZCBmb3IgeW91ciBzZWFyY2guJyA6ICdObyBjb3Vyc2VzXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4nIH19PC9wPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cInNlYXJjaFRleHQudHJpbSgpXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIj5DbGVhclxuICAgICAgICAgICAgICAgICAgICBTZWFyY2g8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG48L2Rpdj4iXX0=
|
|
672
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VnZ2VzdC1tb3JlLWNvdXJzZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVN6RSxNQUFNLE9BQU8sMkJBQTJCO0lBb0N0QyxZQUNTLFNBQW9ELEVBQzNCLElBQVMsRUFDakMsRUFBZSxFQUNoQixhQUE0QixFQUM1QixRQUFxQjtRQUpyQixjQUFTLEdBQVQsU0FBUyxDQUEyQztRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQXhDOUIsZUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUNmLHFCQUFnQixHQUFRLEVBQUUsQ0FBQTtRQUMxQixpQkFBWSxHQUFRLEVBQUUsQ0FBQTtRQUN0Qix3QkFBbUIsR0FBUSxFQUFFLENBQUE7UUFDN0IsYUFBUSxHQUFRLEVBQUUsQ0FBQTtRQUNsQixZQUFPLEdBQUcsS0FBSyxDQUFBO1FBRWYsd0JBQXdCO1FBQ3hCLGdCQUFXLEdBQUcsQ0FBQyxDQUFBO1FBQ2YsYUFBUSxHQUFHLEVB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LDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSwwQkFBMEI7OzBCQTBDakMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zdWdnZXN0LW1vcmUtY291cnNlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdWdnZXN0LW1vcmUtY291cnNlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N1Z2dlc3QtbW9yZS1jb3Vyc2VzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3VnZ2VzdE1vcmVDb3Vyc2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc2VhcmNoVGV4dCA9ICcnXG4gIHN1Z2dlc3RlZENvdXJzZXM6IGFueSA9IFtdXG4gIG9yaWdpbmFsRGF0YTogYW55ID0gW11cbiAgc2VsZWN0RmlsdGVyQ291cnNlczogYW55ID0gW11cbiAgcGxhbkRhdGE6IGFueSA9IHt9XG4gIGxvYWRpbmcgPSBmYWxzZVxuXG4gIC8vIFBhZ2luYXRpb24gcHJvcGVydGllc1xuICBjdXJyZW50UGFnZSA9IDBcbiAgcGFnZVNpemUgPSAxMlxuICB0b3RhbENvdW50ID0gMFxuICB0b3RhbFBhZ2VzID0gMFxuICBmaWx0ZXJGb3JtITogRm9ybUdyb3VwO1xuICBjb21wZXRlbmNpZXNUeXBlID0gWydBbGwnLCAnQmVoYXZpb3VyYWwnLCAnRnVuY3Rpb25hbCcsICdEb21haW4nXVxuICByYXRpbmdzID0gWyc0LjUgYW5kIGFib3ZlJywgJzQuMCBhbmQgYWJvdmUnLCAnMy41IGFuZCBhYm92ZScsICcyLjUgYW5kIGFib3ZlJywgJzEgYW5kIGFib3ZlJ107XG4gIGxhbmd1YWdlcyA9IFsnRW5nbGlzaCcsICdIaW5kaScsICdUYW1pbCcsICdLYW5uYWRhJywgJ1RlbHVndScsICdNYWxheWFsYW0nLCAnQXNzYW1lc2UnLCAnQmVuZ2FsaScsICdHdWphcmF0aScsICdNYXJhdGhpJywgJ09kaWEnLCAnUHVuamFiaScsICdLb25rYW5pJywgJ0JvZG8nLCAnRG9ncmknLCAnS2FzaG1pcmknLCAnTWFpdGhpbGknLCAnTWFuaXB1cmknLCAnTmVwYWxpJywgJ1NhbnNrcml0JywgJ1NhbnRhbGknLCAnU2luZGhpJywgJ1VyZHUnXTtcbiAgZHVyYXRpb25zID0gW1xuICAgIHsgbGFiZWw6ICc8IDEgSG91cicsIHZhbHVlOiAnMzYwMCcgfSxcbiAgICB7IGxhYmVsOiAnMS01IEhvdXJzJywgdmFsdWU6ICc0Mzc2JyB9LFxuICAgIHsgbGFiZWw6ICc1KyBIb3VycycsIHZhbHVlOiAnMTgwMDAnIH1cbiAgXTtcbiAgcHJvdmlkZXJzID0gW107XG4gIGZpbHRlcmVkQ29tcGV0ZW5jeSA9IFsuLi50aGlzLmNvbXBldGVuY2llc1R5cGVdO1xuICBmaWx0ZXJlZFJhdGluZ3MgPSBbLi4udGhpcy5yYXRpbmdzXTtcbiAgZmlsdGVyZWRMYW5ndWFnZXMgPSBbLi4udGhpcy5sYW5ndWFnZXNdO1xuICBmaWx0ZXJlZER1cmF0aW9ucyA9IFsuLi50aGlzLmR1cmF0aW9uc107XG4gIGZpbHRlcmVkUHJvdmlkZXJzID0gWy4uLnRoaXMucHJvdmlkZXJzXTtcbiAgZnVsbENvdXJzZUxpc3QgPSBbXVxuICAvLyBTZWxlY3RlZCBmaWx0ZXJzXG4gIHNlbGVjdGVkQ29tcGV0ZW5jeSA9ICdBbGwnO1xuICBzZWxlY3RlZFJhdGluZzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkTGFuZ3VhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZER1cmF0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWRQcm92aWRlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGZpbHRlcmRDb3Vyc2VzOiBhbnkgPSBbXVxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U3VnZ2VzdE1vcmVDb3Vyc2VzQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwdWJsaWMgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwdWJsaWMgc25hY2tCYXI6IE1hdFNuYWNrQmFyXG4gICkge1xuICAgIHRoaXMucGxhbkRhdGEgPSBkYXRhXG4gIH1cblxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29tcGV0ZW5jeTogW1tdXSxcbiAgICAgIHJhdGluZzogW1tdXSxcbiAgICAgIGxhbmd1YWdlOiBbW11dLFxuICAgICAgZHVyYXRpb246IFtbXV0sXG4gICAgICBwcm92aWRlcjogW1tdXVxuICAgIH0pO1xuICAgIHRoaXMubG9hZEFsbENvdXJzZXMoKTtcbiAgfVxuXG4gIHNlYXJjaERhdGEoKSB7XG4gICAgY29uc29sZS5sb2coJ3NlYXJjaERhdGEgY2FsbGVkIHdpdGggc2VhcmNoVGV4dDonLCB0aGlzLnNlYXJjaFRleHQpO1xuXG4gICAgLy8gUmVzZXQgdG8gZmlyc3QgcGFnZSB3aGVuIHNlYXJjaGluZ1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuXG4gICAgaWYgKCF0aGlzLnNlYXJjaFRleHQudHJpbSgpKSB7XG4gICAgICBjb25zb2xlLmxvZygnU2VhcmNoIHRleHQgaXMgZW1wdHksIGxvYWRpbmcgYWxsIGNvdXJzZXMnKTtcbiAgICAgIHRoaXMubG9hZEFsbENvdXJzZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDYWxsIHRoZSBkZWRpY2F0ZWQgc2VhcmNoIG1ldGhvZFxuICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xuICB9XG5cbiAgbG9hZEFsbENvdXJzZXMoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgIFwiZmlsdGVyc1wiOiB7XG4gICAgICAgICAgXCJwcmltYXJ5Q2F0ZWdvcnlcIjogW1xuICAgICAgICAgICAgXCJDb3Vyc2VcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJzdGF0dXNcIjogW1xuICAgICAgICAgICAgXCJMaXZlXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiY291cnNlQ2F0ZWdvcnlcIjogW1xuICAgICAgICAgICAgXCJDb3Vyc2VcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgJ2Rvd25sb2FkVXJsJyxcbiAgICAgICAgICAnb3JnYW5pc2F0aW9uJyxcbiAgICAgICAgICAnbGFuZ3VhZ2UnLFxuICAgICAgICAgICdzb3VyY2UnLFxuICAgICAgICAgICdhcHBJY29uJyxcbiAgICAgICAgICAnaWRlbnRpZmllcicsXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgICdwcmltYXJ5Q2F0ZWdvcnknLFxuICAgICAgICAgICdjb250ZW50VHlwZScsXG4gICAgICAgICAgJ3Bvc3RlckltYWdlJyxcbiAgICAgICAgICAnY3JlYXRlZE9uJyxcbiAgICAgICAgICAnZHVyYXRpb24nLFxuICAgICAgICAgICdhdmdSYXRpbmcnLFxuICAgICAgICAgICdhZGRpdGlvbmFsVGFncycsXG4gICAgICAgICAgJ2NvdXJzZUNhdGVnb3J5JyxcbiAgICAgICAgICAnbWltZVR5cGUnLFxuICAgICAgICAgICdjb250ZW50SWQnLFxuICAgICAgICAgICdjcmVhdG9yTG9nbycsXG4gICAgICAgICAgJ3NlY3RvckRldGFpbHNfdjEnLFxuICAgICAgICAgICdsYW5ndWFnZU1hcFYxJyxcbiAgICAgICAgICAnbGFuZ3VhZ2UnLFxuICAgICAgICAgICdjb21wbGV0aW9uU3VydmV5TGluaycsXG4gICAgICAgICAgJ2RpZmZpY3VsdHlMZXZlbCcsXG4gICAgICAgICAgJ2NvbXBldGVuY2llc192Ni5jb21wZXRlbmN5QXJlYU5hbWUnXG4gICAgICAgIF0sXG4gICAgICAgIGZhY2V0czogW1xuICAgICAgICAgICdhdmdSYXRpbmcnLFxuICAgICAgICAgICdsYW5ndWFnZScsXG4gICAgICAgICAgJ29yZ2FuaXNhdGlvbicsXG4gICAgICAgICAgJ2NvdXJzZUNhdGVnb3J5JyxcbiAgICAgICAgICAnc2VjdG9yRGV0YWlsc192MS5zZWN0b3JOYW1lJyxcbiAgICAgICAgICAnc2VjdG9yRGV0YWlsc192MS5zdWJTZWN0b3JOYW1lJyxcbiAgICAgICAgICAnY29tcGV0ZW5jaWVzX3Y2LmNvbXBldGVuY3lBcmVhTmFtZScsXG4gICAgICAgICAgJ2NvbXBldGVuY2llc192Ni5jb21wZXRlbmN5VGhlbWVOYW1lJyxcbiAgICAgICAgICAnY29tcGV0ZW5jaWVzX3Y2LmNvbXBldGVuY3lTdWJUaGVtZU5hbWUnLFxuICAgICAgICAgICdkdXJhdGlvbidcbiAgICAgICAgXSxcbiAgICAgICAgXCJxdWVyeVwiOiB0aGlzLnNlYXJjaFRleHQudHJpbSgpLFxuICAgICAgICBcImxpbWl0XCI6IHRoaXMucGFnZVNpemUsXG4gICAgICAgIFwib2Zmc2V0XCI6IHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICBzb3J0X2J5OiB7XG4gICAgICAgICAgY3JlYXRlZE9uOiAnZGVzYydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZygnTG9hZCBhbGwgY291cnNlcyByZXF1ZXN0IGJvZHk6JywgcmVxQm9keSk7XG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0SUdPVFN1Z2dlc3RlZENvdXJzZXMocmVxQm9keSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBbGwgY291cnNlcyBsb2FkZWQ6JywgcmVzKTtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0KSB7XG4gICAgICAgICAgY29uc3QgYWxsQ291cnNlcyA9IHJlcy5yZXN1bHQuY29udGVudCB8fCBbXTtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3RlZENvdXJzZXMgPSByZXMucmVzdWx0LmNvbnRlbnQgfHwgW107XG4gICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSByZXMucmVzdWx0LmNvbnRlbnQgfHwgW107XG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLnJlc3VsdC50b3RhbEhpdHMgfHwgcmVzLnJlc3VsdC5jb3VudCB8fCAwO1xuICAgICAgICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsQ291bnQgLyB0aGlzLnBhZ2VTaXplKTtcblxuICAgICAgICAgIHRoaXMuc3VnZ2VzdGVkQ291cnNlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLm9yZ2FuaXNhdGlvbiAmJiBpdGVtLm9yZ2FuaXNhdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRQcm92aWRlcnMuaW5kZXhPZihpdGVtLm9yZ2FuaXNhdGlvblswXSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFByb3ZpZGVycy5wdXNoKGl0ZW0ub3JnYW5pc2F0aW9uWzBdKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMuZnVsbENvdXJzZUxpc3QgPSBhbGxDb3Vyc2VzXG4gICAgICAgICAgbGV0IGlkZW50aWZpZXJzQXJyID0gW11cbiAgICAgICAgICB0aGlzLmZ1bGxDb3Vyc2VMaXN0Lm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWRlbnRpZmllcnNBcnIucHVzaChpdGVtPy5pZGVudGlmaWVyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzID0gW107XG4gICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSBbXTtcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSAwO1xuICAgICAgICAgIHRoaXMudG90YWxQYWdlcyA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdMb2FkIGNvdXJzZXMgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBsb2FkIGNvdXJzZXMuIFBsZWFzZSB0cnkgYWdhaW4uJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgfVxuXG5cblxuICAvLyBTZXBhcmF0ZSBtZXRob2QgZm9yIHBlcmZvcm1pbmcgc2VhcmNoIHdpdGggcXVlcnlcbiAgcGVyZm9ybVNlYXJjaCgpIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dC50cmltKCkpIHtcbiAgICAgIHRoaXMubG9hZEFsbENvdXJzZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICBcInJlcXVlc3RcIjoge1xuICAgICAgICBcImZpbHRlcnNcIjoge1xuICAgICAgICAgIFwicHJpbWFyeUNhdGVnb3J5XCI6IFtcbiAgICAgICAgICAgIFwiQ291cnNlXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwic3RhdHVzXCI6IFtcbiAgICAgICAgICAgIFwiTGl2ZVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcImNvdXJzZUNhdGVnb3J5XCI6IFtcbiAgICAgICAgICAgIFwiQ291cnNlXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICdkb3dubG9hZFVybCcsXG4gICAgICAgICAgJ29yZ2FuaXNhdGlvbicsXG4gICAgICAgICAgJ2xhbmd1YWdlJyxcbiAgICAgICAgICAnc291cmNlJyxcbiAgICAgICAgICAnYXBwSWNvbicsXG4gICAgICAgICAgJ2lkZW50aWZpZXInLFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAncHJpbWFyeUNhdGVnb3J5JyxcbiAgICAgICAgICAnY29udGVudFR5cGUnLFxuICAgICAgICAgICdwb3N0ZXJJbWFnZScsXG4gICAgICAgICAgJ2NyZWF0ZWRPbicsXG4gICAgICAgICAgJ2R1cmF0aW9uJyxcbiAgICAgICAgICAnYXZnUmF0aW5nJyxcbiAgICAgICAgICAnYWRkaXRpb25hbFRhZ3MnLFxuICAgICAgICAgICdjb3Vyc2VDYXRlZ29yeScsXG4gICAgICAgICAgJ21pbWVUeXBlJyxcbiAgICAgICAgICAnY29udGVudElkJyxcbiAgICAgICAgICAnY3JlYXRvckxvZ28nLFxuICAgICAgICAgICdzZWN0b3JEZXRhaWxzX3YxJyxcbiAgICAgICAgICAnbGFuZ3VhZ2VNYXBWMScsXG4gICAgICAgICAgJ2xhbmd1YWdlJyxcbiAgICAgICAgICAnY29tcGxldGlvblN1cnZleUxpbmsnLFxuICAgICAgICAgICdkaWZmaWN1bHR5TGV2ZWwnLFxuICAgICAgICAgICdjb21wZXRlbmNpZXNfdjYuY29tcGV0ZW5jeUFyZWFOYW1lJ1xuICAgICAgICBdLFxuICAgICAgICBmYWNldHM6IFtcbiAgICAgICAgICAnYXZnUmF0aW5nJyxcbiAgICAgICAgICAnbGFuZ3VhZ2UnLFxuICAgICAgICAgICdvcmdhbmlzYXRpb24nLFxuICAgICAgICAgICdjb3Vyc2VDYXRlZ29yeScsXG4gICAgICAgICAgJ3NlY3RvckRldGFpbHNfdjEuc2VjdG9yTmFtZScsXG4gICAgICAgICAgJ3NlY3RvckRldGFpbHNfdjEuc3ViU2VjdG9yTmFtZScsXG4gICAgICAgICAgJ2NvbXBldGVuY2llc192Ni5jb21wZXRlbmN5QXJlYU5hbWUnLFxuICAgICAgICAgICdjb21wZXRlbmNpZXNfdjYuY29tcGV0ZW5jeVRoZW1lTmFtZScsXG4gICAgICAgICAgJ2NvbXBldGVuY2llc192Ni5jb21wZXRlbmN5U3ViVGhlbWVOYW1lJyxcbiAgICAgICAgICAnZHVyYXRpb24nXG4gICAgICAgIF0sXG4gICAgICAgIFwicXVlcnlcIjogdGhpcy5zZWFyY2hUZXh0LnRyaW0oKSxcbiAgICAgICAgXCJsaW1pdFwiOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICBcIm9mZnNldFwiOiB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgIGNyZWF0ZWRPbjogJ2Rlc2MnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2coJ1BlcmZvcm0gc2VhcmNoIHJlcXVlc3QgYm9keTonLCBKU09OLnN0cmluZ2lmeShyZXFCb2R5LCBudWxsLCAyKSk7XG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0SUdPVFN1Z2dlc3RlZENvdXJzZXMocmVxQm9keSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUubG9nKCdTZWFyY2ggcmVzdWx0czonLCByZXMpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3RlZENvdXJzZXMgPSByZXMucmVzdWx0LmNvbnRlbnQgfHwgW107XG4gICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSByZXMucmVzdWx0LmNvbnRlbnQgfHwgW107XG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLnJlc3VsdC50b3RhbEhpdHMgfHwgcmVzLnJlc3VsdC5jb3VudCB8fCAwO1xuICAgICAgICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsQ291bnQgLyB0aGlzLnBhZ2VTaXplKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3RlZENvdXJzZXMgPSBbXTtcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFtdO1xuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IDA7XG4gICAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gMDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NlYXJjaCBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignU2VhcmNoIGZhaWxlZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnb1RvRmlyc3RQYWdlKCkge1xuICAgIHRoaXMub25QYWdlQ2hhbmdlKDApO1xuICB9XG5cbiAgZ29Ub1ByZXZpb3VzUGFnZSgpIHtcbiAgICB0aGlzLm9uUGFnZUNoYW5nZSh0aGlzLmN1cnJlbnRQYWdlIC0gMSk7XG4gIH1cblxuICBnb1RvTmV4dFBhZ2UoKSB7XG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UodGhpcy5jdXJyZW50UGFnZSArIDEpO1xuICB9XG5cbiAgZ29Ub0xhc3RQYWdlKCkge1xuICAgIHRoaXMub25QYWdlQ2hhbmdlKHRoaXMudG90YWxQYWdlcyAtIDEpO1xuICB9XG5cbiAgY2xlYXJTZWFyY2goKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gICAgdGhpcy5sb2FkQWxsQ291cnNlcygpO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIHBhZ2luYXRpb24gVUlcbiAgZ2V0IGhhc1ByZXZpb3VzUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA+IDA7XG4gIH1cblxuICBnZXQgaGFzTmV4dFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPCB0aGlzLnRvdGFsUGFnZXMgLSAxO1xuICB9XG5cbiAgZ2V0IHN0YXJ0SXRlbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSArIDE7XG4gIH1cblxuICBnZXQgZW5kSXRlbSgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbigodGhpcy5jdXJyZW50UGFnZSArIDEpICogdGhpcy5wYWdlU2l6ZSwgdGhpcy50b3RhbENvdW50KTtcbiAgfVxuXG4gIGZpbHRlckRhdGEoc2VhcmNoVGV4dDogc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IGZpbHRlciA9IHNlYXJjaFRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5vcmlnaW5hbERhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSB0aGlzLmZsYXR0ZW5PYmplY3RUb1N0cmluZyhpdGVtKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkLmluY2x1ZGVzKGZpbHRlcik7XG4gICAgfSk7XG4gIH1cblxuICBmbGF0dGVuT2JqZWN0VG9TdHJpbmcob2JqOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcgJyArIHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgdmFsO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB0aGlzLmZsYXR0ZW5PYmplY3RUb1N0cmluZyh2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcgJyArIHRoaXMuZmxhdHRlbk9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYWRkQ291cnNlcygpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgLy8gRmlyc3QsIGdldCBleGlzdGluZyBzdWdnZXN0ZWQgY291cnNlcyB0byBhdm9pZCBvdmVyd3JpdGluZ1xuICAgIGlmICh0aGlzLnBsYW5EYXRhLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIGNvbnN0IGFsbElkZW50aWZpZXJzID0gWy4uLm5ldyBTZXQoWy4uLnRoaXMuc2VsZWN0RmlsdGVyQ291cnNlc10pXTtcbiAgICAgIGxldCByZXFCb2R5TmV3ID0ge1xuICAgICAgICBcIml0ZW1faWRcIjogdGhpcy5wbGFuRGF0YS5pZCxcbiAgICAgICAgXCJyZXF1ZXN0X2lkXCI6IHRoaXMucGxhbkRhdGEuY2JwX3BsYW5faWQsXG4gICAgICAgIFwiaWRlbnRpZmllcnNcIjogYWxsSWRlbnRpZmllcnNcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnBsYW5EYXRhLmNicF9wbGFuX2lkKSB7XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5hZGRNRE9Db3Vyc2UocmVxQm9keU5ldykuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdzYXZlZCcpXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvdXJzZXMgVXBkYXRlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKVxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgICAgICAvLyBhbGVydCgnQ29uZmxpY3QgZGV0ZWN0ZWQ6IFRoZSByZXNvdXJjZSBhbHJlYWR5IGV4aXN0cyBvciBhY3Rpb24gY29uZmxpY3RzLicpO1xuICAgICAgICAgICAgLy90aGlzLmdldFxuICAgICAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFN1Z2dlc3RlZENvdXJzZXModGhpcy5wbGFuRGF0YS5yb2xlX21hcHBpbmdfaWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChleGlzdGluZ1JlcykgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdFeGlzdGluZyBzdWdnZXN0ZWQgY291cnNlczonLCBleGlzdGluZ1Jlcyk7XG5cbiAgICAgICAgICAvLyBFeHRyYWN0IGV4aXN0aW5nIGNvdXJzZSBpZGVudGlmaWVyc1xuICAgICAgICAgIGxldCBleGlzdGluZ0lkZW50aWZpZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGlmIChleGlzdGluZ1JlcyAmJiBBcnJheS5pc0FycmF5KGV4aXN0aW5nUmVzKSkge1xuICAgICAgICAgICAgZXhpc3RpbmdJZGVudGlmaWVycyA9IGV4aXN0aW5nUmVzLm1hcChjb3Vyc2UgPT4gY291cnNlLmlkZW50aWZpZXIpLmZpbHRlcihpZCA9PiBpZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWVyZ2UgZXhpc3RpbmcgaWRlbnRpZmllcnMgd2l0aCBuZXcgc2VsZWN0aW9ucyAoYXZvaWRpbmcgZHVwbGljYXRlcylcbiAgICAgICAgICBjb25zdCBhbGxJZGVudGlmaWVycyA9IFsuLi5uZXcgU2V0KFsuLi5leGlzdGluZ0lkZW50aWZpZXJzLCAuLi50aGlzLnNlbGVjdEZpbHRlckNvdXJzZXNdKV07XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygnRXhpc3RpbmcgaWRlbnRpZmllcnM6JywgZXhpc3RpbmdJZGVudGlmaWVycyk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ05ldyBzZWxlY3Rpb25zOicsIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcyk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0NvbWJpbmVkIGlkZW50aWZpZXJzOicsIGFsbElkZW50aWZpZXJzKTtcblxuICAgICAgICAgIC8vIFByZXBhcmUgcmVxdWVzdCBib2R5IHdpdGggY29tYmluZWQgaWRlbnRpZmllcnNcbiAgICAgICAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgICAgICAgIFwicm9sZV9tYXBwaW5nX2lkXCI6IHRoaXMucGxhbkRhdGEucm9sZV9tYXBwaW5nX2lkLFxuICAgICAgICAgICAgXCJjb3Vyc2VfaWRlbnRpZmllcnNcIjogYWxsSWRlbnRpZmllcnNcbiAgICAgICAgICB9XG5cblxuICAgICAgICAgIC8vIFNhdmUgdGhlIGNvbWJpbmVkIGxpc3RcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2F2ZVN1Z2dlc3RlZENvdXJzZShyZXFCb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdzYXZlZCcpXG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ291cnNlcyBBZGRlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTYXZlIGVycm9yJywgZXJyb3IpXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsIHx8ICdGYWlsZWQgdG8gc2F2ZSBjb3Vyc2VzJywgJ1gnLCB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG5cblxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGZldGNoaW5nIGV4aXN0aW5nIGNvdXJzZXM6JywgZXJyb3IpO1xuXG4gICAgICAgICAgLy8gSWYgZmV0Y2hpbmcgZXhpc3RpbmcgY291cnNlcyBmYWlscywgcHJvY2VlZCB3aXRoIGp1c3QgbmV3IHNlbGVjdGlvbnNcbiAgICAgICAgICAvLyBUaGlzIGNvdWxkIGhhcHBlbiBpZiBubyBjb3Vyc2VzIGV4aXN0IHlldCAoNDA0KSB3aGljaCBpcyBub3JtYWxcbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBleGlzdGluZyBzdWdnZXN0ZWQgY291cnNlcyBmb3VuZCwgcHJvY2VlZGluZyB3aXRoIG5ldyBzZWxlY3Rpb25zIG9ubHknKTtcblxuICAgICAgICAgICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICAgICAgICAgIFwicm9sZV9tYXBwaW5nX2lkXCI6IHRoaXMucGxhbkRhdGEucm9sZV9tYXBwaW5nX2lkLFxuICAgICAgICAgICAgICBcImNvdXJzZV9pZGVudGlmaWVyc1wiOiB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNhdmVTdWdnZXN0ZWRDb3Vyc2UocmVxQm9keSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ291cnNlcyBBZGRlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6IChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU2F2ZSBlcnJvcicsIHNhdmVFcnJvcilcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHNhdmVFcnJvcj8uZXJyb3I/LmRldGFpbCB8fCAnRmFpbGVkIHRvIHNhdmUgY291cnNlcycsICdYJywge1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3RoZXIgZXJyb3JzIC0gc2hvdyBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIGZldGNoaW5nIGV4aXN0aW5nIGNvdXJzZXM6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRmFpbGVkIHRvIGxvYWQgZXhpc3RpbmcgY291cnNlcy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIHNlbGVjdEFsbENvdXJzZXMoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN1Z2dlc3RlZENvdXJzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLnB1c2godGhpcy5zdWdnZXN0ZWRDb3Vyc2VzW2ldLmlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcyA9IFtdXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMnLCB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMpXG4gIH1cblxuICBzZWxlY3RlZEZpbHRlckNvdXJzZXMoZXZlbnQsIGl0ZW0pIHtcbiAgICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudClcbiAgICBjb25zb2xlLmxvZygnaXRlbScsIGl0ZW0pXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5wdXNoKGl0ZW0/LmlkZW50aWZpZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLmluZGV4T2YoaXRlbT8uaWRlbnRpZmllcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMnLCB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMpXG4gIH1cblxuICBjaGVja0lmQ291cnNlRXhpc3RzKGl0ZW0pIHtcbiAgICBsZXQgZmxhZyA9IGZhbHNlXG4gICAgaWYgKHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5pbmRleE9mKGl0ZW0/LmlkZW50aWZpZXIpID4gLTEpIHtcbiAgICAgIGZsYWcgPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmbGFnXG4gIH1cblxuICBvbkltZ0Vycm9yKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGltZ0VsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICBpbWdFbGVtZW50LnNyYyA9ICdhc3NldHMvY2FyZWVyL2NhcmVlcnMxLnBuZyc7IC8vIHJlcGxhY2Ugd2l0aCB5b3VyIGRlZmF1bHQgaW1hZ2UgcGF0aFxuICB9XG5cbiAgcmVkaXJlY3RUb0NvdXJlKGl0ZW0pIHtcbiAgICBpZiAoaXRlbT8ucHVibGljX2xpbmspIHtcbiAgICAgIHdpbmRvdy5vcGVuKGl0ZW0/LnB1YmxpY19saW5rLCAnX2JsYW5rJylcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHVybCA9IGBodHRwczovL3BvcnRhbC5pZ290a2FybWF5b2dpLmdvdi5pbi9hcHAvdG9jLyR7aXRlbT8uaWRlbnRpZmllcn0vb3ZlcnZpZXc/YFxuICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJylcbiAgICB9XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuc2VhcmNoVGV4dCcsIHZhbHVlKVxuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlXG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuZmlsdGVyRGF0YSh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgIHRoaXMubG9hZENvdXJzZXNCeUZpbHRlcnMoKTtcbiAgfVxuXG4gIGxvYWRDb3Vyc2VzQnlGaWx0ZXJzKCkge1xuXG5cbiAgICBjb25zdCB7XG4gICAgICBjb21wZXRlbmN5ID0gW10sXG4gICAgICByYXRpbmcgPSBbXSxcbiAgICAgIGxhbmd1YWdlID0gW10sXG4gICAgICBkdXJhdGlvbiA9IFtdLFxuICAgICAgcHJvdmlkZXIgPSBbXVxuICAgIH0gPSB0aGlzLmZpbHRlckZvcm0udmFsdWU7XG5cbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7XG4gICAgICBwcmltYXJ5Q2F0ZWdvcnk6IFsnQ291cnNlJ10sXG4gICAgICBzdGF0dXM6IFsnTGl2ZSddLFxuICAgICAgY29udGVudFR5cGU6IFsnQ291cnNlJ10sXG4gICAgICBjb3Vyc2VDYXRlZ29yeToge1xuICAgICAgICAnIT0nOiBbJ3ByZSBlbnJvbG1lbnQgYXNzZXNzbWVudCddXG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qIENvbXBldGVuY3kgKi9cbiAgICBpZiAoY29tcGV0ZW5jeT8ubGVuZ3RoKSB7XG4gICAgICBmaWx0ZXJzWydjb21wZXRlbmNpZXNfdjYuY29tcGV0ZW5jeUFyZWFOYW1lJ10gPSBjb21wZXRlbmN5O1xuICAgIH1cblxuICAgIC8qIExhbmd1YWdlICovXG4gICAgaWYgKGxhbmd1YWdlPy5sZW5ndGgpIHtcbiAgICAgIGZpbHRlcnMubGFuZ3VhZ2UgPSBsYW5ndWFnZS5tYXAoKHg6IHN0cmluZykgPT5cbiAgICAgICAgeC50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qIFByb3ZpZGVyICovXG4gICAgaWYgKHByb3ZpZGVyPy5sZW5ndGgpIHtcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uID0gcHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLyogUmF0aW5nICovXG4gICAgaWYgKHJhdGluZz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBoaWdoZXN0UmF0aW5nID0gTWF0aC5tYXgoXG4gICAgICAgIC4uLnJhdGluZy5tYXAoKHI6IHN0cmluZykgPT5cbiAgICAgICAgICBOdW1iZXIoci5zcGxpdCgnICcpWzBdKVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXJzLmF2Z1JhdGluZyA9IHtcbiAgICAgICAgJz49JzogaGlnaGVzdFJhdGluZ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiBEdXJhdGlvbiAqL1xuICAgIGlmIChkdXJhdGlvbj8ubGVuZ3RoKSB7XG4gICAgICBmaWx0ZXJzLmR1cmF0aW9uID0gZHVyYXRpb25bMF07XG4gICAgfVxuXG4gICAgY29uc3QgcmVxQm9keSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgJ2Rvd25sb2FkVXJsJyxcbiAgICAgICAgICAnb3JnYW5pc2F0aW9uJyxcbiAgICAgICAgICAnbGFuZ3VhZ2UnLFxuICAgICAgICAgICdzb3VyY2UnLFxuICAgICAgICAgICdhcHBJY29uJyxcbiAgICAgICAgICAnaWRlbnRpZmllcicsXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgICdwcmltYXJ5Q2F0ZWdvcnknLFxuICAgICAgICAgICdjb250ZW50VHlwZScsXG4gICAgICAgICAgJ3Bvc3RlckltYWdlJyxcbiAgICAgICAgICAnY3JlYXRlZE9uJyxcbiAgICAgICAgICAnZHVyYXRpb24nLFxuICAgICAgICAgICdhdmdSYXRpbmcnLFxuICAgICAgICAgICdhZGRpdGlvbmFsVGFncycsXG4gICAgICAgICAgJ2NvdXJzZUNhdGVnb3J5JyxcbiAgICAgICAgICAnbWltZVR5cGUnLFxuICAgICAgICAgICdjb250ZW50SWQnLFxuICAgICAgICAgICdjcmVhdG9yTG9nbycsXG4gICAgICAgICAgJ3NlY3RvckRldGFpbHNfdjEnLFxuICAgICAgICAgICdsYW5ndWFnZU1hcFYxJyxcbiAgICAgICAgICAnbGFuZ3VhZ2UnLFxuICAgICAgICAgICdjb21wbGV0aW9uU3VydmV5TGluaycsXG4gICAgICAgICAgJ2RpZmZpY3VsdHlMZXZlbCcsXG4gICAgICAgICAgJ2NvbXBldGVuY2llc192Ni5jb21wZXRlbmN5QXJlYU5hbWUnXG4gICAgICAgIF0sXG4gICAgICAgIGZhY2V0czogW1xuICAgICAgICAgICdhdmdSYXRpbmcnLFxuICAgICAgICAgICdsYW5ndWFnZScsXG4gICAgICAgICAgJ29yZ2FuaXNhdGlvbicsXG4gICAgICAgICAgJ2NvdXJzZUNhdGVnb3J5JyxcbiAgICAgICAgICAnc2VjdG9yRGV0YWlsc192MS5zZWN0b3JOYW1lJyxcbiAgICAgICAgICAnc2VjdG9yRGV0YWlsc192MS5zdWJTZWN0b3JOYW1lJyxcbiAgICAgICAgICAnY29tcGV0ZW5jaWVzX3Y2LmNvbXBldGVuY3lBcmVhTmFtZScsXG4gICAgICAgICAgJ2NvbXBldGVuY2llc192Ni5jb21wZXRlbmN5VGhlbWVOYW1lJyxcbiAgICAgICAgICAnY29tcGV0ZW5jaWVzX3Y2LmNvbXBldGVuY3lTdWJUaGVtZU5hbWUnLFxuICAgICAgICAgICdkdXJhdGlvbidcbiAgICAgICAgXSxcbiAgICAgICAgcXVlcnk6IHRoaXMuc2VhcmNoVGV4dD8udHJpbSgpIHx8ICcnLFxuICAgICAgICBsaW1pdDogdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgb2Zmc2V0OiB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgIGNyZWF0ZWRPbjogJ2Rlc2MnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICAnQVBJIEZJTFRFUiBQQVlMT0FEJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHJlcUJvZHksIG51bGwsIDIpXG4gICAgKTtcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRJR09UU3VnZ2VzdGVkQ291cnNlcyhyZXFCb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG5cblxuICAgICAgICB0aGlzLnN1Z2dlc3RlZENvdXJzZXMgPVxuICAgICAgICAgIHJlcz8ucmVzdWx0Py5jb250ZW50IHx8IFtdO1xuXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9XG4gICAgICAgICAgcmVzPy5yZXN1bHQ/LnRvdGFsSGl0cyB8fFxuICAgICAgICAgIHJlcz8ucmVzdWx0Py5jb3VudCB8fFxuICAgICAgICAgIDA7XG5cbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5jZWlsKFxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCAvIHRoaXMucGFnZVNpemVcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG5cbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIG9uU2VhcmNoQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcblxuICAgIHRoaXMubG9hZENvdXJzZXNCeUZpbHRlcnMoKTtcbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShwYWdlOiBudW1iZXIpIHtcbiAgICBpZiAocGFnZSA+PSAwICYmIHBhZ2UgPCB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xuICAgICAgdGhpcy5sb2FkQ291cnNlc0J5RmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcblxuICAgIHRoaXMuZmlsdGVyRm9ybS5yZXNldCh7XG4gICAgICBjb21wZXRlbmN5OiBbXSxcbiAgICAgIHJhdGluZzogW10sXG4gICAgICBsYW5ndWFnZTogW10sXG4gICAgICBkdXJhdGlvbjogW10sXG4gICAgICBwcm92aWRlcjogW11cbiAgICB9KTtcblxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuXG4gICAgdGhpcy5sb2FkQ291cnNlc0J5RmlsdGVycygpO1xuICB9XG5cbiAgZmlsdGVyTGlzdCh2YWx1ZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWFyY2ggPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjb21wZXRlbmN5JzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbXBldGVuY3kgPSB0aGlzLmNvbXBldGVuY2llc1R5cGUuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JhdGluZyc6XG4gICAgICAgIHRoaXMuZmlsdGVyZWRSYXRpbmdzID0gdGhpcy5yYXRpbmdzLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYW5ndWFnZSc6XG4gICAgICAgIHRoaXMuZmlsdGVyZWRMYW5ndWFnZXMgPSB0aGlzLmxhbmd1YWdlcy5maWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZHVyYXRpb24nOlxuICAgICAgICB0aGlzLmZpbHRlcmVkRHVyYXRpb25zID0gdGhpcy5kdXJhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICh2OiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgICAgIHYubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncHJvdmlkZXInOlxuICAgICAgICB0aGlzLmZpbHRlcmVkUHJvdmlkZXJzID0gdGhpcy5wcm92aWRlcnMuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdWdnZXN0LWNvdXJzZXMtcGxhblwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Z2dlc3QtY291cnNlcy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgU3VnZ2VzdCBDb3Vyc2VzIGZyb20gaUdPVFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoZXNlIGNvdXJzZXMgaXMgY29taW5nIGZyb20gdGhlIGlHT1QgcGxhdGZvcm08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWdnZXN0LWNvdXJzZS1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJDYW5jZWxcIiAoY2xpY2spPVwiY2FuY2VsKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwic2VsZWN0RmlsdGVyQ291cnNlcz8ubGVuZ3RoID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0RmlsdGVyQ291cnNlcz8ubGVuZ3RoID8gJ2J0bi1hY3RpdmUnOididG4tZGlzYWJsZSdcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJBZGRcIiAoY2xpY2spPVwiYWRkQ291cnNlcygpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWZpbHRlci1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiIGNsYXNzPVwiZmlsdGVycy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlci1pbXByb3ZlZCBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWFyY2ggQ291cnNlczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyLWNvbXBhY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZWFyY2gtaWNvblwiPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInNpbnB1dC1jb21wYWN0XCIgW3ZhbHVlXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uU2VhcmNoQ2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIENvdXJzZXNcIiB0eXBlPVwidGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWxlY3QgQ29tcGV0ZW5jeTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLmNvbXBldGVuY3k/Lmxlbmd0aCA/ICcnIDogJ0NvbXBldGVuY3knIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lcIiBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIENvbXBldGVuY3lcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ2NvbXBldGVuY3knKVwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWRDb21wZXRlbmN5XCIgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IFJhdGluZzwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLnJhdGluZz8ubGVuZ3RoID8gJycgOiAnUmF0aW5nJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJyYXRpbmdcIiBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIFJlYXRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsICdyYXRpbmcnKVwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWRSYXRpbmdzXCIgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXItaW1wcm92ZWQtc2VjLTIgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWxlY3QgTGFuZ3VhZ2U8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyRm9ybS52YWx1ZS5sYW5ndWFnZT8ubGVuZ3RoID8gJycgOiAnTGFuZ3VhZ2UnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImxhbmd1YWdlXCIgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2NjYzsgcGFkZGluZzogNXB4O3dpZHRoOiA5MiU7bWFyZ2luOiA1cHg7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNlYXJjaCBMYW5ndWFnZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ2xhbmd1YWdlJylcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZhbHVlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCByIG9mIGZpbHRlcmVkTGFuZ3VhZ2VzXCIgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBEdXJhdGlvbjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLmR1cmF0aW9uPy5sZW5ndGggPyAnJyA6ICdEdXJhdGlvbicgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZHVyYXRpb25cIiBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIER1cmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsICdkdXJhdGlvbicpXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZCBvZiBkdXJhdGlvbnNcIiBbdmFsdWVdPVwiZC52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBQcm92aWRlcjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0udmFsdWUucHJvdmlkZXI/Lmxlbmd0aCA/ICcnIDogJ1Byb3ZpZGVyJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJwcm92aWRlclwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VsZWN0LXNlYXJjaC1wYW5lbFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiYXBwbHlGaWx0ZXJzKClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYm94IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggUHJvdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ3Byb3ZpZGVyJylcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZhbHVlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCByIG9mIGZpbHRlcmVkUHJvdmlkZXJzXCIgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiA0NXB4O21hcmdpbi1sZWZ0OiAyMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIlJlc2V0IEFsbCBGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXJzKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MTZweDtmb250LXdlaWdodDpib2xkO2NvbG9yOiMwMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcmVkIENvdXJzZSBDb3VudCA6IHt7ZmlsdGVyZENvdXJzZXM/Lmxlbmd0aH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzdWItaGVhZGluZ1wiICpuZ0lmPVwiZmlsdGVyZENvdXJzZXM/Lmxlbmd0aCA9PT0gMCBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Tm8gRGF0YSBGb3VuZDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwic3VnZ2VzdGVkQ291cnNlcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHRzLWhlYWRlclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09XCJmYWxzZVwiIChjaGFuZ2UpPVwic2VsZWN0QWxsQ291cnNlcygkZXZlbnQpXCI+U2VsZWN0IEFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZXM8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHRzLWluZm9cIiAqbmdJZj1cInRvdGFsQ291bnQgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIj5TaG93aW5nIHt7IHN0YXJ0SXRlbSB9fSAtIHt7IGVuZEl0ZW0gfX0gb2Yge3sgdG90YWxDb3VudCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWNhcmQtbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtY2FyZC1jb250YWluZXIgbXQtMlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1Z2dlc3RlZENvdXJzZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIOKchSBDaGVja2JveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT1cImNoZWNrSWZDb3Vyc2VFeGlzdHMoaXRlbSlcIiBjbGFzcz1cImltYWdlLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RlZEZpbHRlckNvdXJzZXMoJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSDinIUgSW1hZ2UgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW0/LnBvc3RlckltYWdlXCIgKGVycm9yKT1cIm9uSW1nRXJyb3IoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXBpbGwtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvY291cnNlLnN2Z1wiPjwvc3Bhbj4mbmJzcDs8c3Bhbj5Db3Vyc2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZyBtdC0yIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9Db3VyZShpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7IGl0ZW0/Lm5hbWUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGRlc2NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57eyBpdGVtPy5kZXNjcmlwdGlvbiB8IHNsaWNlOiAwOjIwMCB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFBhZ2luYXRpb24gQ29udHJvbHMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi1jb250cm9scyBtdC00XCIgKm5nSWY9XCJ0b3RhbFBhZ2VzID4gMVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCIhaGFzUHJldmlvdXNQYWdlXCIgKGNsaWNrKT1cImdvVG9GaXJzdFBhZ2UoKVwiIHRpdGxlPVwiRmlyc3QgUGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Zmlyc3RfcGFnZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiIWhhc1ByZXZpb3VzUGFnZVwiIChjbGljayk9XCJnb1RvUHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlByZXZpb3VzIFBhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNoZXZyb25fbGVmdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRpb24taW5mb1wiIHN0eWxlPVwibWFyZ2luOiAwIDE1cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIFBhZ2Uge3sgY3VycmVudFBhZ2UgKyAxIH19IG9mIHt7IHRvdGFsUGFnZXMgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiIWhhc05leHRQYWdlXCIgKGNsaWNrKT1cImdvVG9OZXh0UGFnZSgpXCIgdGl0bGU9XCJOZXh0IFBhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2Rpc2FibGVkXT1cIiFoYXNOZXh0UGFnZVwiIChjbGljayk9XCJnb1RvTGFzdFBhZ2UoKVwiIHRpdGxlPVwiTGFzdCBQYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5sYXN0X3BhZ2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gTm8gUmVzdWx0cyBNZXNzYWdlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdHMgbXQtNFwiICpuZ0lmPVwiIWxvYWRpbmcgJiYgc3VnZ2VzdGVkQ291cnNlcy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAyMHB4O1wiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZFwiPnt7IHNlYXJjaFRleHQudHJpbSgpID8gJ05vIGNvdXJzZXMgZm91bmQgZm9yIHlvdXIgc2VhcmNoLicgOiAnTm8gY291cnNlc1xuICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUuJyB9fTwvcD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJzZWFyY2hUZXh0LnRyaW0oKVwiIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCI+Q2xlYXJcbiAgICAgICAgICAgICAgICAgICAgU2VhcmNoPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtY2FyZD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
|