@rangertechnologies/ngnxt 2.1.89 → 2.1.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/custom-table/custom-table.component.mjs +236 -71
- package/esm2022/lib/components/search-box/search-box.component.mjs +30 -2
- package/esm2022/lib/pages/booklet/booklet.component.mjs +2 -1
- package/esm2022/lib/pages/builder/element/element.component.mjs +3 -3
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +2 -2
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +8 -3
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +1 -1
- package/fesm2022/rangertechnologies-ngnxt.mjs +277 -78
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/custom-table/custom-table.component.d.ts +25 -3
- package/lib/components/search-box/search-box.component.d.ts +4 -1
- package/lib/pages/questionbook/questionbook.component.d.ts +1 -0
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.91.tgz +0 -0
- package/src/lib/style.css +1 -0
- package/rangertechnologies-ngnxt-2.1.89.tgz +0 -0
|
@@ -44,13 +44,36 @@ export class SearchBoxComponent {
|
|
|
44
44
|
let apiObj = JSON.parse(this.apiMeta);
|
|
45
45
|
this.SearchItem = apiObj.field;
|
|
46
46
|
}
|
|
47
|
+
// this.resetComponentState();
|
|
48
|
+
}
|
|
49
|
+
//RS 03FEB2025
|
|
50
|
+
// Resets state when filterName or apiMeta changes to reflect updated data
|
|
51
|
+
ngOnChanges(changes) {
|
|
52
|
+
if (changes['filterName'] && !changes['filterName'].isFirstChange()) {
|
|
53
|
+
this.resetComponentState();
|
|
54
|
+
}
|
|
55
|
+
if (changes['apiMeta'] && this.apiMeta) {
|
|
56
|
+
this.apiObj = JSON.parse(this.apiMeta);
|
|
57
|
+
this.SearchItem = this.apiObj?.field;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//RS 03FEB2025
|
|
61
|
+
// Clears search-related data, including results, search term, and suggestions.
|
|
62
|
+
resetComponentState() {
|
|
63
|
+
this.finalResults = [];
|
|
64
|
+
this.filterName = '';
|
|
65
|
+
this.searchKeyWord = '';
|
|
66
|
+
this.showSuggestion = false;
|
|
67
|
+
this.noResult = false;
|
|
47
68
|
}
|
|
48
69
|
clearList() {
|
|
49
70
|
setTimeout(() => {
|
|
50
71
|
this.finalResults = [];
|
|
72
|
+
this.filterName = '';
|
|
51
73
|
}, 1000);
|
|
52
74
|
}
|
|
53
75
|
getSourceDataLocal(event) {
|
|
76
|
+
event.preventDefault();
|
|
54
77
|
if (event.target.value.length > 2) {
|
|
55
78
|
this.showSuggestion = true;
|
|
56
79
|
this.finalResults = [];
|
|
@@ -107,8 +130,13 @@ export class SearchBoxComponent {
|
|
|
107
130
|
change.field = apiObj.field;
|
|
108
131
|
this.searchValueChange.emit(change);
|
|
109
132
|
}
|
|
133
|
+
//RS 03FEB2025
|
|
134
|
+
// Resets component state when the component is destroyed
|
|
135
|
+
ngOnDestroy() {
|
|
136
|
+
this.resetComponentState();
|
|
137
|
+
}
|
|
110
138
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchBoxComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ActivatedRoute }, { token: i0.ElementRef }, { token: i4.I18nService }], target: i0.ɵɵFactoryTarget.Component });
|
|
111
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchBoxComponent, selector: "lib-search-box", inputs: { placeHolderText: "placeHolderText", question: "question", apiMeta: "apiMeta", id: "id", readOnly: "readOnly", filterName: "filterName" }, outputs: { searchValueChange: "searchValueChange" }, viewQueries: [{ propertyName: "auto", first: true, predicate: ["auto"], descendants: true }], ngImport: i0, template: "<!-- // VD 12Jun24 - readonly change-->\r\n<div id=\"autocomplete-input\"> <!-- SKS5NOV25 search icon -->\r\n <input #auto id=\"searchbox-style\"\r\n (blur)=\"clearList()\"\r\n [(ngModel)]=\"filterName\"\r\n type=\"text\"\r\n name=\"name\"\r\n [readOnly]=\"readOnly\"\r\n [placeholder]=\"placeHolderText\"\r\n style=\"margin: 0 !important; padding-right: 30px;\"\r\n class=\"searchInput she-line-input form-control\"\r\n (focusin)=\"getSourceDataLocal($event)\"\r\n (input)=\"getSourceDataLocal($event)\">\r\n <div id=\"selectList\" style=\"position: absolute;position: absolute;background: white;z-index: 2;\">\r\n <div *ngIf=\"finalResults.length > 0 && showSuggestion\"\r\n style=\"max-height: 100vh;border: 1px solid #d2d4d6;overflow: scroll;\"\r\n class=\"suggestions-container\">\r\n <!-- HA 20DEC23 Uncommented the logic -->\r\n <!-- VD 03May- search changes -->\r\n <div *ngFor=\"let item of finalResults\" (click)='clickItem(item)' class=\"hoover\">\r\n <!-- VD 26Jun24 - id condition removed -->\r\n <div class=\"grid-x align-middle\" style=\"padding: 1rem\">\r\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink\" style=\"width: 60px; margin-right: 1.6rem;\">\r\n <img [src]=\"item.thumbnail\" style=\"width: 60px;\" alt=\"\">\r\n </div>\r\n <div class=\"cell auto\" style=\"text-align: left; padding-left: 20px;\">\r\n <!--// VD 26JUN24 - pipe changes -->\r\n <!-- RS 29JAN25 -->\r\n <h4 >{{ item | getValue: item : SearchItem }}</h4>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- HA 20DEC23 For Commented this for future purpose -->\r\n <!-- <table class=\"table table-striped table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'firstName' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'lastName' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'division' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'numberPlate' | i18n:i18nService.currentLanguage }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of finalResults\" (click)='clickItem(item)'>\r\n <td>{{ item.firstName }}</td>\r\n <td>{{ item.lastName }}</td>\r\n <td>{{ item.division }}</td>\r\n <td>{{ item.numberPlate }}</td>\r\n </tr>\r\n </tbody>\r\n </table> -->\r\n </div>\r\n</div>\r\n\r\n", styles: ["#searchbox-style{background-image:url('data:image/svg+xml;utf8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"%23434555\" stroke-opacity=\"0.65\" stroke-width=\"2\"/><path d=\"M20 20L17 17\" stroke=\"%23434555\" stroke-opacity=\"0.65\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>');background-position:right 5px center;background-repeat:no-repeat;background-size:24px;padding-right:35px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i7.GetValuePipe, name: "getValue" }] });
|
|
139
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchBoxComponent, selector: "lib-search-box", inputs: { placeHolderText: "placeHolderText", question: "question", apiMeta: "apiMeta", id: "id", readOnly: "readOnly", filterName: "filterName" }, outputs: { searchValueChange: "searchValueChange" }, viewQueries: [{ propertyName: "auto", first: true, predicate: ["auto"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- // VD 12Jun24 - readonly change-->\r\n<div id=\"autocomplete-input\"> <!-- SKS5NOV25 search icon -->\r\n <input #auto id=\"searchbox-style\"\r\n (blur)=\"clearList()\"\r\n [(ngModel)]=\"filterName\"\r\n type=\"text\"\r\n name=\"name\"\r\n [readOnly]=\"readOnly\"\r\n [placeholder]=\"placeHolderText\"\r\n style=\"margin: 0 !important; padding-right: 30px;\"\r\n class=\"searchInput she-line-input form-control\"\r\n (focusin)=\"getSourceDataLocal($event)\"\r\n (input)=\"getSourceDataLocal($event)\">\r\n <div id=\"selectList\" style=\"position: absolute;position: absolute;background: white;z-index: 2;\">\r\n <div *ngIf=\"finalResults.length > 0 && showSuggestion\"\r\n style=\"max-height: 100vh;border: 1px solid #d2d4d6;overflow: scroll;\"\r\n class=\"suggestions-container\">\r\n <!-- HA 20DEC23 Uncommented the logic -->\r\n <!-- VD 03May- search changes -->\r\n <div *ngFor=\"let item of finalResults\" (click)='clickItem(item)' class=\"hoover\">\r\n <!-- VD 26Jun24 - id condition removed -->\r\n <div class=\"grid-x align-middle\" style=\"padding: 1rem\">\r\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink\" style=\"width: 60px; margin-right: 1.6rem;\">\r\n <img [src]=\"item.thumbnail\" style=\"width: 60px;\" alt=\"\">\r\n </div>\r\n <div class=\"cell auto\" style=\"text-align: left; padding-left: 20px;\">\r\n <!--// VD 26JUN24 - pipe changes -->\r\n <!-- RS 29JAN25 -->\r\n <h4 >{{ item | getValue: item : SearchItem }}</h4>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- HA 20DEC23 For Commented this for future purpose -->\r\n <!-- <table class=\"table table-striped table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'firstName' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'lastName' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'division' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'numberPlate' | i18n:i18nService.currentLanguage }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of finalResults\" (click)='clickItem(item)'>\r\n <td>{{ item.firstName }}</td>\r\n <td>{{ item.lastName }}</td>\r\n <td>{{ item.division }}</td>\r\n <td>{{ item.numberPlate }}</td>\r\n </tr>\r\n </tbody>\r\n </table> -->\r\n </div>\r\n</div>\r\n\r\n", styles: ["#searchbox-style{background-image:url('data:image/svg+xml;utf8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"%23434555\" stroke-opacity=\"0.65\" stroke-width=\"2\"/><path d=\"M20 20L17 17\" stroke=\"%23434555\" stroke-opacity=\"0.65\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>');background-position:right 5px center;background-repeat:no-repeat;background-size:24px;padding-right:35px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i7.GetValuePipe, name: "getValue" }] });
|
|
112
140
|
}
|
|
113
141
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchBoxComponent, decorators: [{
|
|
114
142
|
type: Component,
|
|
@@ -131,4 +159,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
131
159
|
}], filterName: [{
|
|
132
160
|
type: Input
|
|
133
161
|
}] } });
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR1osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBU3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7O0FBUzFELE1BQU0sT0FBTyxrQkFBa0I7SUF3Qm5CO0lBQ0E7SUFDQTtJQUVHO0lBM0JKLGVBQWUsQ0FBUztJQUNkLElBQUksQ0FBQztJQUVmLFFBQVEsQ0FBQztJQUNULE9BQU8sQ0FBUztJQUNoQixFQUFFLENBQVM7SUFDWCxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsK0JBQStCO0lBQ2hELGlCQUFpQixHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztJQUM1RixNQUFNLENBQUs7SUFDWCxVQUFVLENBQU07SUFFUixVQUFVLENBQVMsQ0FBQyx5Q0FBeUM7SUFDL0QsWUFBWSxHQUFVLEVBQUUsQ0FBQztJQUN6QixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBQzNCLFNBQVMsQ0FBTTtJQUNmLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLEVBQUUsQ0FBYztJQUNoQixJQUFJLEdBQVcsS0FBSyxDQUFDO0lBQ3JCLEdBQUcsR0FBVyxFQUFFLENBQUM7SUFFekIsWUFDVSxTQUE0QixF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O3VCQUFDLE1BQU07Z0JBRVIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksaUJBQWlCO3NCQUExQixNQUFNO2dCQUlFLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbi8vIFZEIDIzSkFOMjQgcmVtb3ZlZCBodHRwQ2xpZW50IGltcG9ydCB1c2VkIHNlcnZpY2UgZmlsZSBmb3IgY2FsbG91dFxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEl0ZW1zTGlzdCB9IGZyb20gXCJAbmctc2VsZWN0L25nLXNlbGVjdC9saWIvaXRlbXMtbGlzdFwiO1xyXG5pbXBvcnQgeyBDb25zb2xlU2VydmljZSB9IGZyb20gXCJAbmctc2VsZWN0L25nLXNlbGVjdC9saWIvY29uc29sZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFQSU1ldGEgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9hcGltZXRhXCI7XHJcbmltcG9ydCB7IENoYW5nZVdyYXBwZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvY2hhbmdlV3JhcHBlclwiO1xyXG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vaTE4bi5zZXJ2aWNlXCI7XHJcbiBcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc2VhcmNoLWJveCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1ib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1ib3guY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHBsYWNlSG9sZGVyVGV4dDogc3RyaW5nO1xyXG4gIEBWaWV3Q2hpbGQoJ2F1dG8nKSBhdXRvO1xyXG4gXHJcbiAgQElucHV0KCkgcXVlc3Rpb247XHJcbiAgQElucHV0KCkgYXBpTWV0YTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcmVhZE9ubHkgPSBmYWxzZTsgLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZVxyXG4gIEBPdXRwdXQoKSBzZWFyY2hWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPENoYW5nZVdyYXBwZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxDaGFuZ2VXcmFwcGVyPigpO1xyXG4gICBhcGlPYmo6YW55O1xyXG4gICBTZWFyY2hJdGVtOiBhbnk7XHJcbiBcclxuICBASW5wdXQoKSBmaWx0ZXJOYW1lOiBzdHJpbmc7IC8vIFZEIDIwQXVnIGRlZmF1bHQgZmlsdGVyIHZhbHVlIGFzIGlucHV0XHJcbiAgcHVibGljIGZpbmFsUmVzdWx0czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2VhcmNoS2V5V29yZDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIG5ld1Jlc3VsdDogYW55O1xyXG4gIHB1YmxpYyBzaG93UmVzdWx0ID0gZmFsc2U7XHJcbiAgcHVibGljIG5vUmVzdWx0ID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTdWdnZXN0aW9uID0gdHJ1ZTtcclxuICBwcml2YXRlIGVsOiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIHNlcnY6IHN0cmluZyA9ICdhcGknO1xyXG4gIHByaXZhdGUgdGtuOiBzdHJpbmcgPSAnJztcclxuIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcclxuICApIHsgfVxyXG4gXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbi8vICBWRCAwM01heS0gc2VhcmNoIGNoYW5nZXNcclxuICAgIGlmKHRoaXMuYXBpTWV0YSl7XHJcbiAgICAgIGxldCBhcGlPYmo6IEFQSU1ldGEgPSBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XHJcbiAgICAgIHRoaXMuU2VhcmNoSXRlbSA9IGFwaU9iai5maWVsZDtcclxuICAgIH1cclxuICB9XHJcbiBcclxuICBjbGVhckxpc3QoKXtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzID0gW107XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcbiBcclxuICBnZXRTb3VyY2VEYXRhTG9jYWwoZXZlbnQpIHsgLy90byBnZXQgcmVzdWx0cyBsaXN0IGZyb20gYmFja2VuZCBBUEkgd2hlbmV2ZXIga2V5IGlzIHVwIGFmdGVyIHRoZSBlbnRlcmluZyBhdGxlYXN0IG9uZSBrZXlcclxuICAgIGlmKGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPiAyKXtcclxuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbj10cnVlO1xyXG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cz1bXTtcclxuICAgICAgdGhpcy5zZWFyY2hLZXlXb3JkID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICB0aGlzLnNob3dSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5nZXRTb3VyY2VEYXRhKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uPWZhbHNlO1xyXG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cyA9IFtdO1xyXG4gICAgICB0aGlzLm5vUmVzdWx0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIFZEIDAzTWF5LSBzZWFyY2ggY2hhbmdlc1xyXG4gIC8vIFZEIDMxTk9WMjQgbnVsbCBjaGVja1xyXG4gIC8vIFJTIDI5SkFOMjVcclxuICAvL011bHRpLXdvcmQgc2VhcmNoIGFjcm9zcyBhbGwgb2JqZWN0IHZhbHVlc1xyXG4gIHB1YmxpYyBnZXRTb3VyY2VEYXRhID0gKGtleXdvcmQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHRoaXMuYXBpTWV0YSkge1xyXG4gICAgICBsZXQgYXBpT2JqOiBBUElNZXRhID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xyXG4gICAgIFxyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaVJlc3BvbnNlKGFwaU9iai5lbmRwb2ludCkuc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGxldCByZXNwb25zZTtcclxuICAgICAgICBpZiAoYXBpT2JqLnZhcmlhYmxlKSB7XHJcbiAgICAgICAgICByZXNwb25zZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoYXBpUmVzcG9uc2UsIGFwaU9iai52YXJpYWJsZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3BvbnNlID0gYXBpUmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gXHJcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcclxuICAgICAgICBsZXQgc2VhcmNoVGVybXMgPSBrZXl3b3JkLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpOyAvLyBTcGxpdCBpbnB1dCBpbnRvIHdvcmRzXHJcbiBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgb2JqID0gcmVzcG9uc2VbaV07XHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgLy8gQ29udmVydCBhbGwgb2JqZWN0IHZhbHVlcyB0byBhIHNpbmdsZSBzdHJpbmcgZm9yIGZsZXhpYmxlIHNlYXJjaFxyXG4gICAgICAgICAgbGV0IGNvbWJpbmVkVmFsdWVzID0gT2JqZWN0LnZhbHVlcyhvYmopLmpvaW4oXCIgXCIpLnRvTG93ZXJDYXNlKCk7XHJcbiBcclxuICAgICAgICAgIC8vIENoZWNrIGlmIGFsbCBzZWFyY2ggdGVybXMgZXhpc3QgaW4gYW55IG9yZGVyXHJcbiAgICAgICAgICBsZXQgbWF0Y2ggPSBzZWFyY2hUZXJtcy5ldmVyeSh0ZXJtID0+IGNvbWJpbmVkVmFsdWVzLmluY2x1ZGVzKHRlcm0pKTtcclxuIFxyXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNYXRjaGluZyBlbnRyeTonLCBvYmopO1xyXG4gICAgICAgICAgICByZXN1bHRzLnB1c2gob2JqKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiBcclxuICAgICAgICB0aGlzLm5vUmVzdWx0ID0gcmVzdWx0cy5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgdGhpcy5maW5hbFJlc3VsdHMgPSByZXN1bHRzO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9O1xyXG4gXHJcbiAgcHVibGljIGNsaWNrSXRlbShldmVudCkge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBjbGlja0l0ZW0gb2YgJyArIGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICBsZXQgYXBpT2JqOiBBUElNZXRhID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xyXG4gICAgdGhpcy5maWx0ZXJOYW1lID0gZXZlbnRbYXBpT2JqLmZpZWxkXTtcclxuICAgIGxldCBjaGFuZ2UgPSBuZXcgQ2hhbmdlV3JhcHBlcigpOyAvLyBDaGFuZ2VXcmFwcGVyID0gSlNPTi5wYXJzZSgne30nKTtcclxuICAgIGNoYW5nZS5mcm9tUXVlc3Rpb25JZCA9IHRoaXMuaWQ7XHJcbiAgICBjaGFuZ2UudmFsdWVPYmogPSBldmVudDtcclxuICAgIGNoYW5nZS5maWVsZCA9IGFwaU9iai5maWVsZDtcclxuICAgIHRoaXMuc2VhcmNoVmFsdWVDaGFuZ2UuZW1pdChjaGFuZ2UpO1xyXG4gIH1cclxuICAvKlxyXG4gIHB1YmxpYyBnZXRTb3VyY2VEYXRhID0gKGtleXdvcmQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxyXG4gICAgICAgIHRoaXMudGtuLFxyXG4gICAgICAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzU291cmNlRGF0YSxcclxuICAgICAgICB0aGlzLmZhaWx1cmVTb3VyY2VEYXRhXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcclxuICAgICAgICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc1NvdXJjZURhdGEsXHJcbiAgICAgICAgdGhpcy5mYWlsdXJlU291cmNlRGF0YVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuIFxyXG4gIHB1YmxpYyBzdWNjZXNzU291cmNlRGF0YSA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgbGV0IHJlc3VsdHM9W107XHJcbiAgICByZXN1bHRzPXJlc3BvbnNlLnJlc3VsdHM7XHJcbiAgICByZXN1bHRzLnB1c2goe3V1aWQ6IG51bGwsIG5hbWU6IFwiXCJ9KTtcclxuICAgIHRoaXMubm9SZXN1bHQgPSAhKHJlc3VsdHMubGVuZ3RoID4gMSk7XHJcbiAgICB0aGlzLmZpbmFsUmVzdWx0cyA9IHJlc3VsdHM7XHJcbiAgfVxyXG4gXHJcbiAgcHVibGljIGZhaWx1cmVTb3VyY2VEYXRhID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkVycm9yIHJlYWRpbmcgdGhlIGRhdGEgZnJvbSBBUElcIik7XHJcbiAgfVxyXG4gICovXHJcbn1cclxuIFxyXG4gIiwiPCEtLSAvLyBWRCAxMkp1bjI0IC0gcmVhZG9ubHkgY2hhbmdlLS0+XHJcbjxkaXYgaWQ9XCJhdXRvY29tcGxldGUtaW5wdXRcIj4gPCEtLSBTS1M1Tk9WMjUgc2VhcmNoIGljb24gLS0+XHJcbiAgPGlucHV0ICNhdXRvIGlkPVwic2VhcmNoYm94LXN0eWxlXCJcclxuICAgICAgICAgIChibHVyKT1cImNsZWFyTGlzdCgpXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyTmFtZVwiXHJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICBuYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyVGV4dFwiXHJcbiAgICAgICAgICBzdHlsZT1cIm1hcmdpbjogMCAhaW1wb3J0YW50OyBwYWRkaW5nLXJpZ2h0OiAzMHB4O1wiXHJcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaElucHV0IHNoZS1saW5lLWlucHV0IGZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAoZm9jdXNpbik9XCJnZXRTb3VyY2VEYXRhTG9jYWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAoaW5wdXQpPVwiZ2V0U291cmNlRGF0YUxvY2FsKCRldmVudClcIj5cclxuICA8ZGl2IGlkPVwic2VsZWN0TGlzdFwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO3Bvc2l0aW9uOiBhYnNvbHV0ZTtiYWNrZ3JvdW5kOiB3aGl0ZTt6LWluZGV4OiAyO1wiPlxyXG4gIDxkaXYgKm5nSWY9XCJmaW5hbFJlc3VsdHMubGVuZ3RoID4gMCAmJiBzaG93U3VnZ2VzdGlvblwiXHJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogMTAwdmg7Ym9yZGVyOiAxcHggc29saWQgI2QyZDRkNjtvdmVyZmxvdzogc2Nyb2xsO1wiXHJcbiAgICAgIGNsYXNzPVwic3VnZ2VzdGlvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgIDwhLS0gSEEgMjBERUMyMyBVbmNvbW1lbnRlZCB0aGUgbG9naWMgLS0+XHJcbiAgICAgICA8IS0tIFZEIDAzTWF5LSBzZWFyY2ggY2hhbmdlcyAtLT5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaW5hbFJlc3VsdHNcIiAoY2xpY2spPSdjbGlja0l0ZW0oaXRlbSknIGNsYXNzPVwiaG9vdmVyXCI+XHJcbiAgICAgICAgPCEtLSBWRCAyNkp1bjI0IC0gaWQgY29uZGl0aW9uIHJlbW92ZWQgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC14IGFsaWduLW1pZGRsZVwiIHN0eWxlPVwicGFkZGluZzogMXJlbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnRodW1ibmFpbFwiIGNsYXNzPVwiY2VsbCBzaHJpbmtcIiBzdHlsZT1cIndpZHRoOiA2MHB4OyBtYXJnaW4tcmlnaHQ6IDEuNnJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW0udGh1bWJuYWlsXCIgc3R5bGU9XCJ3aWR0aDogNjBweDtcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhdXRvXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0OyBwYWRkaW5nLWxlZnQ6IDIwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tLy8gVkQgMjZKVU4yNCAtIHBpcGUgY2hhbmdlcyAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gUlMgMjlKQU4yNSAtLT5cclxuICAgICAgICAgICAgICAgICAgPGg0ID57eyBpdGVtIHwgZ2V0VmFsdWU6IGl0ZW0gOiBTZWFyY2hJdGVtIH19PC9oND5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBDb21tZW50ZWQgdGhpcyBmb3IgZnV0dXJlIHB1cnBvc2UgLS0+XHJcbiAgICAgIDwhLS0gPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZFwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoPnt7ICdmaXJzdE5hbWUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2UgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD57eyAnbGFzdE5hbWUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2UgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD57eyAnZGl2aXNpb24nIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2UgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD57eyAnbnVtYmVyUGxhdGUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2UgfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbmFsUmVzdWx0c1wiIChjbGljayk9J2NsaWNrSXRlbShpdGVtKSc+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0uZmlyc3ROYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS5sYXN0TmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0uZGl2aXNpb24gfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57eyBpdGVtLm51bWJlclBsYXRlIH19PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT4gLS0+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuIl19
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR1osU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBU3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7O0FBUzFELE1BQU0sT0FBTyxrQkFBa0I7SUF3Qm5CO0lBQ0E7SUFDQTtJQUVHO0lBM0JKLGVBQWUsQ0FBUztJQUNkLElBQUksQ0FBQztJQUVmLFFBQVEsQ0FBQztJQUNULE9BQU8sQ0FBUztJQUNoQixFQUFFLENBQVM7SUFDWCxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsK0JBQStCO0lBQ2hELGlCQUFpQixHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztJQUM1RixNQUFNLENBQUs7SUFDWCxVQUFVLENBQU07SUFFUixVQUFVLENBQVMsQ0FBQyx5Q0FBeUM7SUFDL0QsWUFBWSxHQUFVLEVBQUUsQ0FBQztJQUN6QixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBQzNCLFNBQVMsQ0FBTTtJQUNmLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLEVBQUUsQ0FBYztJQUNoQixJQUFJLEdBQVcsS0FBSyxDQUFDO0lBQ3JCLEdBQUcsR0FBVyxFQUFFLENBQUM7SUFFekIsWUFDVSxTQUE0QixF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O3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBFbGVtZW50UmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbi8vIFZEIDIzSkFOMjQgcmVtb3ZlZCBodHRwQ2xpZW50IGltcG9ydCB1c2VkIHNlcnZpY2UgZmlsZSBmb3IgY2FsbG91dFxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEl0ZW1zTGlzdCB9IGZyb20gXCJAbmctc2VsZWN0L25nLXNlbGVjdC9saWIvaXRlbXMtbGlzdFwiO1xyXG5pbXBvcnQgeyBDb25zb2xlU2VydmljZSB9IGZyb20gXCJAbmctc2VsZWN0L25nLXNlbGVjdC9saWIvY29uc29sZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFQSU1ldGEgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9hcGltZXRhXCI7XHJcbmltcG9ydCB7IENoYW5nZVdyYXBwZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvY2hhbmdlV3JhcHBlclwiO1xyXG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vaTE4bi5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zZWFyY2gtYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWJveC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlYXJjaEJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcGxhY2VIb2xkZXJUZXh0OiBzdHJpbmc7XHJcbiAgQFZpZXdDaGlsZCgnYXV0bycpIGF1dG87XHJcblxyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uO1xyXG4gIEBJbnB1dCgpIGFwaU1ldGE6IHN0cmluZztcclxuICBASW5wdXQoKSBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7IC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2VcclxuICBAT3V0cHV0KCkgc2VhcmNoVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGFuZ2VXcmFwcGVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhbmdlV3JhcHBlcj4oKTtcclxuICAgYXBpT2JqOmFueTtcclxuICAgU2VhcmNoSXRlbTogYW55O1xyXG5cclxuICBASW5wdXQoKSBmaWx0ZXJOYW1lOiBzdHJpbmc7IC8vIFZEIDIwQXVnIGRlZmF1bHQgZmlsdGVyIHZhbHVlIGFzIGlucHV0XHJcbiAgcHVibGljIGZpbmFsUmVzdWx0czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2VhcmNoS2V5V29yZDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIG5ld1Jlc3VsdDogYW55O1xyXG4gIHB1YmxpYyBzaG93UmVzdWx0ID0gZmFsc2U7XHJcbiAgcHVibGljIG5vUmVzdWx0ID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTdWdnZXN0aW9uID0gdHJ1ZTtcclxuICBwcml2YXRlIGVsOiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIHNlcnY6IHN0cmluZyA9ICdhcGknO1xyXG4gIHByaXZhdGUgdGtuOiBzdHJpbmcgPSAnJztcclxuICAgICAgICAgIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuLy8gIFZEIDAzTWF5LSBzZWFyY2ggY2hhbmdlc1xyXG4gICAgaWYodGhpcy5hcGlNZXRhKXtcclxuICAgICAgbGV0IGFwaU9iajogQVBJTWV0YSA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcclxuICAgICAgdGhpcy5TZWFyY2hJdGVtID0gYXBpT2JqLmZpZWxkO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5yZXNldENvbXBvbmVudFN0YXRlKCk7XHJcblxyXG4gIH1cclxuLy9SUyAwM0ZFQjIwMjVcclxuLy8gUmVzZXRzIHN0YXRlIHdoZW4gZmlsdGVyTmFtZSBvciBhcGlNZXRhIGNoYW5nZXMgdG8gcmVmbGVjdCB1cGRhdGVkIGRhdGFcclxubmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gIGlmIChjaGFuZ2VzWydmaWx0ZXJOYW1lJ10gJiYgIWNoYW5nZXNbJ2ZpbHRlck5hbWUnXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcclxuXHJcbiAgICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTtcclxuICB9XHJcbiAgaWYgKGNoYW5nZXNbJ2FwaU1ldGEnXSAmJiB0aGlzLmFwaU1ldGEpIHtcclxuICAgIHRoaXMuYXBpT2JqID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xyXG4gICAgdGhpcy5TZWFyY2hJdGVtID0gdGhpcy5hcGlPYmo/LmZpZWxkO1xyXG4gIH1cclxufVxyXG4vL1JTIDAzRkVCMjAyNVxyXG4vLyBDbGVhcnMgc2VhcmNoLXJlbGF0ZWQgZGF0YSwgaW5jbHVkaW5nIHJlc3VsdHMsIHNlYXJjaCB0ZXJtLCBhbmQgc3VnZ2VzdGlvbnMuXHJcbnByaXZhdGUgcmVzZXRDb21wb25lbnRTdGF0ZSgpOiB2b2lkIHtcclxuICB0aGlzLmZpbmFsUmVzdWx0cyA9IFtdO1xyXG4gIHRoaXMuZmlsdGVyTmFtZSA9ICcnOyBcclxuICB0aGlzLnNlYXJjaEtleVdvcmQgPSAnJzsgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcclxuICB0aGlzLm5vUmVzdWx0ID0gZmFsc2U7XHJcbn1cclxuICBjbGVhckxpc3QoKXtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzID0gW107XHJcbiAgICAgIHRoaXMuZmlsdGVyTmFtZSA9ICcnO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBnZXRTb3VyY2VEYXRhTG9jYWwoZXZlbnQ6IGFueSkgeyAvL3RvIGdldCByZXN1bHRzIGxpc3QgZnJvbSBiYWNrZW5kIEFQSSB3aGVuZXZlciBrZXkgaXMgdXAgYWZ0ZXIgdGhlIGVudGVyaW5nIGF0bGVhc3Qgb25lIGtleVxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmKGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPiAyKXtcclxuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbj10cnVlO1xyXG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cz1bXTtcclxuICAgICAgdGhpcy5zZWFyY2hLZXlXb3JkID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICB0aGlzLnNob3dSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5nZXRTb3VyY2VEYXRhKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uPWZhbHNlO1xyXG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cyA9IFtdO1xyXG4gICAgICB0aGlzLm5vUmVzdWx0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIFZEIDAzTWF5LSBzZWFyY2ggY2hhbmdlc1xyXG4gIC8vIFZEIDMxTk9WMjQgbnVsbCBjaGVja1xyXG4gIC8vIFJTIDI5SkFOMjVcclxuICAvL011bHRpLXdvcmQgc2VhcmNoIGFjcm9zcyBhbGwgb2JqZWN0IHZhbHVlc1xyXG4gIHB1YmxpYyBnZXRTb3VyY2VEYXRhID0gKGtleXdvcmQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHRoaXMuYXBpTWV0YSkge1xyXG4gICAgICBsZXQgYXBpT2JqOiBBUElNZXRhID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5hcGlSZXNwb25zZShhcGlPYmouZW5kcG9pbnQpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBsZXQgcmVzcG9uc2U7XHJcbiAgICAgICAgaWYgKGFwaU9iai52YXJpYWJsZSkge1xyXG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGFwaVJlc3BvbnNlLCBhcGlPYmoudmFyaWFibGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNwb25zZSA9IGFwaVJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIGxldCBzZWFyY2hUZXJtcyA9IGtleXdvcmQudG9Mb3dlckNhc2UoKS5zcGxpdChcIiBcIik7IC8vIFNwbGl0IGlucHV0IGludG8gd29yZHNcclxuICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgb2JqID0gcmVzcG9uc2VbaV07XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIENvbnZlcnQgYWxsIG9iamVjdCB2YWx1ZXMgdG8gYSBzaW5nbGUgc3RyaW5nIGZvciBmbGV4aWJsZSBzZWFyY2hcclxuICAgICAgICAgIGxldCBjb21iaW5lZFZhbHVlcyA9IE9iamVjdC52YWx1ZXMob2JqKS5qb2luKFwiIFwiKS50b0xvd2VyQ2FzZSgpO1xyXG4gIFxyXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIHNlYXJjaCB0ZXJtcyBleGlzdCBpbiBhbnkgb3JkZXJcclxuICAgICAgICAgIGxldCBtYXRjaCA9IHNlYXJjaFRlcm1zLmV2ZXJ5KHRlcm0gPT4gY29tYmluZWRWYWx1ZXMuaW5jbHVkZXModGVybSkpO1xyXG4gIFxyXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNYXRjaGluZyBlbnRyeTonLCBvYmopO1xyXG4gICAgICAgICAgICByZXN1bHRzLnB1c2gob2JqKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgdGhpcy5ub1Jlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID09PSAwO1xyXG4gICAgICAgIHRoaXMuZmluYWxSZXN1bHRzID0gcmVzdWx0cztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBcclxuICBwdWJsaWMgY2xpY2tJdGVtKGV2ZW50KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGNsaWNrSXRlbSBvZiAnICsgZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgIGxldCBhcGlPYmo6IEFQSU1ldGEgPSBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XHJcbiAgICB0aGlzLmZpbHRlck5hbWUgPSBldmVudFthcGlPYmouZmllbGRdO1xyXG4gICAgbGV0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7IC8vIENoYW5nZVdyYXBwZXIgPSBKU09OLnBhcnNlKCd7fScpO1xyXG4gICAgY2hhbmdlLmZyb21RdWVzdGlvbklkID0gdGhpcy5pZDtcclxuICAgIGNoYW5nZS52YWx1ZU9iaiA9IGV2ZW50O1xyXG4gICAgY2hhbmdlLmZpZWxkID0gYXBpT2JqLmZpZWxkO1xyXG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KGNoYW5nZSk7XHJcbiAgfVxyXG4gIC8vUlMgMDNGRUIyMDI1XHJcbiAgLy8gUmVzZXRzIGNvbXBvbmVudCBzdGF0ZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTsgIH1cclxuICAvKlxyXG4gIHB1YmxpYyBnZXRTb3VyY2VEYXRhID0gKGtleXdvcmQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxyXG4gICAgICAgIHRoaXMudGtuLFxyXG4gICAgICAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzU291cmNlRGF0YSxcclxuICAgICAgICB0aGlzLmZhaWx1cmVTb3VyY2VEYXRhXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcclxuICAgICAgICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc1NvdXJjZURhdGEsXHJcbiAgICAgICAgdGhpcy5mYWlsdXJlU291cmNlRGF0YVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN1Y2Nlc3NTb3VyY2VEYXRhID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBsZXQgcmVzdWx0cz1bXTtcclxuICAgIHJlc3VsdHM9cmVzcG9uc2UucmVzdWx0cztcclxuICAgIHJlc3VsdHMucHVzaCh7dXVpZDogbnVsbCwgbmFtZTogXCJcIn0pO1xyXG4gICAgdGhpcy5ub1Jlc3VsdCA9ICEocmVzdWx0cy5sZW5ndGggPiAxKTtcclxuICAgIHRoaXMuZmluYWxSZXN1bHRzID0gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmYWlsdXJlU291cmNlRGF0YSA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXCJFcnJvciByZWFkaW5nIHRoZSBkYXRhIGZyb20gQVBJXCIpO1xyXG4gIH1cclxuICAqL1xyXG59XHJcbiAgICAiLCI8IS0tIC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UtLT5cclxuPGRpdiBpZD1cImF1dG9jb21wbGV0ZS1pbnB1dFwiPiA8IS0tIFNLUzVOT1YyNSBzZWFyY2ggaWNvbiAtLT5cclxuICA8aW5wdXQgI2F1dG8gaWQ9XCJzZWFyY2hib3gtc3R5bGVcIlxyXG4gICAgICAgICAgKGJsdXIpPVwiY2xlYXJMaXN0KClcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJOYW1lXCJcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIG5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkT25seVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJUZXh0XCJcclxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luOiAwICFpbXBvcnRhbnQ7IHBhZGRpbmctcmlnaHQ6IDMwcHg7XCJcclxuICAgICAgICAgIGNsYXNzPVwic2VhcmNoSW5wdXQgc2hlLWxpbmUtaW5wdXQgZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIChmb2N1c2luKT1cImdldFNvdXJjZURhdGFMb2NhbCgkZXZlbnQpXCJcclxuICAgICAgICAgIChpbnB1dCk9XCJnZXRTb3VyY2VEYXRhTG9jYWwoJGV2ZW50KVwiPlxyXG4gIDxkaXYgaWQ9XCJzZWxlY3RMaXN0XCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7cG9zaXRpb246IGFic29sdXRlO2JhY2tncm91bmQ6IHdoaXRlO3otaW5kZXg6IDI7XCI+XHJcbiAgPGRpdiAqbmdJZj1cImZpbmFsUmVzdWx0cy5sZW5ndGggPiAwICYmIHNob3dTdWdnZXN0aW9uXCJcclxuICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAxMDB2aDtib3JkZXI6IDFweCBzb2xpZCAjZDJkNGQ2O292ZXJmbG93OiBzY3JvbGw7XCJcclxuICAgICAgY2xhc3M9XCJzdWdnZXN0aW9ucy1jb250YWluZXJcIj5cclxuICAgICAgPCEtLSBIQSAyMERFQzIzIFVuY29tbWVudGVkIHRoZSBsb2dpYyAtLT5cclxuICAgICAgIDwhLS0gVkQgMDNNYXktIHNlYXJjaCBjaGFuZ2VzIC0tPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbmFsUmVzdWx0c1wiIChjbGljayk9J2NsaWNrSXRlbShpdGVtKScgY2xhc3M9XCJob292ZXJcIj5cclxuICAgICAgICA8IS0tIFZEIDI2SnVuMjQgLSBpZCBjb25kaXRpb24gcmVtb3ZlZCAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXggYWxpZ24tbWlkZGxlXCIgc3R5bGU9XCJwYWRkaW5nOiAxcmVtXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udGh1bWJuYWlsXCIgY2xhc3M9XCJjZWxsIHNocmlua1wiIHN0eWxlPVwid2lkdGg6IDYwcHg7IG1hcmdpbi1yaWdodDogMS42cmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS50aHVtYm5haWxcIiBzdHlsZT1cIndpZHRoOiA2MHB4O1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGF1dG9cIiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmctbGVmdDogMjBweDtcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0vLyBWRCAyNkpVTjI0IC0gcGlwZSBjaGFuZ2VzIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBSUyAyOUpBTjI1IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8aDQgPnt7IGl0ZW0gfCBnZXRWYWx1ZTogaXRlbSA6IFNlYXJjaEl0ZW0gfX08L2g0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIENvbW1lbnRlZCB0aGlzIGZvciBmdXR1cmUgcHVycG9zZSAtLT5cclxuICAgICAgPCEtLSA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGg+e3sgJ2ZpcnN0TmFtZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPnt7ICdsYXN0TmFtZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPnt7ICdkaXZpc2lvbicgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPnt7ICdudW1iZXJQbGF0ZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmluYWxSZXN1bHRzXCIgKGNsaWNrKT0nY2xpY2tJdGVtKGl0ZW0pJz5cclxuICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS5maXJzdE5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmxhc3ROYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS5kaXZpc2lvbiB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0ubnVtYmVyUGxhdGUgfX08L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPiAtLT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4iXX0=
|
|
@@ -416,6 +416,7 @@ export class BookletComponent {
|
|
|
416
416
|
question['type'] = ques.type;
|
|
417
417
|
question['questionNumber'] = ques.questionNumber;
|
|
418
418
|
question['referenceField'] = ques?.referenceField;
|
|
419
|
+
question['selectedValue'] = ques?.selectedValue; // MR 31JAN24 Need to pass the selected value too
|
|
419
420
|
this.answerList.push(question);
|
|
420
421
|
}
|
|
421
422
|
}
|
|
@@ -537,4 +538,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
537
538
|
}], dataBind: [{
|
|
538
539
|
type: Input
|
|
539
540
|
}] } });
|
|
540
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2xldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYm9va2xldC9ib29rbGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9ib29rbGV0L2Jvb2tsZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksR0FJYixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBa0J2QixNQUFNLE9BQU8sZ0JBQWdCO0lBbUNqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFFRDtJQXpDQSxTQUFTLENBQVM7SUFDbEIsSUFBSSxDQUFTO0lBQ2IsR0FBRyxDQUFTO0lBQ1osV0FBVyxDQUFNO0lBQ2pCLHFCQUFxQixDQUFLO0lBQzFCLFVBQVUsQ0FBUTtJQUNsQixLQUFLLENBQVE7SUFDYixZQUFZLENBQVEsQ0FBRSxtQ0FBbUM7SUFDekQsaUJBQWlCLENBQU0sQ0FBQyx1Q0FBdUM7SUFDOUQsd0JBQXdCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakUsVUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ25ELHNCQUFzQixHQUFxQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3pFLDhCQUE4QjtJQUNuQixrQkFBa0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMzRCxtQkFBbUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUvRCxVQUFVLENBQWlCO0lBRTNCLE9BQU8sR0FBVSxFQUFFLENBQUM7SUFDcEIsTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUNqQixPQUFPLEdBQWlCLEVBQUUsQ0FBQztJQUMzQixnQkFBZ0IsR0FBUSxJQUFJLEdBQUcsRUFB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QyxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBUztRQUN4QixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO3dHQXRnQlUsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsNmpCQzdCN0IsaTZHQTBEQTs7NEZEN0JhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhO29SQUtkLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFnQkUsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBPbkNoYW5nZXMsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgRWxlbWVudFJlZixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBBY3Rpb25NZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY3Rpb25NZXRhJztcclxuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vLi4vd3JhcHBlclwiO1xyXG5pbXBvcnQgeyBCb29rbGV0V3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9ib29rbGV0V3JhcHBlclwiO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2VcIjtcclxuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXHJcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2kxOG4uc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYm9va2xldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2tsZXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Jvb2tsZXQuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCb29rbGV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBib29rbGV0SWQ6IHN0cmluZztcclxuICBASW5wdXQoKSBzZXJ2OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdGtuOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYm9va2xldEpTT046IGFueTtcclxuICBASW5wdXQoKSBkcm9wZG93bkRlcGVuZGVudERhdGE6YW55O1xyXG4gIEBJbnB1dCgpIGxhYmVsVmFsdWU6c3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRva2VuOnN0cmluZztcclxuICBASW5wdXQoKSBsYW5ndWFnZUNvZGU6c3RyaW5nOyAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICBASW5wdXQoKSBmaWVsZFJlc3RyaWN0aW9uczogYW55OyAvLyBWRCAxMkp1bjI0IC0gZmllbGQgcGVybWlzc2lvbiBjaGFuZ2VcclxuICBAT3V0cHV0KCkgaGFuZGxlQm9va2xldEFjdGlvbkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaGFuZGxlUGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGhhZGxlRHJvcERvd25EZXBlbmRlbnQ6RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcclxuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJEYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBueHRCb29rbGV0OiBCb29rbGV0V3JhcHBlcjtcclxuXHJcbiAgcHVibGljIGJvb2tsZXQ6IGFueVtdID0gW107XHJcbiAgcHVibGljIGFiSXRlbTogYW55ID0ge307XHJcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbk1ldGFbXSA9IFtdO1xyXG4gIHB1YmxpYyBib29rUXVlc3Rpb25zTWFwOiBhbnkgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIHRyYW5zbGF0ZU1hcDogYW55ID0gbmV3IE1hcCgpOyAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICBwcml2YXRlIHNxT3B0aW9uczogYW55ID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBpc0Fuc3dlckZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3Bpbm5lck5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgc3Bpbm5lclR5cGU6IHN0cmluZztcclxuICAvLyBIQSAxOURFQzIzIGxhbmdEaXJlY3Rpb24gdmFyaWFibGUgaXMgY3JlYXRlZCB0byBhc3NpZ24gdGhlIGRpcmVjdGlvbiBhcyBjbGFzc1xyXG4gIGxhbmdEaXJlY3Rpb24gPSAnbHRyJzsgLy8gSEEgMjhERUMyMyBtYWtpbmcgbHRyIGFzIGRlZmF1bHQgZGlyZWN0aW9uXHJcbiAgYW5zd2VyTGlzdCA9IFtdOyAvLyBIQSAxMS1KQU4tMjQgQW5zd2VybGlzdCB0byBzdG9yZSB0aGUgbWluaW1hbCB2YWx1ZVxyXG4gIEBJbnB1dCgpIGRhdGFCaW5kOmFueTsvLyBIQSAxOC1KQU4tMjQgVG8gaW5zZXJ0IHRoZSBlbmRwb2ludCB2YWx1ZSB0byB0aGUgcXVlc3Rpb25cclxuICBhbGxFdmVudHM6YW55W109W107ICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcclxuICBcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxyXG4gICAgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlXHJcbiAgKSB7IFxyXG4gICAgdGhpcy5zcGlubmVyTmFtZSA9IFwic3AxXCI7XHJcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlXCI7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuLy8gIFZEIDEySmFuMjQgZmllbGRSZXN0cmljdGlvbnMgZm9ybWF0ZSBcclxuICAvLyAgIHtcclxuICAvLyAgICAgXCJmaWVsZHNcIiA6IHtcclxuICAvLyAgICAgICAgIFwidHJhbnNRYi0wMVwiIDogXCJyZWFkT25seVwiLFxyXG4gIC8vICAgICAgICAgXCJUcmFuc0ZpcjAyXCIgOiBcIlwiLFxyXG4gIC8vICAgICAgICAgXCJUcmFuc0xhc3QwM1wiIDogXCJyZWFkT25seVwiLFxyXG4gIC8vICAgICAgICAgXCJiazItcTJcIiA6IFwiaGlkZVwiXHJcbiAgLy8gICAgIH1cclxuICAvLyAgfVxyXG5cclxuICAgIC8vIEhBIDE4LUpBTi0yNCBEdW1teSBTdGF0aWMgZGF0YSBmb3IgdGVzdGluZ1xyXG4gICAgLy8gdGhpcy5kYXRhQmluZCA9IHtcclxuICAgIC8vICAgXCJfaWRcIjogXCI2NTllZDAwMmVkNTFiYjgwNjE1NDQyNTVcIixcclxuICAgIC8vICAgXCJjb21wYW55SWRcIjogXCI1dWxsaDFCV3BZcW52ektoOUxcIixcclxuICAgIC8vICAgXCJuYW1lXCI6IFwiQWwgWWFzbWluZVwiLFxyXG4gICAgLy8gICBcImNvZGVcIjogXCJjaGVja1wiLFxyXG4gICAgLy8gICBcInN0YXR1c1wiOiBcIkluLVByb2dyZXNzXCIsXHJcbiAgICAvLyAgIFwiY3JlYXRlZEF0XCI6IFwiMjAyNC0wMS0xMFQxNzoxMjozNC42ODZaXCIsXHJcbiAgICAvLyAgIFwidXBkYXRlZEF0XCI6IFwiMjAyNC0wMS0xMFQxOTo1MzowOC4xMzVaXCIsXHJcbiAgICAvLyAgIFwiX192XCI6IDAsXHJcbiAgICAvLyAgIFwib3duZXJcIjogXCJjaGVja1wiLFxyXG4gICAgLy8gICBcImN1c3RvbWVyXCI6IFwiY2hlY2tcIixcclxuICAgIC8vICAgXCJkYXRpXCI6IFwiMjAyNC0wMS0yM1QxODozMDowMC4wMDBaXCIsXHJcbiAgICAvLyAgIFwidGltaVwiOiBcIjIwMjQtMDEtMjNUMTg6MzA6MDAuMDAwWlwiLFxyXG4gICAgLy8gXCJmTmFtZVwiOiBcIkhhaWRlclwiLFxyXG4gICAgLy8gXCJsTmFtZVwiOiBcIkFsaVwiLFxyXG4gICAgLy8gXCJkZWZhdWx0QXBwXCI6IFwiTlhUXCIsXHJcbiAgICAvLyBcImVtYWlsXCI6IFwiaGFpZGVyQGdtYWlsLmNvbVwiLFxyXG4gICAgLy8gXCJsb2NhdGlvblwiOiB7YWRkcmVzczogXCIxMDcsIEFzaG9rIE5hZ2FyLCBLYWR1Z29uZGFuYWhhbGxpLCBCZW5nYWx1cnUsIEthcm5hdGFrYSA1NjAwNDUsIEluZGlhXCIsXHJcbiAgICAvLyAgIGxhdGl0dWRlOiAxMy4wMjAwNTc1LFxyXG4gICAgLy8gICBsb25naXR1ZGU6IDc3LjYxMjk4MTZ9LFxyXG4gICAgLy8gXCJsb2NhdGlvblwiOiBcIjEwNywgQXNob2sgTmFnYXIsIEthZHVnb25kYW5haGFsbGksIEJlbmdhbHVydSwgS2FybmF0YWthIDU2MDA0NSwgSW5kaWFcIixcclxuICAgIC8vIFwidGV4dEFyZWFcIjogXCJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW1cIixcclxuICAgIC8vIH07XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzQm9va2xldCgpO1xyXG4gIH1cclxuIC8vIFZEIE5PVjIzIC0gdXBkYXRlIHRoZSBqc29uIGRhdGEgd2hlbiBib29rbGV0SWQgYW5kIGJvb2tsZXRKU09OIGNoYW5nZXNcclxuICBuZ09uQ2hhbmdlcyhzaW1wbGVjaGFuZ2VzOlNpbXBsZUNoYW5nZXMpIHtcclxuICAgLy8gSEEgMjNKQU4yNCBUbyBhdm9pZCB1bmRlZmluZWQgZXJyb3JcclxuICAgaWYoc2ltcGxlY2hhbmdlc1snYm9va2xldElkJ10gfHwgKHNpbXBsZWNoYW5nZXNbJ2Jvb2tsZXRKU09OJ10gJiYgKHNpbXBsZWNoYW5nZXNbJ2Jvb2tsZXRKU09OJ10uY3VycmVudFZhbHVlICE9IG51bGwgfHwgc2ltcGxlY2hhbmdlc1snYm9va2xldEpTT04nXS5jdXJyZW50VmFsdWUgIT0gdW5kZWZpbmVkKSkgfHwgKHNpbXBsZWNoYW5nZXNbJ2RhdGFCaW5kJ10gJiYgKHNpbXBsZWNoYW5nZXNbJ2RhdGFCaW5kJ10uY3VycmVudFZhbHVlICE9IG51bGwgfHwgc2ltcGxlY2hhbmdlc1snZGF0YUJpbmQnXS5jdXJyZW50VmFsdWUgIT0gdW5kZWZpbmVkKSkgKXtcclxuICAgICAgdGhpcy5hbGxFdmVudHMgPSBbXTtcclxuICAgICAgdGhpcy5wcm9jZXNzQm9va2xldCgpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYodGhpcy5ib29rbGV0ID09IHVuZGVmaW5lZCB8fCB0aGlzLmJvb2tsZXQubGVuZ3RoID09IDApIHtcclxuICAgIC8vICAgdGhpcy5wcm9jZXNzQm9va2xldCgpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0Jvb2tsZXQoKSB7XHJcbiAgICBpZiAodGhpcy5ib29rbGV0SWQpIHtcclxuICAgICAgaWYgKHRoaXMuYm9va2xldElkLmxlbmd0aCA9PSAxOCkge1xyXG4gICAgICAgIHRoaXMucmVhZEJvb2tsZXQodGhpcy5ib29rbGV0SWQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYodGhpcy5ib29rbGV0SlNPTikge1xyXG4gICAgICAvLyBUcnkgdG8gcGFzcyBhIHZhbHVlIGZyb20gQmFja2VuZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBRdWVzdGlvbkJvb2sgUmVhZCBhbmQgQW5zd2VyQm9vayBSZWFkXHJcbiAgICAgIHRoaXMuaXNBbnN3ZXJGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmKHRoaXMuYm9va2xldEpTT04gIT0gbnVsbCB8fCB0aGlzLmJvb2tsZXRKU09OICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgLy8gU3RvcmluZyB0aGUgQVBJIHJlc3BvbnNlIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNhdmUodGhpcy5ib29rbGV0SlNPTik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYm9va2xldCA9IHRoaXMuYm9va2xldEpTT04ucmVjb3JkcztcclxuICAgICAgdGhpcy5hYkl0ZW0gPSB0aGlzLmJvb2tsZXRKU09OLmFuc3dlcmJvb2s7XHJcblxyXG4gICAgICAvLyBQcm9jZXNzIHRoZSBTdWIgUXVlc3Rpb24gT3B0aW9ucyAtIFRoaXMgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIGJvb2tRdWVzdGlvbnNNYXAgaW4gZnV0dXJlXHJcbiAgICAgIGZvciAodmFyIHNxIGluIHRoaXMuYm9va2xldEpTT04uc3FPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5zcU9wdGlvbnMuc2V0KHNxLCB0aGlzLmJvb2tsZXRKU09OLnNxT3B0aW9uc1tzcV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcm9jZXNzIHRoZSBRdWVzdGlvbnNcclxuICAgICAgLy8gSEEgMjhERUMyMyB0aGlzIGFwcGxpZXMgZm9yIGJvb2tsZXRcclxuICAgICAgLy8gSEEgMTdKQU4yNCBBZGRlZCB0ZXJuYXJ5IG9wZXJhdG9yIHRvIGF2b2lkIHVuZGVmaW5lZCBzY2VuYXJpb1xyXG4gICAgICAvLyBIQSAwOUZFQjI0IEFkZGluZyBjb25kaXRpb24gdG8gYXZvaWQgdW5kZWZpbmVkIGVycm9yXHJcbiAgICAgIGlmKHRoaXMuYm9va2xldEpTT04/LmJvb2tRdWVzdGlvbnNNYXAgJiYgT2JqZWN0LmtleXModGhpcy5ib29rbGV0SlNPTj8uYm9va1F1ZXN0aW9uc01hcCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgZm9yICh2YXIgdmFsdWUgaW4gdGhpcy5ib29rbGV0SlNPTi5ib29rUXVlc3Rpb25zTWFwKSB7XHJcbiAgICAgICAgICB0aGlzLmJvb2tRdWVzdGlvbnNNYXAuc2V0KHZhbHVlLCB0aGlzLmJvb2tsZXRKU09OLmJvb2tRdWVzdGlvbnNNYXBbdmFsdWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gSEEgMjhERUMyMyB0aGlzIGFwcGxpZXMgZm9yIGJvb2sgb3IgcXVlc3Rpb25zXHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gJyc7XHJcbiAgICAgICAgLy8gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5XHJcbiAgICAgICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcclxuICAgICAgICB2YWx1ZSA9IHRoaXMuYm9va2xldEpTT04ucmVjb3Jkc1swXT8uaWQ7XHJcbiAgICAgICAgdGhpcy5ib29rUXVlc3Rpb25zTWFwLnNldCh2YWx1ZSwgdGhpcy5ib29rbGV0SlNPTi5xdWVzdGlvbmJvb2spO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAgLy8gVkQgMjBKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICAgICAgIGZvciAodmFyIHZhbHVlIGluIHRoaXMuYm9va2xldEpTT04/LnRyYW5zbGF0aW9uTWFwKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVNYXAuc2V0KHZhbHVlLCB0aGlzLmJvb2tsZXRKU09OLnRyYW5zbGF0aW9uTWFwW3ZhbHVlXSk7XHJcbiAgICAgIH1cclxuICAgICAvLyBWRCAzMU5PVjI0IHdyYXBwZXIgY2hhbmdlc1xyXG4gICAgICBpZih0aGlzLmJvb2tsZXRKU09OLnF1ZXN0aW9uYm9vaz8uYWN0aW9uICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IEpTT04ucGFyc2UodGhpcy5ib29rbGV0SlNPTi5xdWVzdGlvbmJvb2suYWN0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gSEEgMTlERUMyMyBsYW5nRGlyZWN0aW9uIHZhcmlhYmxlIHZhbHVlIGFzc2lnbmluZ1xyXG4gICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcclxuICAgIGlmKHRoaXMuYm9va2xldEpTT04/LnF1ZXN0aW9uYm9vaz8uc3R5bGUpe1xyXG4gICAgICB2YXIgc3R5bGUgPSBKU09OLnBhcnNlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ib29rbGV0SlNPTj8ucXVlc3Rpb25ib29rPy5zdHlsZSkpKTtcclxuICAgICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gc3R5bGU/LmRpcmVjdGlvbjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5ib29rbGV0SlNPTj8ucmVjb3Jkc1swXT8uc3R5bGUpe1xyXG4gICAgLy8gZWxzZSBpZih0aGlzLmJvb2tsZXRKU09OPy5yZWNvcmRzWzBdPy5zdHlsZSl7XHJcblxyXG4gICAgICB2YXIgc3R5bGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYm9va2xldEpTT04/LnJlY29yZHNbMF0/LnN0eWxlKSk7XHJcbiAgICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHN0eWxlPy5kaXJlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSEEgMTgtSkFOLTI0IFRoZSBjb25kaXRpb24gaXMgdXNlZCBmb3IgQmluZC1JbiBMb2dpYyBcclxuICAgIHRoaXMuaGFuZGxlQ29tcGxldGVCb29rbGV0KHRoaXMuYm9va2xldEpTT04pOyBcclxuICB9XHJcbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xyXG4gIHByaXZhdGUgcmVhZEJvb2tsZXQgPSAodXVpZDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXHJcbiAgICAgICAgdGhpcy50a24sXHJcbiAgICAgICAgW1wiQm9va2xldFwiLCBcInJlYWRcIiwgdXVpZCx0aGlzLmxhbmd1YWdlQ29kZV0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2tsZXQsXHJcbiAgICAgICAgdGhpcy5mYWlsdXJlUmVhZEJvb2tsZXRcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcclxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcclxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcclxuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcclxuICAgICAgbGV0IHBhcmEgPSB7XHJcbiAgICAgICAgZGF0YVR5cGU6IFwiQm9va2xldFwiLFxyXG4gICAgICAgIG9wZXJhdGlvbjogXCJyZWFkXCIsXHJcbiAgICAgICAgcGFyYW0xOiB1dWlkLFxyXG4gICAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZSA6IHRoaXMubGFuZ3VhZ2VDb2RlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxyXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxyXG4gICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhKV0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2tsZXQsXHJcbiAgICAgICAgdGhpcy5mYWlsdXJlUmVhZEJvb2tsZXRcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3VjY2Vzc1JlYWRCb29rbGV0ID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZEJvb2tsZXQnKTtcclxuICAgIGlmKHJlc3BvbnNlICE9IG51bGwgfHwgcmVzcG9uc2UgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIFN0b3JpbmcgdGhlIEFQSSByZXNwb25zZSBmb3IgZnV0dXJlIHVzZVxyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNhdmUocmVzcG9uc2UpO1xyXG5cclxuICAgICAgLy8gVHJ5IHRvIHBhc3MgYSB2YWx1ZSBmcm9tIEJhY2tlbmQgdG8gZGlmZmVyZW50aWF0ZSB0aGUgUXVlc3Rpb25Cb29rIFJlYWQgYW5kIEFuc3dlckJvb2sgUmVhZFxyXG4gICAgICAvLyB0aGlzLmlzQW5zd2VyRmxhZyA9IHRydWU7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmJvb2tsZXQgPSByZXNwb25zZS5yZWNvcmRzO1xyXG4gICAgICB0aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XHJcbiAgICAgIFxyXG4gICAgICAvLyBQcm9jZXNzIHRoZSBTdWIgUXVlc3Rpb24gT3B0aW9ucyAtIFRoaXMgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIGJvb2tRdWVzdGlvbnNNYXAgaW4gZnV0dXJlXHJcbiAgICAgIGZvciAodmFyIHNxIGluIHJlc3BvbnNlLnNxT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuc3FPcHRpb25zLnNldChzcSwgcmVzcG9uc2Uuc3FPcHRpb25zW3NxXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByb2Nlc3MgdGhlIFF1ZXN0aW9uc1xyXG4gICAgICBmb3IgKHZhciB2YWx1ZSBpbiByZXNwb25zZS5ib29rUXVlc3Rpb25zTWFwKSB7XHJcbiAgICAgICAgdGhpcy5ib29rUXVlc3Rpb25zTWFwLnNldCh2YWx1ZSwgcmVzcG9uc2UuYm9va1F1ZXN0aW9uc01hcFt2YWx1ZV0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXHJcbiAgICAgIGZvciAodmFyIHZhbHVlIGluIHJlc3BvbnNlLnRyYW5zbGF0aW9uTWFwKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVNYXAuc2V0KHZhbHVlLCByZXNwb25zZS50cmFuc2xhdGlvbk1hcFt2YWx1ZV0pO1xyXG4gICAgICB9XHJcbiAgICAgICAvLyBWRCAzMU5PVjI0IHdyYXBwZXIgY2hhbmdlc1xyXG4gICAgICBpZihyZXNwb25zZS5xdWVzdGlvbmJvb2s/LmFjdGlvbiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmFjdGlvbnMgPSBKU09OLnBhcnNlKHJlc3BvbnNlLnF1ZXN0aW9uYm9vay5hY3Rpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBIQSAxOURFQzIzIGxhbmdEaXJlY3Rpb24gdmFyaWFibGUgdmFsdWUgYXNzaWduaW5nXHJcbiAgICBpZihyZXNwb25zZT8ucXVlc3Rpb25ib29rPy5zdHlsZSl7XHJcbiAgICAgIHZhciBzdHlsZSA9IEpTT04ucGFyc2UoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXNwb25zZT8ucXVlc3Rpb25ib29rPy5zdHlsZSkpKTtcclxuICAgICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gc3R5bGU/LmRpcmVjdGlvbjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYocmVzcG9uc2U/LnJlY29yZHNbMF0/LnN0eWxlKXtcclxuICAgICAgdmFyIHN0eWxlID0gSlNPTi5wYXJzZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlPy5yZWNvcmRzWzBdPy5zdHlsZSkpKTtcclxuICAgICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gc3R5bGU/LmRpcmVjdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rbGV0ID0gKHJlc3BvbnNlKSA9PiB7XHJcblxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQm9va2xldEFjdGlvbkNsaWNrKGFjdGlvbjpBY3Rpb25NZXRhKSB7XHJcbiAgICAvLyBIQSAxOUpBTjI0IEFjdGlvbiBjaGFuZ2VzXHJcbiAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xyXG4gICAgdGhpcy5hbnN3ZXJMaXN0ID0gW107XHJcbiAgICB0aGlzLmRhdGFCaW5kID0gW107IC8vIEhBIDEyRkVCMjQgQ2xlYXJpbmcgZGF0YUJpbmQgdXBvbiBidXR0b24gYWN0aW9uIHNvIHRoYXQgZGF0YUJpbmQgdmFsdWUgd2lsbCBub3Qgb3ZlcnJpZGUgdGhlIGNoYW5nZWQgdmFsdWVcclxuICAgIGxldCBkYXRhVG9QYXJlbnQgPSB7fTtcclxuICAgIGxldCB2YWxpZEZvcm0gPSB0cnVlOyAvLyBWRCAwMUF1ZzI0IC0gdmFsaWRhdGlvbiBjaGFuZ2VcclxuICAgIC8vIEhBIDIySkFOMjQgdGhpcyBjaGFuZ2UgdG8gbWFrZSBjbG9zZSBldmVudCB3b3JrXHJcbiAgICBkYXRhVG9QYXJlbnRbJ2FjdGlvbiddID0gYWN0aW9uLmV2ZW50dG9lbWl0O1xyXG4gICAgaWYoIShhY3Rpb24uZXZlbnR0b2VtaXQgPT09ICdjbG9zZScgfHwgYWN0aW9uLmV2ZW50dG9lbWl0ID09PSAncHJpbnQnKSl7XHJcbiAgICAgIC8vIEhBIDE4LUpBTi0yNCBTZW5kaW5nIHRoZSBjb21wbGV0ZSBqc29uIGRhdGEgYWxzbyBcclxuICAgICAgZGF0YVRvUGFyZW50Wydqc29uQm9vayddID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoKTtcclxuICAgICAgLy8gSEEgMTdKQU4yNCBueHRJZCB0byBkYXRhUGFyZW50IG9iamVjdFxyXG4gICAgICBpZih0aGlzLmJvb2tsZXRKU09OKXtcclxuICAgICAgICBkYXRhVG9QYXJlbnRbJ254dElkJ10gPSBPYmplY3Qua2V5cyh0aGlzLmJvb2tsZXRKU09OPy5ib29rUXVlc3Rpb25zTWFwKVswXTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIQSAxMS1KQU4tMjQgTWluaW1pemluZyB0aGUgdmFsdWUgd2hpY2ggaGFzIHRvIGJlIHBhc3NlZCB0byB0aGUgc2VydmVyXHJcbiAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGVCb29rbGV0KGRhdGFUb1BhcmVudFsnanNvbkJvb2snXSk7XHJcbiAgICAgIGRhdGFUb1BhcmVudFsnZGF0YSddID0gdGhpcy5hbnN3ZXJMaXN0ID8gdGhpcy5hbnN3ZXJMaXN0IDogZGF0YVRvUGFyZW50WydkYXRhJ107XHJcbiAgICAgIC8vIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b24gdmFsaWRhdGluZyB0aGUgcmVxdWlyZWQgZmllbGRzXHJcbiAgICAgIGZvcihsZXQga2V5IGluIGRhdGFUb1BhcmVudFsnanNvbkJvb2snXS5ib29rUXVlc3Rpb25zTWFwKXtcclxuICAgICAgICBjb25zdCBjdXJyZW50Qm9vayAgPSBkYXRhVG9QYXJlbnRbJ2pzb25Cb29rJ10uYm9va1F1ZXN0aW9uc01hcFtrZXldO1xyXG4gICAgICAgIGN1cnJlbnRCb29rLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAvLyBWRCAwMUF1ZzI0IC0gdmFsaWRhdGlvbiBjaGFuZ2VcclxuICAgICAgICAgIGlmKGVsZW1lbnQuaXNPcHRpb25hbCAmJiBkYXRhVG9QYXJlbnRbJ2FjdGlvbiddID09ICdzdWJtaXQnICYmICghZWxlbWVudC5pbnB1dCB8fCAoQXJyYXkuaXNBcnJheShlbGVtZW50LmlucHV0KSAmJiBlbGVtZW50LmlucHV0Lmxlbmd0aCA9PT0gMCkpICYmICFlbGVtZW50LmlzSGlkZGVuICYmIGVsZW1lbnQudHlwZSAhPSAnTGFiZWwnICYmIGVsZW1lbnQudHlwZSAhPSAnSW1hZ2UnICl7IC8vU0tTNU5PVjI1IFxyXG4gICAgICAgICAgICBlbGVtZW50LmVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFsaWRGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmljZS5zdWJtaXRDaGFuZ2UoZWxlbWVudC5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBWRCAwMkF1ZzI0IC0gY2xlYXIgYWN0aW9uIGNoYW5nZXNcclxuICAgICAgICAgIGlmKGRhdGFUb1BhcmVudFsnYWN0aW9uJ10gPT0gJ2NsZWFyJyl7XHJcbiAgICAgICAgICAgIGlmKGVsZW1lbnQudHlwZSA9PSAnRHJvcGRvd24nIHx8IGVsZW1lbnQudHlwZSA9PSAnTG9jYXRpb24nIHx8IGVsZW1lbnQudHlwZSA9PSAnUmFkaW8nKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihlbGVtZW50LnR5cGUgPT0gJ0ZpbGUnKXtcclxuICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gW107XHJcbiAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFZEIDEzTUFZMjQgLSBwcmludCBRUiBidXR0b24gY2hhbmdlc1xyXG4gICAgaWYoYWN0aW9uLmV2ZW50dG9lbWl0ID09PSAncHJpbnQnKXtcclxuICAgICAgZGF0YVRvUGFyZW50WydhY3Rpb25EYXRhJ10gPSBhY3Rpb25bJ2RhdGEnXTtcclxuICAgIH1cclxuICAgIC8vIEhBIDIzSkFOMjQgVG8gY2FsbCB0aGUgYWN0aW9uIG9uIGFueSBldmVudFxyXG4gICAvLyAgVkQgMDFBdWcyNCAtIHZhbGlkYXRpb24gY2hhbmdlXHJcbiAgICBpZih2YWxpZEZvcm0pe1xyXG4gICAgICB0aGlzLmhhbmRsZUJvb2tsZXRBY3Rpb25FdmVudC5lbWl0KGRhdGFUb1BhcmVudCk7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGRhdGFUb1BhcmVudFsnYWN0aW9uJ10gPSAnZXJyb3InO1xyXG4gICAgICB0aGlzLmhhbmRsZUJvb2tsZXRBY3Rpb25FdmVudC5lbWl0KGRhdGFUb1BhcmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBIQSAxOC1KQU4tMjQgaGFuZGxlQ29tcGxldGVCb29rbGV0IGlzIHRvIHNpbXBsaWZ5IHRoZSBsb2dpY1xyXG4gIGhhbmRsZUNvbXBsZXRlQm9va2xldChjb21wbGV0ZUJvb2tsZXQpe1xyXG4gICAgaWYoT2JqZWN0LmtleXMoY29tcGxldGVCb29rbGV0Py5ib29rUXVlc3Rpb25zTWFwID8/IHt9KS5sZW5ndGggPT09IDApeyAvLyBIQSAxMS1KQU4tMjQgSWYgY29uZGl0aW9uIHRvIGxvYWQgYm9va2xldFxyXG4gICAgICB0aGlzLmhhbmRsZUJvb2soY29tcGxldGVCb29rbGV0Py5xdWVzdGlvbmJvb2s/LnN1YlF1ZXN0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBlbHNleyAvLyBIQSAxMS1KQU4tMjQgVG8gbG9hZCBib29rIHF1ZXN0aW9uc1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wbGV0ZUJvb2tsZXQuYm9va1F1ZXN0aW9uc01hcCkge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IGNvbXBsZXRlQm9va2xldC5ib29rUXVlc3Rpb25zTWFwW2tleV07XHJcbiAgICAgICAgaWYodmFsLnR5cGUgPT09ICdCb29rJyl7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUJvb2sodmFsLnN1YlF1ZXN0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVF1ZXModmFsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEhBIDExLUpBTi0yNCBoYW5kbGVCb29rIGxvYWRzIHRoZSBCb29rXHJcbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcclxuICBoYW5kbGVCb29rKHF1ZXNMaXN0OiBhbnkpe1xyXG4gICAgcXVlc0xpc3Q/LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PT0gJ0Jvb2snKXtcclxuICAgICAgICAvLyBIQSAyNEpBTjI0IEZldGNoaW5nIGZyb20gUUIgcmVmZXJlbmNlXHJcbiAgICAgICAgdmFyIGJvb2sgPSBKU09OLnBhcnNlKGVsZW1lbnQucWJSZWZlcmVuY2VRdWVzdGlvbnMpO1xyXG4gICAgICAgIGJvb2sucXVlc3Rpb25ib29rLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVRdWVzKHF1ZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVRdWVzKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIFZEIDEzU2VwMjQgLSBkYXRhYmluZCBjaGFuZ2VzXHJcbiAgICAvLyBWRCAyMyBPY3QyNCAtIGZpbGUgdHlwZSBjaGFuZ2VzXHJcbiAgICBpZih0aGlzLmRhdGFCaW5kICYmIE9iamVjdC5rZXlzKHRoaXMuZGF0YUJpbmQpLmxlbmd0aCA+IDApe1xyXG4gICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuZGF0YUNoYW5nZXMoJ2RhdGFCaW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBIQSAxMS1KQU4tMjQgaGFuZGxlUXVlcyB0byBsb2FkIHF1ZXN0aW9uXHJcbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXHJcbiAgaGFuZGxlUXVlcyhxdWVzOiBhbnkpe1xyXG4gICAgLy8gSEEgMTktSkFOLTI0IElmIGNvbmRpdGlvbiBpcyBmb3IgYmluZC1pbiwgY29ycmVjdGlvblxyXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRpbmcgY29uZGl0aW9uIHRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvclxyXG4gICAgaWYodGhpcy5kYXRhQmluZCAmJiBPYmplY3Qua2V5cyh0aGlzLmRhdGFCaW5kKS5sZW5ndGggPiAwKXtcclxuICAgICAgZm9yKGxldCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YUJpbmQpKXtcclxuICAgICAgICBsZXQgdmFsdWU6YW55ID0gdmFsO1xyXG4gICAgICAgIGlmKHF1ZXMucmVmZXJlbmNlRmllbGQgPT09IGtleSl7XHJcbiAgICAgICAgICBpZihxdWVzLnR5cGUgPT09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09PSAnUmFkaW8nICl7XHJcbiAgICAgICAgICAgIHRoaXMuc3FPcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYoZWxlbWVudFsncmVmZXJlbmNlRmllbGQnXSA9PT0ga2V5KXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRbJ2lucHV0J10gPSBxdWVzLmlucHV0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50WydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gSEEgMjRKQU4yNCBUbyBiaW5kLWluIERhdGUgYW5kIERhdGVUaW1lXHJcbiAgICAgICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKXtcclxuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IG5ldyBEYXRlKHZhbHVlPy50b1N0cmluZygpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEhBIDEyRkVCMjQgVG8gYmluZC1pbiBMb2NhdGlvbiBUeXBlXHJcbiAgICAgICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJyl7XHJcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVbJ2FkZHJlc3MnXSA/IHZhbHVlWydhZGRyZXNzJ10gOiB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXMgZm9yIGRhdGEgYmluZEluXHJcbiAgICAgICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0NhbGVuZGFyJyl7XHJcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gSlNPTi5wYXJzZShxdWVzWydmaWVsZHNNZXRhJ10pO1xyXG4gICAgICAgICAgICBpZihlbnRyaWVzKXtcclxuICAgICAgICAgICAgICBsZXQgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgICAgICAgaWYoZW50cmllcy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQucXVlc3Rpb25SZWZlcmVuY2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgIGxldCBxUmVmZXJlbmNlID0gSlNPTi5wYXJzZShlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VRdWVzdGlvbnMucHVzaChxUmVmZXJlbmNlPy5xdWVzdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYocmVmZXJlbmNlUXVlc3Rpb25zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgdmFsdWU/LmZvckVhY2goY2FsZW5kYXJBcnJheSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY2FsZW5kYXJBcnJheS5kYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxlbmRhckFycmF5LmVudHJpZXMuZm9yRWFjaChpbnB1dEVudHJ5PT57XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbnB1dEVudHJ5KSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVF1ZXN0aW9ucy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmaWVsZC5yZWZlcmVuY2VGaWVsZCA9PSBrKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmllbGQudHlwZSA9PT0gJ0RhdGUnIHx8IGZpZWxkLnR5cGUgPT0gJ0RhdGVUaW1lJyB8fCBmaWVsZC50eXBlID09ICdUaW1lJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IG5ldyBEYXRlKHY/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWlmKGZpZWxkLnR5cGUgPT09ICdEcm9wZG93bicgfHwgZmllbGQudHlwZSA9PT0gJ1JhZGlvJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNlbGVjdGVkVmFsdWUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnQoZGF0ZSxyZWZlcmVuY2VRdWVzdGlvbnMpOy8vU0tTIDI3U0VQMjQgZWFjaCBldmVudCBhZGRlZCB0byBhbGxFdmVudHMgYXJyYXlcclxuICAgICAgICAgICAgICAgICAgICB9KSAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5hZGRFdmVudChkYXRlLHJlZmVyZW5jZVF1ZXN0aW9ucyk7IC8vdGhpcyBpcyBvbmx5IGxhc3QgZXZlbnQgYWRkZWQgdG8gYWxsRXZlbnRzIGFycmF5XHJcbiAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLmFsbEV2ZW50cy5sZW5ndGggPiAwID8gdGhpcy5hbGxFdmVudHMgOiAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcclxuICAgICAgICAgIGVsc2UgaWYocXVlcy50eXBlID09PSAnRmlsZScpe1xyXG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gW107XHJcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuYW5zd2VyTGlzdC5wdXNoKHF1ZXMpOyAvLyBIQSAxMkZFQjI0IFRvIGdpdmUgdGhlIHZhbHVlIGZvciBkYXRhXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlZmVyZW5jZSBmaWVsZCBub3QgZm91bmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHt9O1xyXG4gICAgICBxdWVzdGlvblsnaWQnXSA9IHF1ZXMuaWQ7XHJcbiAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dDtcclxuICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLW91dCBMb2NhdGlvbiBUeXBlXHJcbiAgICAgIGlmKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJyl7XHJcbiAgICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0ID8gcXVlcy5pbnB1dCA6IHF1ZXMuc2VsZWN0ZWRWYWx1ZTtcclxuICAgICAgfWVsc2UgaWYocXVlcy50eXBlID09ICdGaWxlJyl7XHJcbiAgICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcclxuICAgICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPyBxdWVzLmlucHV0IDogW107XHJcbiAgICAgIH1cclxuICAgICAgcXVlc3Rpb25bJ3R5cGUnXSA9IHF1ZXMudHlwZTtcclxuICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uTnVtYmVyJ10gPSBxdWVzLnF1ZXN0aW9uTnVtYmVyO1xyXG4gICAgICBxdWVzdGlvblsncmVmZXJlbmNlRmllbGQnXSA9IHF1ZXM/LnJlZmVyZW5jZUZpZWxkO1xyXG4gICAgICB0aGlzLmFuc3dlckxpc3QucHVzaChxdWVzdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzIGZvciBkYXRhIGJpbmRJblxyXG4gIGFkZEV2ZW50KGRheTogYW55LCBlbnRyeVF1ZXMpIHtcclxuICAgIC8vIFRyYW5zZm9ybSBuZXcgZW50cmllcyBpbnRvIHRoZSBkZXNpcmVkIGZvcm1hdFxyXG4gICAgY29uc3QgbmV3RW50cmllcyA9IGVudHJ5UXVlcy5yZWR1Y2UoKGFjYywgcSkgPT4ge1xyXG4gICAgICAgIGFjY1txLmlkXSA9IHsgLi4ucSB9O1xyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCB7fSk7XHJcblxyXG4gICAgLy8gRmluZCBpZiBhbiBldmVudCBhbHJlYWR5IGV4aXN0cyBmb3IgdGhlIGdpdmVuIGRhdGVcclxuICAgIGNvbnN0IGV4aXN0aW5nRXZlbnQgPSB0aGlzLmFsbEV2ZW50cy5maW5kKGV2ZW50ID0+IGV2ZW50LmRhdGUudG9EYXRlU3RyaW5nKCkgPT09IGRheS50b0RhdGVTdHJpbmcoKSk7XHJcblxyXG4gICAgaWYgKGV4aXN0aW5nRXZlbnQpIHtcclxuICAgICAgICAvLyBJZiB0aGUgZXZlbnQgZXhpc3RzLCBwdXNoIHRoZSBuZXcgZW50cmllcyB0byB0aGUgZXhpc3RpbmcgZW50cmllc1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRW50cmllcyA9IGV4aXN0aW5nRXZlbnQuZW50cmllcy5tYXAoZW50cnkgPT4gKHsgLi4uZW50cnkgfSkpO1xyXG4gICAgICAgIGV4aXN0aW5nRW50cmllcy5wdXNoKG5ld0VudHJpZXMpO1xyXG4gICAgICAgIGV4aXN0aW5nRXZlbnQuZW50cmllcyA9IGV4aXN0aW5nRW50cmllcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGV2ZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBnaXZlbiBkYXRlXHJcbiAgICAgICAgY29uc3QgbmV3RXZlbnQgPSB7XHJcbiAgICAgICAgICAgIGlkOiAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSksXHJcbiAgICAgICAgICAgIGRhdGU6IGRheSxcclxuICAgICAgICAgICAgZW50cmllczogW25ld0VudHJpZXNdIC8vIFdyYXAgdGhlIG5ldyBlbnRyaWVzIGluIGFuIGFycmF5XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmFsbEV2ZW50cy5wdXNoKG5ld0V2ZW50KTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbiAgcmVhZFF1ZXN0aW9ucyhxYklkOiBzdHJpbmcpIHtcclxuICAgIGxldCBxdWVzdGlvbnMgPSBbXTtcclxuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXJuYXJ5IHRvIGF2b2lkIHVuZGVmaW5lZFxyXG4gICAgZm9yKHZhciBzcSBpbiB0aGlzLmJvb2tRdWVzdGlvbnNNYXA/LmdldChxYklkKT8uc3ViUXVlc3Rpb25zKSB7XHJcbiAgICAgIGxldCBxOiBRdWVzdGlvbiA9IHRoaXMuYm9va1F1ZXN0aW9uc01hcD8uZ2V0KHFiSWQpLnN1YlF1ZXN0aW9uc1tzcV07XHJcbiAgICAgIC8vIEhBIDA5RkVCMjQgaWYgcXVlc3Rpb24gaXMgdGhlcmUgcHJvY2Vzc1xyXG4gICAgICBpZihxKXtcclxuICAgICAgICBpZigocS50eXBlID09ICdEcm9wZG93bicgfHwgcS50eXBlID09ICdSYWRpbycpICYmIHRoaXMuc3FPcHRpb25zLmdldChxLmlkKSkge1xyXG4gICAgICAgICAgcXVlc3Rpb25zLnB1c2godGhpcy5zcU9wdGlvbnMuZ2V0KHEuaWQpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcXVlc3Rpb25zLnB1c2gocSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVkQgMTJKdW4yNCBmaWVsZCBwZXJtaXNpc2lvbiBjaGFuZ2VzXHJcbiAgICBpZiAodGhpcy5maWVsZFJlc3RyaWN0aW9ucykge1xyXG4gICAgICBjb25zdCBmaWVsZFJlc3RyaWN0aW9ucyA9IG5ldyBNYXAoT2JqZWN0LmVudHJpZXModGhpcy5maWVsZFJlc3RyaWN0aW9ucy5maWVsZHMpKTtcclxuICAgICAgcXVlc3Rpb25zLmZvckVhY2gocXVlcyA9PiB7XHJcbiAgICAgICAgICBjb25zdCByZXN0cmljdGlvbiA9IGZpZWxkUmVzdHJpY3Rpb25zLmdldChxdWVzLnVuaXF1ZUlkZW50aWZpZXIpO1xyXG4gIFxyXG4gICAgICAgICAgaWYgKHJlc3RyaWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcXVlcy5pc1JlYWRPbmx5ID0gcmVzdHJpY3Rpb24gPT09ICdyZWFkT25seSc7XHJcbiAgICAgICAgICAgICAgcXVlcy5pc0hpZGRlbiA9IHJlc3RyaWN0aW9uID09PSAnaGlkZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAgIHJldHVybiBxdWVzdGlvbnM7XHJcbiAgfVxyXG4gLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICByZWFkVHJhbnNRdWVzdGlvbnMocWJJZDogc3RyaW5nKXtcclxuICAgIGxldCByZWNvcmQgPSBbXTtcclxuICAgICAgbGV0IHRyYW5zbGF0ZVJlY29yZCA9IHRoaXMudHJhbnNsYXRlTWFwLmdldChxYklkKTtcclxuICAgICBpZih0cmFuc2xhdGVSZWNvcmQgJiYgdHJhbnNsYXRlUmVjb3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgdHJhbnNsYXRlUmVjb3JkLmZvckVhY2gobGFuUmVjID0+IHtcclxuICAgICAgICBpZihsYW5SZWMubGFuZ3VhZ2VDb2RlID09IHRoaXMubGFuZ3VhZ2VDb2RlKXtcclxuICAgICAgICAgICByZWNvcmQgPSBsYW5SZWMuZmllbGRzXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICB9XHJcbiAgICAgIHJldHVybiByZWNvcmQ7XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0KHZhbHVlKSB7XHJcbiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XHJcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXHJcbiAgICAgIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnRcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldERyb3BEb3duKGV2ZW50OmFueSl7XHJcbiAgICB0aGlzLmhhZGxlRHJvcERvd25EZXBlbmRlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG4gLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXHJcbiAgZ2V0Q2FsZW5kYXJEYXRlKGV2ZW50OmFueSl7XHJcbiAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRGF0ZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcbiAgZ2V0Q2FsZW5kYXJFdmVudChldmVudDphbnkpe1xyXG4gICAgZXZlbnRbXCJueHRJZFwiXT0gT2JqZWN0LmtleXModGhpcy5ib29rbGV0SlNPTj8uYm9va1F1ZXN0aW9uc01hcClbMF07XHJcbiAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZ3gtc3Bpbm5lciBzaXplPVwibWVkaXVtXCIgW25hbWVdPVwic3Bpbm5lck5hbWVcIiBbdHlwZV09XCJzcGlubmVyVHlwZVwiPjwvbmd4LXNwaW5uZXI+XHJcbjwhLS0gQm9va2xldCBIYW5kbGluZy0tPlxyXG48IS0tIEhBIDE5REVDMjMgRm9yIERpcmVjdGlvbiAtLT5cclxuPGRpdiAqbmdGb3I9XCJsZXQgcWIgb2YgYm9va2xldFwiIFtuZ0NsYXNzXT1cImxhbmdEaXJlY3Rpb25cIj5cclxuICAgIDwhLS0gTVIgQ29tbWVudGVkIGJlbG93IGNvZGUgdG8gZW5zdXJlIHNpbmdsZSBKU09OIGZvciBVTkNPTkRJVElPTkFMIEJvb2tsZXRzIC0tPlxyXG4gICAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPlxyXG4gICAgPCEtLSA8bGliLXF1ZXN0aW9ubmFpcmUgW3NlcnZdPVwic2VydlwiIFtxYklkXT1cInFiLmlkXCIgW3Rrbl09XCJ0a25cIj48L2xpYi1xdWVzdGlvbm5haXJlPiAtLT5cclxuICAgIDwhLS0gSEEgMjhERUMyMyBCZWxvdyBJZiBsb2dpYyBpcyB0byBsb2FkIGZyb20gYm9va2xldCAgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwicWIuc3ViUXVlc3Rpb25zOyBlbHNlIGVsc2VCbG9ja1wiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHF1ZXMgb2YgcWIuc3ViUXVlc3Rpb25zXCIgY2xhc3M9XCJxdWVzdGlvbmRpdjFcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMTdKQU4yNCAtIElzIHRpdGxlIGlzIGVuYWJsZWQgc28gdGhhdCBiYXNlZCBvbiB0aGUgYm9vbGVhbiBkaXYgd2lsbCBiZSB2aXNpYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuaXNUaXRsZVwiIFtjbGFzc109XCJxYi5pc1NoZW5nZWwgPyAnaGVhZGVyLXN0eWxlJyA6ICdxdWVzdGlvbi1mLXNpemUgYWRkaXRpb25hbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFZEIDA4Tk9WMjMgLSBzaG93aW5nIGxhYmxlIHdoZW4gaXRzIGF2YWlsYWJsZS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXM/LnF1ZXN0aW9uVGV4dClcIiAqbmdJZj1cInF1ZXM/LnF1ZXN0aW9uVGV4dFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcXVlcz8ucXVlc3Rpb25UZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gPCEtLSBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dCAtLT4gPCEtLVZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzLS0+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiXCIgW3Rva2VuXT1cInRva2VuXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgW3F1ZXN0aW9uSXRlbV09XCJxdWVzXCJcclxuICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVkUXVlc3Rpb25zXT1cInJlYWRUcmFuc1F1ZXN0aW9ucyhxYi5pZClcIlxyXG4gICAgICAgICAgICAgICAgW3F1ZXN0aW9uc109XCJyZWFkUXVlc3Rpb25zKHFiLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoaGFuZGxlQ2FsZW5kYXJEYXRlKT1cImdldENhbGVuZGFyRGF0ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChoYW5kbGVDYWxlbmRhckV2ZW50KT1cImdldENhbGVuZGFyRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9saWItcXVlc3Rpb25ib29rPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBIQSAyOERFQzIzIEJlbG93IGVsc2UgbG9naWMgaXMgdG8gbG9hZCBmcm9tIGJvb2tzIG9yIHF1ZXN0aW9ucyAtLT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbmRpdjFcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcWIuaXNUaXRsZVwiIFtjbGFzc109XCJxYi5pc1NoZW5nZWwgPyAnaGVhZGVyLXN0eWxlJyA6ICdxdWVzdGlvbi1mLXNpemUgYWRkaXRpb25hbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFZEIDA4Tk9WMjMgLSBzaG93aW5nIGxhYmxlIHdoZW4gaXRzIGF2YWlsYWJsZS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJnZXRUZXh0KHFiPy5xdWVzdGlvblRleHQpXCIgKm5nSWY9XCJxYj8ucXVlc3Rpb25UZXh0XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBxYj8ucXVlc3Rpb25UZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHFiPy50aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IDwhLS0gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXQgLS0+IDwhLS0gIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzLS0+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiXCIgW3Rva2VuXT1cInRva2VuXCIgW2xhYmVsVmFsdWVdPVwibGFiZWxWYWx1ZVwiIFtxdWVzdGlvbkl0ZW1dPVwicWJcIiBbdHJhbnNsYXRlZFF1ZXN0aW9uc109XCJyZWFkVHJhbnNRdWVzdGlvbnMocWIuaWQpXCIgW3F1ZXN0aW9uc109XCJyZWFkUXVlc3Rpb25zKHFiLmlkKVwiICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPlxyXG48IS0tIEdyb3VwIEFjdGlvbnMgLS0+XHJcbjwhLS0gSEEgMTlERUMyMyBGb3IgRGlyZWN0aW9uIC0tPlxyXG48ZGl2IGNsYXNzPVwiYWxpZ24tc3VibWl0LXJvd1wiICpuZ0lmPVwiYWJJdGVtPy5zdGF0dXMgIT0gJ0NvbXBsZXRlZCdcIiBbbmdDbGFzc109XCJsYW5nRGlyZWN0aW9uXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgPCEtLSAvLyBIQSAyMkpBTjI0IENvbW1vbmlzZSB0aGUgYnV0dG9uIHN0eWxlIGluIGZ1c2lvbiAtLT5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVCb29rbGV0QWN0aW9uQ2xpY2soYWN0aW9uKVwiIG5nQ2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZmMtYnV0dG9uIG54dEJ1dHRvblwiPlxyXG4gICAgICAgICAgICB7eyBhY3Rpb24ubmFtZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
541
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2xldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYm9va2xldC9ib29rbGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9ib29rbGV0L2Jvb2tsZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksR0FJYixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBa0J2QixNQUFNLE9BQU8sZ0JBQWdCO0lBbUNqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFFRDtJQXpDQSxTQUFTLENBQVM7SUFDbEIsSUFBSSxDQUFTO0lBQ2IsR0FBRyxDQUFTO0lBQ1osV0FBVyxDQUFNO0lBQ2pCLHFCQUFxQixDQUFLO0lBQzFCLFVBQVUsQ0FBUTtJQUNsQixLQUFLLENBQVE7SUFDYixZQUFZLENBQVEsQ0FBRSxtQ0FBbUM7SUFDekQsaUJBQWlCLENBQU0sQ0FBQyx1Q0FBdUM7SUFDOUQsd0JBQXdCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakUsVUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ25ELHNCQUFzQixHQUFxQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3pFLDhCQUE4QjtJQUNuQixrQkFBa0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMzRCxtQkFBbUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUvRCxVQUFVLENBQWlCO0lBRTNCLE9BQU8sR0FBVSxFQUFFLENBQUM7SUFDcEIsTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUNqQixPQUFPLEdBQWlCLEVBQUUsQ0FBQztJQUMzQixnQkFBZ0IsR0FBUSxJQUFJLEdBQUcsRUFB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LEtBQVM7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBUztRQUN4QixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO3dHQXZnQlUsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsNmpCQzdCN0IsaTZHQTBEQTs7NEZEN0JhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhO29SQUtkLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFnQkUsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBPbkNoYW5nZXMsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgRWxlbWVudFJlZixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBBY3Rpb25NZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY3Rpb25NZXRhJztcclxuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vLi4vd3JhcHBlclwiO1xyXG5pbXBvcnQgeyBCb29rbGV0V3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9ib29rbGV0V3JhcHBlclwiO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2VcIjtcclxuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXHJcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2kxOG4uc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYm9va2xldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2tsZXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Jvb2tsZXQuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCb29rbGV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBib29rbGV0SWQ6IHN0cmluZztcclxuICBASW5wdXQoKSBzZXJ2OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdGtuOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYm9va2xldEpTT046IGFueTtcclxuICBASW5wdXQoKSBkcm9wZG93bkRlcGVuZGVudERhdGE6YW55O1xyXG4gIEBJbnB1dCgpIGxhYmVsVmFsdWU6c3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRva2VuOnN0cmluZztcclxuICBASW5wdXQoKSBsYW5ndWFnZUNvZGU6c3RyaW5nOyAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICBASW5wdXQoKSBmaWVsZFJlc3RyaWN0aW9uczogYW55OyAvLyBWRCAxMkp1bjI0IC0gZmllbGQgcGVybWlzc2lvbiBjaGFuZ2VcclxuICBAT3V0cHV0KCkgaGFuZGxlQm9va2xldEFjdGlvbkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaGFuZGxlUGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGhhZGxlRHJvcERvd25EZXBlbmRlbnQ6RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcclxuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJEYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBueHRCb29rbGV0OiBCb29rbGV0V3JhcHBlcjtcclxuXHJcbiAgcHVibGljIGJvb2tsZXQ6IGFueVtdID0gW107XHJcbiAgcHVibGljIGFiSXRlbTogYW55ID0ge307XHJcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbk1ldGFbXSA9IFtdO1xyXG4gIHB1YmxpYyBib29rUXVlc3Rpb25zTWFwOiBhbnkgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIHRyYW5zbGF0ZU1hcDogYW55ID0gbmV3IE1hcCgpOyAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICBwcml2YXRlIHNxT3B0aW9uczogYW55ID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBpc0Fuc3dlckZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3Bpbm5lck5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgc3Bpbm5lclR5cGU6IHN0cmluZztcclxuICAvLyBIQSAxOURFQzIzIGxhbmdEaXJlY3Rpb24gdmFyaWFibGUgaXMgY3JlYXRlZCB0byBhc3NpZ24gdGhlIGRpcmVjdGlvbiBhcyBjbGFzc1xyXG4gIGxhbmdEaXJlY3Rpb24gPSAnbHRyJzsgLy8gSEEgMjhERUMyMyBtYWtpbmcgbHRyIGFzIGRlZmF1bHQgZGlyZWN0aW9uXHJcbiAgYW5zd2VyTGlzdCA9IFtdOyAvLyBIQSAxMS1KQU4tMjQgQW5zd2VybGlzdCB0byBzdG9yZSB0aGUgbWluaW1hbCB2YWx1ZVxyXG4gIEBJbnB1dCgpIGRhdGFCaW5kOmFueTsvLyBIQSAxOC1KQU4tMjQgVG8gaW5zZXJ0IHRoZSBlbmRwb2ludCB2YWx1ZSB0byB0aGUgcXVlc3Rpb25cclxuICBhbGxFdmVudHM6YW55W109W107ICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcclxuICBcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxyXG4gICAgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlXHJcbiAgKSB7IFxyXG4gICAgdGhpcy5zcGlubmVyTmFtZSA9IFwic3AxXCI7XHJcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlXCI7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuLy8gIFZEIDEySmFuMjQgZmllbGRSZXN0cmljdGlvbnMgZm9ybWF0ZSBcclxuICAvLyAgIHtcclxuICAvLyAgICAgXCJmaWVsZHNcIiA6IHtcclxuICAvLyAgICAgICAgIFwidHJhbnNRYi0wMVwiIDogXCJyZWFkT25seVwiLFxyXG4gIC8vICAgICAgICAgXCJUcmFuc0ZpcjAyXCIgOiBcIlwiLFxyXG4gIC8vICAgICAgICAgXCJUcmFuc0xhc3QwM1wiIDogXCJyZWFkT25seVwiLFxyXG4gIC8vICAgICAgICAgXCJiazItcTJcIiA6IFwiaGlkZVwiXHJcbiAgLy8gICAgIH1cclxuICAvLyAgfVxyXG5cclxuICAgIC8vIEhBIDE4LUpBTi0yNCBEdW1teSBTdGF0aWMgZGF0YSBmb3IgdGVzdGluZ1xyXG4gICAgLy8gdGhpcy5kYXRhQmluZCA9IHtcclxuICAgIC8vICAgXCJfaWRcIjogXCI2NTllZDAwMmVkNTFiYjgwNjE1NDQyNTVcIixcclxuICAgIC8vICAgXCJjb21wYW55SWRcIjogXCI1dWxsaDFCV3BZcW52ektoOUxcIixcclxuICAgIC8vICAgXCJuYW1lXCI6IFwiQWwgWWFzbWluZVwiLFxyXG4gICAgLy8gICBcImNvZGVcIjogXCJjaGVja1wiLFxyXG4gICAgLy8gICBcInN0YXR1c1wiOiBcIkluLVByb2dyZXNzXCIsXHJcbiAgICAvLyAgIFwiY3JlYXRlZEF0XCI6IFwiMjAyNC0wMS0xMFQxNzoxMjozNC42ODZaXCIsXHJcbiAgICAvLyAgIFwidXBkYXRlZEF0XCI6IFwiMjAyNC0wMS0xMFQxOTo1MzowOC4xMzVaXCIsXHJcbiAgICAvLyAgIFwiX192XCI6IDAsXHJcbiAgICAvLyAgIFwib3duZXJcIjogXCJjaGVja1wiLFxyXG4gICAgLy8gICBcImN1c3RvbWVyXCI6IFwiY2hlY2tcIixcclxuICAgIC8vICAgXCJkYXRpXCI6IFwiMjAyNC0wMS0yM1QxODozMDowMC4wMDBaXCIsXHJcbiAgICAvLyAgIFwidGltaVwiOiBcIjIwMjQtMDEtMjNUMTg6MzA6MDAuMDAwWlwiLFxyXG4gICAgLy8gXCJmTmFtZVwiOiBcIkhhaWRlclwiLFxyXG4gICAgLy8gXCJsTmFtZVwiOiBcIkFsaVwiLFxyXG4gICAgLy8gXCJkZWZhdWx0QXBwXCI6IFwiTlhUXCIsXHJcbiAgICAvLyBcImVtYWlsXCI6IFwiaGFpZGVyQGdtYWlsLmNvbVwiLFxyXG4gICAgLy8gXCJsb2NhdGlvblwiOiB7YWRkcmVzczogXCIxMDcsIEFzaG9rIE5hZ2FyLCBLYWR1Z29uZGFuYWhhbGxpLCBCZW5nYWx1cnUsIEthcm5hdGFrYSA1NjAwNDUsIEluZGlhXCIsXHJcbiAgICAvLyAgIGxhdGl0dWRlOiAxMy4wMjAwNTc1LFxyXG4gICAgLy8gICBsb25naXR1ZGU6IDc3LjYxMjk4MTZ9LFxyXG4gICAgLy8gXCJsb2NhdGlvblwiOiBcIjEwNywgQXNob2sgTmFnYXIsIEthZHVnb25kYW5haGFsbGksIEJlbmdhbHVydSwgS2FybmF0YWthIDU2MDA0NSwgSW5kaWFcIixcclxuICAgIC8vIFwidGV4dEFyZWFcIjogXCJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW1cIixcclxuICAgIC8vIH07XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzQm9va2xldCgpO1xyXG4gIH1cclxuIC8vIFZEIE5PVjIzIC0gdXBkYXRlIHRoZSBqc29uIGRhdGEgd2hlbiBib29rbGV0SWQgYW5kIGJvb2tsZXRKU09OIGNoYW5nZXNcclxuICBuZ09uQ2hhbmdlcyhzaW1wbGVjaGFuZ2VzOlNpbXBsZUNoYW5nZXMpIHtcclxuICAgLy8gSEEgMjNKQU4yNCBUbyBhdm9pZCB1bmRlZmluZWQgZXJyb3JcclxuICAgaWYoc2ltcGxlY2hhbmdlc1snYm9va2xldElkJ10gfHwgKHNpbXBsZWNoYW5nZXNbJ2Jvb2tsZXRKU09OJ10gJiYgKHNpbXBsZWNoYW5nZXNbJ2Jvb2tsZXRKU09OJ10uY3VycmVudFZhbHVlICE9IG51bGwgfHwgc2ltcGxlY2hhbmdlc1snYm9va2xldEpTT04nXS5jdXJyZW50VmFsdWUgIT0gdW5kZWZpbmVkKSkgfHwgKHNpbXBsZWNoYW5nZXNbJ2RhdGFCaW5kJ10gJiYgKHNpbXBsZWNoYW5nZXNbJ2RhdGFCaW5kJ10uY3VycmVudFZhbHVlICE9IG51bGwgfHwgc2ltcGxlY2hhbmdlc1snZGF0YUJpbmQnXS5jdXJyZW50VmFsdWUgIT0gdW5kZWZpbmVkKSkgKXtcclxuICAgICAgdGhpcy5hbGxFdmVudHMgPSBbXTtcclxuICAgICAgdGhpcy5wcm9jZXNzQm9va2xldCgpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYodGhpcy5ib29rbGV0ID09IHVuZGVmaW5lZCB8fCB0aGlzLmJvb2tsZXQubGVuZ3RoID09IDApIHtcclxuICAgIC8vICAgdGhpcy5wcm9jZXNzQm9va2xldCgpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0Jvb2tsZXQoKSB7XHJcbiAgICBpZiAodGhpcy5ib29rbGV0SWQpIHtcclxuICAgICAgaWYgKHRoaXMuYm9va2xldElkLmxlbmd0aCA9PSAxOCkge1xyXG4gICAgICAgIHRoaXMucmVhZEJvb2tsZXQodGhpcy5ib29rbGV0SWQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYodGhpcy5ib29rbGV0SlNPTikge1xyXG4gICAgICAvLyBUcnkgdG8gcGFzcyBhIHZhbHVlIGZyb20gQmFja2VuZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBRdWVzdGlvbkJvb2sgUmVhZCBhbmQgQW5zd2VyQm9vayBSZWFkXHJcbiAgICAgIHRoaXMuaXNBbnN3ZXJGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmKHRoaXMuYm9va2xldEpTT04gIT0gbnVsbCB8fCB0aGlzLmJvb2tsZXRKU09OICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgLy8gU3RvcmluZyB0aGUgQVBJIHJlc3BvbnNlIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNhdmUodGhpcy5ib29rbGV0SlNPTik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYm9va2xldCA9IHRoaXMuYm9va2xldEpTT04ucmVjb3JkcztcclxuICAgICAgdGhpcy5hYkl0ZW0gPSB0aGlzLmJvb2tsZXRKU09OLmFuc3dlcmJvb2s7XHJcblxyXG4gICAgICAvLyBQcm9jZXNzIHRoZSBTdWIgUXVlc3Rpb24gT3B0aW9ucyAtIFRoaXMgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIGJvb2tRdWVzdGlvbnNNYXAgaW4gZnV0dXJlXHJcbiAgICAgIGZvciAodmFyIHNxIGluIHRoaXMuYm9va2xldEpTT04uc3FPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5zcU9wdGlvbnMuc2V0KHNxLCB0aGlzLmJvb2tsZXRKU09OLnNxT3B0aW9uc1tzcV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcm9jZXNzIHRoZSBRdWVzdGlvbnNcclxuICAgICAgLy8gSEEgMjhERUMyMyB0aGlzIGFwcGxpZXMgZm9yIGJvb2tsZXRcclxuICAgICAgLy8gSEEgMTdKQU4yNCBBZGRlZCB0ZXJuYXJ5IG9wZXJhdG9yIHRvIGF2b2lkIHVuZGVmaW5lZCBzY2VuYXJpb1xyXG4gICAgICAvLyBIQSAwOUZFQjI0IEFkZGluZyBjb25kaXRpb24gdG8gYXZvaWQgdW5kZWZpbmVkIGVycm9yXHJcbiAgICAgIGlmKHRoaXMuYm9va2xldEpTT04/LmJvb2tRdWVzdGlvbnNNYXAgJiYgT2JqZWN0LmtleXModGhpcy5ib29rbGV0SlNPTj8uYm9va1F1ZXN0aW9uc01hcCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgZm9yICh2YXIgdmFsdWUgaW4gdGhpcy5ib29rbGV0SlNPTi5ib29rUXVlc3Rpb25zTWFwKSB7XHJcbiAgICAgICAgICB0aGlzLmJvb2tRdWVzdGlvbnNNYXAuc2V0KHZhbHVlLCB0aGlzLmJvb2tsZXRKU09OLmJvb2tRdWVzdGlvbnNNYXBbdmFsdWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gSEEgMjhERUMyMyB0aGlzIGFwcGxpZXMgZm9yIGJvb2sgb3IgcXVlc3Rpb25zXHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gJyc7XHJcbiAgICAgICAgLy8gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5XHJcbiAgICAgICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcclxuICAgICAgICB2YWx1ZSA9IHRoaXMuYm9va2xldEpTT04ucmVjb3Jkc1swXT8uaWQ7XHJcbiAgICAgICAgdGhpcy5ib29rUXVlc3Rpb25zTWFwLnNldCh2YWx1ZSwgdGhpcy5ib29rbGV0SlNPTi5xdWVzdGlvbmJvb2spO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAgLy8gVkQgMjBKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICAgICAgIGZvciAodmFyIHZhbHVlIGluIHRoaXMuYm9va2xldEpTT04/LnRyYW5zbGF0aW9uTWFwKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVNYXAuc2V0KHZhbHVlLCB0aGlzLmJvb2tsZXRKU09OLnRyYW5zbGF0aW9uTWFwW3ZhbHVlXSk7XHJcbiAgICAgIH1cclxuICAgICAvLyBWRCAzMU5PVjI0IHdyYXBwZXIgY2hhbmdlc1xyXG4gICAgICBpZih0aGlzLmJvb2tsZXRKU09OLnF1ZXN0aW9uYm9vaz8uYWN0aW9uICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IEpTT04ucGFyc2UodGhpcy5ib29rbGV0SlNPTi5xdWVzdGlvbmJvb2suYWN0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gSEEgMTlERUMyMyBsYW5nRGlyZWN0aW9uIHZhcmlhYmxlIHZhbHVlIGFzc2lnbmluZ1xyXG4gICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcclxuICAgIGlmKHRoaXMuYm9va2xldEpTT04/LnF1ZXN0aW9uYm9vaz8uc3R5bGUpe1xyXG4gICAgICB2YXIgc3R5bGUgPSBKU09OLnBhcnNlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ib29rbGV0SlNPTj8ucXVlc3Rpb25ib29rPy5zdHlsZSkpKTtcclxuICAgICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gc3R5bGU/LmRpcmVjdGlvbjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5ib29rbGV0SlNPTj8ucmVjb3Jkc1swXT8uc3R5bGUpe1xyXG4gICAgLy8gZWxzZSBpZih0aGlzLmJvb2tsZXRKU09OPy5yZWNvcmRzWzBdPy5zdHlsZSl7XHJcblxyXG4gICAgICB2YXIgc3R5bGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYm9va2xldEpTT04/LnJlY29yZHNbMF0/LnN0eWxlKSk7XHJcbiAgICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHN0eWxlPy5kaXJlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSEEgMTgtSkFOLTI0IFRoZSBjb25kaXRpb24gaXMgdXNlZCBmb3IgQmluZC1JbiBMb2dpYyBcclxuICAgIHRoaXMuaGFuZGxlQ29tcGxldGVCb29rbGV0KHRoaXMuYm9va2xldEpTT04pOyBcclxuICB9XHJcbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xyXG4gIHByaXZhdGUgcmVhZEJvb2tsZXQgPSAodXVpZDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXHJcbiAgICAgICAgdGhpcy50a24sXHJcbiAgICAgICAgW1wiQm9va2xldFwiLCBcInJlYWRcIiwgdXVpZCx0aGlzLmxhbmd1YWdlQ29kZV0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2tsZXQsXHJcbiAgICAgICAgdGhpcy5mYWlsdXJlUmVhZEJvb2tsZXRcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcclxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcclxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcclxuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcclxuICAgICAgbGV0IHBhcmEgPSB7XHJcbiAgICAgICAgZGF0YVR5cGU6IFwiQm9va2xldFwiLFxyXG4gICAgICAgIG9wZXJhdGlvbjogXCJyZWFkXCIsXHJcbiAgICAgICAgcGFyYW0xOiB1dWlkLFxyXG4gICAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZSA6IHRoaXMubGFuZ3VhZ2VDb2RlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxyXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxyXG4gICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhKV0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2tsZXQsXHJcbiAgICAgICAgdGhpcy5mYWlsdXJlUmVhZEJvb2tsZXRcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3VjY2Vzc1JlYWRCb29rbGV0ID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZEJvb2tsZXQnKTtcclxuICAgIGlmKHJlc3BvbnNlICE9IG51bGwgfHwgcmVzcG9uc2UgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIFN0b3JpbmcgdGhlIEFQSSByZXNwb25zZSBmb3IgZnV0dXJlIHVzZVxyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNhdmUocmVzcG9uc2UpO1xyXG5cclxuICAgICAgLy8gVHJ5IHRvIHBhc3MgYSB2YWx1ZSBmcm9tIEJhY2tlbmQgdG8gZGlmZmVyZW50aWF0ZSB0aGUgUXVlc3Rpb25Cb29rIFJlYWQgYW5kIEFuc3dlckJvb2sgUmVhZFxyXG4gICAgICAvLyB0aGlzLmlzQW5zd2VyRmxhZyA9IHRydWU7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmJvb2tsZXQgPSByZXNwb25zZS5yZWNvcmRzO1xyXG4gICAgICB0aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XHJcbiAgICAgIFxyXG4gICAgICAvLyBQcm9jZXNzIHRoZSBTdWIgUXVlc3Rpb24gT3B0aW9ucyAtIFRoaXMgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIGJvb2tRdWVzdGlvbnNNYXAgaW4gZnV0dXJlXHJcbiAgICAgIGZvciAodmFyIHNxIGluIHJlc3BvbnNlLnNxT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuc3FPcHRpb25zLnNldChzcSwgcmVzcG9uc2Uuc3FPcHRpb25zW3NxXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByb2Nlc3MgdGhlIFF1ZXN0aW9uc1xyXG4gICAgICBmb3IgKHZhciB2YWx1ZSBpbiByZXNwb25zZS5ib29rUXVlc3Rpb25zTWFwKSB7XHJcbiAgICAgICAgdGhpcy5ib29rUXVlc3Rpb25zTWFwLnNldCh2YWx1ZSwgcmVzcG9uc2UuYm9va1F1ZXN0aW9uc01hcFt2YWx1ZV0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXHJcbiAgICAgIGZvciAodmFyIHZhbHVlIGluIHJlc3BvbnNlLnRyYW5zbGF0aW9uTWFwKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVNYXAuc2V0KHZhbHVlLCByZXNwb25zZS50cmFuc2xhdGlvbk1hcFt2YWx1ZV0pO1xyXG4gICAgICB9XHJcbiAgICAgICAvLyBWRCAzMU5PVjI0IHdyYXBwZXIgY2hhbmdlc1xyXG4gICAgICBpZihyZXNwb25zZS5xdWVzdGlvbmJvb2s/LmFjdGlvbiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmFjdGlvbnMgPSBKU09OLnBhcnNlKHJlc3BvbnNlLnF1ZXN0aW9uYm9vay5hY3Rpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBIQSAxOURFQzIzIGxhbmdEaXJlY3Rpb24gdmFyaWFibGUgdmFsdWUgYXNzaWduaW5nXHJcbiAgICBpZihyZXNwb25zZT8ucXVlc3Rpb25ib29rPy5zdHlsZSl7XHJcbiAgICAgIHZhciBzdHlsZSA9IEpTT04ucGFyc2UoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXNwb25zZT8ucXVlc3Rpb25ib29rPy5zdHlsZSkpKTtcclxuICAgICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gc3R5bGU/LmRpcmVjdGlvbjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYocmVzcG9uc2U/LnJlY29yZHNbMF0/LnN0eWxlKXtcclxuICAgICAgdmFyIHN0eWxlID0gSlNPTi5wYXJzZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlPy5yZWNvcmRzWzBdPy5zdHlsZSkpKTtcclxuICAgICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gc3R5bGU/LmRpcmVjdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rbGV0ID0gKHJlc3BvbnNlKSA9PiB7XHJcblxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQm9va2xldEFjdGlvbkNsaWNrKGFjdGlvbjpBY3Rpb25NZXRhKSB7XHJcbiAgICAvLyBIQSAxOUpBTjI0IEFjdGlvbiBjaGFuZ2VzXHJcbiAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xyXG4gICAgdGhpcy5hbnN3ZXJMaXN0ID0gW107XHJcbiAgICB0aGlzLmRhdGFCaW5kID0gW107IC8vIEhBIDEyRkVCMjQgQ2xlYXJpbmcgZGF0YUJpbmQgdXBvbiBidXR0b24gYWN0aW9uIHNvIHRoYXQgZGF0YUJpbmQgdmFsdWUgd2lsbCBub3Qgb3ZlcnJpZGUgdGhlIGNoYW5nZWQgdmFsdWVcclxuICAgIGxldCBkYXRhVG9QYXJlbnQgPSB7fTtcclxuICAgIGxldCB2YWxpZEZvcm0gPSB0cnVlOyAvLyBWRCAwMUF1ZzI0IC0gdmFsaWRhdGlvbiBjaGFuZ2VcclxuICAgIC8vIEhBIDIySkFOMjQgdGhpcyBjaGFuZ2UgdG8gbWFrZSBjbG9zZSBldmVudCB3b3JrXHJcbiAgICBkYXRhVG9QYXJlbnRbJ2FjdGlvbiddID0gYWN0aW9uLmV2ZW50dG9lbWl0O1xyXG4gICAgaWYoIShhY3Rpb24uZXZlbnR0b2VtaXQgPT09ICdjbG9zZScgfHwgYWN0aW9uLmV2ZW50dG9lbWl0ID09PSAncHJpbnQnKSl7XHJcbiAgICAgIC8vIEhBIDE4LUpBTi0yNCBTZW5kaW5nIHRoZSBjb21wbGV0ZSBqc29uIGRhdGEgYWxzbyBcclxuICAgICAgZGF0YVRvUGFyZW50Wydqc29uQm9vayddID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoKTtcclxuICAgICAgLy8gSEEgMTdKQU4yNCBueHRJZCB0byBkYXRhUGFyZW50IG9iamVjdFxyXG4gICAgICBpZih0aGlzLmJvb2tsZXRKU09OKXtcclxuICAgICAgICBkYXRhVG9QYXJlbnRbJ254dElkJ10gPSBPYmplY3Qua2V5cyh0aGlzLmJvb2tsZXRKU09OPy5ib29rUXVlc3Rpb25zTWFwKVswXTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIQSAxMS1KQU4tMjQgTWluaW1pemluZyB0aGUgdmFsdWUgd2hpY2ggaGFzIHRvIGJlIHBhc3NlZCB0byB0aGUgc2VydmVyXHJcbiAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGVCb29rbGV0KGRhdGFUb1BhcmVudFsnanNvbkJvb2snXSk7XHJcbiAgICAgIGRhdGFUb1BhcmVudFsnZGF0YSddID0gdGhpcy5hbnN3ZXJMaXN0ID8gdGhpcy5hbnN3ZXJMaXN0IDogZGF0YVRvUGFyZW50WydkYXRhJ107XHJcbiAgICAgIC8vIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b24gdmFsaWRhdGluZyB0aGUgcmVxdWlyZWQgZmllbGRzXHJcbiAgICAgIGZvcihsZXQga2V5IGluIGRhdGFUb1BhcmVudFsnanNvbkJvb2snXS5ib29rUXVlc3Rpb25zTWFwKXtcclxuICAgICAgICBjb25zdCBjdXJyZW50Qm9vayAgPSBkYXRhVG9QYXJlbnRbJ2pzb25Cb29rJ10uYm9va1F1ZXN0aW9uc01hcFtrZXldO1xyXG4gICAgICAgIGN1cnJlbnRCb29rLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAvLyBWRCAwMUF1ZzI0IC0gdmFsaWRhdGlvbiBjaGFuZ2VcclxuICAgICAgICAgIGlmKGVsZW1lbnQuaXNPcHRpb25hbCAmJiBkYXRhVG9QYXJlbnRbJ2FjdGlvbiddID09ICdzdWJtaXQnICYmICghZWxlbWVudC5pbnB1dCB8fCAoQXJyYXkuaXNBcnJheShlbGVtZW50LmlucHV0KSAmJiBlbGVtZW50LmlucHV0Lmxlbmd0aCA9PT0gMCkpICYmICFlbGVtZW50LmlzSGlkZGVuICYmIGVsZW1lbnQudHlwZSAhPSAnTGFiZWwnICYmIGVsZW1lbnQudHlwZSAhPSAnSW1hZ2UnICl7IC8vU0tTNU5PVjI1IFxyXG4gICAgICAgICAgICBlbGVtZW50LmVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFsaWRGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmljZS5zdWJtaXRDaGFuZ2UoZWxlbWVudC5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBWRCAwMkF1ZzI0IC0gY2xlYXIgYWN0aW9uIGNoYW5nZXNcclxuICAgICAgICAgIGlmKGRhdGFUb1BhcmVudFsnYWN0aW9uJ10gPT0gJ2NsZWFyJyl7XHJcbiAgICAgICAgICAgIGlmKGVsZW1lbnQudHlwZSA9PSAnRHJvcGRvd24nIHx8IGVsZW1lbnQudHlwZSA9PSAnTG9jYXRpb24nIHx8IGVsZW1lbnQudHlwZSA9PSAnUmFkaW8nKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihlbGVtZW50LnR5cGUgPT0gJ0ZpbGUnKXtcclxuICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gW107XHJcbiAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFZEIDEzTUFZMjQgLSBwcmludCBRUiBidXR0b24gY2hhbmdlc1xyXG4gICAgaWYoYWN0aW9uLmV2ZW50dG9lbWl0ID09PSAncHJpbnQnKXtcclxuICAgICAgZGF0YVRvUGFyZW50WydhY3Rpb25EYXRhJ10gPSBhY3Rpb25bJ2RhdGEnXTtcclxuICAgIH1cclxuICAgIC8vIEhBIDIzSkFOMjQgVG8gY2FsbCB0aGUgYWN0aW9uIG9uIGFueSBldmVudFxyXG4gICAvLyAgVkQgMDFBdWcyNCAtIHZhbGlkYXRpb24gY2hhbmdlXHJcbiAgICBpZih2YWxpZEZvcm0pe1xyXG4gICAgICB0aGlzLmhhbmRsZUJvb2tsZXRBY3Rpb25FdmVudC5lbWl0KGRhdGFUb1BhcmVudCk7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGRhdGFUb1BhcmVudFsnYWN0aW9uJ10gPSAnZXJyb3InO1xyXG4gICAgICB0aGlzLmhhbmRsZUJvb2tsZXRBY3Rpb25FdmVudC5lbWl0KGRhdGFUb1BhcmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBIQSAxOC1KQU4tMjQgaGFuZGxlQ29tcGxldGVCb29rbGV0IGlzIHRvIHNpbXBsaWZ5IHRoZSBsb2dpY1xyXG4gIGhhbmRsZUNvbXBsZXRlQm9va2xldChjb21wbGV0ZUJvb2tsZXQpe1xyXG4gICAgaWYoT2JqZWN0LmtleXMoY29tcGxldGVCb29rbGV0Py5ib29rUXVlc3Rpb25zTWFwID8/IHt9KS5sZW5ndGggPT09IDApeyAvLyBIQSAxMS1KQU4tMjQgSWYgY29uZGl0aW9uIHRvIGxvYWQgYm9va2xldFxyXG4gICAgICB0aGlzLmhhbmRsZUJvb2soY29tcGxldGVCb29rbGV0Py5xdWVzdGlvbmJvb2s/LnN1YlF1ZXN0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBlbHNleyAvLyBIQSAxMS1KQU4tMjQgVG8gbG9hZCBib29rIHF1ZXN0aW9uc1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wbGV0ZUJvb2tsZXQuYm9va1F1ZXN0aW9uc01hcCkge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IGNvbXBsZXRlQm9va2xldC5ib29rUXVlc3Rpb25zTWFwW2tleV07XHJcbiAgICAgICAgaWYodmFsLnR5cGUgPT09ICdCb29rJyl7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUJvb2sodmFsLnN1YlF1ZXN0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVF1ZXModmFsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEhBIDExLUpBTi0yNCBoYW5kbGVCb29rIGxvYWRzIHRoZSBCb29rXHJcbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcclxuICBoYW5kbGVCb29rKHF1ZXNMaXN0OiBhbnkpe1xyXG4gICAgcXVlc0xpc3Q/LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PT0gJ0Jvb2snKXtcclxuICAgICAgICAvLyBIQSAyNEpBTjI0IEZldGNoaW5nIGZyb20gUUIgcmVmZXJlbmNlXHJcbiAgICAgICAgdmFyIGJvb2sgPSBKU09OLnBhcnNlKGVsZW1lbnQucWJSZWZlcmVuY2VRdWVzdGlvbnMpO1xyXG4gICAgICAgIGJvb2sucXVlc3Rpb25ib29rLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVRdWVzKHF1ZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVRdWVzKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIFZEIDEzU2VwMjQgLSBkYXRhYmluZCBjaGFuZ2VzXHJcbiAgICAvLyBWRCAyMyBPY3QyNCAtIGZpbGUgdHlwZSBjaGFuZ2VzXHJcbiAgICBpZih0aGlzLmRhdGFCaW5kICYmIE9iamVjdC5rZXlzKHRoaXMuZGF0YUJpbmQpLmxlbmd0aCA+IDApe1xyXG4gICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuZGF0YUNoYW5nZXMoJ2RhdGFCaW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBIQSAxMS1KQU4tMjQgaGFuZGxlUXVlcyB0byBsb2FkIHF1ZXN0aW9uXHJcbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXHJcbiAgaGFuZGxlUXVlcyhxdWVzOiBhbnkpe1xyXG4gICAgLy8gSEEgMTktSkFOLTI0IElmIGNvbmRpdGlvbiBpcyBmb3IgYmluZC1pbiwgY29ycmVjdGlvblxyXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRpbmcgY29uZGl0aW9uIHRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvclxyXG4gICAgaWYodGhpcy5kYXRhQmluZCAmJiBPYmplY3Qua2V5cyh0aGlzLmRhdGFCaW5kKS5sZW5ndGggPiAwKXtcclxuICAgICAgZm9yKGxldCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YUJpbmQpKXtcclxuICAgICAgICBsZXQgdmFsdWU6YW55ID0gdmFsO1xyXG4gICAgICAgIGlmKHF1ZXMucmVmZXJlbmNlRmllbGQgPT09IGtleSl7XHJcbiAgICAgICAgICBpZihxdWVzLnR5cGUgPT09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09PSAnUmFkaW8nICl7XHJcbiAgICAgICAgICAgIHRoaXMuc3FPcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYoZWxlbWVudFsncmVmZXJlbmNlRmllbGQnXSA9PT0ga2V5KXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRbJ2lucHV0J10gPSBxdWVzLmlucHV0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50WydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gSEEgMjRKQU4yNCBUbyBiaW5kLWluIERhdGUgYW5kIERhdGVUaW1lXHJcbiAgICAgICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKXtcclxuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IG5ldyBEYXRlKHZhbHVlPy50b1N0cmluZygpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEhBIDEyRkVCMjQgVG8gYmluZC1pbiBMb2NhdGlvbiBUeXBlXHJcbiAgICAgICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJyl7XHJcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVbJ2FkZHJlc3MnXSA/IHZhbHVlWydhZGRyZXNzJ10gOiB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXMgZm9yIGRhdGEgYmluZEluXHJcbiAgICAgICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0NhbGVuZGFyJyl7XHJcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gSlNPTi5wYXJzZShxdWVzWydmaWVsZHNNZXRhJ10pO1xyXG4gICAgICAgICAgICBpZihlbnRyaWVzKXtcclxuICAgICAgICAgICAgICBsZXQgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgICAgICAgaWYoZW50cmllcy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQucXVlc3Rpb25SZWZlcmVuY2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgIGxldCBxUmVmZXJlbmNlID0gSlNPTi5wYXJzZShlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VRdWVzdGlvbnMucHVzaChxUmVmZXJlbmNlPy5xdWVzdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYocmVmZXJlbmNlUXVlc3Rpb25zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgdmFsdWU/LmZvckVhY2goY2FsZW5kYXJBcnJheSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY2FsZW5kYXJBcnJheS5kYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxlbmRhckFycmF5LmVudHJpZXMuZm9yRWFjaChpbnB1dEVudHJ5PT57XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbnB1dEVudHJ5KSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVF1ZXN0aW9ucy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmaWVsZC5yZWZlcmVuY2VGaWVsZCA9PSBrKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmllbGQudHlwZSA9PT0gJ0RhdGUnIHx8IGZpZWxkLnR5cGUgPT0gJ0RhdGVUaW1lJyB8fCBmaWVsZC50eXBlID09ICdUaW1lJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IG5ldyBEYXRlKHY/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWlmKGZpZWxkLnR5cGUgPT09ICdEcm9wZG93bicgfHwgZmllbGQudHlwZSA9PT0gJ1JhZGlvJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNlbGVjdGVkVmFsdWUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnQoZGF0ZSxyZWZlcmVuY2VRdWVzdGlvbnMpOy8vU0tTIDI3U0VQMjQgZWFjaCBldmVudCBhZGRlZCB0byBhbGxFdmVudHMgYXJyYXlcclxuICAgICAgICAgICAgICAgICAgICB9KSAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5hZGRFdmVudChkYXRlLHJlZmVyZW5jZVF1ZXN0aW9ucyk7IC8vdGhpcyBpcyBvbmx5IGxhc3QgZXZlbnQgYWRkZWQgdG8gYWxsRXZlbnRzIGFycmF5XHJcbiAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLmFsbEV2ZW50cy5sZW5ndGggPiAwID8gdGhpcy5hbGxFdmVudHMgOiAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcclxuICAgICAgICAgIGVsc2UgaWYocXVlcy50eXBlID09PSAnRmlsZScpe1xyXG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gW107XHJcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuYW5zd2VyTGlzdC5wdXNoKHF1ZXMpOyAvLyBIQSAxMkZFQjI0IFRvIGdpdmUgdGhlIHZhbHVlIGZvciBkYXRhXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlZmVyZW5jZSBmaWVsZCBub3QgZm91bmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHt9O1xyXG4gICAgICBxdWVzdGlvblsnaWQnXSA9IHF1ZXMuaWQ7XHJcbiAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dDtcclxuICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLW91dCBMb2NhdGlvbiBUeXBlXHJcbiAgICAgIGlmKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJyl7XHJcbiAgICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0ID8gcXVlcy5pbnB1dCA6IHF1ZXMuc2VsZWN0ZWRWYWx1ZTtcclxuICAgICAgfWVsc2UgaWYocXVlcy50eXBlID09ICdGaWxlJyl7XHJcbiAgICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcclxuICAgICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPyBxdWVzLmlucHV0IDogW107XHJcbiAgICAgIH1cclxuICAgICAgcXVlc3Rpb25bJ3R5cGUnXSA9IHF1ZXMudHlwZTtcclxuICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uTnVtYmVyJ10gPSBxdWVzLnF1ZXN0aW9uTnVtYmVyO1xyXG4gICAgICBxdWVzdGlvblsncmVmZXJlbmNlRmllbGQnXSA9IHF1ZXM/LnJlZmVyZW5jZUZpZWxkO1xyXG4gICAgICBxdWVzdGlvblsnc2VsZWN0ZWRWYWx1ZSddID0gcXVlcz8uc2VsZWN0ZWRWYWx1ZTsgIC8vIE1SIDMxSkFOMjQgTmVlZCB0byBwYXNzIHRoZSBzZWxlY3RlZCB2YWx1ZSB0b29cclxuICAgICAgdGhpcy5hbnN3ZXJMaXN0LnB1c2gocXVlc3Rpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlcyBmb3IgZGF0YSBiaW5kSW5cclxuICBhZGRFdmVudChkYXk6IGFueSwgZW50cnlRdWVzKSB7XHJcbiAgICAvLyBUcmFuc2Zvcm0gbmV3IGVudHJpZXMgaW50byB0aGUgZGVzaXJlZCBmb3JtYXRcclxuICAgIGNvbnN0IG5ld0VudHJpZXMgPSBlbnRyeVF1ZXMucmVkdWNlKChhY2MsIHEpID0+IHtcclxuICAgICAgICBhY2NbcS5pZF0gPSB7IC4uLnEgfTtcclxuICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwge30pO1xyXG5cclxuICAgIC8vIEZpbmQgaWYgYW4gZXZlbnQgYWxyZWFkeSBleGlzdHMgZm9yIHRoZSBnaXZlbiBkYXRlXHJcbiAgICBjb25zdCBleGlzdGluZ0V2ZW50ID0gdGhpcy5hbGxFdmVudHMuZmluZChldmVudCA9PiBldmVudC5kYXRlLnRvRGF0ZVN0cmluZygpID09PSBkYXkudG9EYXRlU3RyaW5nKCkpO1xyXG5cclxuICAgIGlmIChleGlzdGluZ0V2ZW50KSB7XHJcbiAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGV4aXN0cywgcHVzaCB0aGUgbmV3IGVudHJpZXMgdG8gdGhlIGV4aXN0aW5nIGVudHJpZXNcclxuICAgICAgICBjb25zdCBleGlzdGluZ0VudHJpZXMgPSBleGlzdGluZ0V2ZW50LmVudHJpZXMubWFwKGVudHJ5ID0+ICh7IC4uLmVudHJ5IH0pKTtcclxuICAgICAgICBleGlzdGluZ0VudHJpZXMucHVzaChuZXdFbnRyaWVzKTtcclxuICAgICAgICBleGlzdGluZ0V2ZW50LmVudHJpZXMgPSBleGlzdGluZ0VudHJpZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBldmVudCBpZiBpdCBkb2Vzbid0IGV4aXN0IGZvciB0aGUgZ2l2ZW4gZGF0ZVxyXG4gICAgICAgIGNvbnN0IG5ld0V2ZW50ID0ge1xyXG4gICAgICAgICAgICBpZDogJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpLFxyXG4gICAgICAgICAgICBkYXRlOiBkYXksXHJcbiAgICAgICAgICAgIGVudHJpZXM6IFtuZXdFbnRyaWVzXSAvLyBXcmFwIHRoZSBuZXcgZW50cmllcyBpbiBhbiBhcnJheVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5hbGxFdmVudHMucHVzaChuZXdFdmVudCk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4gIHJlYWRRdWVzdGlvbnMocWJJZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcXVlc3Rpb25zID0gW107XHJcbiAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgdGVybmFyeSB0byBhdm9pZCB1bmRlZmluZWRcclxuICAgIGZvcih2YXIgc3EgaW4gdGhpcy5ib29rUXVlc3Rpb25zTWFwPy5nZXQocWJJZCk/LnN1YlF1ZXN0aW9ucykge1xyXG4gICAgICBsZXQgcTogUXVlc3Rpb24gPSB0aGlzLmJvb2tRdWVzdGlvbnNNYXA/LmdldChxYklkKS5zdWJRdWVzdGlvbnNbc3FdO1xyXG4gICAgICAvLyBIQSAwOUZFQjI0IGlmIHF1ZXN0aW9uIGlzIHRoZXJlIHByb2Nlc3NcclxuICAgICAgaWYocSl7XHJcbiAgICAgICAgaWYoKHEudHlwZSA9PSAnRHJvcGRvd24nIHx8IHEudHlwZSA9PSAnUmFkaW8nKSAmJiB0aGlzLnNxT3B0aW9ucy5nZXQocS5pZCkpIHtcclxuICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHRoaXMuc3FPcHRpb25zLmdldChxLmlkKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFZEIDEySnVuMjQgZmllbGQgcGVybWlzaXNpb24gY2hhbmdlc1xyXG4gICAgaWYgKHRoaXMuZmllbGRSZXN0cmljdGlvbnMpIHtcclxuICAgICAgY29uc3QgZmllbGRSZXN0cmljdGlvbnMgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHRoaXMuZmllbGRSZXN0cmljdGlvbnMuZmllbGRzKSk7XHJcbiAgICAgIHF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVzdHJpY3Rpb24gPSBmaWVsZFJlc3RyaWN0aW9ucy5nZXQocXVlcy51bmlxdWVJZGVudGlmaWVyKTtcclxuICBcclxuICAgICAgICAgIGlmIChyZXN0cmljdGlvbikge1xyXG4gICAgICAgICAgICAgIHF1ZXMuaXNSZWFkT25seSA9IHJlc3RyaWN0aW9uID09PSAncmVhZE9ubHknO1xyXG4gICAgICAgICAgICAgIHF1ZXMuaXNIaWRkZW4gPSByZXN0cmljdGlvbiA9PT0gJ2hpZGUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgICByZXR1cm4gcXVlc3Rpb25zO1xyXG4gIH1cclxuIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXHJcbiAgcmVhZFRyYW5zUXVlc3Rpb25zKHFiSWQ6IHN0cmluZyl7XHJcbiAgICBsZXQgcmVjb3JkID0gW107XHJcbiAgICAgIGxldCB0cmFuc2xhdGVSZWNvcmQgPSB0aGlzLnRyYW5zbGF0ZU1hcC5nZXQocWJJZCk7XHJcbiAgICAgaWYodHJhbnNsYXRlUmVjb3JkICYmIHRyYW5zbGF0ZVJlY29yZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRyYW5zbGF0ZVJlY29yZC5mb3JFYWNoKGxhblJlYyA9PiB7XHJcbiAgICAgICAgaWYobGFuUmVjLmxhbmd1YWdlQ29kZSA9PSB0aGlzLmxhbmd1YWdlQ29kZSl7XHJcbiAgICAgICAgICAgcmVjb3JkID0gbGFuUmVjLmZpZWxkc1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgfVxyXG4gICAgICByZXR1cm4gcmVjb3JkO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGV4dCh2YWx1ZSkge1xyXG4gICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodmFsdWUsIFwidGV4dC9odG1sXCIpO1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxyXG4gICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXREcm9wRG93bihldmVudDphbnkpe1xyXG4gICAgdGhpcy5oYWRsZURyb3BEb3duRGVwZW5kZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xyXG4gIGdldENhbGVuZGFyRGF0ZShldmVudDphbnkpe1xyXG4gICAgdGhpcy5oYW5kbGVDYWxlbmRhckRhdGUuZW1pdChldmVudCk7XHJcbiAgfVxyXG4gIGdldENhbGVuZGFyRXZlbnQoZXZlbnQ6YW55KXtcclxuICAgIGV2ZW50W1wibnh0SWRcIl09IE9iamVjdC5rZXlzKHRoaXMuYm9va2xldEpTT04/LmJvb2tRdWVzdGlvbnNNYXApWzBdO1xyXG4gICAgdGhpcy5oYW5kbGVDYWxlbmRhckV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8bmd4LXNwaW5uZXIgc2l6ZT1cIm1lZGl1bVwiIFtuYW1lXT1cInNwaW5uZXJOYW1lXCIgW3R5cGVdPVwic3Bpbm5lclR5cGVcIj48L25neC1zcGlubmVyPlxyXG48IS0tIEJvb2tsZXQgSGFuZGxpbmctLT5cclxuPCEtLSBIQSAxOURFQzIzIEZvciBEaXJlY3Rpb24gLS0+XHJcbjxkaXYgKm5nRm9yPVwibGV0IHFiIG9mIGJvb2tsZXRcIiBbbmdDbGFzc109XCJsYW5nRGlyZWN0aW9uXCI+XHJcbiAgICA8IS0tIE1SIENvbW1lbnRlZCBiZWxvdyBjb2RlIHRvIGVuc3VyZSBzaW5nbGUgSlNPTiBmb3IgVU5DT05ESVRJT05BTCBCb29rbGV0cyAtLT5cclxuICAgIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cclxuICAgIDwhLS0gPGxpYi1xdWVzdGlvbm5haXJlIFtzZXJ2XT1cInNlcnZcIiBbcWJJZF09XCJxYi5pZFwiIFt0a25dPVwidGtuXCI+PC9saWItcXVlc3Rpb25uYWlyZT4gLS0+XHJcbiAgICA8IS0tIEhBIDI4REVDMjMgQmVsb3cgSWYgbG9naWMgaXMgdG8gbG9hZCBmcm9tIGJvb2tsZXQgIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInFiLnN1YlF1ZXN0aW9uczsgZWxzZSBlbHNlQmxvY2tcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzIG9mIHFiLnN1YlF1ZXN0aW9uc1wiIGNsYXNzPVwicXVlc3Rpb25kaXYxXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEhBIDE3SkFOMjQgLSBJcyB0aXRsZSBpcyBlbmFibGVkIHNvIHRoYXQgYmFzZWQgb24gdGhlIGJvb2xlYW4gZGl2IHdpbGwgYmUgdmlzaWJsZSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLmlzVGl0bGVcIiBbY2xhc3NdPVwicWIuaXNTaGVuZ2VsID8gJ2hlYWRlci1zdHlsZScgOiAncXVlc3Rpb24tZi1zaXplIGFkZGl0aW9uYWwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBWRCAwOE5PVjIzIC0gc2hvd2luZyBsYWJsZSB3aGVuIGl0cyBhdmFpbGFibGUtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzPy5xdWVzdGlvblRleHQpXCIgKm5nSWY9XCJxdWVzPy5xdWVzdGlvblRleHRcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHF1ZXM/LnF1ZXN0aW9uVGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IDwhLS0gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXQgLS0+IDwhLS1WRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlcy0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLVZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlcy0tPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgW3FiSXRlbV09XCJxYlwiIFt0b2tlbl09XCJ0b2tlblwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJsYWJlbFZhbHVlXCJcclxuICAgICAgICAgICAgICAgIFtxdWVzdGlvbkl0ZW1dPVwicXVlc1wiXHJcbiAgICAgICAgICAgICAgICBbdHJhbnNsYXRlZFF1ZXN0aW9uc109XCJyZWFkVHJhbnNRdWVzdGlvbnMocWIuaWQpXCJcclxuICAgICAgICAgICAgICAgIFtxdWVzdGlvbnNdPVwicmVhZFF1ZXN0aW9ucyhxYi5pZClcIlxyXG4gICAgICAgICAgICAgICAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGhhbmRsZUNhbGVuZGFyRGF0ZSk9XCJnZXRDYWxlbmRhckRhdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoaGFuZGxlQ2FsZW5kYXJFdmVudCk9XCJnZXRDYWxlbmRhckV2ZW50KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvbGliLXF1ZXN0aW9uYm9vaz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gSEEgMjhERUMyMyBCZWxvdyBlbHNlIGxvZ2ljIGlzIHRvIGxvYWQgZnJvbSBib29rcyBvciBxdWVzdGlvbnMgLS0+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb25kaXYxXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiLmlzVGl0bGVcIiBbY2xhc3NdPVwicWIuaXNTaGVuZ2VsID8gJ2hlYWRlci1zdHlsZScgOiAncXVlc3Rpb24tZi1zaXplIGFkZGl0aW9uYWwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBWRCAwOE5PVjIzIC0gc2hvd2luZyBsYWJsZSB3aGVuIGl0cyBhdmFpbGFibGUtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYj8ucXVlc3Rpb25UZXh0KVwiICpuZ0lmPVwicWI/LnF1ZXN0aW9uVGV4dFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcWI/LnF1ZXN0aW9uVGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBxYj8udGl0bGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiA8IS0tIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0IC0tPiA8IS0tICAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlcy0tPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgW3FiSXRlbV09XCJxYlwiIFt0b2tlbl09XCJ0b2tlblwiIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIiBbcXVlc3Rpb25JdGVtXT1cInFiXCIgW3RyYW5zbGF0ZWRRdWVzdGlvbnNdPVwicmVhZFRyYW5zUXVlc3Rpb25zKHFiLmlkKVwiIFtxdWVzdGlvbnNdPVwicmVhZFF1ZXN0aW9ucyhxYi5pZClcIiAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcbjwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cclxuPCEtLSBHcm91cCBBY3Rpb25zIC0tPlxyXG48IS0tIEhBIDE5REVDMjMgRm9yIERpcmVjdGlvbiAtLT5cclxuPGRpdiBjbGFzcz1cImFsaWduLXN1Ym1pdC1yb3dcIiAqbmdJZj1cImFiSXRlbT8uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgW25nQ2xhc3NdPVwibGFuZ0RpcmVjdGlvblwiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgIDwhLS0gLy8gSEEgMjJKQU4yNCBDb21tb25pc2UgdGhlIGJ1dHRvbiBzdHlsZSBpbiBmdXNpb24gLS0+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlQm9va2xldEFjdGlvbkNsaWNrKGFjdGlvbilcIiBuZ0NsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGZjLWJ1dHRvbiBueHRCdXR0b25cIj5cclxuICAgICAgICAgICAge3sgYWN0aW9uLm5hbWUgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|