@rangertechnologies/ngnxt 2.1.96 → 2.1.98

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.
@@ -150,11 +150,11 @@ export class SearchBoxComponent {
150
150
  this.resetComponentState();
151
151
  }
152
152
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchBoxComponent, deps: [{ token: i1.SalesforceService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.ActivatedRoute }, { token: i0.ElementRef }, { token: i4.I18nService }], target: i0.ɵɵFactoryTarget.Component });
153
- 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-->\n<div id=\"autocomplete-input\"> <!-- SKS5NOV25 search icon -->\n <input #auto id=\"searchbox-style\"\n (blur)=\"clearList()\"\n [(ngModel)]=\"filterName\"\n type=\"text\"\n name=\"name\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolderText\"\n style=\"margin: 0 !important; padding-right: 30px;\"\n class=\"searchInput she-line-input form-control\"\n (focusin)=\"getSourceDataLocal($event)\"\n (input)=\"getSourceDataLocal($event)\">\n <div id=\"selectList\" style=\"position: absolute;position: absolute;background: white;z-index: 2;\">\n <div *ngIf=\"finalResults.length > 0 && showSuggestion\"\n style=\"max-height: 100vh;border: 1px solid #d2d4d6;overflow: scroll; min-width:100px\"\n class=\"suggestions-container\">\n <!-- HA 20DEC23 Uncommented the logic -->\n <!-- VD 03May- search changes -->\n <div *ngFor=\"let item of finalResults\" (click)='clickItem(item)' class=\"hoover\">\n <!-- VD 26Jun24 - id condition removed -->\n <div class=\"grid-x align-middle\" style=\"\">\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink\" style=\"width: 60px; margin-right: 1.6rem;\">\n <img [src]=\"item.thumbnail\" style=\"width: 60px;\" alt=\"\">\n </div>\n <div class=\"cell auto\" style=\"text-align: left; padding:5px 8px 0 8px\">\n <!--// VD 26JUN24 - pipe changes -->\n <!-- RS 29JAN25 -->\n <h4 >{{ '' | getValue: item : SearchItem }}</h4>\n </div>\n </div>\n </div>\n <!-- HA 20DEC23 For Commented this for future purpose -->\n <!-- <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <th>{{ 'firstName' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'lastName' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'division' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'numberPlate' | i18n:i18nService.currentLanguage }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of finalResults\" (click)='clickItem(item)'>\n <td>{{ item.firstName }}</td>\n <td>{{ item.lastName }}</td>\n <td>{{ item.division }}</td>\n <td>{{ item.numberPlate }}</td>\n </tr>\n </tbody>\n </table> -->\n </div>\n</div>\n\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" }] });
153
+ 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-->\n<div id=\"autocomplete-input\"> <!-- SKS5NOV25 search icon -->\n <input #auto id=\"searchbox-style\"\n (blur)=\"clearList()\"\n [(ngModel)]=\"filterName\"\n type=\"text\"\n name=\"name\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolderText\"\n style=\"margin: 0 !important; padding-right: 30px;\"\n class=\"searchInput she-line-input form-control\"\n (focusin)=\"getSourceDataLocal($event)\"\n (input)=\"getSourceDataLocal($event)\">\n <div id=\"selectList\" style=\"position: absolute;position: absolute;background: white;z-index: 2;\">\n <div *ngIf=\"finalResults.length > 0 && showSuggestion\"\n style=\"max-height: 20vh;border: 1px solid #d2d4d6;overflow: scroll; min-width:100px\"\n class=\"suggestions-container\">\n <!-- HA 20DEC23 Uncommented the logic -->\n <!-- VD 03May- search changes -->\n <div *ngFor=\"let item of finalResults\" (click)='clickItem(item)' class=\"hoover\">\n <!-- VD 26Jun24 - id condition removed -->\n <div class=\"grid-x align-middle\" style=\"\">\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink\" style=\"width: 60px; margin-right: 1.6rem;\">\n <img [src]=\"item.thumbnail\" style=\"width: 60px;\" alt=\"\">\n </div>\n <div class=\"cell auto\" style=\"text-align: left; padding:5px 8px 0 8px\">\n <!--// VD 26JUN24 - pipe changes -->\n <!-- RS 29JAN25 -->\n <h4 >{{ '' | getValue: item : SearchItem }}</h4>\n </div>\n </div>\n </div>\n <!-- HA 20DEC23 For Commented this for future purpose -->\n <!-- <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <th>{{ 'firstName' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'lastName' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'division' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'numberPlate' | i18n:i18nService.currentLanguage }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of finalResults\" (click)='clickItem(item)'>\n <td>{{ item.firstName }}</td>\n <td>{{ item.lastName }}</td>\n <td>{{ item.division }}</td>\n <td>{{ item.numberPlate }}</td>\n </tr>\n </tbody>\n </table> -->\n </div>\n</div>\n\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" }] });
154
154
  }
155
155
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchBoxComponent, decorators: [{
156
156
  type: Component,
157
- args: [{ selector: 'lib-search-box', template: "<!-- // VD 12Jun24 - readonly change-->\n<div id=\"autocomplete-input\"> <!-- SKS5NOV25 search icon -->\n <input #auto id=\"searchbox-style\"\n (blur)=\"clearList()\"\n [(ngModel)]=\"filterName\"\n type=\"text\"\n name=\"name\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolderText\"\n style=\"margin: 0 !important; padding-right: 30px;\"\n class=\"searchInput she-line-input form-control\"\n (focusin)=\"getSourceDataLocal($event)\"\n (input)=\"getSourceDataLocal($event)\">\n <div id=\"selectList\" style=\"position: absolute;position: absolute;background: white;z-index: 2;\">\n <div *ngIf=\"finalResults.length > 0 && showSuggestion\"\n style=\"max-height: 100vh;border: 1px solid #d2d4d6;overflow: scroll; min-width:100px\"\n class=\"suggestions-container\">\n <!-- HA 20DEC23 Uncommented the logic -->\n <!-- VD 03May- search changes -->\n <div *ngFor=\"let item of finalResults\" (click)='clickItem(item)' class=\"hoover\">\n <!-- VD 26Jun24 - id condition removed -->\n <div class=\"grid-x align-middle\" style=\"\">\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink\" style=\"width: 60px; margin-right: 1.6rem;\">\n <img [src]=\"item.thumbnail\" style=\"width: 60px;\" alt=\"\">\n </div>\n <div class=\"cell auto\" style=\"text-align: left; padding:5px 8px 0 8px\">\n <!--// VD 26JUN24 - pipe changes -->\n <!-- RS 29JAN25 -->\n <h4 >{{ '' | getValue: item : SearchItem }}</h4>\n </div>\n </div>\n </div>\n <!-- HA 20DEC23 For Commented this for future purpose -->\n <!-- <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <th>{{ 'firstName' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'lastName' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'division' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'numberPlate' | i18n:i18nService.currentLanguage }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of finalResults\" (click)='clickItem(item)'>\n <td>{{ item.firstName }}</td>\n <td>{{ item.lastName }}</td>\n <td>{{ item.division }}</td>\n <td>{{ item.numberPlate }}</td>\n </tr>\n </tbody>\n </table> -->\n </div>\n</div>\n\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"] }]
157
+ args: [{ selector: 'lib-search-box', template: "<!-- // VD 12Jun24 - readonly change-->\n<div id=\"autocomplete-input\"> <!-- SKS5NOV25 search icon -->\n <input #auto id=\"searchbox-style\"\n (blur)=\"clearList()\"\n [(ngModel)]=\"filterName\"\n type=\"text\"\n name=\"name\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolderText\"\n style=\"margin: 0 !important; padding-right: 30px;\"\n class=\"searchInput she-line-input form-control\"\n (focusin)=\"getSourceDataLocal($event)\"\n (input)=\"getSourceDataLocal($event)\">\n <div id=\"selectList\" style=\"position: absolute;position: absolute;background: white;z-index: 2;\">\n <div *ngIf=\"finalResults.length > 0 && showSuggestion\"\n style=\"max-height: 20vh;border: 1px solid #d2d4d6;overflow: scroll; min-width:100px\"\n class=\"suggestions-container\">\n <!-- HA 20DEC23 Uncommented the logic -->\n <!-- VD 03May- search changes -->\n <div *ngFor=\"let item of finalResults\" (click)='clickItem(item)' class=\"hoover\">\n <!-- VD 26Jun24 - id condition removed -->\n <div class=\"grid-x align-middle\" style=\"\">\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink\" style=\"width: 60px; margin-right: 1.6rem;\">\n <img [src]=\"item.thumbnail\" style=\"width: 60px;\" alt=\"\">\n </div>\n <div class=\"cell auto\" style=\"text-align: left; padding:5px 8px 0 8px\">\n <!--// VD 26JUN24 - pipe changes -->\n <!-- RS 29JAN25 -->\n <h4 >{{ '' | getValue: item : SearchItem }}</h4>\n </div>\n </div>\n </div>\n <!-- HA 20DEC23 For Commented this for future purpose -->\n <!-- <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <th>{{ 'firstName' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'lastName' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'division' | i18n:i18nService.currentLanguage }}</th>\n <th>{{ 'numberPlate' | i18n:i18nService.currentLanguage }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of finalResults\" (click)='clickItem(item)'>\n <td>{{ item.firstName }}</td>\n <td>{{ item.lastName }}</td>\n <td>{{ item.division }}</td>\n <td>{{ item.numberPlate }}</td>\n </tr>\n </tbody>\n </table> -->\n </div>\n</div>\n\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"] }]
158
158
  }], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.ActivatedRoute }, { type: i0.ElementRef }, { type: i4.I18nService }], propDecorators: { placeHolderText: [{
159
159
  type: Input
160
160
  }], auto: [{
@@ -173,4 +173,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
173
173
  }], filterName: [{
174
174
  type: Input
175
175
  }] } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR1osU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBU3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7O0FBVTFELE1BQU0sT0FBTyxrQkFBa0I7SUF3Qm5CO0lBQ0E7SUFDQTtJQUNBO0lBRUc7SUE1QkosZUFBZSxDQUFTO0lBQ2QsSUFBSSxDQUFDO0lBRWYsUUFBUSxDQUFDO0lBQ1QsT0FBTyxDQUFTO0lBQ2hCLEVBQUUsQ0FBUztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQywrQkFBK0I7SUFDaEQsaUJBQWlCLEdBQWdDLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQzVGLE1BQU0sQ0FBSztJQUNYLFVBQVUsQ0FBTTtJQUVSLFVBQVUsQ0FBUyxDQUFDLHlDQUF5QztJQUMvRCxZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ3pCLGFBQWEsR0FBVyxFQUFFLENBQUM7SUFDM0IsU0FBUyxDQUFNO0lBQ2YsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDckIsRUFBRSxDQUFjO0lBQ2hCLElBQUksR0FBVyxLQUFLLENBQUM7SUFDckIsR0FBRyxHQUFXLEVBQUUsQ0FBQztJQUV6QixZQUNVLFNB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QUMsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELGNBQWM7SUFDZCx5REFBeUQ7SUFDekQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQUUsQ0FBQzt3R0EvSXJCLGtCQUFrQjs0RkFBbEIsa0JBQWtCLGtYQy9CL0Isa2dGQXNEQTs7NEZEdkJhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7Z09BS2pCLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ2EsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQUVSLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFJRSxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zYWxlc2ZvcmNlLnNlcnZpY2VcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG4vLyBWRCAyM0pBTjI0IHJlbW92ZWQgaHR0cENsaWVudCBpbXBvcnQgdXNlZCBzZXJ2aWNlIGZpbGUgZm9yIGNhbGxvdXRcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEl0ZW1zTGlzdCB9IGZyb20gXCJAbmctc2VsZWN0L25nLXNlbGVjdC9saWIvaXRlbXMtbGlzdFwiO1xuaW1wb3J0IHsgQ29uc29sZVNlcnZpY2UgfSBmcm9tIFwiQG5nLXNlbGVjdC9uZy1zZWxlY3QvbGliL2NvbnNvbGUuc2VydmljZVwiO1xuaW1wb3J0IHsgQVBJTWV0YSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2FwaW1ldGFcIjtcbmltcG9ydCB7IENoYW5nZVdyYXBwZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvY2hhbmdlV3JhcHBlclwiO1xuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zZWFyY2gtYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtYm94LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcbiAgQFZpZXdDaGlsZCgnYXV0bycpIGF1dG87XG5cbiAgQElucHV0KCkgcXVlc3Rpb247XG4gIEBJbnB1dCgpIGFwaU1ldGE6IHN0cmluZztcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgcmVhZE9ubHkgPSBmYWxzZTsgLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZVxuICBAT3V0cHV0KCkgc2VhcmNoVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGFuZ2VXcmFwcGVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhbmdlV3JhcHBlcj4oKTtcbiAgIGFwaU9iajphbnk7XG4gICBTZWFyY2hJdGVtOiBhbnk7XG5cbiAgQElucHV0KCkgZmlsdGVyTmFtZTogc3RyaW5nOyAvLyBWRCAyMEF1ZyBkZWZhdWx0IGZpbHRlciB2YWx1ZSBhcyBpbnB1dFxuICBwdWJsaWMgZmluYWxSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgc2VhcmNoS2V5V29yZDogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBuZXdSZXN1bHQ6IGFueTtcbiAgcHVibGljIHNob3dSZXN1bHQgPSBmYWxzZTtcbiAgcHVibGljIG5vUmVzdWx0ID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93U3VnZ2VzdGlvbiA9IHRydWU7XG4gIHByaXZhdGUgZWw6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHNlcnY6IHN0cmluZyA9ICdhcGknO1xuICBwcml2YXRlIHRrbjogc3RyaW5nID0gJyc7XG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlXG4gICkgeyB9XG4gIC8vIFJTIDE0RkVCMjAyNVxuICAvLyBFeHRyYWN0IGFsbCBzdHJpbmcgdmFsdWVzIGZyb20gYW4gb2JqZWN0XG4gIHByaXZhdGUgZmxhdHRlbk9iamVjdFZhbHVlcyhvYmo6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmZsYXR0ZW5PYmplY3RWYWx1ZXModmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbi8vICBWRCAwM01heS0gc2VhcmNoIGNoYW5nZXNcbiAgICBpZih0aGlzLmFwaU1ldGEpe1xuICAgICAgbGV0IGFwaU9iajogQVBJTWV0YSA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcbiAgICAgIHRoaXMuU2VhcmNoSXRlbSA9IGFwaU9iai5maWVsZDtcbiAgICB9XG4gICAgLy8gdGhpcy5yZXNldENvbXBvbmVudFN0YXRlKCk7XG5cbiAgfVxuLy8vL1JTIDAzRkVCMjAyNVxuLy8gUmVzZXRzIHN0YXRlIHdoZW4gZmlsdGVyTmFtZSBvciBhcGlNZXRhIGNoYW5nZXMgdG8gcmVmbGVjdCB1cGRhdGVkIGRhdGFcbm5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgaWYgKGNoYW5nZXNbJ2FwaU1ldGEnXSAmJiB0aGlzLmFwaU1ldGEpIHtcbiAgICB0aGlzLmFwaU9iaiA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcbiAgICB0aGlzLlNlYXJjaEl0ZW0gPSB0aGlzLmFwaU9iaj8uZmllbGQ7XG4gIH1cbn1cbi8vUlMgMDNGRUIyMDI1XG4vLyBDbGVhcnMgc2VhcmNoLXJlbGF0ZWQgZGF0YSwgaW5jbHVkaW5nIHJlc3VsdHMsIHNlYXJjaCB0ZXJtLCBhbmQgc3VnZ2VzdGlvbnMuXG5wcml2YXRlIHJlc2V0Q29tcG9uZW50U3RhdGUoKTogdm9pZCB7XG4gIHRoaXMuZmluYWxSZXN1bHRzID0gW107XG4gIHRoaXMuZmlsdGVyTmFtZSA9ICcnOyBcbiAgdGhpcy5zZWFyY2hLZXlXb3JkID0gJyc7ICB0aGlzLnNob3dTdWdnZXN0aW9uID0gZmFsc2U7XG4gIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbn1cbiAgY2xlYXJMaXN0KCl7XG4gICAgc2V0VGltZW91dCgoKT0+IHtcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzID0gW107XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBnZXRTb3VyY2VEYXRhTG9jYWwoZXZlbnQ6IGFueSkgeyAvL3RvIGdldCByZXN1bHRzIGxpc3QgZnJvbSBiYWNrZW5kIEFQSSB3aGVuZXZlciBrZXkgaXMgdXAgYWZ0ZXIgdGhlIGVudGVyaW5nIGF0bGVhc3Qgb25lIGtleVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYoZXZlbnQudGFyZ2V0LnZhbHVlLmxlbmd0aCA+IDIpe1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbj10cnVlO1xuICAgICAgdGhpcy5maW5hbFJlc3VsdHM9W107XG4gICAgICB0aGlzLnNlYXJjaEtleVdvcmQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnNob3dSZXN1bHQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ2V0U291cmNlRGF0YShldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uPWZhbHNlO1xuICAgICAgdGhpcy5maW5hbFJlc3VsdHMgPSBbXTtcbiAgICAgIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gVkQgMDNNYXktIHNlYXJjaCBjaGFuZ2VzXG4gIC8vIFZEIDMxTk9WMjQgbnVsbCBjaGVja1xuICAvLyBSUyAyOUpBTjI1XG4gIC8vTXVsdGktd29yZCBzZWFyY2ggYWNyb3NzIGFsbCBvYmplY3QgdmFsdWVzXG4gIHB1YmxpYyBnZXRTb3VyY2VEYXRhID0gKGtleXdvcmQ6IHN0cmluZykgPT4ge1xuICAgIGlmICh0aGlzLmFwaU1ldGEpIHtcbiAgICAgIGxldCBhcGlPYmo6IEFQSU1ldGEgPSBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XG4gICAgICBcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgaWYgKGFwaU9iai52YXJpYWJsZSkge1xuICAgICAgICAgIHJlc3BvbnNlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgYXBpT2JqLnZhcmlhYmxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNwb25zZSA9IGFwaVJlc3BvbnNlO1xuICAgICAgICB9XG4gIFxuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgc2VhcmNoVGVybXMgPSBrZXl3b3JkLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xuICBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBvYmogPSByZXNwb25zZVtpXTtcbiAgICAgICAgICAvLyBGbGF0dGVuIGFsbCB2YWx1ZXMgaW5jbHVkaW5nIG5lc3RlZCBvYmplY3RzXG4gICAgICAgICAgbGV0IGNvbWJpbmVkVmFsdWVzID0gdGhpcy5mbGF0dGVuT2JqZWN0VmFsdWVzKG9iaik7XG4gIFxuICAgICAgICAgIGxldCBtYXRjaCA9IHNlYXJjaFRlcm1zLmV2ZXJ5KHRlcm0gPT4gY29tYmluZWRWYWx1ZXMuaW5jbHVkZXModGVybSkpO1xuICBcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChvYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICBcbiAgICAgICAgdGhpcy5ub1Jlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID09PSAwO1xuICAgICAgICB0aGlzLmZpbmFsUmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgXG4gIHB1YmxpYyBjbGlja0l0ZW0oZXZlbnQpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGNsaWNrSXRlbSBvZiAnICsgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICBsZXQgYXBpT2JqOiBBUElNZXRhID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xuICAgIHRoaXMuZmlsdGVyTmFtZSA9IGV2ZW50W2FwaU9iai5maWVsZF07XG4gICAgbGV0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7IC8vIENoYW5nZVdyYXBwZXIgPSBKU09OLnBhcnNlKCd7fScpO1xuICAgIGNoYW5nZS5mcm9tUXVlc3Rpb25JZCA9IHRoaXMuaWQ7XG4gICAgY2hhbmdlLnZhbHVlT2JqID0gZXZlbnQ7XG4gICAgY2hhbmdlLmZpZWxkID0gYXBpT2JqLmZpZWxkO1xuICAgIHRoaXMuc2VhcmNoVmFsdWVDaGFuZ2UuZW1pdChjaGFuZ2UpO1xuICB9XG4gIC8vUlMgMDNGRUIyMDI1XG4gIC8vIFJlc2V0cyBjb21wb25lbnQgc3RhdGUgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTsgIH1cbiAgLypcbiAgcHVibGljIGdldFNvdXJjZURhdGEgPSAoa2V5d29yZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgICAgdGhpcy50a24sXG4gICAgICAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgICAgIHRoaXMuc3VjY2Vzc1NvdXJjZURhdGEsXG4gICAgICAgIHRoaXMuZmFpbHVyZVNvdXJjZURhdGFcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcbiAgICAgICAgW1wiUXVlc3Rpb25Cb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzU291cmNlRGF0YSxcbiAgICAgICAgdGhpcy5mYWlsdXJlU291cmNlRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3VjY2Vzc1NvdXJjZURhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgICBsZXQgcmVzdWx0cz1bXTtcbiAgICByZXN1bHRzPXJlc3BvbnNlLnJlc3VsdHM7XG4gICAgcmVzdWx0cy5wdXNoKHt1dWlkOiBudWxsLCBuYW1lOiBcIlwifSk7XG4gICAgdGhpcy5ub1Jlc3VsdCA9ICEocmVzdWx0cy5sZW5ndGggPiAxKTtcbiAgICB0aGlzLmZpbmFsUmVzdWx0cyA9IHJlc3VsdHM7XG4gIH1cblxuICBwdWJsaWMgZmFpbHVyZVNvdXJjZURhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIkVycm9yIHJlYWRpbmcgdGhlIGRhdGEgZnJvbSBBUElcIik7XG4gIH1cbiAgKi9cbn1cbiAgICAiLCI8IS0tIC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UtLT5cbjxkaXYgaWQ9XCJhdXRvY29tcGxldGUtaW5wdXRcIj4gPCEtLSBTS1M1Tk9WMjUgc2VhcmNoIGljb24gLS0+XG4gIDxpbnB1dCAjYXV0byBpZD1cInNlYXJjaGJveC1zdHlsZVwiXG4gICAgICAgICAgKGJsdXIpPVwiY2xlYXJMaXN0KClcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyTmFtZVwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclRleHRcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luOiAwICFpbXBvcnRhbnQ7IHBhZGRpbmctcmlnaHQ6IDMwcHg7XCJcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaElucHV0IHNoZS1saW5lLWlucHV0IGZvcm0tY29udHJvbFwiXG4gICAgICAgICAgKGZvY3VzaW4pPVwiZ2V0U291cmNlRGF0YUxvY2FsKCRldmVudClcIlxuICAgICAgICAgIChpbnB1dCk9XCJnZXRTb3VyY2VEYXRhTG9jYWwoJGV2ZW50KVwiPlxuICA8ZGl2IGlkPVwic2VsZWN0TGlzdFwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO3Bvc2l0aW9uOiBhYnNvbHV0ZTtiYWNrZ3JvdW5kOiB3aGl0ZTt6LWluZGV4OiAyO1wiPlxuICA8ZGl2ICpuZ0lmPVwiZmluYWxSZXN1bHRzLmxlbmd0aCA+IDAgJiYgc2hvd1N1Z2dlc3Rpb25cIlxuICAgIHN0eWxlPVwibWF4LWhlaWdodDogMTAwdmg7Ym9yZGVyOiAxcHggc29saWQgI2QyZDRkNjtvdmVyZmxvdzogc2Nyb2xsOyBtaW4td2lkdGg6MTAwcHhcIlxuICAgICAgIGNsYXNzPVwic3VnZ2VzdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICA8IS0tIEhBIDIwREVDMjMgVW5jb21tZW50ZWQgdGhlIGxvZ2ljIC0tPlxuICAgICAgIDwhLS0gVkQgMDNNYXktIHNlYXJjaCBjaGFuZ2VzIC0tPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaW5hbFJlc3VsdHNcIiAoY2xpY2spPSdjbGlja0l0ZW0oaXRlbSknIGNsYXNzPVwiaG9vdmVyXCI+XG4gICAgICAgIDwhLS0gVkQgMjZKdW4yNCAtIGlkIGNvbmRpdGlvbiByZW1vdmVkIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXggYWxpZ24tbWlkZGxlXCIgc3R5bGU9XCJcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udGh1bWJuYWlsXCIgY2xhc3M9XCJjZWxsIHNocmlua1wiIHN0eWxlPVwid2lkdGg6IDYwcHg7IG1hcmdpbi1yaWdodDogMS42cmVtO1wiPlxuICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW0udGh1bWJuYWlsXCIgc3R5bGU9XCJ3aWR0aDogNjBweDtcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGF1dG9cIiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmc6NXB4IDhweCAwIDhweFwiPlxuICAgICAgICAgICAgICAgIDwhLS0vLyBWRCAyNkpVTjI0IC0gcGlwZSBjaGFuZ2VzIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gUlMgMjlKQU4yNSAtLT5cbiAgICAgICAgICAgICAgICA8aDQgPnt7ICcnIHwgZ2V0VmFsdWU6IGl0ZW0gOiBTZWFyY2hJdGVtICB9fTwvaDQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIENvbW1lbnRlZCB0aGlzIGZvciBmdXR1cmUgcHVycG9zZSAtLT5cbiAgICAgIDwhLS0gPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZFwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoPnt7ICdmaXJzdE5hbWUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2UgfX08L3RoPlxuICAgICAgICAgICAgICA8dGg+e3sgJ2xhc3ROYW1lJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlIH19PC90aD5cbiAgICAgICAgICAgICAgPHRoPnt7ICdkaXZpc2lvbicgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XG4gICAgICAgICAgICAgIDx0aD57eyAnbnVtYmVyUGxhdGUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2UgfX08L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaW5hbFJlc3VsdHNcIiAoY2xpY2spPSdjbGlja0l0ZW0oaXRlbSknPlxuICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS5maXJzdE5hbWUgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS5sYXN0TmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmRpdmlzaW9uIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0ubnVtYmVyUGxhdGUgfX08L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPiAtLT5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR1osU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBU3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7O0FBVTFELE1BQU0sT0FBTyxrQkFBa0I7SUF3Qm5CO0lBQ0E7SUFDQTtJQUNBO0lBRUc7SUE1QkosZUFBZSxDQUFTO0lBQ2QsSUFBSSxDQUFDO0lBRWYsUUFBUSxDQUFDO0lBQ1QsT0FBTyxDQUFTO0lBQ2hCLEVBQUUsQ0FBUztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQywrQkFBK0I7SUFDaEQsaUJBQWlCLEdBQWdDLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQzVGLE1BQU0sQ0FBSztJQUNYLFVBQVUsQ0FBTTtJQUVSLFVBQVUsQ0FBUyxDQUFDLHlDQUF5QztJQUMvRCxZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ3pCLGFBQWEsR0FBVyxFQUFFLENBQUM7SUFDM0IsU0FBUyxDQUFNO0lBQ2YsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDckIsRUFBRSxDQUFjO0lBQ2hCLElBQUksR0FBVyxLQUFLLENBQUM7SUFDckIsR0FBRyxHQUFXLEVBQUUsQ0FBQztJQUV6QixZQUNVLFNB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QUMsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELGNBQWM7SUFDZCx5REFBeUQ7SUFDekQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQUUsQ0FBQzt3R0EvSXJCLGtCQUFrQjs0RkFBbEIsa0JBQWtCLGtYQy9CL0IsaWdGQXNEQTs7NEZEdkJhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7Z09BS2pCLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ2EsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQUVSLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFJRSxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zYWxlc2ZvcmNlLnNlcnZpY2VcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG4vLyBWRCAyM0pBTjI0IHJlbW92ZWQgaHR0cENsaWVudCBpbXBvcnQgdXNlZCBzZXJ2aWNlIGZpbGUgZm9yIGNhbGxvdXRcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEl0ZW1zTGlzdCB9IGZyb20gXCJAbmctc2VsZWN0L25nLXNlbGVjdC9saWIvaXRlbXMtbGlzdFwiO1xuaW1wb3J0IHsgQ29uc29sZVNlcnZpY2UgfSBmcm9tIFwiQG5nLXNlbGVjdC9uZy1zZWxlY3QvbGliL2NvbnNvbGUuc2VydmljZVwiO1xuaW1wb3J0IHsgQVBJTWV0YSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2FwaW1ldGFcIjtcbmltcG9ydCB7IENoYW5nZVdyYXBwZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvY2hhbmdlV3JhcHBlclwiO1xuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zZWFyY2gtYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtYm94LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcbiAgQFZpZXdDaGlsZCgnYXV0bycpIGF1dG87XG5cbiAgQElucHV0KCkgcXVlc3Rpb247XG4gIEBJbnB1dCgpIGFwaU1ldGE6IHN0cmluZztcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgcmVhZE9ubHkgPSBmYWxzZTsgLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZVxuICBAT3V0cHV0KCkgc2VhcmNoVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGFuZ2VXcmFwcGVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhbmdlV3JhcHBlcj4oKTtcbiAgIGFwaU9iajphbnk7XG4gICBTZWFyY2hJdGVtOiBhbnk7XG5cbiAgQElucHV0KCkgZmlsdGVyTmFtZTogc3RyaW5nOyAvLyBWRCAyMEF1ZyBkZWZhdWx0IGZpbHRlciB2YWx1ZSBhcyBpbnB1dFxuICBwdWJsaWMgZmluYWxSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgc2VhcmNoS2V5V29yZDogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBuZXdSZXN1bHQ6IGFueTtcbiAgcHVibGljIHNob3dSZXN1bHQgPSBmYWxzZTtcbiAgcHVibGljIG5vUmVzdWx0ID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93U3VnZ2VzdGlvbiA9IHRydWU7XG4gIHByaXZhdGUgZWw6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHNlcnY6IHN0cmluZyA9ICdhcGknO1xuICBwcml2YXRlIHRrbjogc3RyaW5nID0gJyc7XG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlXG4gICkgeyB9XG4gIC8vIFJTIDE0RkVCMjAyNVxuICAvLyBFeHRyYWN0IGFsbCBzdHJpbmcgdmFsdWVzIGZyb20gYW4gb2JqZWN0XG4gIHByaXZhdGUgZmxhdHRlbk9iamVjdFZhbHVlcyhvYmo6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmZsYXR0ZW5PYmplY3RWYWx1ZXModmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbi8vICBWRCAwM01heS0gc2VhcmNoIGNoYW5nZXNcbiAgICBpZih0aGlzLmFwaU1ldGEpe1xuICAgICAgbGV0IGFwaU9iajogQVBJTWV0YSA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcbiAgICAgIHRoaXMuU2VhcmNoSXRlbSA9IGFwaU9iai5maWVsZDtcbiAgICB9XG4gICAgLy8gdGhpcy5yZXNldENvbXBvbmVudFN0YXRlKCk7XG5cbiAgfVxuLy8vL1JTIDAzRkVCMjAyNVxuLy8gUmVzZXRzIHN0YXRlIHdoZW4gZmlsdGVyTmFtZSBvciBhcGlNZXRhIGNoYW5nZXMgdG8gcmVmbGVjdCB1cGRhdGVkIGRhdGFcbm5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgaWYgKGNoYW5nZXNbJ2FwaU1ldGEnXSAmJiB0aGlzLmFwaU1ldGEpIHtcbiAgICB0aGlzLmFwaU9iaiA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcbiAgICB0aGlzLlNlYXJjaEl0ZW0gPSB0aGlzLmFwaU9iaj8uZmllbGQ7XG4gIH1cbn1cbi8vUlMgMDNGRUIyMDI1XG4vLyBDbGVhcnMgc2VhcmNoLXJlbGF0ZWQgZGF0YSwgaW5jbHVkaW5nIHJlc3VsdHMsIHNlYXJjaCB0ZXJtLCBhbmQgc3VnZ2VzdGlvbnMuXG5wcml2YXRlIHJlc2V0Q29tcG9uZW50U3RhdGUoKTogdm9pZCB7XG4gIHRoaXMuZmluYWxSZXN1bHRzID0gW107XG4gIHRoaXMuZmlsdGVyTmFtZSA9ICcnOyBcbiAgdGhpcy5zZWFyY2hLZXlXb3JkID0gJyc7ICB0aGlzLnNob3dTdWdnZXN0aW9uID0gZmFsc2U7XG4gIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbn1cbiAgY2xlYXJMaXN0KCl7XG4gICAgc2V0VGltZW91dCgoKT0+IHtcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzID0gW107XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBnZXRTb3VyY2VEYXRhTG9jYWwoZXZlbnQ6IGFueSkgeyAvL3RvIGdldCByZXN1bHRzIGxpc3QgZnJvbSBiYWNrZW5kIEFQSSB3aGVuZXZlciBrZXkgaXMgdXAgYWZ0ZXIgdGhlIGVudGVyaW5nIGF0bGVhc3Qgb25lIGtleVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYoZXZlbnQudGFyZ2V0LnZhbHVlLmxlbmd0aCA+IDIpe1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbj10cnVlO1xuICAgICAgdGhpcy5maW5hbFJlc3VsdHM9W107XG4gICAgICB0aGlzLnNlYXJjaEtleVdvcmQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnNob3dSZXN1bHQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ2V0U291cmNlRGF0YShldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uPWZhbHNlO1xuICAgICAgdGhpcy5maW5hbFJlc3VsdHMgPSBbXTtcbiAgICAgIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gVkQgMDNNYXktIHNlYXJjaCBjaGFuZ2VzXG4gIC8vIFZEIDMxTk9WMjQgbnVsbCBjaGVja1xuICAvLyBSUyAyOUpBTjI1XG4gIC8vTXVsdGktd29yZCBzZWFyY2ggYWNyb3NzIGFsbCBvYmplY3QgdmFsdWVzXG4gIHB1YmxpYyBnZXRTb3VyY2VEYXRhID0gKGtleXdvcmQ6IHN0cmluZykgPT4ge1xuICAgIGlmICh0aGlzLmFwaU1ldGEpIHtcbiAgICAgIGxldCBhcGlPYmo6IEFQSU1ldGEgPSBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XG4gICAgICBcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgaWYgKGFwaU9iai52YXJpYWJsZSkge1xuICAgICAgICAgIHJlc3BvbnNlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgYXBpT2JqLnZhcmlhYmxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNwb25zZSA9IGFwaVJlc3BvbnNlO1xuICAgICAgICB9XG4gIFxuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgc2VhcmNoVGVybXMgPSBrZXl3b3JkLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xuICBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBvYmogPSByZXNwb25zZVtpXTtcbiAgICAgICAgICAvLyBGbGF0dGVuIGFsbCB2YWx1ZXMgaW5jbHVkaW5nIG5lc3RlZCBvYmplY3RzXG4gICAgICAgICAgbGV0IGNvbWJpbmVkVmFsdWVzID0gdGhpcy5mbGF0dGVuT2JqZWN0VmFsdWVzKG9iaik7XG4gIFxuICAgICAgICAgIGxldCBtYXRjaCA9IHNlYXJjaFRlcm1zLmV2ZXJ5KHRlcm0gPT4gY29tYmluZWRWYWx1ZXMuaW5jbHVkZXModGVybSkpO1xuICBcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChvYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICBcbiAgICAgICAgdGhpcy5ub1Jlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID09PSAwO1xuICAgICAgICB0aGlzLmZpbmFsUmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgXG4gIHB1YmxpYyBjbGlja0l0ZW0oZXZlbnQpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGNsaWNrSXRlbSBvZiAnICsgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICBsZXQgYXBpT2JqOiBBUElNZXRhID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xuICAgIHRoaXMuZmlsdGVyTmFtZSA9IGV2ZW50W2FwaU9iai5maWVsZF07XG4gICAgbGV0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7IC8vIENoYW5nZVdyYXBwZXIgPSBKU09OLnBhcnNlKCd7fScpO1xuICAgIGNoYW5nZS5mcm9tUXVlc3Rpb25JZCA9IHRoaXMuaWQ7XG4gICAgY2hhbmdlLnZhbHVlT2JqID0gZXZlbnQ7XG4gICAgY2hhbmdlLmZpZWxkID0gYXBpT2JqLmZpZWxkO1xuICAgIHRoaXMuc2VhcmNoVmFsdWVDaGFuZ2UuZW1pdChjaGFuZ2UpO1xuICB9XG4gIC8vUlMgMDNGRUIyMDI1XG4gIC8vIFJlc2V0cyBjb21wb25lbnQgc3RhdGUgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTsgIH1cbiAgLypcbiAgcHVibGljIGdldFNvdXJjZURhdGEgPSAoa2V5d29yZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgICAgdGhpcy50a24sXG4gICAgICAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgICAgIHRoaXMuc3VjY2Vzc1NvdXJjZURhdGEsXG4gICAgICAgIHRoaXMuZmFpbHVyZVNvdXJjZURhdGFcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcbiAgICAgICAgW1wiUXVlc3Rpb25Cb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzU291cmNlRGF0YSxcbiAgICAgICAgdGhpcy5mYWlsdXJlU291cmNlRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3VjY2Vzc1NvdXJjZURhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgICBsZXQgcmVzdWx0cz1bXTtcbiAgICByZXN1bHRzPXJlc3BvbnNlLnJlc3VsdHM7XG4gICAgcmVzdWx0cy5wdXNoKHt1dWlkOiBudWxsLCBuYW1lOiBcIlwifSk7XG4gICAgdGhpcy5ub1Jlc3VsdCA9ICEocmVzdWx0cy5sZW5ndGggPiAxKTtcbiAgICB0aGlzLmZpbmFsUmVzdWx0cyA9IHJlc3VsdHM7XG4gIH1cblxuICBwdWJsaWMgZmFpbHVyZVNvdXJjZURhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIkVycm9yIHJlYWRpbmcgdGhlIGRhdGEgZnJvbSBBUElcIik7XG4gIH1cbiAgKi9cbn1cbiAgICAiLCI8IS0tIC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UtLT5cbjxkaXYgaWQ9XCJhdXRvY29tcGxldGUtaW5wdXRcIj4gPCEtLSBTS1M1Tk9WMjUgc2VhcmNoIGljb24gLS0+XG4gIDxpbnB1dCAjYXV0byBpZD1cInNlYXJjaGJveC1zdHlsZVwiXG4gICAgICAgICAgKGJsdXIpPVwiY2xlYXJMaXN0KClcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyTmFtZVwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclRleHRcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luOiAwICFpbXBvcnRhbnQ7IHBhZGRpbmctcmlnaHQ6IDMwcHg7XCJcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaElucHV0IHNoZS1saW5lLWlucHV0IGZvcm0tY29udHJvbFwiXG4gICAgICAgICAgKGZvY3VzaW4pPVwiZ2V0U291cmNlRGF0YUxvY2FsKCRldmVudClcIlxuICAgICAgICAgIChpbnB1dCk9XCJnZXRTb3VyY2VEYXRhTG9jYWwoJGV2ZW50KVwiPlxuICA8ZGl2IGlkPVwic2VsZWN0TGlzdFwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO3Bvc2l0aW9uOiBhYnNvbHV0ZTtiYWNrZ3JvdW5kOiB3aGl0ZTt6LWluZGV4OiAyO1wiPlxuICA8ZGl2ICpuZ0lmPVwiZmluYWxSZXN1bHRzLmxlbmd0aCA+IDAgJiYgc2hvd1N1Z2dlc3Rpb25cIlxuICAgIHN0eWxlPVwibWF4LWhlaWdodDogMjB2aDtib3JkZXI6IDFweCBzb2xpZCAjZDJkNGQ2O292ZXJmbG93OiBzY3JvbGw7IG1pbi13aWR0aDoxMDBweFwiXG4gICAgICAgY2xhc3M9XCJzdWdnZXN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgIDwhLS0gSEEgMjBERUMyMyBVbmNvbW1lbnRlZCB0aGUgbG9naWMgLS0+XG4gICAgICAgPCEtLSBWRCAwM01heS0gc2VhcmNoIGNoYW5nZXMgLS0+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbmFsUmVzdWx0c1wiIChjbGljayk9J2NsaWNrSXRlbShpdGVtKScgY2xhc3M9XCJob292ZXJcIj5cbiAgICAgICAgPCEtLSBWRCAyNkp1bjI0IC0gaWQgY29uZGl0aW9uIHJlbW92ZWQgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQteCBhbGlnbi1taWRkbGVcIiBzdHlsZT1cIlwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS50aHVtYm5haWxcIiBjbGFzcz1cImNlbGwgc2hyaW5rXCIgc3R5bGU9XCJ3aWR0aDogNjBweDsgbWFyZ2luLXJpZ2h0OiAxLjZyZW07XCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS50aHVtYm5haWxcIiBzdHlsZT1cIndpZHRoOiA2MHB4O1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYXV0b1wiIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDsgcGFkZGluZzo1cHggOHB4IDAgOHB4XCI+XG4gICAgICAgICAgICAgICAgPCEtLS8vIFZEIDI2SlVOMjQgLSBwaXBlIGNoYW5nZXMgLS0+XG4gICAgICAgICAgICAgICAgPCEtLSBSUyAyOUpBTjI1IC0tPlxuICAgICAgICAgICAgICAgIDxoNCA+e3sgJycgfCBnZXRWYWx1ZTogaXRlbSA6IFNlYXJjaEl0ZW0gIH19PC9oND5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgQ29tbWVudGVkIHRoaXMgZm9yIGZ1dHVyZSBwdXJwb3NlIC0tPlxuICAgICAgPCEtLSA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkXCI+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGg+e3sgJ2ZpcnN0TmFtZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XG4gICAgICAgICAgICAgIDx0aD57eyAnbGFzdE5hbWUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2UgfX08L3RoPlxuICAgICAgICAgICAgICA8dGg+e3sgJ2RpdmlzaW9uJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlIH19PC90aD5cbiAgICAgICAgICAgICAgPHRoPnt7ICdudW1iZXJQbGF0ZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbmFsUmVzdWx0c1wiIChjbGljayk9J2NsaWNrSXRlbShpdGVtKSc+XG4gICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmZpcnN0TmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmxhc3ROYW1lIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0uZGl2aXNpb24gfX08L3RkPlxuICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS5udW1iZXJQbGF0ZSB9fTwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+IC0tPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=