@eo-sdk/client 11.12.0-rc.3 → 11.12.1
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/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
- package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts +0 -1
- package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
- package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
- package/app/eo-framework/object-form/object-form-edit/object-form-edit.component.d.ts.map +1 -1
- package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +3 -8
- package/esm2022/app/eo-framework/inbox-details/inbox-details.component.mjs +2 -2
- package/esm2022/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +2 -5
- package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +7 -2
- package/fesm2022/eo-sdk-client.mjs +12 -15
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -82,8 +82,6 @@ let AppSearchComponent = class AppSearchComponent {
|
|
|
82
82
|
term: []
|
|
83
83
|
});
|
|
84
84
|
this.onExecuteSearch = new EventEmitter();
|
|
85
|
-
// a flag to indicate that the search is being reset
|
|
86
|
-
this.isResetting = false;
|
|
87
85
|
this.datePipe = new LocaleDatePipe(translate);
|
|
88
86
|
this.expertModeSupport.baseParams = Object.keys(SearchQuery.BASE_PARAMS).map(k => {
|
|
89
87
|
let data = SearchQuery.BASE_PARAMS[k];
|
|
@@ -176,7 +174,7 @@ let AppSearchComponent = class AppSearchComponent {
|
|
|
176
174
|
this.idxSearch.contextFolderType = null;
|
|
177
175
|
setTimeout(() => {
|
|
178
176
|
this.updateSearchFilterFromFormData();
|
|
179
|
-
},
|
|
177
|
+
}, 200);
|
|
180
178
|
}
|
|
181
179
|
// decide whether or not to setup an indexdata search
|
|
182
180
|
const activateIndexdataSearch = this.query.__updateCause === SearchQuery.UPDATE_CAUSE.TYPES_SET
|
|
@@ -529,11 +527,9 @@ let AppSearchComponent = class AppSearchComponent {
|
|
|
529
527
|
else {
|
|
530
528
|
this.expertModeQueryEmpty = true;
|
|
531
529
|
}
|
|
532
|
-
this.isResetting = false;
|
|
533
530
|
}, Utils.throw(() => {
|
|
534
531
|
this.logger.error('Error fetching search result');
|
|
535
532
|
this.expertModeQueryEmpty = true;
|
|
536
|
-
this.isResetting = false;
|
|
537
533
|
}));
|
|
538
534
|
}
|
|
539
535
|
else {
|
|
@@ -647,7 +643,7 @@ let AppSearchComponent = class AppSearchComponent {
|
|
|
647
643
|
}
|
|
648
644
|
}
|
|
649
645
|
updateSearchFilterFromFormData() {
|
|
650
|
-
if (!this.indexdataForm
|
|
646
|
+
if (!this.indexdataForm) {
|
|
651
647
|
return;
|
|
652
648
|
}
|
|
653
649
|
// add metadata filters for each form data entry
|
|
@@ -701,7 +697,6 @@ let AppSearchComponent = class AppSearchComponent {
|
|
|
701
697
|
}
|
|
702
698
|
}
|
|
703
699
|
resetQuery() {
|
|
704
|
-
this.isResetting = true;
|
|
705
700
|
this.appSearchService.reset();
|
|
706
701
|
this.isOwnQuery = false;
|
|
707
702
|
this.activeTabId = undefined;
|
|
@@ -836,4 +831,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
836
831
|
}], onExecuteSearch: [{
|
|
837
832
|
type: Output
|
|
838
833
|
}] } });
|
|
839
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hcHAtc2hlbGwvYXBwLWJhci9hcHAtc2VhcmNoL2FwcC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYXBwLXNoZWxsL2FwcC1iYXIvYXBwLXNlYXJjaC9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsUUFBUSxJQUFJLGtCQUFrQixFQUM5QixJQUFJLElBQUksY0FBYyxFQUN0QixFQUFFLElBQUksWUFBWSxFQUNsQixPQUFPLEVBRVAsR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUVwRixPQUFPLEVBUUwsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBSVgsV0FBVyxFQUlYLEtBQUssRUFDTixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUMsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc1RCxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFrQjtJQTJEN0IsSUFBSSxRQUFRLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsU0FB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QVcsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUM7OEdBaDVCVSxrQkFBa0I7a0dBQWxCLGtCQUFrQix5TEFLRSxXQUFXLHVZQ3RFNUMsaXR1QkFrYkE7O0FEalhhLGtCQUFrQjtJQVQ5QixZQUFZLEVBQUU7R0FTRixrQkFBa0IsQ0FpNUI5Qjs7MkZBajVCWSxrQkFBa0I7a0JBUjlCLFNBQVM7K0JBQ0UsZUFBZSxpQkFHVixpQkFBaUIsQ0FBQyxJQUFJOzRlQVNRLFNBQVM7c0JBQXJELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQztnQkFDakIsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNGLFdBQVc7c0JBQWhDLFNBQVM7dUJBQUMsU0FBUztnQkFDRSxhQUFhO3NCQUFsQyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ0UsV0FBVztzQkFBaEMsU0FBUzt1QkFBQyxTQUFTO2dCQWlEYixlQUFlO3NCQURyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luLFxuICBmcm9tIGFzIG9ic2VydmFibGVGcm9tLFxuICBvZiBhcyBvYnNlcnZhYmxlT2YsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgdGFwXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHBsdWNrLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF2aWdhdGlvbkV4dHJhcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRm9ybVN0YXR1c0NoYW5nZWRFdmVudFxufSBmcm9tICcuLi8uLi8uLi9vYmplY3QtZm9ybS9pbmRleCc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBOZ0Zvcm19IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BpcGVzL2xvY2FsZS1kYXRlLnBpcGUnO1xuaW1wb3J0IHtBcHBTZWFyY2hTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9zZWFyY2gvYXBwLXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENhcGFiaWxpdGllcyxcbiAgQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgTG9nZ2VyLFxuICBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgT2JqZWN0VHlwZSxcbiAgUXVlcnlTY29wZSxcbiAgUmFuZ2VWYWx1ZSxcbiAgU2VhcmNoRmlsdGVyLFxuICBTZWFyY2hRdWVyeSxcbiAgU2VhcmNoU2VydmljZSxcbiAgU2VhcmNoU3RhdGUsXG4gIFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICBTdG9yZWRRdWVyeSxcbiAgU3lzdGVtU2VydmljZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgVXNlclNlcnZpY2UsXG4gIFV0aWxzXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0F1dG9Db21wbGV0ZX0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge0NvbnRleHRUeXBlLCBJZHhTZWFyY2h9IGZyb20gJy4vYXBwLXNlYXJjaC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtZdmNPdmVybGF5UmVmLCBZdmNPdmVybGF5U2VydmljZX0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJsYXknO1xuaW1wb3J0IHtVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkfSBmcm9tIFwiQG5nbmVhdC91bnRpbC1kZXN0cm95XCI7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tYXBwLXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG4gIC8vIHRvZG86IGFwcGx5IG9uUHVzaCBjaGFuZ2UgZGV0ZWN0aW9uIChhZ2cgc2VhcmNoIHJlc3VsdCByaWdodCBub3cgZG9lc24ndCB1cGRhdGUpXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFwcFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgUEFSQU1TID0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVM7XG4gIE9QRVJBVE9SID0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SO1xuICBxdWVyeVNjb3BlOiBRdWVyeVNjb3BlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RwbFNlYXJjaCcsIHtyZWFkOiBUZW1wbGF0ZVJlZn0pIHRwbFNlYXJjaDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dDogQXV0b0NvbXBsZXRlO1xuICBAVmlld0NoaWxkKCd4cGlucHV0JykgZXhwZXJ0SW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lkeGZvcm0nKSBpbmRleGRhdGFGb3JtOiBPYmplY3RGb3JtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdjdHhmb3JtJykgY29udGV4dEZvcm06IE9iamVjdEZvcm1Db21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZj86IFl2Y092ZXJsYXlSZWY7XG4gIHByaXZhdGUgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBxdWVyeVN0YXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHF1ZXJ5OiBTZWFyY2hRdWVyeTtcbiAgcXVlcnlTdGF0ZTogU2VhcmNoU3RhdGU7XG4gIGNhcGFiaWxpdGllczogQ2FwYWJpbGl0aWVzO1xuICBhY3RpdmVUYWJJZD86IHN0cmluZztcbiAgbG9hZGluZzogYm9vbGVhbjtcblxuICBpc1N0b3JlZFF1ZXJ5OiBib29sZWFuO1xuICBpc093blF1ZXJ5ID0gZmFsc2U7XG4gIG9iamVjdFR5cGVHcm91cHMgPSBbXTtcbiAgdHlwZUdyb3VwVHJlZSA9IFtdO1xuICBhdXRvY29tcGxldGVSZXN1bHRzOiBzdHJpbmdbXTtcblxuICBpZHhTZWFyY2g6IElkeFNlYXJjaDtcbiAgY3VycmVudENvbnRleHRGb2xkZXJOYW1lO1xuXG4gIGV4cGVydE1vZGVRdWVyeUVtcHR5ID0gZmFsc2U7XG4gIGV4cGVydE1vZGVTdXBwb3J0ID0ge1xuICAgIGJhc2VQYXJhbXM6IFtdLFxuICAgIHNlbGVjdGVkR3JvdXA6IG51bGwsXG4gICAgc2VsZWN0ZWRUeXBlOiBudWxsXG4gIH07XG5cbiAgZmlsdGVyc01vZGVsID0ge307XG4gIGFnZ3JlZ2F0aW9uc01vZGVsID0ge307XG4gIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgc3lzUm9vdENvbnRleHQgPSB7XG4gICAgaWQ6IG51bGwsXG4gICAgbmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdCxcbiAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYWRkLnRpdGxlLmxvY2F0aW9uLmNvbW1vbicpLFxuICAgIHNpdHVhdGlvbjogJ1NFQVJDSCcsXG4gICAgbW9kZTogJ0NPTlRFWFQnLFxuICAgIGNvbnRleHRGb3JtT3B0aW9uczoge1xuICAgICAgZm9ybU1vZGVsOiB7bmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdH1cbiAgICB9XG4gIH07XG5cbiAgX3NlbGVjdGVkOiBudW1iZXIgPSBudWxsO1xuXG4gIG9iamVjdFR5cGVHcm91cHNTdG9yYWdlS2V5ID0gJ2VvLmFwcC5zZWFyY2gub2JqZWN0LnR5cGUuZ3JvdXAuc29ydGVkTGlzdCc7XG4gIHRlcm1Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgdGVybTogW11cbiAgfSk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkV4ZWN1dGVTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHNldCBzZWxlY3RlZChpbmRleCkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgPT09IGluZGV4ID8gbnVsbCA6IGluZGV4O1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuXG4gIGdldCBzdG9yZWRRdWVyeSgpOiBTdG9yZWRRdWVyeSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkgYXMgU3RvcmVkUXVlcnk7XG4gIH1cblxuICAvLyBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2VhcmNoIGlzIGJlaW5nIHJlc2V0XG4gIGlzUmVzZXR0aW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTZWFyY2hTZXJ2aWNlOiBBcHBTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheTogWXZjT3ZlcmxheVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdG9yZWRRdWVyaWVzU2VydmljZTogU3RvcmVkUXVlcmllc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYXBhYmlsaXR5U2VydmljZTogQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcbiAgKSB7XG5cbiAgICB0aGlzLmRhdGVQaXBlID0gbmV3IExvY2FsZURhdGVQaXBlKHRyYW5zbGF0ZSk7XG5cbiAgICB0aGlzLmV4cGVydE1vZGVTdXBwb3J0LmJhc2VQYXJhbXMgPSBPYmplY3Qua2V5cyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykubWFwKGsgPT4ge1xuICAgICAgbGV0IGRhdGEgPSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1trXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5nbG9iYWwuYmFzZXBhcmFtLicgKyBkYXRhKSxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRFRF0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNcbiAgICApLm1hcChrID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1trXSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLicgKyBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVEXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1xuICAgICkubWFwKGsgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUuJyArIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba11cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTUlNRVRZUEVHUk9VUF0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5Lk1JTUVUWVBFR1JPVVBfQlVDS0VUU1xuICAgICkubWFwKGsgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBTZWFyY2hRdWVyeS5NSU1FVFlQRUdST1VQX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IFNlYXJjaFF1ZXJ5Lk1JTUVUWVBFR1JPVVBfQlVDS0VUU1trXVxuICAgICAgfTtcbiAgICB9KS5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5GSUxFU0laRV0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLmZpbGVzaXplLicgKyBTZWFyY2hRdWVyeS5GSUxFX1NJWkVfQlVDS0VUU1trXVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgb25UYWJDaGFuZ2UodGFiSWQ6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWJJZDtcbiAgICBpZiAodGFiSWQgPT09ICdyZXN0cmljdFR5cGUnKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICBzdWI6IHtcbiAgICAgICAgICAgIGNvbnRleHRmb2xkZXJ0eXBlOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0Q3JlYXRlZCcpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIGNyZWF0ZWQ6IHt9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRhYklkID09PSAncmVzdHJpY3RNb2RpZmljYXRpb24nKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHt9LFxuICAgICAgICBtb2RpZmllZDoge31cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGFiSWQgPT09ICdyZXN0cmljdEZpbGUnKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHt9LFxuICAgICAgICBtaW1ldHlwZWdyb3VwOiB7fSxcbiAgICAgICAgZmlsZXNpemU6IHt9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUXVlcnkocXVlcnk6IFNlYXJjaFF1ZXJ5KSB7XG4gICAgLy8gSU1QT1JUQU5UOiBuZXZlciBjaGFuZ2UgdGhlIGxvY2FsIHF1ZXJ5IGRpcmVjdGx5XG4gICAgLy8gdXNlIHNlYXJjaFNlcnZpY2UsIHNvIGV2ZXJ5IGNvbXBvbmVudHMgc3Vic2NyaWJlZCB0byB0aGUgcXVlcnlcbiAgICAvLyB3aWxsIGdldCB0aGUgbmV3IHZhbHVlXG4gICAgdGhpcy5xdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuY3VycmVudENvbnRleHRGb2xkZXJOYW1lID0gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoXG4gICAgICA/IHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdLm5hbWVcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLmlzU3RvcmVkUXVlcnkgPSBxdWVyeSBpbnN0YW5jZW9mIFN0b3JlZFF1ZXJ5O1xuXG4gICAgaWYgKHRoaXMuaXNTdG9yZWRRdWVyeSkge1xuICAgICAgY29uc3QgdXNlciA9IHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgIHRoaXMuaXNPd25RdWVyeSA9XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkudXNlci50b0xvd2VyQ2FzZSgpID09PSB1c2VyLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykuZm9yRWFjaChrID0+IHRoaXMucHJvY2Vzc0ZpbHRlcnMoaykpO1xuICAgIC8vIGlmIHdlIGhhdmUgYW4gaW5kZXhkYXRhIHNlYXJjaCB1c2luZyBhIGNvbnRleHQgYnV0IHRoZSBjb250ZXh0IHdhcyByZW1vdmVkXG4gICAgaWYgKFxuICAgICAgIXRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCAmJlxuICAgICAgdGhpcy5pZHhTZWFyY2ggJiZcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9uc1xuICAgICkge1xuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zID0gbnVsbDtcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb2xkZXJUeXBlID0gbnVsbDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpbHRlckZyb21Gb3JtRGF0YSgpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgLy8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIHNldHVwIGFuIGluZGV4ZGF0YSBzZWFyY2hcbiAgICBjb25zdCBhY3RpdmF0ZUluZGV4ZGF0YVNlYXJjaCA9IHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9PT0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRZUEVTX1NFVFxuICAgICAgfHwgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID09PSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuQ09OVEVYVF9GT0xERVJfU0VUO1xuICAgIGlmIChhY3RpdmF0ZUluZGV4ZGF0YVNlYXJjaCkge1xuICAgICAgLy8gaGF2aW5nIGp1c3Qgb25lIHRhcmdldCB0eXBlIGFuZCBhIGNvbnRleHQgdHlwZSBzZXR1cCBtZWFucywgdGhhdCB3ZSBhcmUgdXNpbmcgaW5kZXhkYXRhIHNlYXJjaFxuICAgICAgdGhpcy5pbmRleGRhdGFTZWFyY2goXG4gICAgICAgIHRoaXMucXVlcnkudHlwZXNbMF0sXG4gICAgICAgIHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCA+IDAgPyB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlc1swXSA6IG51bGxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID09PSAxICYmXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnModGhpcy5xdWVyeSkubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgLy8gaGF2aW5nIGp1c3Qgb25lIHRhcmdldCB0eXBlIGFuZCBpbmRleGRhdGEgZmlsdGVycyBhbHNvIG1lYW5zLCB0aGF0IHdlIGFyZSB1c2luZyBpbmRleGRhdGEgc2VhcmNoXG4gICAgICB0aGlzLmluZGV4ZGF0YVNlYXJjaCh0aGlzLnF1ZXJ5LnR5cGVzWzBdKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gcmVzZXQgaW5kZXhkYXRhIHNlYXJjaCBvdGhlcndpc2UsIGJlY2F1c2UgdGhlIGN1cnJlbnQgcXVlcnkgbWF5IGJlIHJlc2V0IGZyb20gb3V0IHNpZGUgKGUuZy4gYnkgYSBzdG9yZWQgcXVlcnkpXG4gICAgICB0aGlzLmlkeFNlYXJjaCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5LmV4cGVydE1vZGUpIHtcbiAgICAgIHRoaXMudHlwZUdyb3VwVHJlZSA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5idWlsZFR5cGVHcm91cFRyZWUoKTtcbiAgICB9XG4gICAgdGhpcy5xdWVyeVNjb3BlID0gcXVlcnkuc2NvcGU7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0T2JqZWN0VHlwZSh0eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgLyoqIHNldCB1cCB0aGUgcmlnaHQgdHlwZSBmaWx0ZXIgaWYgbm90IGFscmVhZHkgZG9uZSAqL1xuICAgIGNvbnN0IHF1ZXJ5VHlwZXNMZW5ndGggPVxuICAgICAgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPiAxIHx8IHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID09PSAwO1xuICAgIGNvbnN0IHF1ZXJ5VHlwZXNMZW5ndGhBbmROYW1lID1cbiAgICAgIHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID09PSAxICYmIHRoaXMucXVlcnkudHlwZXNbMF0ubmFtZSAhPT0gdHlwZS5uYW1lO1xuICAgIGlmIChxdWVyeVR5cGVzTGVuZ3RoIHx8IHF1ZXJ5VHlwZXNMZW5ndGhBbmROYW1lKSB7XG4gICAgICAvLyBzZXR0aW5nIG9iamVjdCB0eXBlcyB3aWxsIGVtaXQgYSBuZXcgcXVlcnkuIFRoaXMgd2lsbCB0aGVuIHRha2UgY2FyZSBvZlxuICAgICAgLy8gc2V0dGluZyB1cCB0aGUgaW5kZXhkYXRhIGZvcm1cbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRRdWVyeVR5cGVzKFt0eXBlXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgaW5kZXhkYXRhIHNlYXJjaCBmb3IgYSBnaXZlbiBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gdHlwZSAtIGFuIG9iamVjdCB0eXBlXG4gICAqIEBwYXJhbSBjb250ZXh0Rm9sZGVyVHlwZSAtIGNvbnRleHQgZm9sZGVyIHR5cGVcbiAgICovXG4gIHB1YmxpYyBpbmRleGRhdGFTZWFyY2godHlwZTogT2JqZWN0VHlwZSwgY29udGV4dEZvbGRlclR5cGU/OiBPYmplY3RUeXBlKSB7XG4gICAgaWYgKCF0eXBlIHx8IHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5xdWVyeS50eXBlc1swXS5uYW1lID09PSB0eXBlLm5hbWUpIHtcbiAgICAgIC8qKiBldmVuIGlmIHdlIHNlbGVjdCBhIHR5cGUgdGhhdCBpcyBhbHJlYWR5IHNlbGVjdGVkLCB3ZSBuZWVkIHRvIGNhbGwgYWdncmVnYXRlIGFzIHRoZXJlIG1heSBiZSBjb250ZXh0IHR5cGVzIGludm9sdmVkICovXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICBzdWI6IHtcbiAgICAgICAgICAgIGNvbnRleHRmb2xkZXJ0eXBlOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVyaXZlZFR5cGVzID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGVzKCkuZmlsdGVyKHQgPT4gdC5zdXBlcnR5cGVzLmluY2x1ZGVzKHR5cGUucW5hbWUpKTtcbiAgICBjb25zdCBpc1Jvb3RUeXBlID0gISFkZXJpdmVkVHlwZXMuZmluZCh0ID0+IHQucGFyZW50dHlwZXMuaW5jbHVkZXMoJ3N5c3Jvb3QnKSkgfHwgISF0aGlzLmFwcFNlYXJjaFNlcnZpY2UudHlwZXNBbGxvd2VkVW5kZXJTeXNyb290LmZpbmQoclQgPT4gclQucW5hbWUgPT09IHR5cGUucW5hbWUpO1xuXG4gICAgdGhpcy5pZHhTZWFyY2ggPSB7XG4gICAgICB0eXBlLFxuICAgICAgY29udGV4dEZvbGRlclR5cGUsXG4gICAgICBjb250ZXh0TW9kZWxzOiBpc1Jvb3RUeXBlID8gW3RoaXMuc3lzUm9vdENvbnRleHRdIDogW10sXG4gICAgICBmb3JtT3B0aW9uczogbnVsbFxuICAgIH07XG5cbiAgICAvKiogZmV0Y2ggY29udGV4dCB0eXBlIG1vZGVscyAqL1xuICAgIGlmICh0eXBlLmFsbG93ZWRjb250ZXh0dHlwZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0b0ZldGNoID0gW107XG4gICAgICB0eXBlLmFsbG93ZWRjb250ZXh0dHlwZXMuZm9yRWFjaChjb250ZXh0VHlwZSA9PiB7XG4gICAgICAgIGNvbnN0IG9ialR5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZShjb250ZXh0VHlwZS5uYW1lKTtcbiAgICAgICAgaWYgKG9ialR5cGUpIHtcbiAgICAgICAgICB0b0ZldGNoLnB1c2goXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZUZvcm0oXG4gICAgICAgICAgICAgIGNvbnRleHRUeXBlLm5hbWUsXG4gICAgICAgICAgICAgICdTRUFSQ0gnLFxuICAgICAgICAgICAgICAnQ09OVEVYVCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh0b0ZldGNoLmxlbmd0aCkge1xuICAgICAgICBvYnNlcnZhYmxlRm9ya0pvaW4odG9GZXRjaCkuc3Vic2NyaWJlKGZvcm1Nb2RlbHMgPT4ge1xuICAgICAgICAgIC8qKiBhYnN0cmFjdCBjb250ZXh0IHR5cGVzIHNob3VsZCBub3QgYmUgdXNlZCAqL1xuICAgICAgICAgIHRoaXMuYWRkQ29udGV4dE1vZGVsKGZvcm1Nb2RlbHMpO1xuICAgICAgICAgIC8qKiBpZiB0aGVyZSB3YXMgYSBjb250ZXh0IHR5cGUgcHJvdmlkZWQgYnkgdGhlIHF1ZXJ5LCB3ZSdsbCBzZXR1cCB0aGUgcmlnaHQgbW9kZWwgYXMgd2VsbCAqL1xuICAgICAgICAgIGlmIChjb250ZXh0Rm9sZGVyVHlwZSkge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmlkeFNlYXJjaC5jb250ZXh0TW9kZWxzLmZpbmQoXG4gICAgICAgICAgICAgIG0gPT4gbS5uYW1lID09PSBjb250ZXh0Rm9sZGVyVHlwZS5uYW1lXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAobW9kZWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb250ZXh0KG1vZGVsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dEZvbGRlclR5cGUubmFtZSA9PT0gQ29udGV4dFR5cGUuc3lzcm9vdCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbnRleHQodGhpcy5zeXNSb290Q29udGV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvKiogdGhlIHByb3ZpZGVkIGNvbnRleHQgdHlwZSBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgc28ganVzdCByZW1vdmUgaXQgKi9cbiAgICAgICAgICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvbGRlclR5cGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZvcm1EYXRhO1xuICAgIGxldCBpZHhGaWx0ZXJzID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKCk7XG4gICAgaWYgKGlkeEZpbHRlcnMgJiYgaWR4RmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBzZXQgdXAgZm9ybSBkYXRhIGZyb20gaW5kZXhkYXRhIHF1ZXJ5IGZpbHRlcnNcbiAgICAgIGZvcm1EYXRhID0gaWR4RmlsdGVycztcbiAgICB9XG5cbiAgICBjb25zdCBvYmplY3RUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUodHlwZS5uYW1lKTtcbiAgICBpZiAob2JqZWN0VHlwZSkge1xuICAgICAgdGhpcy5zeXN0ZW1TZXJ2aWNlXG4gICAgICAgIC5nZXRPYmplY3RUeXBlRm9ybSh0eXBlLm5hbWUsICdTRUFSQ0gnKVxuICAgICAgICAuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgICAgICB0aGlzLmlkeFNlYXJjaC5mb3JtT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGZvcm1Nb2RlbDogbW9kZWwsXG4gICAgICAgICAgICBkYXRhOiBmb3JtRGF0YVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1F1ZXJ5U3RhdGUocXVlcnlTdGF0ZTogU2VhcmNoU3RhdGUpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnF1ZXJ5U3RhdGUgPSBxdWVyeVN0YXRlO1xuICAgIGlmICh0aGlzLmlkeFNlYXJjaCkge1xuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEFnZ3JlZ2F0aW9ucyA9IHt9O1xuICAgICAgaWYgKHF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLmNvbnRleHRUeXBlLnNpemUpIHtcbiAgICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEFnZ3JlZ2F0aW9ucyA9IHRoaXMuYnVpbGRDb250ZXh0QWdncmVnYXRpb25zKHF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLmNvbnRleHRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzYXZlIGFnZ3JlZ2F0aW9ucyB2YWx1ZXNcbiAgICBpZiAoIXRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRV0gfHwgIXRoaXMucXVlcnkudHlwZXMubGVuZ3RoIHx8IHF1ZXJ5U3RhdGUubGFzdENoYW5nZSAhPT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRSkge1xuICAgICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFXSA9IG5ldyBNYXAocXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnMudHlwZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zeW5jQWdncmVnYXRpb25zKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkNSRUFURUQsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSk7XG4gICAgdGhpcy5zeW5jQWdncmVnYXRpb25zKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVELCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpO1xuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NSU1FVFlQRUdST1VQLCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU4pO1xuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5GSUxFU0laRSwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKTtcbiAgfVxuXG4gIGJ1aWxkQ29udGV4dEFnZ3JlZ2F0aW9ucyhjb250ZXh0VHlwZSkge1xuICAgIGxldCBjb250ZXh0QWdncmVnYXRpb25zID0ge307XG4gICAgY29udGV4dFR5cGUuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4gY29udGV4dEFnZ3JlZ2F0aW9uc1trZXldID0gdmFsdWUpO1xuICAgIHJldHVybiBjb250ZXh0QWdncmVnYXRpb25zO1xuICB9XG5cbiAgcHJvY2Vzc0ZpbHRlcnMoazogc3RyaW5nKSB7XG4gICAgbGV0IGY6IFNlYXJjaEZpbHRlciA9IHRoaXMucXVlcnkuZmlsdGVycy5maW5kKGZmID0+IGZmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1trXSk7XG4gICAgaWYgKCFmKSB7XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1trXV0gPSB7XG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICBtdWx0aVZhbHVlOiBbXSxcbiAgICAgICAgaW5uZXJWYWx1ZTogW11cbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICF0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XSB8fFxuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uZmlsdGVyICE9PSBmXG4gICAgKSB7XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XSA9IHt9O1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uZmlsdGVyID0gZjtcbiAgICAgIGxldCB2YWx1ZTogYW55ID1cbiAgICAgICAgdHlwZW9mIGYuZmlyc3RWYWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBmLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5cbiAgICAgICAgICA/IEpTT04ucGFyc2UoZi5maXJzdFZhbHVlKVxuICAgICAgICAgIDogdHlwZW9mIGYuZmlyc3RWYWx1ZSAhPT0gJ2Jvb2xlYW4nID8gW2YuZmlyc3RWYWx1ZV0gOiBmLmZpcnN0VmFsdWU7XG4gICAgICBpZiAoZi5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLm11bHRpVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0udmFsdWUgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkNSRUFURUQgfHxcbiAgICAgICAgICBmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFRFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBSYW5nZVZhbHVlKGYub3BlcmF0b3IsIGYuZmlyc3RWYWx1ZSwgZi5zZWNvbmRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0ubXVsdGlWYWx1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5pbm5lclZhbHVlID1cbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBBcnJheSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmxhYmVsID0gW107XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5pbm5lclZhbHVlLmZvckVhY2goKHY6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVE9SIHx8XG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRVJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0ubGFiZWxbaV0gPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmxhYmVsW2ldID0gb2JzZXJ2YWJsZU9mKFxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGaWx0ZXIoZiwgdilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzeW5jQWdncmVnYXRpb25zKG5hbWUsIG9wZXJhdG9yKSB7XG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtuYW1lXS5mb3JFYWNoKGFnZyA9PiB7XG4gICAgICBsZXQgYSA9IHRoaXMucXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNbbmFtZV0uZmluZChhYSA9PiBhYS5rZXkgPT09IGFnZy5rZXkpO1xuICAgICAgaWYgKGEgJiYgYS52YWx1ZSAhPT0gYWdnLnZhbHVlKSB7XG4gICAgICAgIGFnZy52YWx1ZSA9IGEudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKCFhICYmIHRoaXMucXVlcnlTdGF0ZS5sYXN0Q2hhbmdlICE9PSBuYW1lKSB7XG4gICAgICAgIGFnZy52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgYWdnLnNlbGVjdGVkID0gdGhpcy5pc0ZpbHRlckFjdGl2ZShuYW1lLCBvcGVyYXRvciwgYWdnLmtleSk7XG4gICAgICBhZ2cuc2F2ZWQgPSAhYSAmJiB0aGlzLnF1ZXJ5U3RhdGUubGFzdENoYW5nZSA9PT0gbmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlckZpbHRlcihmaWx0ZXI6IFNlYXJjaEZpbHRlciwgdmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGVSZXN0cmljdGlvbihmaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW2ZpbHRlci5wcm9wZXJ0eV0pIHtcbiAgICAgIGxldCBhZ2cgPSB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW2ZpbHRlci5wcm9wZXJ0eV0uZmluZChhID0+IGEua2V5ID09PSB2YWx1ZSk7XG4gICAgICByZXR1cm4gYWdnLmxhYmVsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBjcmVhdGVEYXRlUmVzdHJpY3Rpb24oZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcbiAgICBzd2l0Y2ggKGZpbHRlci5vcGVyYXRvcikge1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0U6XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGBlby5zZWFyY2guYWdnLnRpbWUuJHtmaWx0ZXIuZmlyc3RWYWx1ZX1gKTtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMOlxuICAgICAgICByZXR1cm4gYD0gJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnREYXRlJyl9YDtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOVEVSVkFMX0lOQ0xVREVfQk9USDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydCcpfSAtICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLnNlY29uZFZhbHVlLCAnZW9TaG9ydCcpfWA7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5HUkVBVEVSX09SX0VRVUFMOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4uc2luY2UnKX0gJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnQnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTEVTU19PUl9FUVVBTDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuLnVudGlsJyl9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgKCR7ZmlsdGVyLm9wZXJhdG9yfSkgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnQnKX1gO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVMYWJlbChtb2RlbDogYW55LCB2YWx1ZTogYW55W10pIHtcbiAgICBtb2RlbC5sYWJlbC5mb3JFYWNoKChsLCBpKSA9PiBsLm5leHQodmFsdWVbaV0udGl0bGUpKTtcbiAgfVxuXG4gIHJlc29sdmVTZWxlY3Rpb24oYWdnczogYW55W10sIGtleTogc3RyaW5nLCBzZWxlY3RlZDogYm9vbGVhbikge1xuICAgIHJldHVybiBhZ2dzXG4gICAgICAuZmlsdGVyKGEgPT4gc2VsZWN0ZWQgPyBhLmtleSAhPT0ga2V5ICYmIGEuc2VsZWN0ZWQgOiBhLmtleSA9PT0ga2V5IHx8IGEuc2VsZWN0ZWQpXG4gICAgICAubWFwKGEgPT4gYS5rZXkpO1xuICB9XG5cbiAgcmVzZXRFeHBlcnRNb2RlSW5wdXQoKSB7XG4gICAgdGhpcy5xdWVyeS50ZXJtID0gJyc7XG4gICAgdGhpcy50ZXJtRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHRlcm06ICcnXG4gICAgfSk7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUV4cGVydE1vZGUoKSB7XG4gICAgaWYgKHRoaXMudHlwZUdyb3VwVHJlZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudHlwZUdyb3VwVHJlZSA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5idWlsZFR5cGVHcm91cFRyZWUoKTtcbiAgICB9XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZUV4cGVydE1vZGUoKTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmNoYW5nZVNlYXJjaElucHV0Rm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRRdWVyeVNjb3BlKHNjb3BlOiBRdWVyeVNjb3BlKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldFF1ZXJ5U2NvcGUoc2NvcGUpO1xuICB9XG5cbiAgcHVibGljIHhwU2VsZWN0R3JvdXAoZ3JvdXApIHtcbiAgICB0aGlzLmV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkR3JvdXAgPSBncm91cDtcbiAgICB0aGlzLmV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZSA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgeHBTZWxlY3RUeXBlKHR5cGUpIHtcbiAgICB0aGlzLmV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZSA9IHR5cGU7XG4gIH1cblxuICBwdWJsaWMgeHBBZGRUb1Rlcm0oc3RyKSB7XG4gICAgbGV0IHRlcm07XG4gICAgaWYgKCF0aGlzLnF1ZXJ5LnRlcm0pIHtcbiAgICAgIHRlcm0gPSBzdHI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlcm0gPSB0aGlzLnF1ZXJ5LnRlcm0gKyAnICcgKyBzdHI7XG4gICAgfVxuICAgIHRoaXMucXVlcnkudGVybSA9IHRlcm0gKyAnOic7XG4gICAgdGhpcy5leHBlcnRJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlVHlwZShfdHlwZTogT2JqZWN0VHlwZSkge1xuICAgIC8vIGRvIG5vdCBkaXJlY3RseSB0b2dnbGUgX3R5cGUgb24gdGhlIHF1ZXJ5LCBpbnN0ZWFkIHVzZSB0aGVcbiAgICAvLyBzZWFyY2hTZXJ2aWNlIHRvIHVwZGF0ZSB0aGUgcXVlcnkgc3RvcmVcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlUeXBlKF90eXBlKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1R5cGVBY3RpdmUoX3R5cGU6IE9iamVjdFR5cGUpIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXJ5LnR5cGVzLmZpbmQodCA9PiB0LmlkID09PSBfdHlwZS5pZCk7XG4gIH1cblxuICBnZXRBZ2dyZWdhdGlvbkNvdW50KF90eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnMudHlwZS5nZXQoX3R5cGUubmFtZSkgfHwgJyc7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsdGVyKGZpbHRlclR5cGUsIG9wZXJhdG9yLCBrZXkpIHtcbiAgICBpZiAoa2V5IGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSkge1xuICAgICAgcmV0dXJuIG5ldyBTZWFyY2hGaWx0ZXIoZmlsdGVyVHlwZSwga2V5Lm9wZXJhdG9yLCBrZXkuZmlyc3RWYWx1ZSwga2V5LnNlY29uZFZhbHVlLCB7dGltZToga2V5Lm9wZXJhdG9yICE9PSB0aGlzLk9QRVJBVE9SLkVRVUFMLCB0aW1lem9uZTogZmFsc2V9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBTZWFyY2hGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEZpbHRlcihmaWx0ZXJUeXBlOiBzdHJpbmcsIG9wZXJhdG9yOiBzdHJpbmcsIGtleTogYW55LCBmb3JtPzogTmdGb3JtKSB7XG4gICAgbGV0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG4gICAgbGV0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KGZpbHRlcik7XG4gICAgbGV0IGFjdGl2ZUZpbHRlciA9IHRoaXMucXVlcnkuZmlsdGVycy5maW5kKGZmID0+IGZmLnByb3BlcnR5ID09PSBmaWx0ZXIucHJvcGVydHkpO1xuICAgIGxldCBkdXBsaWNhdGUgPSB0aGlzLmlzRmlsdGVyQWN0aXZlKGZpbHRlclR5cGUsIG9wZXJhdG9yLCBrZXkpO1xuXG4gICAgaWYgKGVtcHR5ICYmIGFjdGl2ZUZpbHRlciAmJiBhY3RpdmVGaWx0ZXIub3BlcmF0b3IgIT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSkge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlbW92ZVF1ZXJ5RmlsdGVyKGZpbHRlcik7XG4gICAgfSBlbHNlIGlmICghZW1wdHkgJiYgIWR1cGxpY2F0ZSkge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFkZFF1ZXJ5RmlsdGVyKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvZ2dsZUZpbHRlcihmaWx0ZXJUeXBlOiBzdHJpbmcsIG9wZXJhdG9yOiBzdHJpbmcsIGtleTogYW55LCBzZWxlY3RlZDogYm9vbGVhbikge1xuICAgIGxldCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKGZpbHRlclR5cGUsIG9wZXJhdG9yLCBrZXkpO1xuICAgIGlmIChmaWx0ZXJUeXBlID09PSB0aGlzLlBBUkFNUy5GSUxFU0laRSkge1xuICAgICAgbGV0IGZvbGRlckZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIoJ2ZvbGRlcicsICdlcScsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVRdWVyeUZpbHRlcnMoW2ZpbHRlciwgZm9sZGVyRmlsdGVyXSwgIXNlbGVjdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5RmlsdGVyKGZpbHRlciwgIXNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNFbXB0eSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICgodmFsdWUgaW5zdGFuY2VvZiBSYW5nZVZhbHVlIHx8IHZhbHVlIGluc3RhbmNlb2YgU2VhcmNoRmlsdGVyKSAmJlxuICAgICAgICB0aGlzLmlzRW1wdHkodmFsdWUuZmlyc3RWYWx1ZSkgJiZcbiAgICAgICAgdGhpcy5pc0VtcHR5KHZhbHVlLnNlY29uZFZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzRmlsdGVyQWN0aXZlKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnkpIHtcbiAgICBsZXQgZiA9IHRoaXMuYnVpbGRGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVyeS5maWx0ZXJzLmZpbmQoZmYgPT4gZmYubWF0Y2goZi5wcm9wZXJ0eSwgZi5vcGVyYXRvciwgZi5maXJzdFZhbHVlLCBmLnNlY29uZFZhbHVlKSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRGaWx0ZXIobW9kZWw6IGFueSwgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChtb2RlbC5pbm5lclZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgbW9kZWwuaW5uZXJWYWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICBsZXQgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihtb2RlbC5maWx0ZXIucHJvcGVydHksIG1vZGVsLmZpbHRlci5vcGVyYXRvciwgbW9kZWwuaW5uZXJWYWx1ZS5maWx0ZXIoZiA9PiBmICE9PSB2YWx1ZSkpO1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFkZFF1ZXJ5RmlsdGVyKGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5yZW1vdmVRdWVyeUZpbHRlcihtb2RlbC5maWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlU3VnZ2VzdChldnQ/KSB7XG4gICAgbGV0IHYgPSBbXTtcbiAgICAvLyBhbHNvIHRyaWdnZXIgYWdncmVnYXRpb25zIHNlYXJjaFxuICAgIHRoaXMuYXV0b2NvbXBsZXRlU2VsZWN0KCk7XG4gICAgaWYgKGV2dCkge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlXG4gICAgICAgIC5hdXRvY29tcGxldGUoZXZ0KVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAocmVzID0+IG9ic2VydmFibGVGcm9tKHJlcykucGlwZShwbHVjaygndmFsdWUnKSkpKVxuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB2LnB1c2gocmVzKSwgKCkgPT4geyB9LCAoKSA9PiAodGhpcy5hdXRvY29tcGxldGVSZXN1bHRzID0gdilcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBleHBlcnRUZXJtQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmV4cGVydE1vZGVRdWVyeUVtcHR5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXV0b2NvbXBsZXRlU2VsZWN0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgfVxuXG4gIGF1dG9jb21wbGV0ZVBhc3RlKGUpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucXVlcnkudGVybSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTZWxlY3QoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBleGVjdXRlU2VhcmNoKCkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5xdWVyeS5leHBlcnRNb2RlKSB7XG4gICAgICAvLyBpbiBleHBlcnQgc2VhcmNoIG1vZGUgd2UgcHJlLWZldGNoIHJlc3VsdHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0dWFsIHNlYXJjaFxuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldFNlYXJjaFN0YXRlKHthZ2dzOiB7dHlwZToge319LCAuLi50aGlzLnF1ZXJ5LmdldFF1ZXJ5SnNvbigpfSkuc3Vic2NyaWJlKChxdWVyeVN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4ge1xuICAgICAgICAvLyBvbmx5IGV4ZWN1dGUgdGhlIGFjdHVhbCBxdWVyeSB3aGVuIHdlJ3ZlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICBpZiAoIXF1ZXJ5U3RhdGUuaXNFbXB0eSkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNSZXNldHRpbmcgPSBmYWxzZTtcbiAgICAgIH0sIFV0aWxzLnRocm93KCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHNlYXJjaCByZXN1bHQnKTtcbiAgICAgICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNSZXNldHRpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICB9XG4gIH1cblxuICAvLyBleGVjdXRlIHRoZSBhY3R1YWwgc2VhcmNoIGJ5IHJvdXRpbmcgdG8gdGhlIHJlc3VsdCBzdGF0ZSB3aGljaCB0aGVuIHdpbGwgZXhlY3V0ZSB0aGVcbiAgLy8gcXVlcnkgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdHNcbiAgcHJpdmF0ZSB0cmlnZ2VyU2VhcmNoKCkge1xuICAgIHRoaXMucXVlcnkucmVzb2x2ZVJlZmVyZW5jZSA9IHRydWU7XG4gICAgY29uc3QgdXJpUGFyYW0gPSBlbmNvZGVVUklDb21wb25lbnQoVXRpbHMuZm9ybURhdGFTdHJpbmdpZnkodGhpcy5xdWVyeS5nZXRRdWVyeUpzb24oKSkpO1xuICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbe291dGxldHM6IHttb2RhbDogbnVsbH19XSkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCB1cmlQYXJhbVF1ZXJ5OiBOYXZpZ2F0aW9uRXh0cmFzID0ge3F1ZXJ5UGFyYW1zOiB7cXVlcnk6IHVyaVBhcmFtfX07XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9yZXN1bHQnXSwgdXJpUGFyYW1RdWVyeSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlVGVybSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0VGVybSgnJyk7XG4gICAgdGhpcy5yZXNldEV4cGVydE1vZGVJbnB1dCgpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVR5cGUodHlwZTogT2JqZWN0VHlwZSkge1xuICAgIGlmICh0aGlzLmlkeFNlYXJjaCkge1xuICAgICAgdGhpcy5leGl0SW5kZXhkYXRhU2VhcmNoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVRdWVyeVR5cGUodHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZUNvbnRleHRUeXBlKCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVtb3ZlUXVlcnlGaWx0ZXIoZmlsdGVyKTtcblxuICAgIC8vIGlmIHdlIGFyZSBpbiBpbmRlc2RhdGEgc2VhcmNoIG1vZGUsIHJlbW92aW5nIGEgZmlsdGVyIHRoYXQgaXMgbm8gYmFzZXBhcmFtIGZpbHRlclxuICAgIC8vIHJlcXVpcmVzIHRoZSBmcm9tIG1vZGVsIHRvIGJlIHVwZGF0ZWRcbiAgICBpZiAodGhpcy5pZHhTZWFyY2ggJiYgIXRoaXMuYXBwU2VhcmNoU2VydmljZS5pc0Jhc2VQYXJhbUZpbHRlcihmaWx0ZXIpKSB7XG4gICAgICAvLyB0b2RvOiB1cGRhdGUgZm9ybSBtb2RlbC9kYXRhXG4gICAgICBsZXQgaWR4RmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuICAgICAgaWYgKGlkeEZpbHRlcnMgJiYgaWR4RmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIHNldCB1cCBmb3JtIGRhdGEgZnJvbSBpbmRleGRhdGEgcXVlcnkgZmlsdGVyc1xuICAgICAgICB0aGlzLmlkeFNlYXJjaC5mb3JtT3B0aW9ucy5kYXRhID0gaWR4RmlsdGVycztcbiAgICAgICAgdGhpcy5pbmRleGRhdGFGb3JtLnNldEZvcm1EYXRhKGlkeEZpbHRlcnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgbm8gZmlsdGVycyBhcmUgcHJlc2VudCByZXNldCB0aGUgZm9ybVxuICAgICAgICB0aGlzLmlkeFNlYXJjaC5mb3JtT3B0aW9ucy5kYXRhID0ge307XG4gICAgICAgIHRoaXMuaW5kZXhkYXRhRm9ybS5yZXNldEZvcm0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRDb250ZXh0TW9kZWwoZm9ybU1vZGVscyk6IHZvaWQge1xuICAgIGxldCBtb2RlbHMgPSBbLi4uZm9ybU1vZGVsc107XG4gICAgdGhpcy5pZHhTZWFyY2guY29udGV4dE1vZGVscy5wdXNoKC4uLm1vZGVscyk7XG4gICAgdGhpcy5pZHhTZWFyY2guY29udGV4dE1vZGVscy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpO1xuICB9XG5cbiAgcHVibGljIGV4aXRJbmRleGRhdGFTZWFyY2goKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmV4aXRJbmRleGRhdGFTZWFyY2goKTtcbiAgICB0aGlzLmlkeFNlYXJjaCA9IG51bGw7XG4gIH1cblxuICBzZXRDb250ZXh0KGNvbnRleHRGb2xkZXJOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoY29udGV4dEZvbGRlck5hbWUgJiYgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgIT09IGNvbnRleHRGb2xkZXJOYW1lKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9IGNvbnRleHRGb2xkZXJOYW1lO1xuICAgICAgY29uc3QgY29udGV4dFR5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZShjb250ZXh0Rm9sZGVyTmFtZSk7XG4gICAgICBpZiAoY29udGV4dEZvbGRlck5hbWUgPT09IENvbnRleHRUeXBlLnN5c3Jvb3QpIHtcbiAgICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKHtuYW1lOiBDb250ZXh0VHlwZS5zeXNyb290LCBsYWJlbDogQ29udGV4dFR5cGUuc3lzcm9vdH0gYXMgT2JqZWN0VHlwZSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlKSB7XG4gICAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShjb250ZXh0VHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQ29udGV4dCB0eXBlICcke2NvbnRleHRGb2xkZXJOYW1lfScgbm90IGZvdW5kLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gICAgICB0aGlzLmN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYSBjb250ZXh0IHR5cGUgZm9yIHRoZSBjdXJyZW50IHNlYXJjaFxuICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IGZvcm0gbW9kZWxcbiAgICovXG4gIHByaXZhdGUgc2VsZWN0Q29udGV4dChjdHgpIHtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zICYmIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucy5mb3JtTW9kZWwubmFtZSA9PT0gY3R4Lm5hbWUpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvbnRleHQ7XG4gICAgICBpZiAoY3R4Lm5hbWUgPT09IENvbnRleHRUeXBlLnN5c3Jvb3QpIHtcbiAgICAgICAgY29udGV4dCA9IGN0eDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZShjdHgubmFtZSk7XG4gICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb2xkZXJUeXBlID0gY29udGV4dDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShjb250ZXh0KTtcblxuICAgICAgbGV0IGZvcm1EYXRhID0ge307XG4gICAgICBsZXQgaWR4RmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuICAgICAgaWYgKGlkeEZpbHRlcnMgJiYgaWR4RmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvcm1EYXRhID0gaWR4RmlsdGVycztcbiAgICAgIH1cblxuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zID0ge2Zvcm1Nb2RlbDogY3R4LCBkYXRhOiBmb3JtRGF0YX07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSW5kZXhEYXRhQ2hhbmdlZChldmVudDogRm9ybVN0YXR1c0NoYW5nZWRFdmVudCkge1xuICAgIC8vIG9ubHkgdHJpZ2dlciB3aGVuIHZhbHVlcyBhcmUgY2hhbmdlZCBhcyBjaGFuZ2VzIG1heSBhbHNvIGFwcGVhciB3aGVuIHNjcmlwdHNcbiAgICAvLyBjaGFuZ2Ugb3RoZXIgZm9ybSBlbGVtZW50IHByb3BlcnRpZXMgKGVnLiByZWFkb25seSwgcmVxdWlyZWQgZmxhZylcbiAgICBpZiAoZXZlbnQuaW5kZXhkYXRhQ2hhbmdlZCkge1xuICAgICAgdGhpcy51cGRhdGVTZWFyY2hGaWx0ZXJGcm9tRm9ybURhdGEoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlYXJjaEZpbHRlckZyb21Gb3JtRGF0YSgpIHtcbiAgICBpZiAoIXRoaXMuaW5kZXhkYXRhRm9ybSB8fCB0aGlzLmlzUmVzZXR0aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWRkIG1ldGFkYXRhIGZpbHRlcnMgZm9yIGVhY2ggZm9ybSBkYXRhIGVudHJ5XG4gICAgbGV0IGlkeEZpbHRlcnM6IFNlYXJjaEZpbHRlcltdID0gW107XG4gICAgbGV0IGZvcm1EYXRhID0gdGhpcy5pbmRleGRhdGFGb3JtLmdldEZvcm1EYXRhKCk7XG4gICAgaWYgKHRoaXMuY29udGV4dEZvcm0pIHtcbiAgICAgIGZvcm1EYXRhID0gT2JqZWN0LmFzc2lnbihmb3JtRGF0YSwgdGhpcy5jb250ZXh0Rm9ybS5nZXRGb3JtRGF0YSgpKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZm9ybURhdGEpKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSA9IHRoaXMuc2VhcmNoU2VydmljZS5nZXRTZWFyY2hGaWx0ZXIodGhpcy5xdWVyeS50eXBlcywga2V5LCBmb3JtRGF0YVtrZXldKS5tYXAoZmlsdGVyID0+IHtcbiAgICAgICAgLy8gdGhlIHNlYXJjaCBzZXJ2aWNlIGRvZXMgbm90IGxpa2UgbmV3bGluZSBjaGFycyBpbiBjYXNlIG9mIG11bHRpbGluZSBmaWVsZHNcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyLmZpcnN0VmFsdWUpKSB7XG4gICAgICAgICAgaWYoZmlsdGVyLmZpcnN0VmFsdWU/Lmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlsdGVyLmZpcnN0VmFsdWUgPSBmaWx0ZXIuZmlyc3RWYWx1ZS5tYXAodmFsdWUgPT4gdmFsdWUucmVwbGFjZSgvXFxuL2csICcgJykpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIuZmlyc3RWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBmaWx0ZXIuZmlyc3RWYWx1ZSA9IGZpbHRlci5maXJzdFZhbHVlLnJlcGxhY2UoL1xcbi9nLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgICB9KTtcbiAgICAgIGZpbHRlcnMuZm9yRWFjaChmID0+IGlkeEZpbHRlcnMucHVzaChmKSk7XG4gICAgfVxuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycyhpZHhGaWx0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBvYmplY3QgdHlwZSBlbGVtZW50IGZvciBhIGZpbHRlciwgdG8gYmUgYWJsZSB0byBzaG93IHRoZVxuICAgKiBsYWJlbCBmb3IgYSBmaWx0ZXIgaW4gdGhlIHNlYXJjaCBzdW1tYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVyIC0gdGhlIGZpbHRlciB0byBmZXRjaCBvYmplY3QgdHlwZSBlbGVtZW50IGZvclxuICAgKi9cbiAgcHVibGljIGdldE9iamVjdFR5cGVFbGVtZW50TGFiZWwoZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcbiAgICBsZXQgb3QgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0VGFyZ2V0VHlwZUVsZW1lbnRCeU5hbWUoZmlsdGVyLnByb3BlcnR5KTtcbiAgICByZXR1cm4gb3QgPyBvdC5sYWJlbCA6IGZpbHRlci5wcm9wZXJ0eSArICcgLSAnICsgZmlsdGVyLmZpcnN0VmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVF1ZXJ5KCkge1xuICAgIC8vIGNvbnN0IHF1ZXJ5UGFyYW1zOiBOYXZpZ2F0aW9uRXh0cmFzID0ge3F1ZXJ5UGFyYW1zSGFuZGxpbmcgOiAncHJlc2VydmUnfTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmNsb3NlKCk7XG4gICAgdGhpcy5yb3V0ZXJcbiAgICAgIC5uYXZpZ2F0ZShbe291dGxldHM6IHttb2RhbDogbnVsbH19XSwge3JlcGxhY2VVcmw6IHRydWV9KVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc3RvcmVkLXF1ZXJpZXMnXSwge3F1ZXJ5UGFyYW1zOiB7Y3JlYXRlOiB0cnVlfX0pKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTdG9yZWRRdWVyeSgpIHtcbiAgICBpZiAodGhpcy5xdWVyeSBpbnN0YW5jZW9mIFN0b3JlZFF1ZXJ5KSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbe291dGxldHM6IHttb2RhbDogbnVsbH19XSwge3JlcGxhY2VVcmw6IHRydWV9KTtcbiAgICAgIHRoaXMuc3RvcmVkUXVlcmllc1NlcnZpY2Uuc2F2ZVN0b3JlZFF1ZXJ5KHRoaXMucXVlcnkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmNsb3NlKCk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5zdWNjZXNzKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5zdG9yZWRxdWVyeS5zYXZlLnN1Y2Nlc3MnKSk7XG4gICAgICB9LCBVdGlscy50aHJvdyhudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guc3RvcmVkcXVlcnkuc2F2ZS5lcnJvcicpKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0UXVlcnkoKSB7XG4gICAgdGhpcy5pc1Jlc2V0dGluZyA9IHRydWU7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5pc093blF1ZXJ5ID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUYWJJZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlc2V0RXhwZXJ0TW9kZUlucHV0KCk7XG5cbiAgICBpZiAodGhpcy5pZHhTZWFyY2gpIHtcbiAgICAgIHRoaXMuZXhpdEluZGV4ZGF0YVNlYXJjaCgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlU2VhcmNoTWVudSgpIHtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmNsb3NlKCk7XG4gIH1cblxuICBtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwTGFiZWw6IHN0cmluZywgZGlyZWN0aW9uOiBzdHJpbmcpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLm9iamVjdFR5cGVHcm91cHMuZmluZEluZGV4KGdyb3VwID0+IGdyb3VwTGFiZWwgPT09IGdyb3VwLmxhYmVsKTtcbiAgICBsZXQgbmV3SW5kZXg7XG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgIG5ld0luZGV4ID0gaW5kZXggLSAxO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICBuZXdJbmRleCA9IGluZGV4ICsgMTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2ZpcnN0Jykge1xuICAgICAgbmV3SW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGFzdCcpIHtcbiAgICAgIG5ld0luZGV4ID0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCAtIDE7XG4gICAgICBpZiAoaW5kZXggPT09IG5ld0luZGV4KSByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgMCkge1xuICAgICAgaW5kZXggKz0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aDtcbiAgICB9XG4gICAgd2hpbGUgKG5ld0luZGV4IDwgMCkge1xuICAgICAgbmV3SW5kZXggKz0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKG5ld0luZGV4ID49IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIGxldCBrID0gbmV3SW5kZXggLSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoICsgMTtcbiAgICAgIHdoaWxlIChrLS0pIHtcbiAgICAgICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzLnNwbGljZShuZXdJbmRleCwgMCwgdGhpcy5vYmplY3RUeXBlR3JvdXBzLnNwbGljZShpbmRleCwgMSlbMF0pO1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSh0aGlzLm9iamVjdFR5cGVHcm91cHNTdG9yYWdlS2V5LCB0aGlzLm9iamVjdFR5cGVHcm91cHMubWFwKGdyb3VwID0+IGdyb3VwLmxhYmVsKSk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzU2VhcmNoSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQpIHtcbiAgICAgIC8vIFRPRE86IHRoaXMuc2VhcmNoSW5wdXQuaW5wdXRFTC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVNlYXJjaElucHV0Rm9jdXMoKSB7XG4gICAgaWYgKHRoaXMucXVlcnkuZXhwZXJ0TW9kZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZWxlY3RSb290RWxlbWVudCgnLmV4cGVydC1zZWFyY2hfX2lucHV0JykuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c1NlYXJjaElucHV0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0aGlzLmNhcGFiaWxpdHlTZXJ2aWNlLmdldENhcGFiaWxpdGllcygpO1xuICAgIHRoaXMub2JqZWN0VHlwZUdyb3VwcyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5vYmplY3RUeXBlR3JvdXBzO1xuICAgIHRoaXMub2JqZWN0VHlwZUdyb3Vwc1swXS50eXBlcyA9IHRoaXMub2JqZWN0VHlwZUdyb3Vwc1swXS50eXBlcy5maWx0ZXIodHlwZSA9PiB0eXBlLnFuYW1lICE9PSAnc3lzZm9sZGVyJyAmJiB0eXBlLnFuYW1lICE9PSAnc3lzZG9jdW1lbnQnICYmIHR5cGUucW5hbWUgIT09ICdzeXNvYmplY3QnKTtcbiAgICBsZXQgc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMub2JqZWN0VHlwZUdyb3Vwc1N0b3JhZ2VLZXkpO1xuICAgIGxldCBzeW5jZWQgPSB0cnVlO1xuICAgIGlmIChzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMgJiYgc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmxlbmd0aCA9PT0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMuZmluZChncm91cCA9PiBncm91cCA9PT0gdGhpcy5vYmplY3RUeXBlR3JvdXBzW2ldLmxhYmVsKSkge1xuICAgICAgICAgIHN5bmNlZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3luY2VkKSB7XG4gICAgICAgIHRoaXMub2JqZWN0VHlwZUdyb3VwcyA9IFsuLi50aGlzLm9iamVjdFR5cGVHcm91cHNdLnNvcnQoXG4gICAgICAgICAgKGEsIGIpID0+IHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscy5pbmRleE9mKGEubGFiZWwpIC0gc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmluZGV4T2YoYi5sYWJlbClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5xdWVyeSQuc3Vic2NyaWJlKFxuICAgICAgKHF1ZXJ5OiBTZWFyY2hRdWVyeSkgPT4gdGhpcy5wcm9jZXNzUXVlcnkocXVlcnkpKTtcbiAgICAvLyBzdWJzY3JpYmUgdG8gcXVlcnkgc3RhdGUgYXMgd2VsbCB0byBmZXRjaCByZXN1bHQgY291bnQgYW5kIGFnZ3JlZ2F0aW9ucyBhcyB0aGV5IGNoYW5nZVxuICAgIHRoaXMucXVlcnlTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5xdWVyeVN0YXRlJC5zdWJzY3JpYmUoKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB0aGlzLnByb2Nlc3NRdWVyeVN0YXRlKHF1ZXJ5U3RhdGUpKTtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG5cbiAgICB0aGlzLnRlcm1Gb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgIHRoaXMucXVlcnkudGVybSA9IHJlcy50ZXJtO1xuICAgICAgfSksIGRlYm91bmNlVGltZSgxMDAwKSwgdW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN1Z2dlc3QodGhpcy5xdWVyeS50ZXJtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dC5mb2N1c0lucHV0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5vcGVuKHRoaXMudHBsU2VhcmNoLCBudWxsLCB7XG4gICAgICBjZW50ZXJlZDogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLnRlcm1Gb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgdGVybTogdGhpcy5xdWVyeS50ZXJtXG4gICAgfSk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5hZnRlckNsb3NlZCQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXNIYW5kbGluZzogJ3ByZXNlcnZlJ307XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCBxdWVyeVBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVzZXRBZ2dzKCk7XG4gICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucXVlcnlTdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8IS0tIDxlby1kaWFsb2cgW3Zpc2libGVdPVwidHJ1ZVwiIFtzdHlsZUNsYXNzXT1cIidlby1hcHAtc2VhcmNoLWRpYWxvZydcIiBbYWxpZ25dPVwiJ3N0YXJ0J1wiIFttaW5XaWR0aF09XCInODB2dydcIlxuICBbbWluSGVpZ2h0XT1cIicxMDB2aCdcIiAoaGlkZSk9XCJjbG9zZVNlYXJjaE1lbnUoJGV2ZW50KVwiPiAtLT5cbjwhLS0gPHl2Yy1kaWFsb2cgW29wdGlvbnNdPVwie2xpZ2h0RGlzbWlzczogdHJ1ZX1cIiBbdGVtcGxhdGVdPVwidHBsU2VhcmNoXCIgKGNsb3NlZCk9XCJjbG9zZVNlYXJjaE1lbnUoKVwiPjwveXZjLWRpYWxvZz4gLS0+XG48bmctdGVtcGxhdGUgI3RwbFNlYXJjaD5cblxuICA8ZGl2IGNsYXNzPVwiZW8tYXBwLXNlYXJjaFwiIFtuZ0NsYXNzXT1cIntleHBlcnQ6IHF1ZXJ5LmV4cGVydE1vZGV9XCIgZW9SdGxBd2FyZT1cImZ1bGxcIiAqbmdJZj1cInF1ZXJ5XCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZFwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoXCI+XG4gICAgICAgIDxmb3JtIChzdWJtaXQpPVwiZXhlY3V0ZVNlYXJjaCgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaDwvZGl2PlxuXG4gICAgICAgICAgPGVvLXF1ZXJ5LXNjb3BlLXNlbGVjdCBbc2VsZWN0aW9uXT1cInF1ZXJ5U2NvcGVcIiAoc2VsZWN0KT1cInNldFF1ZXJ5U2NvcGUoJGV2ZW50KVwiPjwvZW8tcXVlcnktc2NvcGUtc2VsZWN0PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1ib3hcIiBbZm9ybUdyb3VwXT1cInRlcm1Gb3JtXCI+XG5cbiAgICAgICAgICAgIDx5dmMtYXV0b2NvbXBsZXRlICpuZ0lmPVwiIXF1ZXJ5LmV4cGVydE1vZGU7IGVsc2UgZXhwZXJ0SW5wdXRcIiAjc2VhcmNoSW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGVybVwiIFthdXRvY29tcGxldGVWYWx1ZXNdPVwiYXV0b2NvbXBsZXRlUmVzdWx0c1wiXG4gICAgICAgICAgICAgIChzdWdnZXN0aW9uU2VsZWN0KT1cImF1dG9jb21wbGV0ZVNlbGVjdCgpXCIgKGtleWRvd24uZW50ZXIpPVwiZXhlY3V0ZVNlYXJjaCgpXCIgKHBhc3RlKT1cImF1dG9jb21wbGV0ZVBhc3RlKCRldmVudClcIj5cbiAgICAgICAgICAgIDwveXZjLWF1dG9jb21wbGV0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNleHBlcnRJbnB1dD5cbiAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cz1cImF1dG9mb2N1c1wiIGNsYXNzPVwiZXhwZXJ0LXNlYXJjaF9faW5wdXRcIiAjeHBpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZXhwZXJ0VGVybUNoYW5nZWQoKVwiIFsobmdNb2RlbCldPVwicXVlcnkudGVybVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZXhwZXJ0LW1vZGVcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGVydE1vZGUoKVwiPlxuICAgICAgICAgICAgICA8IS0tPHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydDwvc3Bhbj4tLT5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZXhwZXJ0LXNlYXJjaC5zdmcnXCJcbiAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLm1vZGUuZXhwZXJ0JyB8IHRyYW5zbGF0ZSlcIiAqbmdJZj1cIiFxdWVyeT8uZXhwZXJ0TW9kZTsgZWxzZSBjbG9zZVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjbG9zZT5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19leHBlcnQtc2VhcmNoLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnNlYXJjaC5tb2RlLmV4cGVydC5jbG9zZScgfCB0cmFuc2xhdGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGV4cGVydC1tb2RlIGV4cGVydC1tb2RlX19yZXNldFwiIFtuZ0NsYXNzXT1cInthY3RpdmU6IHF1ZXJ5LnRlcm19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RXhwZXJ0TW9kZUlucHV0KClcIj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnNlYXJjaC5jbGVhci5zZWFyY2gnIHwgdHJhbnNsYXRlKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdFwiICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2Ugc3Bpbm5lclwiPnt7cXVlcnlTdGF0ZS50b3RhbENvdW50IHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3NwaW5uZXI+XG4gICAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgY2xhc3M9XCJzZWFyY2gtYWdncmVnYXRvcl9fbG9hZGVyXCIgW3NpemVdPVwiJ21lZGl1bSdcIiBbbW9kZV09XCInZGFyaydcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvbiB3aGl0ZSBjbG9zZVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIlxuICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLmNsb3NlJyB8IHRyYW5zbGF0ZSlcIiAoY2xpY2spPVwiY2xvc2VTZWFyY2hNZW51KClcIj48L2VvLWljb24+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJib2R5XCIgKm5nSWY9XCIhcXVlcnkuZXhwZXJ0TW9kZTsgZWxzZSBleHBlcnRcIj5cblxuICAgICAgPHl2Yy10YWJzICh0YWJDaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiIGxheW91dFNldHRpbmdzSUQ9XCJlby5zZWFyY2guZGlhbG9nLnRhYnNcIj5cblxuICAgICAgICA8IS0tIG9iamVjdCB0eXBlIHNlbGVjdCAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFt5dmNUYWJdPVwie2lkOiAncmVzdHJpY3RUeXBlJywgbGFiZWw6ICdlby5zZWFyY2gucmVzdHJpY3QudHlwZScgfCB0cmFuc2xhdGV9XCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVzIHJlc3QtYm94LWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntpZHhlbmFibGVkOiBxdWVyeS50eXBlcy5sZW5ndGggPCAxfVwiXG4gICAgICAgICAgICAqbmdJZj1cIm9iamVjdFR5cGVHcm91cHMgJiYgIWlkeFNlYXJjaFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwIHJlc3QtYm94XCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIG9iamVjdFR5cGVHcm91cHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cImdyb3VwLmxhYmVsICE9PSAnMCdcIj57e2dyb3VwLmxhYmVsfX08L2gzPlxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cImdyb3VwLmxhYmVsID09PSAnMCdcIiB0cmFuc2xhdGU+e3snZW8uc2VhcmNoLmdyb3VwLmdlbmVyYWwnfX08L2gzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiAqbmdJZj1cImkgIT09IDBcIiBjbGFzcz1cIm1vdmUtbGVmdC1maXJzdFwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAnZmlyc3QnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2xhc3Quc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwibW92ZS1sZWZ0LWljb25cIiAoY2xpY2spPVwibW92ZU9iamVjdFR5cGVHcm91cChncm91cC5sYWJlbCwgJ2xlZnQnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2xlZnQuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gb2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGggLSAxXCIgY2xhc3M9XCJtb3ZlLXJpZ2h0LWljb25cIiAoY2xpY2spPVwibW92ZU9iamVjdFR5cGVHcm91cChncm91cC5sYWJlbCwgJ3JpZ2h0JylcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19yaWdodC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gKm5nSWY9XCJpICE9PSBvYmplY3RUeXBlR3JvdXBzLmxlbmd0aCAtIDFcIiBjbGFzcz1cIm1vdmUtcmlnaHQtbGFzdFwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAnbGFzdCcpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfYXJyb3dfbGFzdC5zdmcnXCI+PC9lby1pY29uPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHlwZVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIGdyb3VwLnR5cGVzXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7Y29udGV4dDogdHlwZS5pc0NvbnRleHRGb2xkZXIsIGZvbGRlcjogdHlwZS5pc0ZvbGRlciwgYWJzdHJhY3Q6IHR5cGUuaXNBYnN0cmFjdCwgc2VsZWN0ZWQ6IGlzVHlwZUFjdGl2ZSh0eXBlKX1cIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIChjbGljayk9XCJ0b2dnbGVUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGZpbGw9XCIjZmZmZmZmXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAoY2xpY2spPVwic2VsZWN0T2JqZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gW29iamVjdFR5cGVdPVwidHlwZVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19IHt7dHlwZS5pc0Fic3RyYWN0ID8gJygnKyAoJ2VvLnNlYXJjaC50eXBlLmFic3RyYWN0JyB8IHRyYW5zbGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgICAnKScgOiAnJ319PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2dldEFnZ3JlZ2F0aW9uQ291bnQodHlwZSkgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRleGRhdGEtc2VhcmNoXCIgKm5nSWY9XCJpZHhTZWFyY2hcIj5cbiAgICAgICAgICAgIDxoMj5cbiAgICAgICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJidXR0b25cIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19iYWNrLnN2ZydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJleGl0SW5kZXhkYXRhU2VhcmNoKClcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cInt0eXBlOiBpZHhTZWFyY2gudHlwZS5sYWJlbH1cIj5lby5zZWFyY2gub2JqZWN0dHlwZS5mb3JtPC9zcGFuPlxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHRcIiAqbmdJZj1cImlkeFNlYXJjaC5jb250ZXh0TW9kZWxzLmxlbmd0aFwiPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZXh0LXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgdHJhbnNsYXRlPmVvLnNlYXJjaC5vYmplY3R0eXBlLmZvcm0uY29udGV4dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxlby1jb250ZXh0LXNlYXJjaCAqbmdGb3I9XCJsZXQgY3R4IG9mIGlkeFNlYXJjaC5jb250ZXh0TW9kZWxzOyBpbmRleCBhcyBpXCIgW2N0eF09XCJjdHhcIiBbcXVlcnldPVwicXVlcnlcIlxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9PT0gY3R4Lm5hbWVcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihjdXJyZW50Q29udGV4dEZvbGRlck5hbWUgJiYgY3VycmVudENvbnRleHRGb2xkZXJOYW1lICE9PSBjdHgubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgW2lkeFNlYXJjaF09XCJpZHhTZWFyY2hcIiAoc2V0Q29udGV4dCk9XCJzZXRDb250ZXh0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2VvLWNvbnRleHQtc2VhcmNoPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNvbnRleHQgZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1vYmplY3QtZm9ybSBjbGFzcz1cImRhcmtcIiAjY3R4Zm9ybVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zICYmIGlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnM/LmZvcm1Nb2RlbD8uZWxlbWVudHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbZm9ybU9wdGlvbnNdPVwiaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9uc1wiIChzdGF0dXNDaGFuZ2VkKT1cIm9uSW5kZXhEYXRhQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9lby1vYmplY3QtZm9ybT5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJvYmplY3QtdHlwZSBmb3JtXCIgKm5nSWY9XCJpZHhTZWFyY2guZm9ybU9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGVvLW9iamVjdC1mb3JtICNpZHhmb3JtIFtmb3JtT3B0aW9uc109XCJpZHhTZWFyY2guZm9ybU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIChzdGF0dXNDaGFuZ2VkKT1cIm9uSW5kZXhEYXRhQ2hhbmdlZCgkZXZlbnQpXCIgKG9uRm9ybVJlYWR5KT1cImlkeGZvcm0uZm9jdXNGb3JtKClcIj5cbiAgICAgICAgICAgICAgPC9lby1vYmplY3QtZm9ybT5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIGNyZWF0ZWQgdGFiIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdENyZWF0ZWQnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC5jcmVhdGlvbicgfCB0cmFuc2xhdGUgfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcmVhdGVkIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3BhblwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLkNSRUFURURdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5DUkVBVEVELCBPUEVSQVRPUi5SQU5HRSwgYWdnLmtleSwgYWdnLnNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtdGltZXNwYW4tY3VzdG9tXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4uY3VzdG9tPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI2NyZWF0ZWRGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLnRpbWUuc3BhbicgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1kYXRldGltZS1yYW5nZSAjY3JlYXRlZEZpZWxkIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVEVEXS52YWx1ZVwiIG5hbWU9XCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcGVyYXRvcl09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLnZhbHVlID8gZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVEVEXS52YWx1ZS5vcGVyYXRvciA6IE9QRVJBVE9SLkVRVUFMXCJcbiAgICAgICAgICAgICAgICAgICAgW3dpdGhUaW1lXT1cImNyZWF0ZWRGaWVsZC5zZWFyY2hPcHRpb24gJiYgY3JlYXRlZEZpZWxkLnNlYXJjaE9wdGlvbiAhPT0gT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkNSRUFURUQsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIGNyZWF0ZWRGb3JtKVwiPlxuICAgICAgICAgICAgICAgICAgPC9lby1kYXRldGltZS1yYW5nZT5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LWNyZWF0b3JcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLmNyZWF0b3I8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjY3JlYXRvckZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLnNlYXJjaC5hZ2cuY3JlYXRlZGJ5JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLW9yZ2FuaXphdGlvbiBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVE9SXS52YWx1ZVwiIG5hbWU9XCJjcmVhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVSZXNvbHZlZCk9XCJyZXNvbHZlTGFiZWwoZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVE9SXSwgJGV2ZW50KVwiIFtzaXR1YXRpb25dPVwiJ1NFQVJDSCdcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkNSRUFUT1IsIE9QRVJBVE9SLklOLCAkZXZlbnQsIGNyZWF0b3JGb3JtKVwiPjwvZW8tb3JnYW5pemF0aW9uPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdE1vZGlmaWNhdGlvbicsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0Lm1vZGlmaWNhdGlvbicgfCB0cmFuc2xhdGV9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGlmaWVkIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3BhblwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1PRElGSUVEXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZpbHRlcihQQVJBTVMuTU9ESUZJRUQsIE9QRVJBVE9SLlJBTkdFLCBhZ2cua2V5LCBhZ2cuc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGFnZy5zZWxlY3RlZCwgc2F2ZWQ6IGFnZy5zYXZlZH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2FnZy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3thZ2cudmFsdWUgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3Bhbi1jdXN0b21cIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLnRpbWUuc3Bhbi5jdXN0b208L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjbW9kaWZpZWRGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLnRpbWUuc3BhbicgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1kYXRldGltZS1yYW5nZSAjbW9kaWZpZWRGaWVsZCBbKG5nTW9kZWwpXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLnZhbHVlXCIgbmFtZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdG9yXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLnZhbHVlID8gZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWUub3BlcmF0b3IgOiBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIFt3aXRoVGltZV09XCJtb2RpZmllZEZpZWxkLnNlYXJjaE9wdGlvbiAmJiBtb2RpZmllZEZpZWxkLnNlYXJjaE9wdGlvbiAhPT0gT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLk1PRElGSUVELCBPUEVSQVRPUi5FUVVBTCwgJGV2ZW50LCBtb2RpZmllZEZvcm0pXCI+XG4gICAgICAgICAgICAgICAgICA8L2VvLWRhdGV0aW1lLXJhbmdlPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtbW9kaWZpZXJcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLm1vZGlmaWVyPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI21vZGlmaWVyRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLmFnZy5tb2RpZmllZGJ5JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLW9yZ2FuaXphdGlvbiBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibW9kaWZpZXJcIiAob25WYWx1ZVJlc29sdmVkKT1cInJlc29sdmVMYWJlbChmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaXR1YXRpb25dPVwiJ1NFQVJDSCdcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLk1PRElGSUVSLCBPUEVSQVRPUi5JTiwgJGV2ZW50LCBtb2RpZmllckZvcm0pXCI+PC9lby1vcmdhbml6YXRpb24+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdEZpbGUnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC5maWxlJyB8IHRyYW5zbGF0ZX1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZSByZXN0LWJveC1jb250YWluZXJcIiAqbmdJZj1cInF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtbWltZXR5cGUtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QubWltZXR5cGVncm91cDwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWdnIG9mIGFnZ3JlZ2F0aW9uc01vZGVsW1BBUkFNUy5NSU1FVFlQRUdST1VQXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEZpbHRlcihQQVJBTVMuTUlNRVRZUEVHUk9VUCwgT1BFUkFUT1IuSU4sIHJlc29sdmVTZWxlY3Rpb24oYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdLCBhZ2cua2V5LCBhZ2cuc2VsZWN0ZWQpKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGZpbGw9XCIjZmZmZmZmXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtZmlsZXNpemVcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZXNpemU8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuRklMRVNJWkVdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5GSUxFU0laRSwgT1BFUkFUT1IuUkFOR0UsIGFnZy5rZXksIGFnZy5zZWxlY3RlZClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogYWdnLnNlbGVjdGVkLCBzYXZlZDogYWdnLnNhdmVkfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7YWdnLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2FnZy52YWx1ZSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LWZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGVuYW1lPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI2ZpbGVuYW1lRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGVuYW1lJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLXN0cmluZyBbYXV0b2NvbXBsZXRlXT1cInRydWVcIiBbcW5hbWVdPVwiJ2ZpbGVuYW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0udmFsdWVcIiBuYW1lPVwiZmlsZW5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkZJTEVOQU1FLCBPUEVSQVRPUi5FUVVBTCwgJGV2ZW50LCBmaWxlbmFtZUZvcm0pXCI+PC9lby1zdHJpbmc+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwveXZjLXRhYnM+XG5cbiAgICAgIDwhLS0gc3VtbWFyeSBvZiB0aGUgY3VycmVudCBzZWFyY2ggZmlsdGVycyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LXBhbmVsXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRsaW5lIHN0b3JlZC1xdWVyeVwiICpuZ0lmPVwiaXNTdG9yZWRRdWVyeTsgZWxzZSByZWdoZWFkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlSW5iZXR3ZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZFNlYXJjaEljb25cIj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfc2F2ZWRfc2VhcmNoLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnN0b3JlZHF1ZXJ5PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZWQtcXVlcnktbmFtZVwiPnt7c3RvcmVkUXVlcnkubmFtZX19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWdoZWFkPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkbGluZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeTwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwicXVlcnktdHlwZXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLXNlYXJjaHRlcm1cIiAqbmdJZj1cInF1ZXJ5LnRlcm1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS50ZXJtPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7cXVlcnkudGVybX19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlVGVybSgpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLWNvbnRleHR0eXBlXCIgKm5nSWY9XCJxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFzaWRlLnN1bW1hcnkuY29udGV4dGZvbGRlcnR5cGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlcnkuY29udGV4dEZvbGRlclR5cGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlQ29udGV4dFR5cGUoKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1vYmplY3R0eXBlXCIgKm5nSWY9XCJxdWVyeS50eXBlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS50eXBlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlclwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHF1ZXJ5LnR5cGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlVHlwZSh0eXBlKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC10cmFuc2xhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLmlubmVyVmFsdWUubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdGb3I9XCJsZXQgdmFsIG9mIGZpbHRlci5pbm5lclZhbHVlOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3tmaWx0ZXIubGFiZWxbaV0gfCBhc3luY319PC9kaXY+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZXNldEZpbHRlcihmaWx0ZXIsIHZhbClcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tY3JlYXRpb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLmlubmVyVmFsdWU/Lmxlbmd0aCB8fCBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLmlubmVyVmFsdWU/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5jcmVhdGlvbjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1tb2RpZmljYXRpb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXS5pbm5lclZhbHVlPy5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0uaW5uZXJWYWx1ZT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0Lm1vZGlmaWNhdGlvbjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW1pbWV0eXBlZ3JvdXBcIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdLmlubmVyVmFsdWUubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRVNJWkVdLmlubmVyVmFsdWUubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRU5BTUVdLmlubmVyVmFsdWUubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGU8L2Rpdj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5NSU1FVFlQRUdST1VQXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFU0laRV0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRU5BTUVdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIiAqbmdJZj1cInF1ZXJ5LnRlcm0gfHwgcXVlcnkuZmlsdGVycy5sZW5ndGggfHwgcXVlcnkudHlwZXMubGVuZ3RoOyBlbHNlIGVtcHR5U2VhcmNoXCI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdG9yZWRRdWVyeTsgZWxzZSByZWdhY3Rpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5IGJ0bi1yZXNldFwiIChjbGljayk9XCJyZXNldFF1ZXJ5KClcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LmNsb3NlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBncmV5IGJ0bi11cGRhdGVcIiAoY2xpY2spPVwidXBkYXRlU3RvcmVkUXVlcnkoKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FwYWJpbGl0aWVzLnN0b3JlZHF1ZXJpZXMgJiYgaXNPd25RdWVyeVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3RvcmVkcXVlcnkudXBkYXRlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBncmV5IGJ0bi1zYXZlXCIgKGNsaWNrKT1cInNhdmVRdWVyeSgpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYXBhYmlsaXRpZXMuc3RvcmVkcXVlcmllcyAmJiAhaXNPd25RdWVyeVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc2F2ZTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLXN1Ym1pdFwiIChjbGljayk9XCJleGVjdXRlU2VhcmNoKClcIiBbZGlzYWJsZWRdPVwicXVlcnlTdGF0ZS5pc0VtcHR5XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnNlYXJjaC5zdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVnYWN0aW9ucz5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXJlc2V0XCIgKGNsaWNrKT1cInJlc2V0UXVlcnkoKVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzZXQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXNhdmVcIiAoY2xpY2spPVwic2F2ZVF1ZXJ5KClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhcGFiaWxpdGllcy5zdG9yZWRxdWVyaWVzICYmICFpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tc3VibWl0XCIgKGNsaWNrKT1cImV4ZWN1dGVTZWFyY2goKVwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5U2VhcmNoPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zZWFyY2hcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1bW1hcnkuZW1wdHk8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBleHBlcnQgbW9kZSBib2R5IHBhbmVsIGNvbnRhaW5pbmcgZXhwbGFuYXRpb25zIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZXhwZXJ0PlxuICAgICAgPGRpdiBjbGFzcz1cImJvZHkgZXhwZXJ0XCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5XCIgKm5nSWY9XCJleHBlcnRNb2RlUXVlcnlFbXB0eVwiPjxzcGFuIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQucmVzdWx0LmVtcHR5PC9zcGFuPjwvZGl2PlxuXG4gICAgICAgIDwhLS1cbiAgICAgICAgPGgyPjxzcGFuIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQ8L3NwYW4+PC9oMj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludHJvXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5pbnRybzwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYXNlLXBhcmFtcyBmaWVsZHNcIj5cbiAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LmJhc2VwYXJhbXM8L2gyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgZWwgb2YgZXhwZXJ0TW9kZVN1cHBvcnQuYmFzZVBhcmFtc1wiIChjbGljayk9XCJ4cEFkZFRvVGVybShlbC5kYXRhKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj48c3Bhbj57e2VsLmxhYmVsfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRhXCI+e3tlbC5kYXRhfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic3lzdGVtLXR5cGVzIGZpZWxkc1wiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW4tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuZ3JvdXA8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIHR5cGVHcm91cFRyZWVcIlxuICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cCAmJiBncm91cC5pZCA9PT0gZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cC5pZH1cIlxuICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ4cFNlbGVjdEdyb3VwKGdyb3VwKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5sYWJlbCAhPT0gJzAnXCI+e3tncm91cC5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLmxhYmVsID09PSAnMCdcIj57eydlby5zZWFyY2guZ3JvdXAuZ2VuZXJhbCcgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW4tdHlwZVwiICpuZ0lmPVwiZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cFwiPlxuICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQuc3VwcG9ydC50eXBlPC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkR3JvdXAudHJlZVwiXG4gICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgJiYgdHlwZS5pZCA9PT0gZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInhwU2VsZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgIDxkaXY+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gc2VjdGlvbi1maWVsZFwiICpuZ0lmPVwiZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlXCI+XG4gICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LmZpZWxkPC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBlbCBvZiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUuY2hpbGRyZW5cIiAoY2xpY2spPVwieHBBZGRUb1Rlcm0oZWwuZGF0YSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj48c3Bhbj57e2VsLmxhYmVsfX08L3NwYW4+PHNwYW4gY2xhc3M9XCJ0eXBlXCI+e3tlbC50eXBlfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGFcIj57e2VsLmRhdGF9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDwhLS0gPC9lby1kaWFsb2c+IC0tPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
834
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hcHAtc2hlbGwvYXBwLWJhci9hcHAtc2VhcmNoL2FwcC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYXBwLXNoZWxsL2FwcC1iYXIvYXBwLXNlYXJjaC9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsUUFBUSxJQUFJLGtCQUFrQixFQUM5QixJQUFJLElBQUksY0FBYyxFQUN0QixFQUFFLElBQUksWUFBWSxFQUNsQixPQUFPLEVBRVAsR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUVwRixPQUFPLEVBUUwsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBSVgsV0FBVyxFQUlYLEtBQUssRUFDTixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUMsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc1RCxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFrQjtJQTJEN0IsSUFBSSxRQUFRLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsU0FB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QyxXQUFXLEVBQUUsQ0FBQztJQUM1QyxDQUFDOzhHQTE0QlUsa0JBQWtCO2tHQUFsQixrQkFBa0IseUxBS0UsV0FBVyx1WUN0RTVDLGl0dUJBa2JBOztBRGpYYSxrQkFBa0I7SUFUOUIsWUFBWSxFQUFFO0dBU0Ysa0JBQWtCLENBMjRCOUI7OzJGQTM0Qlksa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLGVBQWUsaUJBR1YsaUJBQWlCLENBQUMsSUFBSTs0ZUFTUSxTQUFTO3NCQUFyRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUM7Z0JBQ2pCLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDRixXQUFXO3NCQUFoQyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ0UsYUFBYTtzQkFBbEMsU0FBUzt1QkFBQyxTQUFTO2dCQUNFLFdBQVc7c0JBQWhDLFNBQVM7dUJBQUMsU0FBUztnQkFpRGIsZUFBZTtzQkFEckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGZvcmtKb2luIGFzIG9ic2VydmFibGVGb3JrSm9pbixcbiAgZnJvbSBhcyBvYnNlcnZhYmxlRnJvbSxcbiAgb2YgYXMgb2JzZXJ2YWJsZU9mLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIHRhcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBwbHVjaywgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdmlnYXRpb25FeHRyYXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7T2JqZWN0Rm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnRcbn0gZnJvbSAnLi4vLi4vLi4vb2JqZWN0LWZvcm0vaW5kZXgnO1xuaW1wb3J0IHtGb3JtQnVpbGRlciwgTmdGb3JtfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0xvY2FsZURhdGVQaXBlfSBmcm9tICcuLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9waXBlcy9sb2NhbGUtZGF0ZS5waXBlJztcbmltcG9ydCB7QXBwU2VhcmNoU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvc2VhcmNoL2FwcC1zZWFyY2guc2VydmljZSc7XG5pbXBvcnQge1xuICBDYXBhYmlsaXRpZXMsXG4gIENhcGFiaWxpdGllc1NlcnZpY2UsXG4gIExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gIExvZ2dlcixcbiAgTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gIE9iamVjdFR5cGUsXG4gIFF1ZXJ5U2NvcGUsXG4gIFJhbmdlVmFsdWUsXG4gIFNlYXJjaEZpbHRlcixcbiAgU2VhcmNoUXVlcnksXG4gIFNlYXJjaFNlcnZpY2UsXG4gIFNlYXJjaFN0YXRlLFxuICBTdG9yZWRRdWVyaWVzU2VydmljZSxcbiAgU3RvcmVkUXVlcnksXG4gIFN5c3RlbVNlcnZpY2UsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlLFxuICBVdGlsc1xufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtBdXRvQ29tcGxldGV9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtDb250ZXh0VHlwZSwgSWR4U2VhcmNofSBmcm9tICcuL2FwcC1zZWFyY2guaW50ZXJmYWNlJztcbmltcG9ydCB7WXZjT3ZlcmxheVJlZiwgWXZjT3ZlcmxheVNlcnZpY2V9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSBcIkBuZ25lYXQvdW50aWwtZGVzdHJveVwiO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VvLWFwcC1zZWFyY2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC1zZWFyY2guY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxuICAvLyB0b2RvOiBhcHBseSBvblB1c2ggY2hhbmdlIGRldGVjdGlvbiAoYWdnIHNlYXJjaCByZXN1bHQgcmlnaHQgbm93IGRvZXNuJ3QgdXBkYXRlKVxuICAvLyBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBcHBTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIFBBUkFNUyA9IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TO1xuICBPUEVSQVRPUiA9IFNlYXJjaEZpbHRlci5PUEVSQVRPUjtcbiAgcXVlcnlTY29wZTogUXVlcnlTY29wZTtcblxuICBAVmlld0NoaWxkKCd0cGxTZWFyY2gnLCB7cmVhZDogVGVtcGxhdGVSZWZ9KSB0cGxTZWFyY2g6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0Jykgc2VhcmNoSW5wdXQ6IEF1dG9Db21wbGV0ZTtcbiAgQFZpZXdDaGlsZCgneHBpbnB1dCcpIGV4cGVydElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpZHhmb3JtJykgaW5kZXhkYXRhRm9ybTogT2JqZWN0Rm9ybUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY3R4Zm9ybScpIGNvbnRleHRGb3JtOiBPYmplY3RGb3JtQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX292ZXJsYXlSZWY/OiBZdmNPdmVybGF5UmVmO1xuICBwcml2YXRlIHF1ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcXVlcnlTdGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBxdWVyeTogU2VhcmNoUXVlcnk7XG4gIHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlO1xuICBjYXBhYmlsaXRpZXM6IENhcGFiaWxpdGllcztcbiAgYWN0aXZlVGFiSWQ/OiBzdHJpbmc7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG5cbiAgaXNTdG9yZWRRdWVyeTogYm9vbGVhbjtcbiAgaXNPd25RdWVyeSA9IGZhbHNlO1xuICBvYmplY3RUeXBlR3JvdXBzID0gW107XG4gIHR5cGVHcm91cFRyZWUgPSBbXTtcbiAgYXV0b2NvbXBsZXRlUmVzdWx0czogc3RyaW5nW107XG5cbiAgaWR4U2VhcmNoOiBJZHhTZWFyY2g7XG4gIGN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZTtcblxuICBleHBlcnRNb2RlUXVlcnlFbXB0eSA9IGZhbHNlO1xuICBleHBlcnRNb2RlU3VwcG9ydCA9IHtcbiAgICBiYXNlUGFyYW1zOiBbXSxcbiAgICBzZWxlY3RlZEdyb3VwOiBudWxsLFxuICAgIHNlbGVjdGVkVHlwZTogbnVsbFxuICB9O1xuXG4gIGZpbHRlcnNNb2RlbCA9IHt9O1xuICBhZ2dyZWdhdGlvbnNNb2RlbCA9IHt9O1xuICBkYXRlUGlwZTogTG9jYWxlRGF0ZVBpcGU7XG4gIHN5c1Jvb3RDb250ZXh0ID0ge1xuICAgIGlkOiBudWxsLFxuICAgIG5hbWU6IENvbnRleHRUeXBlLnN5c3Jvb3QsXG4gICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmFkZC50aXRsZS5sb2NhdGlvbi5jb21tb24nKSxcbiAgICBzaXR1YXRpb246ICdTRUFSQ0gnLFxuICAgIG1vZGU6ICdDT05URVhUJyxcbiAgICBjb250ZXh0Rm9ybU9wdGlvbnM6IHtcbiAgICAgIGZvcm1Nb2RlbDoge25hbWU6IENvbnRleHRUeXBlLnN5c3Jvb3R9XG4gICAgfVxuICB9O1xuXG4gIF9zZWxlY3RlZDogbnVtYmVyID0gbnVsbDtcblxuICBvYmplY3RUeXBlR3JvdXBzU3RvcmFnZUtleSA9ICdlby5hcHAuc2VhcmNoLm9iamVjdC50eXBlLmdyb3VwLnNvcnRlZExpc3QnO1xuICB0ZXJtRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIHRlcm06IFtdXG4gIH0pO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25FeGVjdXRlU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBzZXQgc2VsZWN0ZWQoaW5kZXgpIHtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkID09PSBpbmRleCA/IG51bGwgOiBpbmRleDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXQgc3RvcmVkUXVlcnkoKTogU3RvcmVkUXVlcnkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5IGFzIFN0b3JlZFF1ZXJ5O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTZWFyY2hTZXJ2aWNlOiBBcHBTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheTogWXZjT3ZlcmxheVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdG9yZWRRdWVyaWVzU2VydmljZTogU3RvcmVkUXVlcmllc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYXBhYmlsaXR5U2VydmljZTogQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcbiAgKSB7XG5cbiAgICB0aGlzLmRhdGVQaXBlID0gbmV3IExvY2FsZURhdGVQaXBlKHRyYW5zbGF0ZSk7XG5cbiAgICB0aGlzLmV4cGVydE1vZGVTdXBwb3J0LmJhc2VQYXJhbXMgPSBPYmplY3Qua2V5cyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykubWFwKGsgPT4ge1xuICAgICAgbGV0IGRhdGEgPSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1trXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5nbG9iYWwuYmFzZXBhcmFtLicgKyBkYXRhKSxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRFRF0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNcbiAgICApLm1hcChrID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1trXSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLicgKyBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVEXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1xuICAgICkubWFwKGsgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUuJyArIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba11cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTUlNRVRZUEVHUk9VUF0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5Lk1JTUVUWVBFR1JPVVBfQlVDS0VUU1xuICAgICkubWFwKGsgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBTZWFyY2hRdWVyeS5NSU1FVFlQRUdST1VQX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IFNlYXJjaFF1ZXJ5Lk1JTUVUWVBFR1JPVVBfQlVDS0VUU1trXVxuICAgICAgfTtcbiAgICB9KS5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5GSUxFU0laRV0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLmZpbGVzaXplLicgKyBTZWFyY2hRdWVyeS5GSUxFX1NJWkVfQlVDS0VUU1trXVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgb25UYWJDaGFuZ2UodGFiSWQ6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWJJZDtcbiAgICBpZiAodGFiSWQgPT09ICdyZXN0cmljdFR5cGUnKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICBzdWI6IHtcbiAgICAgICAgICAgIGNvbnRleHRmb2xkZXJ0eXBlOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0Q3JlYXRlZCcpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIGNyZWF0ZWQ6IHt9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRhYklkID09PSAncmVzdHJpY3RNb2RpZmljYXRpb24nKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHt9LFxuICAgICAgICBtb2RpZmllZDoge31cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGFiSWQgPT09ICdyZXN0cmljdEZpbGUnKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHt9LFxuICAgICAgICBtaW1ldHlwZWdyb3VwOiB7fSxcbiAgICAgICAgZmlsZXNpemU6IHt9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUXVlcnkocXVlcnk6IFNlYXJjaFF1ZXJ5KSB7XG4gICAgLy8gSU1QT1JUQU5UOiBuZXZlciBjaGFuZ2UgdGhlIGxvY2FsIHF1ZXJ5IGRpcmVjdGx5XG4gICAgLy8gdXNlIHNlYXJjaFNlcnZpY2UsIHNvIGV2ZXJ5IGNvbXBvbmVudHMgc3Vic2NyaWJlZCB0byB0aGUgcXVlcnlcbiAgICAvLyB3aWxsIGdldCB0aGUgbmV3IHZhbHVlXG4gICAgdGhpcy5xdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuY3VycmVudENvbnRleHRGb2xkZXJOYW1lID0gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoXG4gICAgICA/IHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdLm5hbWVcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLmlzU3RvcmVkUXVlcnkgPSBxdWVyeSBpbnN0YW5jZW9mIFN0b3JlZFF1ZXJ5O1xuXG4gICAgaWYgKHRoaXMuaXNTdG9yZWRRdWVyeSkge1xuICAgICAgY29uc3QgdXNlciA9IHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgIHRoaXMuaXNPd25RdWVyeSA9XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkudXNlci50b0xvd2VyQ2FzZSgpID09PSB1c2VyLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykuZm9yRWFjaChrID0+IHRoaXMucHJvY2Vzc0ZpbHRlcnMoaykpO1xuICAgIC8vIGlmIHdlIGhhdmUgYW4gaW5kZXhkYXRhIHNlYXJjaCB1c2luZyBhIGNvbnRleHQgYnV0IHRoZSBjb250ZXh0IHdhcyByZW1vdmVkXG4gICAgaWYgKFxuICAgICAgIXRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCAmJlxuICAgICAgdGhpcy5pZHhTZWFyY2ggJiZcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9uc1xuICAgICkge1xuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zID0gbnVsbDtcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb2xkZXJUeXBlID0gbnVsbDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpbHRlckZyb21Gb3JtRGF0YSgpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG5cbiAgICAvLyBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gc2V0dXAgYW4gaW5kZXhkYXRhIHNlYXJjaFxuICAgIGNvbnN0IGFjdGl2YXRlSW5kZXhkYXRhU2VhcmNoID0gdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID09PSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuVFlQRVNfU0VUXG4gICAgICB8fCB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPT09IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5DT05URVhUX0ZPTERFUl9TRVQ7XG4gICAgaWYgKGFjdGl2YXRlSW5kZXhkYXRhU2VhcmNoKSB7XG4gICAgICAvLyBoYXZpbmcganVzdCBvbmUgdGFyZ2V0IHR5cGUgYW5kIGEgY29udGV4dCB0eXBlIHNldHVwIG1lYW5zLCB0aGF0IHdlIGFyZSB1c2luZyBpbmRleGRhdGEgc2VhcmNoXG4gICAgICB0aGlzLmluZGV4ZGF0YVNlYXJjaChcbiAgICAgICAgdGhpcy5xdWVyeS50eXBlc1swXSxcbiAgICAgICAgdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoID4gMCA/IHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdIDogbnVsbFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycyh0aGlzLnF1ZXJ5KS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyBoYXZpbmcganVzdCBvbmUgdGFyZ2V0IHR5cGUgYW5kIGluZGV4ZGF0YSBmaWx0ZXJzIGFsc28gbWVhbnMsIHRoYXQgd2UgYXJlIHVzaW5nIGluZGV4ZGF0YSBzZWFyY2hcbiAgICAgIHRoaXMuaW5kZXhkYXRhU2VhcmNoKHRoaXMucXVlcnkudHlwZXNbMF0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPiAxKSB7XG4gICAgICAvLyByZXNldCBpbmRleGRhdGEgc2VhcmNoIG90aGVyd2lzZSwgYmVjYXVzZSB0aGUgY3VycmVudCBxdWVyeSBtYXkgYmUgcmVzZXQgZnJvbSBvdXQgc2lkZSAoZS5nLiBieSBhIHN0b3JlZCBxdWVyeSlcbiAgICAgIHRoaXMuaWR4U2VhcmNoID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocXVlcnkuZXhwZXJ0TW9kZSkge1xuICAgICAgdGhpcy50eXBlR3JvdXBUcmVlID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmJ1aWxkVHlwZUdyb3VwVHJlZSgpO1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5U2NvcGUgPSBxdWVyeS5zY29wZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RPYmplY3RUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICAvKiogc2V0IHVwIHRoZSByaWdodCB0eXBlIGZpbHRlciBpZiBub3QgYWxyZWFkeSBkb25lICovXG4gICAgY29uc3QgcXVlcnlUeXBlc0xlbmd0aCA9XG4gICAgICB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA+IDEgfHwgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDA7XG4gICAgY29uc3QgcXVlcnlUeXBlc0xlbmd0aEFuZE5hbWUgPVxuICAgICAgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5xdWVyeS50eXBlc1swXS5uYW1lICE9PSB0eXBlLm5hbWU7XG4gICAgaWYgKHF1ZXJ5VHlwZXNMZW5ndGggfHwgcXVlcnlUeXBlc0xlbmd0aEFuZE5hbWUpIHtcbiAgICAgIC8vIHNldHRpbmcgb2JqZWN0IHR5cGVzIHdpbGwgZW1pdCBhIG5ldyBxdWVyeS4gVGhpcyB3aWxsIHRoZW4gdGFrZSBjYXJlIG9mXG4gICAgICAvLyBzZXR0aW5nIHVwIHRoZSBpbmRleGRhdGEgZm9ybVxuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldFF1ZXJ5VHlwZXMoW3R5cGVdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBpbmRleGRhdGEgc2VhcmNoIGZvciBhIGdpdmVuIG9iamVjdCB0eXBlXG4gICAqIEBwYXJhbSB0eXBlIC0gYW4gb2JqZWN0IHR5cGVcbiAgICogQHBhcmFtIGNvbnRleHRGb2xkZXJUeXBlIC0gY29udGV4dCBmb2xkZXIgdHlwZVxuICAgKi9cbiAgcHVibGljIGluZGV4ZGF0YVNlYXJjaCh0eXBlOiBPYmplY3RUeXBlLCBjb250ZXh0Rm9sZGVyVHlwZT86IE9iamVjdFR5cGUpIHtcbiAgICBpZiAoIXR5cGUgfHwgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnF1ZXJ5LnR5cGVzWzBdLm5hbWUgPT09IHR5cGUubmFtZSkge1xuICAgICAgLyoqIGV2ZW4gaWYgd2Ugc2VsZWN0IGEgdHlwZSB0aGF0IGlzIGFscmVhZHkgc2VsZWN0ZWQsIHdlIG5lZWQgdG8gY2FsbCBhZ2dyZWdhdGUgYXMgdGhlcmUgbWF5IGJlIGNvbnRleHQgdHlwZXMgaW52b2x2ZWQgKi9cbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgIHN1Yjoge1xuICAgICAgICAgICAgY29udGV4dGZvbGRlcnR5cGU6IHt9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCB0cnVlKTtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXJpdmVkVHlwZXMgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZXMoKS5maWx0ZXIodCA9PiB0LnN1cGVydHlwZXMuaW5jbHVkZXModHlwZS5xbmFtZSkpO1xuICAgIGNvbnN0IGlzUm9vdFR5cGUgPSAhIWRlcml2ZWRUeXBlcy5maW5kKHQgPT4gdC5wYXJlbnR0eXBlcy5pbmNsdWRlcygnc3lzcm9vdCcpKSB8fCAhIXRoaXMuYXBwU2VhcmNoU2VydmljZS50eXBlc0FsbG93ZWRVbmRlclN5c3Jvb3QuZmluZChyVCA9PiByVC5xbmFtZSA9PT0gdHlwZS5xbmFtZSk7XG5cbiAgICB0aGlzLmlkeFNlYXJjaCA9IHtcbiAgICAgIHR5cGUsXG4gICAgICBjb250ZXh0Rm9sZGVyVHlwZSxcbiAgICAgIGNvbnRleHRNb2RlbHM6IGlzUm9vdFR5cGUgPyBbdGhpcy5zeXNSb290Q29udGV4dF0gOiBbXSxcbiAgICAgIGZvcm1PcHRpb25zOiBudWxsXG4gICAgfTtcblxuICAgIC8qKiBmZXRjaCBjb250ZXh0IHR5cGUgbW9kZWxzICovXG4gICAgaWYgKHR5cGUuYWxsb3dlZGNvbnRleHR0eXBlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRvRmV0Y2ggPSBbXTtcbiAgICAgIHR5cGUuYWxsb3dlZGNvbnRleHR0eXBlcy5mb3JFYWNoKGNvbnRleHRUeXBlID0+IHtcbiAgICAgICAgY29uc3Qgb2JqVHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKGNvbnRleHRUeXBlLm5hbWUpO1xuICAgICAgICBpZiAob2JqVHlwZSkge1xuICAgICAgICAgIHRvRmV0Y2gucHVzaChcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlRm9ybShcbiAgICAgICAgICAgICAgY29udGV4dFR5cGUubmFtZSxcbiAgICAgICAgICAgICAgJ1NFQVJDSCcsXG4gICAgICAgICAgICAgICdDT05URVhUJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRvRmV0Y2gubGVuZ3RoKSB7XG4gICAgICAgIG9ic2VydmFibGVGb3JrSm9pbih0b0ZldGNoKS5zdWJzY3JpYmUoZm9ybU1vZGVscyA9PiB7XG4gICAgICAgICAgLyoqIGFic3RyYWN0IGNvbnRleHQgdHlwZXMgc2hvdWxkIG5vdCBiZSB1c2VkICovXG4gICAgICAgICAgdGhpcy5hZGRDb250ZXh0TW9kZWwoZm9ybU1vZGVscyk7XG4gICAgICAgICAgLyoqIGlmIHRoZXJlIHdhcyBhIGNvbnRleHQgdHlwZSBwcm92aWRlZCBieSB0aGUgcXVlcnksIHdlJ2xsIHNldHVwIHRoZSByaWdodCBtb2RlbCBhcyB3ZWxsICovXG4gICAgICAgICAgaWYgKGNvbnRleHRGb2xkZXJUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMuZmluZChcbiAgICAgICAgICAgICAgbSA9PiBtLm5hbWUgPT09IGNvbnRleHRGb2xkZXJUeXBlLm5hbWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbnRleHQobW9kZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Rm9sZGVyVHlwZS5uYW1lID09PSBDb250ZXh0VHlwZS5zeXNyb290KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29udGV4dCh0aGlzLnN5c1Jvb3RDb250ZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8qKiB0aGUgcHJvdmlkZWQgY29udGV4dCB0eXBlIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBzbyBqdXN0IHJlbW92ZSBpdCAqL1xuICAgICAgICAgICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9sZGVyVHlwZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZm9ybURhdGE7XG4gICAgbGV0IGlkeEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcbiAgICBpZiAoaWR4RmlsdGVycyAmJiBpZHhGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIHNldCB1cCBmb3JtIGRhdGEgZnJvbSBpbmRleGRhdGEgcXVlcnkgZmlsdGVyc1xuICAgICAgZm9ybURhdGEgPSBpZHhGaWx0ZXJzO1xuICAgIH1cblxuICAgIGNvbnN0IG9iamVjdFR5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZSh0eXBlLm5hbWUpO1xuICAgIGlmIChvYmplY3RUeXBlKSB7XG4gICAgICB0aGlzLnN5c3RlbVNlcnZpY2VcbiAgICAgICAgLmdldE9iamVjdFR5cGVGb3JtKHR5cGUubmFtZSwgJ1NFQVJDSCcpXG4gICAgICAgIC5zdWJzY3JpYmUobW9kZWwgPT4ge1xuICAgICAgICAgIHRoaXMuaWR4U2VhcmNoLmZvcm1PcHRpb25zID0ge1xuICAgICAgICAgICAgZm9ybU1vZGVsOiBtb2RlbCxcbiAgICAgICAgICAgIGRhdGE6IGZvcm1EYXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUXVlcnlTdGF0ZShxdWVyeVN0YXRlOiBTZWFyY2hTdGF0ZSkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMucXVlcnlTdGF0ZSA9IHF1ZXJ5U3RhdGU7XG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoKSB7XG4gICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0QWdncmVnYXRpb25zID0ge307XG4gICAgICBpZiAocXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnMuY29udGV4dFR5cGUuc2l6ZSkge1xuICAgICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0QWdncmVnYXRpb25zID0gdGhpcy5idWlsZENvbnRleHRBZ2dyZWdhdGlvbnMocXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnMuY29udGV4dFR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNhdmUgYWdncmVnYXRpb25zIHZhbHVlc1xuICAgIGlmICghdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFXSB8fCAhdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggfHwgcXVlcnlTdGF0ZS5sYXN0Q2hhbmdlICE9PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEVdID0gbmV3IE1hcChxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy50eXBlKTtcbiAgICB9XG5cbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRFRCwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKTtcbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRUQsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSk7XG4gICAgdGhpcy5zeW5jQWdncmVnYXRpb25zKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1JTUVUWVBFR1JPVVAsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTik7XG4gICAgdGhpcy5zeW5jQWdncmVnYXRpb25zKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkZJTEVTSVpFLCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpO1xuICB9XG5cbiAgYnVpbGRDb250ZXh0QWdncmVnYXRpb25zKGNvbnRleHRUeXBlKSB7XG4gICAgbGV0IGNvbnRleHRBZ2dyZWdhdGlvbnMgPSB7fTtcbiAgICBjb250ZXh0VHlwZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiBjb250ZXh0QWdncmVnYXRpb25zW2tleV0gPSB2YWx1ZSk7XG4gICAgcmV0dXJuIGNvbnRleHRBZ2dyZWdhdGlvbnM7XG4gIH1cblxuICBwcm9jZXNzRmlsdGVycyhrOiBzdHJpbmcpIHtcbiAgICBsZXQgZjogU2VhcmNoRmlsdGVyID0gdGhpcy5xdWVyeS5maWx0ZXJzLmZpbmQoZmYgPT4gZmYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2tdKTtcbiAgICBpZiAoIWYpIHtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2tdXSA9IHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIG11bHRpVmFsdWU6IFtdLFxuICAgICAgICBpbm5lclZhbHVlOiBbXVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIXRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldIHx8XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5maWx0ZXIgIT09IGZcbiAgICApIHtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldID0ge307XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5maWx0ZXIgPSBmO1xuICAgICAgbGV0IHZhbHVlOiBhbnkgPVxuICAgICAgICB0eXBlb2YgZi5maXJzdFZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGYub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlxuICAgICAgICAgID8gSlNPTi5wYXJzZShmLmZpcnN0VmFsdWUpXG4gICAgICAgICAgOiB0eXBlb2YgZi5maXJzdFZhbHVlICE9PSAnYm9vbGVhbicgPyBbZi5maXJzdFZhbHVlXSA6IGYuZmlyc3RWYWx1ZTtcbiAgICAgIGlmIChmLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0ubXVsdGlWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS52YWx1ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRFRCB8fFxuICAgICAgICAgIGYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVEXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gbmV3IFJhbmdlVmFsdWUoZi5vcGVyYXRvciwgZi5maXJzdFZhbHVlLCBmLnNlY29uZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5tdWx0aVZhbHVlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmlubmVyVmFsdWUgPVxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5ID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0ubGFiZWwgPSBbXTtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmlubmVyVmFsdWUuZm9yRWFjaCgodjogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkNSRUFUT1IgfHxcbiAgICAgICAgICBmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFUlxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5sYWJlbFtpXSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0ubGFiZWxbaV0gPSBvYnNlcnZhYmxlT2YoXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZpbHRlcihmLCB2KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN5bmNBZ2dyZWdhdGlvbnMobmFtZSwgb3BlcmF0b3IpIHtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW25hbWVdLmZvckVhY2goYWdnID0+IHtcbiAgICAgIGxldCBhID0gdGhpcy5xdWVyeVN0YXRlLmFnZ3JlZ2F0aW9uc1tuYW1lXS5maW5kKGFhID0+IGFhLmtleSA9PT0gYWdnLmtleSk7XG4gICAgICBpZiAoYSAmJiBhLnZhbHVlICE9PSBhZ2cudmFsdWUpIHtcbiAgICAgICAgYWdnLnZhbHVlID0gYS52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIWEgJiYgdGhpcy5xdWVyeVN0YXRlLmxhc3RDaGFuZ2UgIT09IG5hbWUpIHtcbiAgICAgICAgYWdnLnZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgICBhZ2cuc2VsZWN0ZWQgPSB0aGlzLmlzRmlsdGVyQWN0aXZlKG5hbWUsIG9wZXJhdG9yLCBhZ2cua2V5KTtcbiAgICAgIGFnZy5zYXZlZCA9ICFhICYmIHRoaXMucXVlcnlTdGF0ZS5sYXN0Q2hhbmdlID09PSBuYW1lO1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyRmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZVJlc3RyaWN0aW9uKGZpbHRlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbZmlsdGVyLnByb3BlcnR5XSkge1xuICAgICAgbGV0IGFnZyA9IHRoaXMuYWdncmVnYXRpb25zTW9kZWxbZmlsdGVyLnByb3BlcnR5XS5maW5kKGEgPT4gYS5rZXkgPT09IHZhbHVlKTtcbiAgICAgIHJldHVybiBhZ2cubGFiZWw7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGNyZWF0ZURhdGVSZXN0cmljdGlvbihmaWx0ZXI6IFNlYXJjaEZpbHRlcikge1xuICAgIHN3aXRjaCAoZmlsdGVyLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRTpcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYGVvLnNlYXJjaC5hZ2cudGltZS4ke2ZpbHRlci5maXJzdFZhbHVlfWApO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUw6XG4gICAgICAgIHJldHVybiBgPSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydERhdGUnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5URVJWQUxfSU5DTFVERV9CT1RIOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9IC0gJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuc2Vjb25kVmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkdSRUFURVJfT1JfRVFVQUw6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guYWdnLnRpbWUuc3Bhbi5zaW5jZScpfSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydCcpfWA7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5MRVNTX09SX0VRVUFMOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4udW50aWwnKX0gJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnQnKX1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGAoJHtmaWx0ZXIub3BlcmF0b3J9KSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydCcpfWA7XG4gICAgfVxuICB9XG5cbiAgcmVzb2x2ZUxhYmVsKG1vZGVsOiBhbnksIHZhbHVlOiBhbnlbXSkge1xuICAgIG1vZGVsLmxhYmVsLmZvckVhY2goKGwsIGkpID0+IGwubmV4dCh2YWx1ZVtpXS50aXRsZSkpO1xuICB9XG5cbiAgcmVzb2x2ZVNlbGVjdGlvbihhZ2dzOiBhbnlbXSwga2V5OiBzdHJpbmcsIHNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGFnZ3NcbiAgICAgIC5maWx0ZXIoYSA9PiBzZWxlY3RlZCA/IGEua2V5ICE9PSBrZXkgJiYgYS5zZWxlY3RlZCA6IGEua2V5ID09PSBrZXkgfHwgYS5zZWxlY3RlZClcbiAgICAgIC5tYXAoYSA9PiBhLmtleSk7XG4gIH1cblxuICByZXNldEV4cGVydE1vZGVJbnB1dCgpIHtcbiAgICB0aGlzLnF1ZXJ5LnRlcm0gPSAnJztcbiAgICB0aGlzLnRlcm1Gb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgdGVybTogJydcbiAgICB9KTtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRXhwZXJ0TW9kZSgpIHtcbiAgICBpZiAodGhpcy50eXBlR3JvdXBUcmVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy50eXBlR3JvdXBUcmVlID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmJ1aWxkVHlwZUdyb3VwVHJlZSgpO1xuICAgIH1cbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlRXhwZXJ0TW9kZSgpO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuY2hhbmdlU2VhcmNoSW5wdXRGb2N1cygpO1xuICB9XG5cbiAgcHVibGljIHNldFF1ZXJ5U2NvcGUoc2NvcGU6IFF1ZXJ5U2NvcGUpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0UXVlcnlTY29wZShzY29wZSk7XG4gIH1cblxuICBwdWJsaWMgeHBTZWxlY3RHcm91cChncm91cCkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xuICAgIHRoaXMuZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB4cFNlbGVjdFR5cGUodHlwZSkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlID0gdHlwZTtcbiAgfVxuXG4gIHB1YmxpYyB4cEFkZFRvVGVybShzdHIpIHtcbiAgICBsZXQgdGVybTtcbiAgICBpZiAoIXRoaXMucXVlcnkudGVybSkge1xuICAgICAgdGVybSA9IHN0cjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVybSA9IHRoaXMucXVlcnkudGVybSArICcgJyArIHN0cjtcbiAgICB9XG4gICAgdGhpcy5xdWVyeS50ZXJtID0gdGVybSArICc6JztcbiAgICB0aGlzLmV4cGVydElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVUeXBlKF90eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgLy8gZG8gbm90IGRpcmVjdGx5IHRvZ2dsZSBfdHlwZSBvbiB0aGUgcXVlcnksIGluc3RlYWQgdXNlIHRoZVxuICAgIC8vIHNlYXJjaFNlcnZpY2UgdG8gdXBkYXRlIHRoZSBxdWVyeSBzdG9yZVxuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVRdWVyeVR5cGUoX3R5cGUpO1xuICB9XG5cbiAgcHVibGljIGlzVHlwZUFjdGl2ZShfdHlwZTogT2JqZWN0VHlwZSkge1xuICAgIHJldHVybiAhIXRoaXMucXVlcnkudHlwZXMuZmluZCh0ID0+IHQuaWQgPT09IF90eXBlLmlkKTtcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0aW9uQ291bnQoX3R5cGU6IE9iamVjdFR5cGUpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy50eXBlLmdldChfdHlwZS5uYW1lKSB8fCAnJztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSkge1xuICAgIGlmIChrZXkgaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICByZXR1cm4gbmV3IFNlYXJjaEZpbHRlcihmaWx0ZXJUeXBlLCBrZXkub3BlcmF0b3IsIGtleS5maXJzdFZhbHVlLCBrZXkuc2Vjb25kVmFsdWUsIHt0aW1lOiBrZXkub3BlcmF0b3IgIT09IHRoaXMuT1BFUkFUT1IuRVFVQUwsIHRpbWV6b25lOiBmYWxzZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFNlYXJjaEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RmlsdGVyKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnksIGZvcm0/OiBOZ0Zvcm0pIHtcbiAgICBsZXQgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICBsZXQgZW1wdHkgPSB0aGlzLmlzRW1wdHkoZmlsdGVyKTtcbiAgICBsZXQgYWN0aXZlRmlsdGVyID0gdGhpcy5xdWVyeS5maWx0ZXJzLmZpbmQoZmYgPT4gZmYucHJvcGVydHkgPT09IGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgbGV0IGR1cGxpY2F0ZSA9IHRoaXMuaXNGaWx0ZXJBY3RpdmUoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG5cbiAgICBpZiAoZW1wdHkgJiYgYWN0aXZlRmlsdGVyICYmIGFjdGl2ZUZpbHRlci5vcGVyYXRvciAhPT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVtb3ZlUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKCFlbXB0eSAmJiAhZHVwbGljYXRlKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWRkUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRmlsdGVyKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnksIHNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgbGV0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG4gICAgaWYgKGZpbHRlclR5cGUgPT09IHRoaXMuUEFSQU1TLkZJTEVTSVpFKSB7XG4gICAgICBsZXQgZm9sZGVyRmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcignZm9sZGVyJywgJ2VxJywgZmFsc2UpO1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5RmlsdGVycyhbZmlsdGVyLCBmb2xkZXJGaWx0ZXJdLCAhc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlGaWx0ZXIoZmlsdGVyLCAhc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0VtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZWFyY2hGaWx0ZXIpICYmXG4gICAgICAgIHRoaXMuaXNFbXB0eSh2YWx1ZS5maXJzdFZhbHVlKSAmJlxuICAgICAgICB0aGlzLmlzRW1wdHkodmFsdWUuc2Vjb25kVmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaXNGaWx0ZXJBY3RpdmUoZmlsdGVyVHlwZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCBrZXk6IGFueSkge1xuICAgIGxldCBmID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5tYXRjaChmLnByb3BlcnR5LCBmLm9wZXJhdG9yLCBmLmZpcnN0VmFsdWUsIGYuc2Vjb25kVmFsdWUpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZpbHRlcihtb2RlbDogYW55LCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG1vZGVsLmlubmVyVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBtb2RlbC5pbm5lclZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGxldCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKG1vZGVsLmZpbHRlci5wcm9wZXJ0eSwgbW9kZWwuZmlsdGVyLm9wZXJhdG9yLCBtb2RlbC5pbm5lclZhbHVlLmZpbHRlcihmID0+IGYgIT09IHZhbHVlKSk7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWRkUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlbW92ZVF1ZXJ5RmlsdGVyKG1vZGVsLmZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdXRvY29tcGxldGVTdWdnZXN0KGV2dD8pIHtcbiAgICBsZXQgdiA9IFtdO1xuICAgIC8vIGFsc28gdHJpZ2dlciBhZ2dyZWdhdGlvbnMgc2VhcmNoXG4gICAgdGhpcy5hdXRvY29tcGxldGVTZWxlY3QoKTtcbiAgICBpZiAoZXZ0KSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2VcbiAgICAgICAgLmF1dG9jb21wbGV0ZShldnQpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChyZXMgPT4gb2JzZXJ2YWJsZUZyb20ocmVzKS5waXBlKHBsdWNrKCd2YWx1ZScpKSkpXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHYucHVzaChyZXMpLCAoKSA9PiB7IH0sICgpID0+ICh0aGlzLmF1dG9jb21wbGV0ZVJlc3VsdHMgPSB2KVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGV4cGVydFRlcm1DaGFuZ2VkKCkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhdXRvY29tcGxldGVTZWxlY3QoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgYXV0b2NvbXBsZXRlUGFzdGUoZSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5xdWVyeS50ZXJtID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVNlbGVjdCgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGVTZWFyY2goKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnF1ZXJ5LmV4cGVydE1vZGUpIHtcbiAgICAgIC8vIGluIGV4cGVydCBzZWFyY2ggbW9kZSB3ZSBwcmUtZmV0Y2ggcmVzdWx0cyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3R1YWwgc2VhcmNoXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0U2VhcmNoU3RhdGUoe2FnZ3M6IHt0eXBlOiB7fX0sIC4uLnRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCl9KS5zdWJzY3JpYmUoKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICAgIC8vIG9ubHkgZXhlY3V0ZSB0aGUgYWN0dWFsIHF1ZXJ5IHdoZW4gd2UndmUgZm91bmQgc29tZXRoaW5nXG4gICAgICAgIGlmICghcXVlcnlTdGF0ZS5pc0VtcHR5KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sIFV0aWxzLnRocm93KCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHNlYXJjaCByZXN1bHQnKTtcbiAgICAgICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IHRydWU7XG4gICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXhlY3V0ZSB0aGUgYWN0dWFsIHNlYXJjaCBieSByb3V0aW5nIHRvIHRoZSByZXN1bHQgc3RhdGUgd2hpY2ggdGhlbiB3aWxsIGV4ZWN1dGUgdGhlXG4gIC8vIHF1ZXJ5IGFuZCBkaXNwbGF5IHRoZSByZXN1bHRzXG4gIHByaXZhdGUgdHJpZ2dlclNlYXJjaCgpIHtcbiAgICB0aGlzLnF1ZXJ5LnJlc29sdmVSZWZlcmVuY2UgPSB0cnVlO1xuICAgIGNvbnN0IHVyaVBhcmFtID0gZW5jb2RlVVJJQ29tcG9uZW50KFV0aWxzLmZvcm1EYXRhU3RyaW5naWZ5KHRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCkpKTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmNsb3NlKCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0pLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgdXJpUGFyYW1RdWVyeTogTmF2aWdhdGlvbkV4dHJhcyA9IHtxdWVyeVBhcmFtczoge3F1ZXJ5OiB1cmlQYXJhbX19O1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcmVzdWx0J10sIHVyaVBhcmFtUXVlcnkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVRlcm0oKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldFRlcm0oJycpO1xuICAgIHRoaXMucmVzZXRFeHBlcnRNb2RlSW5wdXQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2gpIHtcbiAgICAgIHRoaXMuZXhpdEluZGV4ZGF0YVNlYXJjaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlUeXBlKHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDb250ZXh0VHlwZSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlbW92ZVF1ZXJ5RmlsdGVyKGZpbHRlcik7XG5cbiAgICAvLyBpZiB3ZSBhcmUgaW4gaW5kZXNkYXRhIHNlYXJjaCBtb2RlLCByZW1vdmluZyBhIGZpbHRlciB0aGF0IGlzIG5vIGJhc2VwYXJhbSBmaWx0ZXJcbiAgICAvLyByZXF1aXJlcyB0aGUgZnJvbSBtb2RlbCB0byBiZSB1cGRhdGVkXG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoICYmICF0aGlzLmFwcFNlYXJjaFNlcnZpY2UuaXNCYXNlUGFyYW1GaWx0ZXIoZmlsdGVyKSkge1xuICAgICAgLy8gdG9kbzogdXBkYXRlIGZvcm0gbW9kZWwvZGF0YVxuICAgICAgbGV0IGlkeEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcbiAgICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBzZXQgdXAgZm9ybSBkYXRhIGZyb20gaW5kZXhkYXRhIHF1ZXJ5IGZpbHRlcnNcbiAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMuZGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgICAgIHRoaXMuaW5kZXhkYXRhRm9ybS5zZXRGb3JtRGF0YShpZHhGaWx0ZXJzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIG5vIGZpbHRlcnMgYXJlIHByZXNlbnQgcmVzZXQgdGhlIGZvcm1cbiAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMuZGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmluZGV4ZGF0YUZvcm0ucmVzZXRGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkQ29udGV4dE1vZGVsKGZvcm1Nb2RlbHMpOiB2b2lkIHtcbiAgICBsZXQgbW9kZWxzID0gWy4uLmZvcm1Nb2RlbHNdO1xuICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMucHVzaCguLi5tb2RlbHMpO1xuICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcbiAgfVxuXG4gIHB1YmxpYyBleGl0SW5kZXhkYXRhU2VhcmNoKCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5leGl0SW5kZXhkYXRhU2VhcmNoKCk7XG4gICAgdGhpcy5pZHhTZWFyY2ggPSBudWxsO1xuICB9XG5cbiAgc2V0Q29udGV4dChjb250ZXh0Rm9sZGVyTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGNvbnRleHRGb2xkZXJOYW1lICYmIHRoaXMuY3VycmVudENvbnRleHRGb2xkZXJOYW1lICE9PSBjb250ZXh0Rm9sZGVyTmFtZSkge1xuICAgICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSBjb250ZXh0Rm9sZGVyTmFtZTtcbiAgICAgIGNvbnN0IGNvbnRleHRUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY29udGV4dEZvbGRlck5hbWUpO1xuICAgICAgaWYgKGNvbnRleHRGb2xkZXJOYW1lID09PSBDb250ZXh0VHlwZS5zeXNyb290KSB7XG4gICAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZSh7bmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdCwgbGFiZWw6IENvbnRleHRUeXBlLnN5c3Jvb3R9IGFzIE9iamVjdFR5cGUpO1xuICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZSkge1xuICAgICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUoY29udGV4dFR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYENvbnRleHQgdHlwZSAnJHtjb250ZXh0Rm9sZGVyTmFtZX0nIG5vdCBmb3VuZC5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKG51bGwpO1xuICAgICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgY29udGV4dCB0eXBlIGZvciB0aGUgY3VycmVudCBzZWFyY2hcbiAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBmb3JtIG1vZGVsXG4gICAqL1xuICBwcml2YXRlIHNlbGVjdENvbnRleHQoY3R4KSB7XG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucyAmJiB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMuZm9ybU1vZGVsLm5hbWUgPT09IGN0eC5uYW1lKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250ZXh0O1xuICAgICAgaWYgKGN0eC5uYW1lID09PSBDb250ZXh0VHlwZS5zeXNyb290KSB7XG4gICAgICAgIGNvbnRleHQgPSBjdHg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0ID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY3R4Lm5hbWUpO1xuICAgICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9sZGVyVHlwZSA9IGNvbnRleHQ7XG4gICAgICB9XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUoY29udGV4dCk7XG5cbiAgICAgIGxldCBmb3JtRGF0YSA9IHt9O1xuICAgICAgbGV0IGlkeEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcbiAgICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3JtRGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucyA9IHtmb3JtTW9kZWw6IGN0eCwgZGF0YTogZm9ybURhdGF9O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkluZGV4RGF0YUNoYW5nZWQoZXZlbnQ6IEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQpIHtcbiAgICAvLyBvbmx5IHRyaWdnZXIgd2hlbiB2YWx1ZXMgYXJlIGNoYW5nZWQgYXMgY2hhbmdlcyBtYXkgYWxzbyBhcHBlYXIgd2hlbiBzY3JpcHRzXG4gICAgLy8gY2hhbmdlIG90aGVyIGZvcm0gZWxlbWVudCBwcm9wZXJ0aWVzIChlZy4gcmVhZG9ubHksIHJlcXVpcmVkIGZsYWcpXG4gICAgaWYgKGV2ZW50LmluZGV4ZGF0YUNoYW5nZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmlsdGVyRnJvbUZvcm1EYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hGaWx0ZXJGcm9tRm9ybURhdGEoKSB7XG4gICAgaWYgKCF0aGlzLmluZGV4ZGF0YUZvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhZGQgbWV0YWRhdGEgZmlsdGVycyBmb3IgZWFjaCBmb3JtIGRhdGEgZW50cnlcbiAgICBsZXQgaWR4RmlsdGVyczogU2VhcmNoRmlsdGVyW10gPSBbXTtcbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLmluZGV4ZGF0YUZvcm0uZ2V0Rm9ybURhdGEoKTtcbiAgICBpZiAodGhpcy5jb250ZXh0Rm9ybSkge1xuICAgICAgZm9ybURhdGEgPSBPYmplY3QuYXNzaWduKGZvcm1EYXRhLCB0aGlzLmNvbnRleHRGb3JtLmdldEZvcm1EYXRhKCkpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhmb3JtRGF0YSkpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFNlYXJjaEZpbHRlcih0aGlzLnF1ZXJ5LnR5cGVzLCBrZXksIGZvcm1EYXRhW2tleV0pLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAvLyB0aGUgc2VhcmNoIHNlcnZpY2UgZG9lcyBub3QgbGlrZSBuZXdsaW5lIGNoYXJzIGluIGNhc2Ugb2YgbXVsdGlsaW5lIGZpZWxkc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIuZmlyc3RWYWx1ZSkpIHtcbiAgICAgICAgICBpZihmaWx0ZXIuZmlyc3RWYWx1ZT8ubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWx0ZXIuZmlyc3RWYWx1ZSA9IGZpbHRlci5maXJzdFZhbHVlLm1hcCh2YWx1ZSA9PiB2YWx1ZS5yZXBsYWNlKC9cXG4vZywgJyAnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlci5maXJzdFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGZpbHRlci5maXJzdFZhbHVlID0gZmlsdGVyLmZpcnN0VmFsdWUucmVwbGFjZSgvXFxuL2csICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH0pO1xuICAgICAgZmlsdGVycy5mb3JFYWNoKGYgPT4gaWR4RmlsdGVycy5wdXNoKGYpKTtcbiAgICB9XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKGlkeEZpbHRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG9iamVjdCB0eXBlIGVsZW1lbnQgZm9yIGEgZmlsdGVyLCB0byBiZSBhYmxlIHRvIHNob3cgdGhlXG4gICAqIGxhYmVsIGZvciBhIGZpbHRlciBpbiB0aGUgc2VhcmNoIHN1bW1hcnkuXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSB0aGUgZmlsdGVyIHRvIGZldGNoIG9iamVjdCB0eXBlIGVsZW1lbnQgZm9yXG4gICAqL1xuICBwdWJsaWMgZ2V0T2JqZWN0VHlwZUVsZW1lbnRMYWJlbChmaWx0ZXI6IFNlYXJjaEZpbHRlcikge1xuICAgIGxldCBvdCA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRUYXJnZXRUeXBlRWxlbWVudEJ5TmFtZShmaWx0ZXIucHJvcGVydHkpO1xuICAgIHJldHVybiBvdCA/IG90LmxhYmVsIDogZmlsdGVyLnByb3BlcnR5ICsgJyAtICcgKyBmaWx0ZXIuZmlyc3RWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlUXVlcnkoKSB7XG4gICAgLy8gY29uc3QgcXVlcnlQYXJhbXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXNIYW5kbGluZyA6ICdwcmVzZXJ2ZSd9O1xuICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICB0aGlzLnJvdXRlclxuICAgICAgLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCB7cmVwbGFjZVVybDogdHJ1ZX0pXG4gICAgICAudGhlbigoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zdG9yZWQtcXVlcmllcyddLCB7cXVlcnlQYXJhbXM6IHtjcmVhdGU6IHRydWV9fSkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0b3JlZFF1ZXJ5KCkge1xuICAgIGlmICh0aGlzLnF1ZXJ5IGluc3RhbmNlb2YgU3RvcmVkUXVlcnkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCB7cmVwbGFjZVVybDogdHJ1ZX0pO1xuICAgICAgdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZS5zYXZlU3RvcmVkUXVlcnkodGhpcy5xdWVyeSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnN1Y2Nlc3ModGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LnNhdmUuc3VjY2VzcycpKTtcbiAgICAgIH0sIFV0aWxzLnRocm93KG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5zdG9yZWRxdWVyeS5zYXZlLmVycm9yJykpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXRRdWVyeSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVzZXQoKTtcbiAgICB0aGlzLmlzT3duUXVlcnkgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRhYklkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVzZXRFeHBlcnRNb2RlSW5wdXQoKTtcblxuICAgIGlmICh0aGlzLmlkeFNlYXJjaCkge1xuICAgICAgdGhpcy5leGl0SW5kZXhkYXRhU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VTZWFyY2hNZW51KCkge1xuICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIG1vdmVPYmplY3RUeXBlR3JvdXAoZ3JvdXBMYWJlbDogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZykge1xuICAgIGxldCBpbmRleCA9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5maW5kSW5kZXgoZ3JvdXAgPT4gZ3JvdXBMYWJlbCA9PT0gZ3JvdXAubGFiZWwpO1xuICAgIGxldCBuZXdJbmRleDtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgbmV3SW5kZXggPSBpbmRleCAtIDE7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgIG5ld0luZGV4ID0gaW5kZXggKyAxO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZmlyc3QnKSB7XG4gICAgICBuZXdJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsYXN0Jykge1xuICAgICAgbmV3SW5kZXggPSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoIC0gMTtcbiAgICAgIGlmIChpbmRleCA9PT0gbmV3SW5kZXgpIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAoaW5kZXggPCAwKSB7XG4gICAgICBpbmRleCArPSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoO1xuICAgIH1cbiAgICB3aGlsZSAobmV3SW5kZXggPCAwKSB7XG4gICAgICBuZXdJbmRleCArPSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobmV3SW5kZXggPj0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCkge1xuICAgICAgbGV0IGsgPSBuZXdJbmRleCAtIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGggKyAxO1xuICAgICAgd2hpbGUgKGstLSkge1xuICAgICAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMuc3BsaWNlKG5ld0luZGV4LCAwLCB0aGlzLm9iamVjdFR5cGVHcm91cHMuc3BsaWNlKGluZGV4LCAxKVswXSk7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMub2JqZWN0VHlwZUdyb3Vwc1N0b3JhZ2VLZXksIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5tYXAoZ3JvdXAgPT4gZ3JvdXAubGFiZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNTZWFyY2hJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dCkge1xuICAgICAgLy8gVE9ETzogdGhpcy5zZWFyY2hJbnB1dC5pbnB1dEVMLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlU2VhcmNoSW5wdXRGb2N1cygpIHtcbiAgICBpZiAodGhpcy5xdWVyeS5leHBlcnRNb2RlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNlbGVjdFJvb3RFbGVtZW50KCcuZXhwZXJ0LXNlYXJjaF9faW5wdXQnKS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzU2VhcmNoSW5wdXQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHRoaXMuY2FwYWJpbGl0eVNlcnZpY2UuZ2V0Q2FwYWJpbGl0aWVzKCk7XG4gICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLm9iamVjdFR5cGVHcm91cHM7XG4gICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzWzBdLnR5cGVzID0gdGhpcy5vYmplY3RUeXBlR3JvdXBzWzBdLnR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUucW5hbWUgIT09ICdzeXNmb2xkZXInICYmIHR5cGUucW5hbWUgIT09ICdzeXNkb2N1bWVudCcgJiYgdHlwZS5xbmFtZSAhPT0gJ3N5c29iamVjdCcpO1xuICAgIGxldCBzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0odGhpcy5vYmplY3RUeXBlR3JvdXBzU3RvcmFnZUtleSk7XG4gICAgbGV0IHN5bmNlZCA9IHRydWU7XG4gICAgaWYgKHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscyAmJiBzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMubGVuZ3RoID09PSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscy5maW5kKGdyb3VwID0+IGdyb3VwID09PSB0aGlzLm9iamVjdFR5cGVHcm91cHNbaV0ubGFiZWwpKSB7XG4gICAgICAgICAgc3luY2VkID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzeW5jZWQpIHtcbiAgICAgICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzID0gWy4uLnRoaXMub2JqZWN0VHlwZUdyb3Vwc10uc29ydChcbiAgICAgICAgICAoYSwgYikgPT4gc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmluZGV4T2YoYS5sYWJlbCkgLSBzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMuaW5kZXhPZihiLmxhYmVsKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnF1ZXJ5JC5zdWJzY3JpYmUoXG4gICAgICAocXVlcnk6IFNlYXJjaFF1ZXJ5KSA9PiB0aGlzLnByb2Nlc3NRdWVyeShxdWVyeSkpO1xuICAgIC8vIHN1YnNjcmliZSB0byBxdWVyeSBzdGF0ZSBhcyB3ZWxsIHRvIGZldGNoIHJlc3VsdCBjb3VudCBhbmQgYWdncmVnYXRpb25zIGFzIHRoZXkgY2hhbmdlXG4gICAgdGhpcy5xdWVyeVN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnF1ZXJ5U3RhdGUkLnN1YnNjcmliZSgocXVlcnlTdGF0ZTogU2VhcmNoU3RhdGUpID0+IHRoaXMucHJvY2Vzc1F1ZXJ5U3RhdGUocXVlcnlTdGF0ZSkpO1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcblxuICAgIHRoaXMudGVybUZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICB0YXAocmVzID0+IHtcbiAgICAgICAgdGhpcy5xdWVyeS50ZXJtID0gcmVzLnRlcm07XG4gICAgICB9KSwgZGVib3VuY2VUaW1lKDEwMDApLCB1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3VnZ2VzdCh0aGlzLnF1ZXJ5LnRlcm0pO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0LmZvY3VzSW5wdXQoKTtcbiAgICB9KTtcbiAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5Lm9wZW4odGhpcy50cGxTZWFyY2gsIG51bGwsIHtcbiAgICAgIGNlbnRlcmVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMudGVybUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICB0ZXJtOiB0aGlzLnF1ZXJ5LnRlcm1cbiAgICB9KTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmFmdGVyQ2xvc2VkJC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtczogTmF2aWdhdGlvbkV4dHJhcyA9IHtxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0sIHF1ZXJ5UGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5yZXNldEFnZ3MoKTtcbiAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5xdWVyeVN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjwhLS0gPGVvLWRpYWxvZyBbdmlzaWJsZV09XCJ0cnVlXCIgW3N0eWxlQ2xhc3NdPVwiJ2VvLWFwcC1zZWFyY2gtZGlhbG9nJ1wiIFthbGlnbl09XCInc3RhcnQnXCIgW21pbldpZHRoXT1cIic4MHZ3J1wiXG4gIFttaW5IZWlnaHRdPVwiJzEwMHZoJ1wiIChoaWRlKT1cImNsb3NlU2VhcmNoTWVudSgkZXZlbnQpXCI+IC0tPlxuPCEtLSA8eXZjLWRpYWxvZyBbb3B0aW9uc109XCJ7bGlnaHREaXNtaXNzOiB0cnVlfVwiIFt0ZW1wbGF0ZV09XCJ0cGxTZWFyY2hcIiAoY2xvc2VkKT1cImNsb3NlU2VhcmNoTWVudSgpXCI+PC95dmMtZGlhbG9nPiAtLT5cbjxuZy10ZW1wbGF0ZSAjdHBsU2VhcmNoPlxuXG4gIDxkaXYgY2xhc3M9XCJlby1hcHAtc2VhcmNoXCIgW25nQ2xhc3NdPVwie2V4cGVydDogcXVlcnkuZXhwZXJ0TW9kZX1cIiBlb1J0bEF3YXJlPVwiZnVsbFwiICpuZ0lmPVwicXVlcnlcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJoZWFkXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hcIj5cbiAgICAgICAgPGZvcm0gKHN1Ym1pdCk9XCJleGVjdXRlU2VhcmNoKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoPC9kaXY+XG5cbiAgICAgICAgICA8ZW8tcXVlcnktc2NvcGUtc2VsZWN0IFtzZWxlY3Rpb25dPVwicXVlcnlTY29wZVwiIChzZWxlY3QpPVwic2V0UXVlcnlTY29wZSgkZXZlbnQpXCI+PC9lby1xdWVyeS1zY29wZS1zZWxlY3Q+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJveFwiIFtmb3JtR3JvdXBdPVwidGVybUZvcm1cIj5cblxuICAgICAgICAgICAgPHl2Yy1hdXRvY29tcGxldGUgKm5nSWY9XCIhcXVlcnkuZXhwZXJ0TW9kZTsgZWxzZSBleHBlcnRJbnB1dFwiICNzZWFyY2hJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0ZXJtXCIgW2F1dG9jb21wbGV0ZVZhbHVlc109XCJhdXRvY29tcGxldGVSZXN1bHRzXCJcbiAgICAgICAgICAgICAgKHN1Z2dlc3Rpb25TZWxlY3QpPVwiYXV0b2NvbXBsZXRlU2VsZWN0KClcIiAoa2V5ZG93bi5lbnRlcik9XCJleGVjdXRlU2VhcmNoKClcIiAocGFzdGUpPVwiYXV0b2NvbXBsZXRlUGFzdGUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC95dmMtYXV0b2NvbXBsZXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4cGVydElucHV0PlxuICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCIgY2xhc3M9XCJleHBlcnQtc2VhcmNoX19pbnB1dFwiICN4cGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJleHBlcnRUZXJtQ2hhbmdlZCgpXCIgWyhuZ01vZGVsKV09XCJxdWVyeS50ZXJtXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBleHBlcnQtbW9kZVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlRXhwZXJ0TW9kZSgpXCI+XG4gICAgICAgICAgICAgIDwhLS08c3BhbiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0PC9zcGFuPi0tPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19leHBlcnQtc2VhcmNoLnN2ZydcIlxuICAgICAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiKCdlby5zZWFyY2gubW9kZS5leHBlcnQnIHwgdHJhbnNsYXRlKVwiICpuZ0lmPVwiIXF1ZXJ5Py5leHBlcnRNb2RlOyBlbHNlIGNsb3NlXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Nsb3NlPlxuICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2V4cGVydC1zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LmNsb3NlJyB8IHRyYW5zbGF0ZSlcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gZXhwZXJ0LW1vZGUgZXhwZXJ0LW1vZGVfX3Jlc2V0XCIgW25nQ2xhc3NdPVwie2FjdGl2ZTogcXVlcnkudGVybX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRFeHBlcnRNb2RlSW5wdXQoKVwiPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCJcbiAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLmNsZWFyLnNlYXJjaCcgfCB0cmFuc2xhdGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cInF1ZXJ5U3RhdGUuaXNFbXB0eVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VibWl0PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0XCIgKm5nSWY9XCIhbG9hZGluZzsgZWxzZSBzcGlubmVyXCI+e3txdWVyeVN0YXRlLnRvdGFsQ291bnQgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc3Bpbm5lcj5cbiAgICAgICAgPGVvLWxvYWRpbmctc3Bpbm5lciBjbGFzcz1cInNlYXJjaC1hZ2dyZWdhdG9yX19sb2FkZXJcIiBbc2l6ZV09XCInbWVkaXVtJ1wiIFttb2RlXT1cIidkYXJrJ1wiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uIHdoaXRlIGNsb3NlXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiXG4gICAgICAgIFtpY29uVGl0bGVdPVwiKCdlby5zZWFyY2guY2xvc2UnIHwgdHJhbnNsYXRlKVwiIChjbGljayk9XCJjbG9zZVNlYXJjaE1lbnUoKVwiPjwvZW8taWNvbj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImJvZHlcIiAqbmdJZj1cIiFxdWVyeS5leHBlcnRNb2RlOyBlbHNlIGV4cGVydFwiPlxuXG4gICAgICA8eXZjLXRhYnMgKHRhYkNoYW5nZSk9XCJvblRhYkNoYW5nZSgkZXZlbnQpXCIgbGF5b3V0U2V0dGluZ3NJRD1cImVvLnNlYXJjaC5kaWFsb2cudGFic1wiPlxuXG4gICAgICAgIDwhLS0gb2JqZWN0IHR5cGUgc2VsZWN0IC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdFR5cGUnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC50eXBlJyB8IHRyYW5zbGF0ZX1cIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZXMgcmVzdC1ib3gtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2lkeGVuYWJsZWQ6IHF1ZXJ5LnR5cGVzLmxlbmd0aCA8IDF9XCJcbiAgICAgICAgICAgICpuZ0lmPVwib2JqZWN0VHlwZUdyb3VwcyAmJiAhaWR4U2VhcmNoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAgcmVzdC1ib3hcIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2Ygb2JqZWN0VHlwZUdyb3VwczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwiZ3JvdXAubGFiZWwgIT09ICcwJ1wiPnt7Z3JvdXAubGFiZWx9fTwvaDM+XG4gICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwiZ3JvdXAubGFiZWwgPT09ICcwJ1wiIHRyYW5zbGF0ZT57eydlby5zZWFyY2guZ3JvdXAuZ2VuZXJhbCd9fTwvaDM+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtaWNvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwibW92ZS1sZWZ0LWZpcnN0XCIgKGNsaWNrKT1cIm1vdmVPYmplY3RUeXBlR3JvdXAoZ3JvdXAubGFiZWwsICdmaXJzdCcpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfYXJyb3dfbGFzdC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gKm5nSWY9XCJpICE9PSAwXCIgY2xhc3M9XCJtb3ZlLWxlZnQtaWNvblwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAnbGVmdCcpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfYXJyb3dfbGVmdC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gKm5nSWY9XCJpICE9PSBvYmplY3RUeXBlR3JvdXBzLmxlbmd0aCAtIDFcIiBjbGFzcz1cIm1vdmUtcmlnaHQtaWNvblwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAncmlnaHQnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X3JpZ2h0LnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiAqbmdJZj1cImkgIT09IG9iamVjdFR5cGVHcm91cHMubGVuZ3RoIC0gMVwiIGNsYXNzPVwibW92ZS1yaWdodC1sYXN0XCIgKGNsaWNrKT1cIm1vdmVPYmplY3RUeXBlR3JvdXAoZ3JvdXAubGFiZWwsICdsYXN0JylcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19sYXN0LnN2ZydcIj48L2VvLWljb24+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0eXBlXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgZ3JvdXAudHlwZXNcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntjb250ZXh0OiB0eXBlLmlzQ29udGV4dEZvbGRlciwgZm9sZGVyOiB0eXBlLmlzRm9sZGVyLCBhYnN0cmFjdDogdHlwZS5pc0Fic3RyYWN0LCBzZWxlY3RlZDogaXNUeXBlQWN0aXZlKHR5cGUpfVwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgKGNsaWNrKT1cInRvZ2dsZVR5cGUodHlwZSlcIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgZmlsbD1cIiNmZmZmZmZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiIChjbGljayk9XCJzZWxlY3RPYmplY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiBbb2JqZWN0VHlwZV09XCJ0eXBlXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX0ge3t0eXBlLmlzQWJzdHJhY3QgPyAnKCcrICgnZW8uc2VhcmNoLnR5cGUuYWJzdHJhY3QnIHwgdHJhbnNsYXRlKSArXG4gICAgICAgICAgICAgICAgICAgICcpJyA6ICcnfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7Z2V0QWdncmVnYXRpb25Db3VudCh0eXBlKSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZGV4ZGF0YS1zZWFyY2hcIiAqbmdJZj1cImlkeFNlYXJjaFwiPlxuICAgICAgICAgICAgPGgyPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2JhY2suc3ZnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4aXRJbmRleGRhdGFTZWFyY2goKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlIFt0cmFuc2xhdGVQYXJhbXNdPVwie3R5cGU6IGlkeFNlYXJjaC50eXBlLmxhYmVsfVwiPmVvLnNlYXJjaC5vYmplY3R0eXBlLmZvcm08L3NwYW4+XG4gICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGV4dFwiICpuZ0lmPVwiaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMubGVuZ3RoXCI+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm9iamVjdHR5cGUuZm9ybS5jb250ZXh0PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGVvLWNvbnRleHQtc2VhcmNoICpuZ0Zvcj1cImxldCBjdHggb2YgaWR4U2VhcmNoLmNvbnRleHRNb2RlbHM7IGluZGV4IGFzIGlcIiBbY3R4XT1cImN0eFwiIFtxdWVyeV09XCJxdWVyeVwiXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY3VycmVudENvbnRleHRGb2xkZXJOYW1lID09PSBjdHgubmFtZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSAmJiBjdXJyZW50Q29udGV4dEZvbGRlck5hbWUgIT09IGN0eC5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICBbaWR4U2VhcmNoXT1cImlkeFNlYXJjaFwiIChzZXRDb250ZXh0KT1cInNldENvbnRleHQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvZW8tY29udGV4dC1zZWFyY2g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY29udGV4dCBmb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLW9iamVjdC1mb3JtIGNsYXNzPVwiZGFya1wiICNjdHhmb3JtXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMgJiYgaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucz8uZm9ybU1vZGVsPy5lbGVtZW50cz8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JtT3B0aW9uc109XCJpZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zXCIgKHN0YXR1c0NoYW5nZWQpPVwib25JbmRleERhdGFDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2VvLW9iamVjdC1mb3JtPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cIm9iamVjdC10eXBlIGZvcm1cIiAqbmdJZj1cImlkeFNlYXJjaC5mb3JtT3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8ZW8tb2JqZWN0LWZvcm0gI2lkeGZvcm0gW2Zvcm1PcHRpb25zXT1cImlkeFNlYXJjaC5mb3JtT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgKHN0YXR1c0NoYW5nZWQpPVwib25JbmRleERhdGFDaGFuZ2VkKCRldmVudClcIiAob25Gb3JtUmVhZHkpPVwiaWR4Zm9ybS5mb2N1c0Zvcm0oKVwiPlxuICAgICAgICAgICAgICA8L2VvLW9iamVjdC1mb3JtPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gY3JlYXRlZCB0YWIgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0Q3JlYXRlZCcsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0LmNyZWF0aW9uJyB8IHRyYW5zbGF0ZSB9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNyZWF0ZWQgcmVzdC1ib3gtY29udGFpbmVyXCIgKm5nSWY9XCJxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9uc1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW48L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIoUEFSQU1TLkNSRUFURUQsIE9QRVJBVE9SLlJBTkdFLCBhZ2cua2V5LCBhZ2cuc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGFnZy5zZWxlY3RlZCwgc2F2ZWQ6IGFnZy5zYXZlZH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2FnZy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3thZ2cudmFsdWUgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3Bhbi1jdXN0b21cIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLnRpbWUuc3Bhbi5jdXN0b208L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjY3JlYXRlZEZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWRhdGV0aW1lLXJhbmdlICNjcmVhdGVkRmllbGQgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLnZhbHVlXCIgbmFtZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdG9yXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0udmFsdWUgPyBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLnZhbHVlLm9wZXJhdG9yIDogT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICBbd2l0aFRpbWVdPVwiY3JlYXRlZEZpZWxkLnNlYXJjaE9wdGlvbiAmJiBjcmVhdGVkRmllbGQuc2VhcmNoT3B0aW9uICE9PSBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuQ1JFQVRFRCwgT1BFUkFUT1IuRVFVQUwsICRldmVudCwgY3JlYXRlZEZvcm0pXCI+XG4gICAgICAgICAgICAgICAgICA8L2VvLWRhdGV0aW1lLXJhbmdlPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtY3JlYXRvclwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cuY3JlYXRvcjwvaDM+XG4gICAgICAgICAgICAgIDxmb3JtICNjcmVhdG9yRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLmFnZy5jcmVhdGVkYnknIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tb3JnYW5pemF0aW9uIFttdWx0aXNlbGVjdF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLnZhbHVlXCIgbmFtZT1cImNyZWF0b3JcIlxuICAgICAgICAgICAgICAgICAgICAob25WYWx1ZVJlc29sdmVkKT1cInJlc29sdmVMYWJlbChmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLCAkZXZlbnQpXCIgW3NpdHVhdGlvbl09XCInU0VBUkNIJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuQ1JFQVRPUiwgT1BFUkFUT1IuSU4sICRldmVudCwgY3JlYXRvckZvcm0pXCI+PC9lby1vcmdhbml6YXRpb24+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0TW9kaWZpY2F0aW9uJywgbGFiZWw6ICdlby5zZWFyY2gucmVzdHJpY3QubW9kaWZpY2F0aW9uJyB8IHRyYW5zbGF0ZX1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kaWZpZWQgcmVzdC1ib3gtY29udGFpbmVyXCIgKm5nSWY9XCJxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9uc1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW48L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5NT0RJRklFRCwgT1BFUkFUT1IuUkFOR0UsIGFnZy5rZXksIGFnZy5zZWxlY3RlZClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogYWdnLnNlbGVjdGVkLCBzYXZlZDogYWdnLnNhdmVkfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7YWdnLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2FnZy52YWx1ZSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuLWN1c3RvbVwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuLmN1c3RvbTwvaDM+XG4gICAgICAgICAgICAgIDxmb3JtICNtb2RpZmllZEZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWRhdGV0aW1lLXJhbmdlICNtb2RpZmllZEZpZWxkIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWVcIiBuYW1lPVwicmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbb3BlcmF0b3JdPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWUgPyBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXS52YWx1ZS5vcGVyYXRvciA6IE9QRVJBVE9SLkVRVUFMXCJcbiAgICAgICAgICAgICAgICAgICAgW3dpdGhUaW1lXT1cIm1vZGlmaWVkRmllbGQuc2VhcmNoT3B0aW9uICYmIG1vZGlmaWVkRmllbGQuc2VhcmNoT3B0aW9uICE9PSBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuTU9ESUZJRUQsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIG1vZGlmaWVkRm9ybSlcIj5cbiAgICAgICAgICAgICAgICAgIDwvZW8tZGF0ZXRpbWUtcmFuZ2U+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1tb2RpZmllclwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cubW9kaWZpZXI8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjbW9kaWZpZXJGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLm1vZGlmaWVkYnknIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tb3JnYW5pemF0aW9uIFttdWx0aXNlbGVjdF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtb2RpZmllclwiIChvblZhbHVlUmVzb2x2ZWQpPVwicmVzb2x2ZUxhYmVsKGZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRVJdLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpdHVhdGlvbl09XCInU0VBUkNIJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuTU9ESUZJRVIsIE9QRVJBVE9SLklOLCAkZXZlbnQsIG1vZGlmaWVyRm9ybSlcIj48L2VvLW9yZ2FuaXphdGlvbj5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0RmlsZScsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGUnIHwgdHJhbnNsYXRlfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1taW1ldHlwZS1ncm91cFwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5taW1ldHlwZWdyb3VwPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RmlsdGVyKFBBUkFNUy5NSU1FVFlQRUdST1VQLCBPUEVSQVRPUi5JTiwgcmVzb2x2ZVNlbGVjdGlvbihhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuTUlNRVRZUEVHUk9VUF0sIGFnZy5rZXksIGFnZy5zZWxlY3RlZCkpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGFnZy5zZWxlY3RlZCwgc2F2ZWQ6IGFnZy5zYXZlZH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgZmlsbD1cIiNmZmZmZmZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2FnZy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3thZ2cudmFsdWUgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1maWxlc2l6ZVwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5maWxlc2l6ZTwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWdnIG9mIGFnZ3JlZ2F0aW9uc01vZGVsW1BBUkFNUy5GSUxFU0laRV1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIoUEFSQU1TLkZJTEVTSVpFLCBPUEVSQVRPUi5SQU5HRSwgYWdnLmtleSwgYWdnLnNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZW5hbWU8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjZmlsZW5hbWVGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2gucmVzdHJpY3QuZmlsZW5hbWUnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tc3RyaW5nIFthdXRvY29tcGxldGVdPVwidHJ1ZVwiIFtxbmFtZV09XCInZmlsZW5hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkZJTEVOQU1FXS52YWx1ZVwiIG5hbWU9XCJmaWxlbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuRklMRU5BTUUsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIGZpbGVuYW1lRm9ybSlcIj48L2VvLXN0cmluZz5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC95dmMtdGFicz5cblxuICAgICAgPCEtLSBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHNlYXJjaCBmaWx0ZXJzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktcGFuZWxcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGxpbmUgc3RvcmVkLXF1ZXJ5XCIgKm5nSWY9XCJpc1N0b3JlZFF1ZXJ5OyBlbHNlIHJlZ2hlYWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VJbmJldHdlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkU2VhcmNoSWNvblwiPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19zYXZlZF9zZWFyY2guc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFzaWRlLnN1bW1hcnkuc3RvcmVkcXVlcnk8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlZC1xdWVyeS1uYW1lXCI+e3tzdG9yZWRRdWVyeS5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ2hlYWQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRsaW5lXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5PC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJxdWVyeS10eXBlc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tc2VhcmNodGVybVwiICpuZ0lmPVwicXVlcnkudGVybVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnRlcm08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3txdWVyeS50ZXJtfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVUZXJtKClcIj48L2VvLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tY29udGV4dHR5cGVcIiAqbmdJZj1cInF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS5jb250ZXh0Zm9sZGVydHlwZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVDb250ZXh0VHlwZSgpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW9iamVjdHR5cGVcIiAqbmdJZj1cInF1ZXJ5LnR5cGVzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnR5cGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlcnkudHlwZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVUeXBlKHR5cGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbHRlclRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LXRyYW5zbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIuaW5uZXJWYWx1ZS5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlclwiICpuZ0Zvcj1cImxldCB2YWwgb2YgZmlsdGVyLmlubmVyVmFsdWU7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2ZpbHRlci5sYWJlbFtpXSB8IGFzeW5jfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCIgKGNsaWNrKT1cInJlc2V0RmlsdGVyKGZpbHRlciwgdmFsKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1jcmVhdGlvblwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0uaW5uZXJWYWx1ZT8ubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRPUl0uaW5uZXJWYWx1ZT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmNyZWF0aW9uPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRPUl0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW1vZGlmaWNhdGlvblwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLmlubmVyVmFsdWU/Lmxlbmd0aCB8fCBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXS5pbm5lclZhbHVlPy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QubW9kaWZpY2F0aW9uPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tbWltZXR5cGVncm91cFwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTUlNRVRZUEVHUk9VUF0uaW5uZXJWYWx1ZS5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFU0laRV0uaW5uZXJWYWx1ZS5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0uaW5uZXJWYWx1ZS5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZTwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkZJTEVTSVpFXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiICpuZ0lmPVwicXVlcnkudGVybSB8fCBxdWVyeS5maWx0ZXJzLmxlbmd0aCB8fCBxdWVyeS50eXBlcy5sZW5ndGg7IGVsc2UgZW1wdHlTZWFyY2hcIj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0b3JlZFF1ZXJ5OyBlbHNlIHJlZ2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnkgYnRuLXJlc2V0XCIgKGNsaWNrKT1cInJlc2V0UXVlcnkoKVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3RvcmVkcXVlcnkuY2xvc2U8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXVwZGF0ZVwiIChjbGljayk9XCJ1cGRhdGVTdG9yZWRRdWVyeSgpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYXBhYmlsaXRpZXMuc3RvcmVkcXVlcmllcyAmJiBpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zdG9yZWRxdWVyeS51cGRhdGU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXNhdmVcIiAoY2xpY2spPVwic2F2ZVF1ZXJ5KClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhcGFiaWxpdGllcy5zdG9yZWRxdWVyaWVzICYmICFpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tc3VibWl0XCIgKGNsaWNrKT1cImV4ZWN1dGVTZWFyY2goKVwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWdhY3Rpb25zPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgZ3JleSBidG4tcmVzZXRcIiAoY2xpY2spPVwicmVzZXRRdWVyeSgpXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXNldDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgZ3JleSBidG4tc2F2ZVwiIChjbGljayk9XCJzYXZlUXVlcnkoKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FwYWJpbGl0aWVzLnN0b3JlZHF1ZXJpZXMgJiYgIWlzT3duUXVlcnlcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1zdWJtaXRcIiAoY2xpY2spPVwiZXhlY3V0ZVNlYXJjaCgpXCIgW2Rpc2FibGVkXT1cInF1ZXJ5U3RhdGUuaXNFbXB0eVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VibWl0PC9idXR0b24+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTZWFyY2g+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXNlYXJjaFwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VtbWFyeS5lbXB0eTwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGV4cGVydCBtb2RlIGJvZHkgcGFuZWwgY29udGFpbmluZyBleHBsYW5hdGlvbnMgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNleHBlcnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiYm9keSBleHBlcnRcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHlcIiAqbmdJZj1cImV4cGVydE1vZGVRdWVyeUVtcHR5XCI+PHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5yZXN1bHQuZW1wdHk8L3NwYW4+PC9kaXY+XG5cbiAgICAgICAgPCEtLVxuICAgICAgICA8aDI+PHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydDwvc3Bhbj48L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW50cm9cIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LmludHJvPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJhc2UtcGFyYW1zIGZpZWxkc1wiPlxuICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuYmFzZXBhcmFtczwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBlbCBvZiBleHBlcnRNb2RlU3VwcG9ydC5iYXNlUGFyYW1zXCIgKGNsaWNrKT1cInhwQWRkVG9UZXJtKGVsLmRhdGEpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPnt7ZWwubGFiZWx9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGFcIj57e2VsLmRhdGF9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzeXN0ZW0tdHlwZXMgZmllbGRzXCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbi1ncm91cFwiPlxuICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQuc3VwcG9ydC5ncm91cDwvaDI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgdHlwZUdyb3VwVHJlZVwiXG4gICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwICYmIGdyb3VwLmlkID09PSBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInhwU2VsZWN0R3JvdXAoZ3JvdXApXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLmxhYmVsICE9PSAnMCdcIj57e2dyb3VwLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXAubGFiZWwgPT09ICcwJ1wiPnt7J2VvLnNlYXJjaC5ncm91cC5nZW5lcmFsJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbi10eXBlXCIgKm5nSWY9XCJleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwXCI+XG4gICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LnR5cGU8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cC50cmVlXCJcbiAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZSAmJiB0eXBlLmlkID09PSBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUuaWR9XCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwieHBTZWxlY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgPGRpdj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBzZWN0aW9uLWZpZWxkXCIgKm5nSWY9XCJleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGVcIj5cbiAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuZmllbGQ8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IGVsIG9mIGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZS5jaGlsZHJlblwiIChjbGljayk9XCJ4cEFkZFRvVGVybShlbC5kYXRhKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPnt7ZWwubGFiZWx9fTwvc3Bhbj48c3BhbiBjbGFzcz1cInR5cGVcIj57e2VsLnR5cGV9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YVwiPnt7ZWwuZGF0YX19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPCEtLSA8L2VvLWRpYWxvZz4gLS0+XG48L25nLXRlbXBsYXRlPlxuIl19
|