@evotor-dev/ui-kit 6.5.1 → 6.6.0
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/bundles/evotor-dev-ui-kit.umd.js +263 -109
- package/bundles/evotor-dev-ui-kit.umd.js.map +1 -1
- package/esm2015/lib/components/evo-button/components/evo-button/evo-button.component.js +92 -0
- package/esm2015/lib/components/evo-button/components/evo-button-old/evo-button-old.component.js +96 -0
- package/esm2015/lib/components/evo-button/constants/evo-button-themes-map.js +31 -0
- package/esm2015/lib/components/evo-button/evo-button.module.js +9 -14
- package/esm2015/lib/components/evo-button/public-api.js +4 -2
- package/esm2015/lib/components/evo-button/types/evo-button-color.js +2 -0
- package/esm2015/lib/components/evo-button/types/evo-button-shape.js +2 -0
- package/esm2015/lib/components/evo-button/types/evo-button-size.js +2 -0
- package/esm2015/lib/components/evo-button/types/evo-button-theme-params.js +2 -0
- package/esm2015/lib/components/evo-button/types/evo-button-theme.js +2 -0
- package/esm2015/lib/components/evo-button/types/index.js +6 -0
- package/esm2015/lib/components/evo-loader/evo-circular-loader.component.js +1 -1
- package/esm2015/lib/components/evo-modal/evo-modal.component.js +16 -7
- package/esm2015/lib/components/evo-upload/evo-upload.component.js +3 -3
- package/fesm2015/evotor-dev-ui-kit.js +225 -97
- package/fesm2015/evotor-dev-ui-kit.js.map +1 -1
- package/lib/components/evo-button/components/evo-button/evo-button.component.d.ts +24 -0
- package/lib/components/evo-button/{evo-button.component.d.ts → components/evo-button-old/evo-button-old.component.d.ts} +9 -3
- package/lib/components/evo-button/constants/evo-button-themes-map.d.ts +2 -0
- package/lib/components/evo-button/evo-button.module.d.ts +6 -4
- package/lib/components/evo-button/public-api.d.ts +3 -1
- package/lib/components/evo-button/types/evo-button-color.d.ts +5 -0
- package/lib/components/evo-button/types/evo-button-shape.d.ts +4 -0
- package/lib/components/evo-button/types/evo-button-size.d.ts +5 -0
- package/lib/components/evo-button/types/evo-button-theme-params.d.ts +5 -0
- package/lib/components/evo-button/types/evo-button-theme.d.ts +1 -0
- package/lib/components/evo-button/types/index.d.ts +5 -0
- package/lib/components/evo-modal/evo-modal.component.d.ts +10 -6
- package/package.json +1 -1
- package/styles/components/evo-table.scss +9 -9
- package/styles/mixins.scss +7 -7
- package/esm2015/lib/components/evo-button/evo-button.component.js +0 -87
|
@@ -9,7 +9,7 @@ import * as i0 from "@angular/core";
|
|
|
9
9
|
import * as i1 from "@angular/forms";
|
|
10
10
|
import * as i2 from "../evo-icon/evo-icon.component";
|
|
11
11
|
import * as i3 from "../evo-alert/evo-alert.component";
|
|
12
|
-
import * as i4 from "../evo-button/evo-button.component";
|
|
12
|
+
import * as i4 from "../evo-button/components/evo-button/evo-button.component";
|
|
13
13
|
import * as i5 from "../../directives/evo-ui-class.directive";
|
|
14
14
|
import * as i6 from "@angular/common";
|
|
15
15
|
import * as i7 from "../../pipes/safe-html.pipe";
|
|
@@ -233,7 +233,7 @@ EvoUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
|
|
|
233
233
|
useExisting: forwardRef(() => EvoUploadComponent),
|
|
234
234
|
multi: true,
|
|
235
235
|
},
|
|
236
|
-
], viewQueries: [{ propertyName: "inputFileElement", first: true, predicate: ["inputFile"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"evo-upload\">\n <label
|
|
236
|
+
], viewQueries: [{ propertyName: "inputFileElement", first: true, predicate: ["inputFile"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"evo-upload\">\n <label\n class=\"evo-upload__wrapper\"\n [evoUiClass]=\"{over: states.isDragOver, disabled: isDisabled || loading}\"\n (click)=\"onTouched()\"\n (dragover)=\"handleDragOver($event)\"\n (dragleave)=\"handleDragLeave($event)\"\n (drop)=\"handleDrop($event)\"\n >\n <evo-icon\n shape=\"upload\"\n class=\"evo-upload__upload-icon\"\n [evoUiClass]=\"{disabled: isDisabled || loading}\"\n ></evo-icon>\n <span class=\"evo-upload__title\" [evoUiClass]=\"{disabled: isDisabled || loading}\">{{ dropZoneLabel }}</span>\n\n <span class=\"evo-upload__hint\" [evoUiClass]=\"{disabled: isDisabled || loading}\">\n \u0438\u043B\u0438\n <span class=\"evo-upload__fake-link\" [evoUiClass]=\"{disabled: isDisabled || loading}\">\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435</span>\n <ng-container *ngIf=\"dropZoneHint\">\n (\n <span class=\"evo-upload__additional-hint\" [innerHTML]=\"dropZoneHint | safeHtml\"></span>\n )\n </ng-container>\n </span>\n\n <input\n #inputFile\n type=\"file\"\n class=\"evo-upload__input\"\n [accept]=\"accept\"\n [disabled]=\"loading || isDisabled\"\n [attr.multiple]=\"maxFiles === 1 ? null : true\"\n (change)=\"inputChange($event.target.files)\"\n />\n </label>\n\n <evo-alert *ngIf=\"!earlyValidation && filesForm.errors?.maxFiles\" type=\"danger\">\n <ng-container>\n \u041D\u0435\u043B\u044C\u0437\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 {{ maxFiles || 1 | declination:[\"\u0444\u0430\u0439\u043B\u0430\", \"\u0444\u0430\u0439\u043B\u043E\u0432\", \"\u0444\u0430\u0439\u043B\u043E\u0432\"] }}\n </ng-container>\n </evo-alert>\n <evo-alert *ngIf=\"earlyValidation && filesForm.errors\" type=\"danger\">\n <ul class=\"evo-list\">\n <li *ngIf=\"filesForm.errors.maxFiles\">\n \u041D\u0435\u043B\u044C\u0437\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 {{ maxFiles || 1 | declination:[\"\u0444\u0430\u0439\u043B\u0430\", \"\u0444\u0430\u0439\u043B\u043E\u0432\", \"\u0444\u0430\u0439\u043B\u043E\u0432\"] }}\n </li>\n <li *ngIf=\"filesForm.errors.size\">\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u043E\u0434\u043D\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430 \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 {{ filesSizeLimitText }}</li>\n <li *ngIf=\"filesForm.errors.extension\">\u0412\u044B\u0431\u0440\u0430\u043D \u0444\u0430\u0439\u043B \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u043E\u0433\u043E \u0444\u043E\u0440\u043C\u0430\u0442\u0430</li>\n </ul>\n </evo-alert>\n\n <ul class=\"evo-upload__list\">\n <li *ngFor=\"let file of filesForm.controls; let i = index\" class=\"evo-upload__list-item\">\n <div class=\"evo-upload__item-inner\">\n <evo-icon shape=\"file\" svgWidth=\"24\" svgHeight=\"24\" class=\"evo-upload__file-icon\"></evo-icon>\n\n <span\n *ngIf=\"clickableFiles\"\n class=\"evo-upload__link evo-link\"\n (click)=\"clickFile.emit({ file: file.value, index: i })\"\n >\n {{ file.value.name }}\n </span>\n\n <span *ngIf=\"!clickableFiles\">{{ file.value.name }}</span>\n </div>\n\n <evo-icon\n shape=\"decline\"\n svgWidth=\"24\"\n svgHeight=\"24\"\n class=\"evo-upload__button-remove\"\n [evoUiClass]=\"{disabled: loading || isDisabled}\"\n (click)=\"handleItemRemove(i)\"\n ></evo-icon>\n\n <div\n class=\"evo-upload__list-delimiter\"\n [evoUiClass]=\"{error: filesForm.controls[i].errors}\"\n [ngSwitch]=\"getControlError(filesForm.controls[i])\"\n >\n <ng-container *ngSwitchCase=\"'size'\">\u0420\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430 \u043F\u0440\u0435\u0432\u044B\u0448\u0430\u0435\u0442 \u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439</ng-container>\n <ng-container *ngSwitchCase=\"'extension'\">\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0444\u0430\u0439\u043B\u0430</ng-container>\n </div>\n </li>\n </ul>\n\n <div *ngIf=\"filesForm.controls.length\" class=\"evo-upload__controls\">\n <button\n *ngIf=\"!hideClearButton\"\n evoButton\n color=\"secondary\"\n theme=\"rounded-outline\"\n [disabled]=\"loading || isDisabled\"\n [loading]=\"loading\"\n (click)=\"handleResetButtonClick()\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0441\u0451\n </button>\n <button\n *ngIf=\"!hideSubmitButton\"\n evoButton\n color=\"success\"\n class=\"evo-upload__submit\"\n [disabled]=\"filesForm.invalid || loading || isDisabled\"\n [loading]=\"loading\"\n (click)=\"handleSubmitButtonClick()\"\n >\n \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C\n </button>\n </div>\n</div>\n", styles: [".evo-link,.evo-upload__fake-link{color:#0986e2;font-weight:600;text-decoration:none;border-bottom:1px solid transparent;transition:color .3s,border-color .3s}.evo-link:hover,.evo-upload__fake-link:hover{color:#0986e2;border-bottom-color:#0986e2}.evo-link:active,.evo-upload__fake-link:active{color:#0879cb}.evo-link_dashed{border-bottom:1px dashed}.evo-link_dashed:hover{text-decoration:none;border-bottom-color:transparent}.evo-link_danger{color:#ff1817}.evo-link_danger:hover{color:#ff4645;border-bottom-color:#ff4645}.evo-link_danger:active{color:#e51715;border-bottom-color:#e51715}.evo-upload{width:100%}.evo-upload__wrapper{display:flex;flex-direction:column;align-items:center;width:100%;margin-bottom:24px;padding:32px 0;color:#231f20;background:#F4F6F8;border:2px solid transparent;border-radius:8px}@media (max-width: 767px){.evo-upload__wrapper{padding:16px}}.evo-upload__wrapper_disabled{pointer-events:none}.evo-upload__wrapper_over{border-color:#dbe3ea}.evo-upload__upload-icon{flex:0 0 48px;width:48px;height:48px;margin-bottom:24px;transition:fill .3s;fill:#91b1b8}.evo-upload__upload-icon_disabled{fill:#727272}@media (max-width: 767px){.evo-upload__upload-icon{margin-bottom:16px}}.evo-upload__title{margin-bottom:8px;font-weight:bold;font-size:24px;text-align:center;transition:color .3s}.evo-upload__title_disabled{color:#727272}@media (max-width: 767px){.evo-upload__title{font-size:16px}}.evo-upload__hint{font-size:18px;text-align:center;transition:color .3s}.evo-upload__hint_disabled{color:#727272}@media (max-width: 767px){.evo-upload__hint{font-size:14px}}.evo-upload__fake-link_disabled{color:#727272}.evo-upload__input{display:none}.evo-upload__list{margin-top:24px;margin-bottom:24px}.evo-upload__list:empty{display:none}.evo-upload__file-icon{margin-right:8px;fill:#91b1b8}.evo-upload__list-item{display:flex;flex-wrap:wrap;align-items:center;margin-bottom:15px;color:#212121;font-weight:600;font-size:16px}.evo-upload__list-item:last-of-type{margin-bottom:24px}.evo-upload__item-inner{display:flex;flex-flow:row wrap;align-items:center}.evo-upload__list-delimiter{width:100%;margin-top:15px;color:#ff1817;font-size:14px;font-style:italic;line-height:22px;border-top:1px solid #C6C6C6}.evo-upload__list-delimiter_error{border-top-color:#ff1817}.evo-upload__button-remove{margin-left:auto;cursor:pointer;transition:fill .3s;fill:#91b1b8}.evo-upload__button-remove:not(.evo-upload__button-remove_disabled):hover{fill:#231f20}.evo-upload__button-remove_disabled{cursor:default;fill:#c6c6c6}.evo-upload__controls{display:flex;justify-content:space-between}.evo-upload__submit{margin-left:auto}.evo-upload__link{cursor:pointer}.evo-list{margin-bottom:0}.evo-list li:before{color:#fff}\n"], components: [{ type: i2.EvoIconComponent, selector: "evo-icon", inputs: ["shape", "svgWidth", "svgHeight", "svgViewBox"] }, { type: i3.EvoAlertComponent, selector: "evo-alert", inputs: ["closable", "icon", "iconSrc", "type", "size"], outputs: ["close"] }, { type: i4.EvoButtonComponent, selector: "button[evoButton], a[evoButton]", inputs: ["size", "color", "theme", "disabled", "loading"] }], directives: [{ type: i5.EvoUiClassDirective, selector: "[evoUiClass]", inputs: ["class", "evoUiClass"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], pipes: { "safeHtml": i7.SafeHtmlPipe, "declination": i8.DeclinationPipe } });
|
|
237
237
|
__decorate([
|
|
238
238
|
autobind
|
|
239
239
|
], EvoUploadComponent.prototype, "fileSizeValidator", null);
|
|
@@ -289,4 +289,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
289
289
|
type: ViewChild,
|
|
290
290
|
args: ['inputFile']
|
|
291
291
|
}], fileSizeValidator: [], fileExtensionValidator: [], maxFilesValidator: [] } });
|
|
292
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldm8tdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9ldm8tdXBsb2FkL2V2by11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLXVwbG9hZC9ldm8tdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUtILFdBQVcsRUFDWCxpQkFBaUIsRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7O0FBbUIvRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQXdDbEQsWUFDWSxXQUF3QixFQUN0QixRQUFrQjtRQUU1QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFIUixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBakN2QixrQkFBYSxHQUFHLG9DQUFvQyxDQUFDO1FBRXJELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVF4QixZQUFPLEdBQUcsS0FBSyxDQUFDO1FB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QUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO1lBQ2pELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixnS0N0Q0wsbTFLQXlGQTtBRHVMSTtJQURDLFFBQVE7MkRBT1I7QUFHRDtJQURDLFFBQVE7Z0VBVVI7QUFHRDtJQURDLFFBQVE7MkRBT1I7NEZBblFRLGtCQUFrQjtrQkFaOUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsU0FBUyxFQUFFLENBQUMsNkJBQTZCLENBQUM7b0JBQzFDLFdBQVcsRUFBRSw2QkFBNkI7b0JBQzFDLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7aUJBQ0o7eUhBR2dCLE1BQU07c0JBQWxCLEtBQUs7Z0JBT0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFTyxhQUFhO3NCQUF6QixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVpQixnQkFBZ0I7c0JBQXZDLFNBQVM7dUJBQUMsV0FBVztnQkEyTWQsaUJBQWlCLE1BU2pCLHNCQUFzQixNQVl0QixpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsIEluamVjdG9yLFxuICAgIElucHV0LCBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1BcnJheSxcbiAgICBGb3JtQnVpbGRlcixcbiAgICBGb3JtQ29udHJvbCxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUlxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgYXV0b2JpbmQgZnJvbSAnYXV0b2JpbmQtZGVjb3JhdG9yJztcbmltcG9ydCBieXRlcyBmcm9tICdieXRlcyc7XG5pbXBvcnQgKiBhcyBtaW1lIGZyb20gJ21pbWUnO1xuaW1wb3J0IHsgRXZvQmFzZUNvbnRyb2wgfSBmcm9tICcuLi8uLi9jb21tb24vZXZvLWJhc2UtY29udHJvbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZvVXBsb2FkSXRlbUNsaWNrRXZlbnQge1xuICAgIGZpbGU6IEZpbGU7XG4gICAgaW5kZXg6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldm8tdXBsb2FkJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ldm8tdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V2by11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEV2b1VwbG9hZENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFdm9VcGxvYWRDb21wb25lbnQgZXh0ZW5kcyBFdm9CYXNlQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQge1xuXG4gICAgQElucHV0KCkgc2V0IGFjY2VwdChleHRlbnNpb25zOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGV4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXB0ZWRNaW1lVHlwZXMgPSBleHRlbnNpb25zXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAubWFwKGV4dGVuc2lvbiA9PiBtaW1lLmdldFR5cGUoZXh0ZW5zaW9uKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KCkgZHJvcFpvbmVMYWJlbCA9ICfQn9C10YDQtdGC0LDRidC40YLQtSDRgdGO0LTQsCDRhNCw0LnQu9GLINC00LvRjyDQt9Cw0LPRgNGD0LfQutC4JztcbiAgICBASW5wdXQoKSBkcm9wWm9uZUhpbnQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRlQ2xlYXJCdXR0b24gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoaWRlU3VibWl0QnV0dG9uID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2xpY2thYmxlRmlsZXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBlYXJseVZhbGlkYXRpb24gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNldCBmaWxlU2l6ZUxpbWl0KGZpbGVTaXplOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5maWxlc1NpemVMaW1pdFRleHQgPSBmaWxlU2l6ZTtcbiAgICAgICAgdGhpcy5maWxlc1NpemVMaW1pdEluQnl0ZXMgPSBieXRlcyhmaWxlU2l6ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbWF4RmlsZXM6IG51bWJlcjtcbiAgICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgc3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlTGlzdD4oKTtcbiAgICBAT3V0cHV0KCkgYWRkRmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVMaXN0PigpO1xuICAgIEBPdXRwdXQoKSByZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBAT3V0cHV0KCkgY2xpY2tGaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxFdm9VcGxvYWRJdGVtQ2xpY2tFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RmlsZScpIGlucHV0RmlsZUVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgZmlsZXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSwgW3RoaXMubWF4RmlsZXNWYWxpZGF0b3JdKTtcbiAgICBmaWxlc1NpemVMaW1pdFRleHQ6IHN0cmluZztcbiAgICBmaWxlc1NpemVMaW1pdEluQnl0ZXM6IG51bWJlcjtcbiAgICBzdGF0ZXMgPSB7XG4gICAgICAgIGlzRHJhZ092ZXI6IGZhbHNlLFxuICAgIH07XG4gICAgYWNjZXB0ZWRNaW1lVHlwZXM6IHN0cmluZ1tdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlT25Gb3JtQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UgPSAodmFsdWUpID0+IHt9O1xuICAgIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm1lcmdlQ29udHJvbHNFcnJvcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlVmFsdWUoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgRmlsZVtdKSB7XG4gICAgICAgIGlmIChmaWxlTGlzdCAmJiBmaWxlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoZmlsZUxpc3QgaW5zdGFuY2VvZiBBcnJheSB8fCBmaWxlTGlzdCBpbnN0YW5jZW9mIEZpbGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aXBlVXBsb2FkTGlzdCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVhcmx5VmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVhcmx5VmFsaWRhdGlvbkZuKGZpbGVMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNGb3JtLmVycm9ycykgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmlsZXMoZmlsZUxpc3QgYXMgRmlsZUxpc3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW0V2b1VpS2l0XTogd3JvbmcgaW5pdGlhbCB2YWx1ZSBwYXNzZWQgdG8gXCJldm8tdXBsb2FkXCIgY29tcG9uZW50LiBPbmx5IEZpbGVMaXN0IGFuZCBGaWxlW10gYXJlIGFsbG93ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbnRyb2xFcnJvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycylbMF07XG4gICAgfVxuXG4gICAgaGFuZGxlRHJhZ092ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlcy5pc0RyYWdPdmVyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVEcmFnTGVhdmUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnN0YXRlcy5pc0RyYWdPdmVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzO1xuXG4gICAgICAgIHRoaXMuc3RhdGVzLmlzRHJhZ092ZXIgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWFybHlWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lYXJseVZhbGlkYXRpb25GbihmaWxlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNGb3JtLmVycm9ycykgeyByZXR1cm47IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZXMuZW1pdChmaWxlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaWxlcyhmaWxlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVJdGVtUmVtb3ZlKGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlc0Zvcm0ucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KGluZGV4KTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNldEJ1dHRvbkNsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53aXBlVXBsb2FkTGlzdCgpO1xuICAgIH1cblxuICAgIGhhbmRsZVN1Ym1pdEJ1dHRvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHRoaXMuZmlsZXNGb3JtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpbnB1dENoYW5nZShmaWxlczogRmlsZUxpc3QpIHtcbiAgICAgICAgaWYgKHRoaXMuZWFybHlWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmVhcmx5VmFsaWRhdGlvbkZuKGZpbGVzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzRm9ybS5lcnJvcnMpIHsgcmV0dXJuOyB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRGaWxlcy5lbWl0KGZpbGVzKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsZXMoZmlsZXMpO1xuICAgIH1cblxuICAgIGVhcmx5VmFsaWRhdGlvbkZuKGZpbGVzOiBGaWxlTGlzdCB8IEZpbGVbXSkge1xuICAgICAgICB0aGlzLmZpbGVzRm9ybS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIGNvbnN0IGZpbGVzQXJyYXkgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGlmICh0aGlzLm1heEZpbGVzICYmIHRoaXMuaXNGaWxlc0xlbmd0aFZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IG1heEZpbGVzOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGVzU2l6ZUxpbWl0SW5CeXRlcyAmJiAhdGhpcy5pc0ZpbGVzU2l6ZVZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IHNpemU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWNjZXB0ZWRNaW1lVHlwZXMgJiYgIXRoaXMuaXNGaWxlc0V4dGVuc2lvblZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IGV4dGVuc2lvbjogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5maWxlc0Zvcm0uc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24oe30sIC4uLmVycm9ycykpO1xuICAgICAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0ZpbGVzTGVuZ3RoVmFsaWQoZmlsZXM6IEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhGaWxlcyA8IChmaWxlcy5sZW5ndGggKyB0aGlzLmZpbGVzRm9ybS5jb250cm9scy5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlzRmlsZXNTaXplVmFsaWQoZmlsZXM6IEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIWZpbGVzLnNvbWUoKHsgc2l6ZSB9KSA9PiB0aGlzLmZpbGVzU2l6ZUxpbWl0SW5CeXRlcyA8IHNpemUpO1xuICAgIH1cblxuICAgIGlzRmlsZXNFeHRlbnNpb25WYWxpZChmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaWxlcy5ldmVyeSgoeyB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjY2VwdGVkTWltZVR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm9jZXNzRmlsZXMoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIEFycmF5LmZyb20oZmlsZXMpLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHsgLy8gdHNsaW50OmRpc2FibGU6bm8tZm9yLWVhY2gtcHVzaFxuICAgICAgICAgICAgdGhpcy5maWxlc0Zvcm0ucHVzaChuZXcgRm9ybUNvbnRyb2woZmlsZSwgW3RoaXMuZmlsZUV4dGVuc2lvblZhbGlkYXRvciwgdGhpcy5maWxlU2l6ZVZhbGlkYXRvcl0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRGaWxlRWxlbWVudCAmJiB0aGlzLmlucHV0RmlsZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEZpbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdpcGVVcGxvYWRMaXN0KCkge1xuICAgICAgICB3aGlsZSAodGhpcy5maWxlc0Zvcm0uY29udHJvbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzRm9ybS5yZW1vdmVBdCgwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VDb250cm9sc0Vycm9ycygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZmlsZXNGb3JtLmVycm9ycyk7XG4gICAgICAgIHRoaXMuZmlsZXNGb3JtLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgY29udHJvbC5lcnJvcnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250cm9sLnNldEVycm9ycyhPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA/IGVycm9ycyA6IG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlT25Gb3JtQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5maWxlc0Zvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgZmlsZVNpemVWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlc1NpemVMaW1pdEluQnl0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUuc2l6ZSA+IHRoaXMuZmlsZXNTaXplTGltaXRJbkJ5dGVzID8geyBzaXplOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgZmlsZUV4dGVuc2lvblZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjY2VwdGVkTWltZVR5cGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVUeXBlID0gKGNvbnRyb2wudmFsdWUgYXMgRmlsZSkudHlwZTtcbiAgICAgICAgY29uc3QgaXNFeHRlbnNpb25BbGxvd2VkID0gdGhpcy5hY2NlcHRlZE1pbWVUeXBlcy5pbmNsdWRlcyhmaWxlVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIGlzRXh0ZW5zaW9uQWxsb3dlZCA/IG51bGwgOiB7IGV4dGVuc2lvbjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgbWF4RmlsZXNWYWxpZGF0b3IoY29udHJvbDogRm9ybUFycmF5KSB7XG4gICAgICAgIGlmICghdGhpcy5tYXhGaWxlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wuY29udHJvbHMubGVuZ3RoID4gdGhpcy5tYXhGaWxlcyA/IHsgbWF4RmlsZXM6IHRydWUgfSA6IG51bGw7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImV2by11cGxvYWRcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJldm8tdXBsb2FkX193cmFwcGVyXCJcbiAgICAgICAgICAgW2V2b1VpQ2xhc3NdPVwie292ZXI6IHN0YXRlcy5pc0RyYWdPdmVyLCBkaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBsb2FkaW5nfVwiXG4gICAgICAgICAgIChjbGljayk9XCJvblRvdWNoZWQoKVwiXG4gICAgICAgICAgIChkcmFnb3Zlcik9XCJoYW5kbGVEcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgICAgKGRyYWdsZWF2ZSk9XCJoYW5kbGVEcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgICAgIChkcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50KVwiPlxuICAgICAgICA8ZXZvLWljb24gY2xhc3M9XCJldm8tdXBsb2FkX191cGxvYWQtaWNvblwiIHNoYXBlPVwidXBsb2FkXCIgW2V2b1VpQ2xhc3NdPVwie2Rpc2FibGVkOiBpc0Rpc2FibGVkIHx8IGxvYWRpbmd9XCI+PC9ldm8taWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJldm8tdXBsb2FkX190aXRsZVwiIFtldm9VaUNsYXNzXT1cIntkaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBsb2FkaW5nfVwiPnt7IGRyb3Bab25lTGFiZWwgfX08L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJldm8tdXBsb2FkX19oaW50XCIgW2V2b1VpQ2xhc3NdPVwie2Rpc2FibGVkOiBpc0Rpc2FibGVkIHx8IGxvYWRpbmd9XCI+XG4gICAgICAgICAgICDQuNC70LggPHNwYW4gY2xhc3M9XCJldm8tdXBsb2FkX19mYWtlLWxpbmtcIiBbZXZvVWlDbGFzc109XCJ7ZGlzYWJsZWQ6IGlzRGlzYWJsZWQgfHwgbG9hZGluZ31cIj7Qt9Cw0LPRgNGD0LfQuNGC0LU8L3NwYW4+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHJvcFpvbmVIaW50XCI+XG4gICAgICAgICAgICAgICAgKDxzcGFuIGNsYXNzPVwiZXZvLXVwbG9hZF9fYWRkaXRpb25hbC1oaW50XCIgW2lubmVySFRNTF09XCJkcm9wWm9uZUhpbnQgfCBzYWZlSHRtbFwiPjwvc3Bhbj4pXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImV2by11cGxvYWRfX2lucHV0XCJcbiAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaW5wdXRDaGFuZ2UoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgICAgICAgICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICBbYXR0ci5tdWx0aXBsZV09XCJtYXhGaWxlcyA9PT0gMSA/IG51bGwgOiB0cnVlXCJcbiAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICNpbnB1dEZpbGUgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGV2by1hbGVydCAqbmdJZj1cIiFlYXJseVZhbGlkYXRpb24gJiYgZmlsZXNGb3JtLmVycm9ycz8ubWF4RmlsZXNcIiB0eXBlPVwiZGFuZ2VyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXI+0J3QtdC70YzQt9GPINC30LDQs9GA0YPQt9C40YLRjCDQsdC+0LvQtdC1IHt7IG1heEZpbGVzIHx8IDEgfCBkZWNsaW5hdGlvbjpbXCLRhNCw0LnQu9CwXCIsIFwi0YTQsNC50LvQvtCyXCIsIFwi0YTQsNC50LvQvtCyXCJdIH19PC9uZy1jb250YWluZXI+XG4gICAgPC9ldm8tYWxlcnQ+XG4gICAgPGV2by1hbGVydCAqbmdJZj1cImVhcmx5VmFsaWRhdGlvbiAmJiBmaWxlc0Zvcm0uZXJyb3JzXCIgdHlwZT1cImRhbmdlclwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJldm8tbGlzdFwiPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmlsZXNGb3JtLmVycm9ycy5tYXhGaWxlc1wiPtCd0LXQu9GM0LfRjyDQt9Cw0LPRgNGD0LfQuNGC0Ywg0LHQvtC70LXQtSB7eyBtYXhGaWxlcyB8fCAxIHwgZGVjbGluYXRpb246W1wi0YTQsNC50LvQsFwiLCBcItGE0LDQudC70L7QslwiLCBcItGE0LDQudC70L7QslwiXSB9fTwvbGk+XG4gICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWxlc0Zvcm0uZXJyb3JzLnNpemVcIj7QnNCw0LrRgdC40LzQsNC70YzQvdGL0Lkg0YDQsNC30LzQtdGAINC+0LTQvdC+0LPQviDRhNCw0LnQu9CwINC90LUg0LHQvtC70LXQtSB7eyBmaWxlc1NpemVMaW1pdFRleHQgfX08L2xpPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmlsZXNGb3JtLmVycm9ycy5leHRlbnNpb25cIj7QktGL0LHRgNCw0L0g0YTQsNC50Lsg0L3QtdC00L7Qv9GD0YHRgtC40LzQvtCz0L4g0YTQvtGA0LzQsNGC0LA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgIDwvZXZvLWFsZXJ0PlxuXG4gICAgPHVsIGNsYXNzPVwiZXZvLXVwbG9hZF9fbGlzdFwiPlxuICAgICAgICA8bGkgY2xhc3M9XCJldm8tdXBsb2FkX19saXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlc0Zvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2by11cGxvYWRfX2l0ZW0taW5uZXJcIj5cbiAgICAgICAgICAgICAgICA8ZXZvLWljb24gY2xhc3M9XCJldm8tdXBsb2FkX19maWxlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICBzaGFwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBzdmdXaWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgc3ZnSGVpZ2h0PVwiMjRcIj48L2V2by1pY29uPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldm8tdXBsb2FkX19saW5rIGV2by1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjbGlja2FibGVGaWxlc1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0ZpbGUuZW1pdCh7IGZpbGU6IGZpbGUudmFsdWUsIGluZGV4OiBpIH0pXCJcbiAgICAgICAgICAgICAgICAgICAgPnt7IGZpbGUudmFsdWUubmFtZSB9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNsaWNrYWJsZUZpbGVzXCJcbiAgICAgICAgICAgICAgICAgICAgPnt7IGZpbGUudmFsdWUubmFtZSB9fTwvc3Bhbj5cblxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxldm8taWNvbiBjbGFzcz1cImV2by11cGxvYWRfX2J1dHRvbi1yZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNoYXBlPVwiZGVjbGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3ZnV2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgc3ZnSGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVJdGVtUmVtb3ZlKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZXZvVWlDbGFzc109XCJ7ZGlzYWJsZWQ6IGxvYWRpbmcgfHwgaXNEaXNhYmxlZH1cIj5cbiAgICAgICAgICAgIDwvZXZvLWljb24+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldm8tdXBsb2FkX19saXN0LWRlbGltaXRlclwiXG4gICAgICAgICAgICAgICAgIFtldm9VaUNsYXNzXT1cIntlcnJvcjogZmlsZXNGb3JtLmNvbnRyb2xzW2ldLmVycm9yc31cIlxuICAgICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiZ2V0Q29udHJvbEVycm9yKGZpbGVzRm9ybS5jb250cm9sc1tpXSlcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2l6ZSdcIj7QoNCw0LfQvNC10YAg0YTQsNC50LvQsCDQv9GA0LXQstGL0YjQsNC10YIg0LTQvtC/0YPRgdGC0LjQvNGL0Lk8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZXh0ZW5zaW9uJ1wiPtCd0LXQstC10YDQvdGL0Lkg0YTQvtGA0LzQsNGCINGE0LDQudC70LA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXZvLXVwbG9hZF9fY29udHJvbHNcIiAqbmdJZj1cImZpbGVzRm9ybS5jb250cm9scy5sZW5ndGhcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFoaWRlQ2xlYXJCdXR0b25cIlxuICAgICAgICAgICAgICAgIGV2by1idXR0b25cbiAgICAgICAgICAgICAgICBjb2xvcj1cImRhcmtibHVlLWxpbmVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUmVzZXRCdXR0b25DbGljaygpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCI+0KPQtNCw0LvQuNGC0Ywg0LLRgdGRPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZVN1Ym1pdEJ1dHRvblwiXG4gICAgICAgICAgICAgICAgZXZvLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fc3VibWl0XCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImdyZWVuXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU3VibWl0QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbGVzRm9ybS5pbnZhbGlkIHx8IGxvYWRpbmcgfHwgaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiPtCX0LDQs9GA0YPQt9C40YLRjDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldm8tdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9ldm8tdXBsb2FkL2V2by11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLXVwbG9hZC9ldm8tdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUtILFdBQVcsRUFDWCxpQkFBaUIsRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7O0FBbUIvRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQXdDbEQsWUFDWSxXQUF3QixFQUN0QixRQUFrQjtRQUU1QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFIUixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBakN2QixrQkFBYSxHQUFHLG9DQUFvQyxDQUFDO1FBRXJELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVF4QixZQUFPLEdBQUcsS0FBSyxDQUFDO1FB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QUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO1lBQ2pELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixnS0N0Q0wscWpMQWlIQTtBRCtKSTtJQURDLFFBQVE7MkRBT1I7QUFHRDtJQURDLFFBQVE7Z0VBVVI7QUFHRDtJQURDLFFBQVE7MkRBT1I7NEZBblFRLGtCQUFrQjtrQkFaOUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsU0FBUyxFQUFFLENBQUMsNkJBQTZCLENBQUM7b0JBQzFDLFdBQVcsRUFBRSw2QkFBNkI7b0JBQzFDLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7aUJBQ0o7eUhBR2dCLE1BQU07c0JBQWxCLEtBQUs7Z0JBT0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFTyxhQUFhO3NCQUF6QixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVpQixnQkFBZ0I7c0JBQXZDLFNBQVM7dUJBQUMsV0FBVztnQkEyTWQsaUJBQWlCLE1BU2pCLHNCQUFzQixNQVl0QixpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsIEluamVjdG9yLFxuICAgIElucHV0LCBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1BcnJheSxcbiAgICBGb3JtQnVpbGRlcixcbiAgICBGb3JtQ29udHJvbCxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUlxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgYXV0b2JpbmQgZnJvbSAnYXV0b2JpbmQtZGVjb3JhdG9yJztcbmltcG9ydCBieXRlcyBmcm9tICdieXRlcyc7XG5pbXBvcnQgKiBhcyBtaW1lIGZyb20gJ21pbWUnO1xuaW1wb3J0IHsgRXZvQmFzZUNvbnRyb2wgfSBmcm9tICcuLi8uLi9jb21tb24vZXZvLWJhc2UtY29udHJvbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZvVXBsb2FkSXRlbUNsaWNrRXZlbnQge1xuICAgIGZpbGU6IEZpbGU7XG4gICAgaW5kZXg6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldm8tdXBsb2FkJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ldm8tdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V2by11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEV2b1VwbG9hZENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFdm9VcGxvYWRDb21wb25lbnQgZXh0ZW5kcyBFdm9CYXNlQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQge1xuXG4gICAgQElucHV0KCkgc2V0IGFjY2VwdChleHRlbnNpb25zOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGV4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXB0ZWRNaW1lVHlwZXMgPSBleHRlbnNpb25zXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAubWFwKGV4dGVuc2lvbiA9PiBtaW1lLmdldFR5cGUoZXh0ZW5zaW9uKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KCkgZHJvcFpvbmVMYWJlbCA9ICfQn9C10YDQtdGC0LDRidC40YLQtSDRgdGO0LTQsCDRhNCw0LnQu9GLINC00LvRjyDQt9Cw0LPRgNGD0LfQutC4JztcbiAgICBASW5wdXQoKSBkcm9wWm9uZUhpbnQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRlQ2xlYXJCdXR0b24gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoaWRlU3VibWl0QnV0dG9uID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2xpY2thYmxlRmlsZXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBlYXJseVZhbGlkYXRpb24gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNldCBmaWxlU2l6ZUxpbWl0KGZpbGVTaXplOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5maWxlc1NpemVMaW1pdFRleHQgPSBmaWxlU2l6ZTtcbiAgICAgICAgdGhpcy5maWxlc1NpemVMaW1pdEluQnl0ZXMgPSBieXRlcyhmaWxlU2l6ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbWF4RmlsZXM6IG51bWJlcjtcbiAgICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgc3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlTGlzdD4oKTtcbiAgICBAT3V0cHV0KCkgYWRkRmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVMaXN0PigpO1xuICAgIEBPdXRwdXQoKSByZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBAT3V0cHV0KCkgY2xpY2tGaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxFdm9VcGxvYWRJdGVtQ2xpY2tFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RmlsZScpIGlucHV0RmlsZUVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgZmlsZXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSwgW3RoaXMubWF4RmlsZXNWYWxpZGF0b3JdKTtcbiAgICBmaWxlc1NpemVMaW1pdFRleHQ6IHN0cmluZztcbiAgICBmaWxlc1NpemVMaW1pdEluQnl0ZXM6IG51bWJlcjtcbiAgICBzdGF0ZXMgPSB7XG4gICAgICAgIGlzRHJhZ092ZXI6IGZhbHNlLFxuICAgIH07XG4gICAgYWNjZXB0ZWRNaW1lVHlwZXM6IHN0cmluZ1tdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlT25Gb3JtQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UgPSAodmFsdWUpID0+IHt9O1xuICAgIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm1lcmdlQ29udHJvbHNFcnJvcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlVmFsdWUoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgRmlsZVtdKSB7XG4gICAgICAgIGlmIChmaWxlTGlzdCAmJiBmaWxlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoZmlsZUxpc3QgaW5zdGFuY2VvZiBBcnJheSB8fCBmaWxlTGlzdCBpbnN0YW5jZW9mIEZpbGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aXBlVXBsb2FkTGlzdCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVhcmx5VmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVhcmx5VmFsaWRhdGlvbkZuKGZpbGVMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNGb3JtLmVycm9ycykgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmlsZXMoZmlsZUxpc3QgYXMgRmlsZUxpc3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW0V2b1VpS2l0XTogd3JvbmcgaW5pdGlhbCB2YWx1ZSBwYXNzZWQgdG8gXCJldm8tdXBsb2FkXCIgY29tcG9uZW50LiBPbmx5IEZpbGVMaXN0IGFuZCBGaWxlW10gYXJlIGFsbG93ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbnRyb2xFcnJvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycylbMF07XG4gICAgfVxuXG4gICAgaGFuZGxlRHJhZ092ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlcy5pc0RyYWdPdmVyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVEcmFnTGVhdmUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnN0YXRlcy5pc0RyYWdPdmVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzO1xuXG4gICAgICAgIHRoaXMuc3RhdGVzLmlzRHJhZ092ZXIgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWFybHlWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lYXJseVZhbGlkYXRpb25GbihmaWxlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNGb3JtLmVycm9ycykgeyByZXR1cm47IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZXMuZW1pdChmaWxlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaWxlcyhmaWxlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVJdGVtUmVtb3ZlKGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlc0Zvcm0ucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KGluZGV4KTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNldEJ1dHRvbkNsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53aXBlVXBsb2FkTGlzdCgpO1xuICAgIH1cblxuICAgIGhhbmRsZVN1Ym1pdEJ1dHRvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHRoaXMuZmlsZXNGb3JtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpbnB1dENoYW5nZShmaWxlczogRmlsZUxpc3QpIHtcbiAgICAgICAgaWYgKHRoaXMuZWFybHlWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmVhcmx5VmFsaWRhdGlvbkZuKGZpbGVzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzRm9ybS5lcnJvcnMpIHsgcmV0dXJuOyB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRGaWxlcy5lbWl0KGZpbGVzKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsZXMoZmlsZXMpO1xuICAgIH1cblxuICAgIGVhcmx5VmFsaWRhdGlvbkZuKGZpbGVzOiBGaWxlTGlzdCB8IEZpbGVbXSkge1xuICAgICAgICB0aGlzLmZpbGVzRm9ybS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIGNvbnN0IGZpbGVzQXJyYXkgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGlmICh0aGlzLm1heEZpbGVzICYmIHRoaXMuaXNGaWxlc0xlbmd0aFZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IG1heEZpbGVzOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGVzU2l6ZUxpbWl0SW5CeXRlcyAmJiAhdGhpcy5pc0ZpbGVzU2l6ZVZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IHNpemU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWNjZXB0ZWRNaW1lVHlwZXMgJiYgIXRoaXMuaXNGaWxlc0V4dGVuc2lvblZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IGV4dGVuc2lvbjogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5maWxlc0Zvcm0uc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24oe30sIC4uLmVycm9ycykpO1xuICAgICAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0ZpbGVzTGVuZ3RoVmFsaWQoZmlsZXM6IEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhGaWxlcyA8IChmaWxlcy5sZW5ndGggKyB0aGlzLmZpbGVzRm9ybS5jb250cm9scy5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlzRmlsZXNTaXplVmFsaWQoZmlsZXM6IEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIWZpbGVzLnNvbWUoKHsgc2l6ZSB9KSA9PiB0aGlzLmZpbGVzU2l6ZUxpbWl0SW5CeXRlcyA8IHNpemUpO1xuICAgIH1cblxuICAgIGlzRmlsZXNFeHRlbnNpb25WYWxpZChmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaWxlcy5ldmVyeSgoeyB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjY2VwdGVkTWltZVR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm9jZXNzRmlsZXMoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIEFycmF5LmZyb20oZmlsZXMpLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHsgLy8gdHNsaW50OmRpc2FibGU6bm8tZm9yLWVhY2gtcHVzaFxuICAgICAgICAgICAgdGhpcy5maWxlc0Zvcm0ucHVzaChuZXcgRm9ybUNvbnRyb2woZmlsZSwgW3RoaXMuZmlsZUV4dGVuc2lvblZhbGlkYXRvciwgdGhpcy5maWxlU2l6ZVZhbGlkYXRvcl0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRGaWxlRWxlbWVudCAmJiB0aGlzLmlucHV0RmlsZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEZpbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdpcGVVcGxvYWRMaXN0KCkge1xuICAgICAgICB3aGlsZSAodGhpcy5maWxlc0Zvcm0uY29udHJvbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzRm9ybS5yZW1vdmVBdCgwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VDb250cm9sc0Vycm9ycygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZmlsZXNGb3JtLmVycm9ycyk7XG4gICAgICAgIHRoaXMuZmlsZXNGb3JtLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgY29udHJvbC5lcnJvcnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250cm9sLnNldEVycm9ycyhPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA/IGVycm9ycyA6IG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlT25Gb3JtQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5maWxlc0Zvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgZmlsZVNpemVWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlc1NpemVMaW1pdEluQnl0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUuc2l6ZSA+IHRoaXMuZmlsZXNTaXplTGltaXRJbkJ5dGVzID8geyBzaXplOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgZmlsZUV4dGVuc2lvblZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjY2VwdGVkTWltZVR5cGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVUeXBlID0gKGNvbnRyb2wudmFsdWUgYXMgRmlsZSkudHlwZTtcbiAgICAgICAgY29uc3QgaXNFeHRlbnNpb25BbGxvd2VkID0gdGhpcy5hY2NlcHRlZE1pbWVUeXBlcy5pbmNsdWRlcyhmaWxlVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIGlzRXh0ZW5zaW9uQWxsb3dlZCA/IG51bGwgOiB7IGV4dGVuc2lvbjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgbWF4RmlsZXNWYWxpZGF0b3IoY29udHJvbDogRm9ybUFycmF5KSB7XG4gICAgICAgIGlmICghdGhpcy5tYXhGaWxlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wuY29udHJvbHMubGVuZ3RoID4gdGhpcy5tYXhGaWxlcyA/IHsgbWF4RmlsZXM6IHRydWUgfSA6IG51bGw7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImV2by11cGxvYWRcIj5cbiAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJldm8tdXBsb2FkX193cmFwcGVyXCJcbiAgICAgICAgW2V2b1VpQ2xhc3NdPVwie292ZXI6IHN0YXRlcy5pc0RyYWdPdmVyLCBkaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBsb2FkaW5nfVwiXG4gICAgICAgIChjbGljayk9XCJvblRvdWNoZWQoKVwiXG4gICAgICAgIChkcmFnb3Zlcik9XCJoYW5kbGVEcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdsZWF2ZSk9XCJoYW5kbGVEcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgIChkcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8ZXZvLWljb25cbiAgICAgICAgICAgIHNoYXBlPVwidXBsb2FkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fdXBsb2FkLWljb25cIlxuICAgICAgICAgICAgW2V2b1VpQ2xhc3NdPVwie2Rpc2FibGVkOiBpc0Rpc2FibGVkIHx8IGxvYWRpbmd9XCJcbiAgICAgICAgPjwvZXZvLWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXZvLXVwbG9hZF9fdGl0bGVcIiBbZXZvVWlDbGFzc109XCJ7ZGlzYWJsZWQ6IGlzRGlzYWJsZWQgfHwgbG9hZGluZ31cIj57eyBkcm9wWm9uZUxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXZvLXVwbG9hZF9faGludFwiIFtldm9VaUNsYXNzXT1cIntkaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBsb2FkaW5nfVwiPlxuICAgICAgICAgICAg0LjQu9C4XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV2by11cGxvYWRfX2Zha2UtbGlua1wiIFtldm9VaUNsYXNzXT1cIntkaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBsb2FkaW5nfVwiPtC30LDQs9GA0YPQt9C40YLQtTwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcm9wWm9uZUhpbnRcIj5cbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldm8tdXBsb2FkX19hZGRpdGlvbmFsLWhpbnRcIiBbaW5uZXJIVE1MXT1cImRyb3Bab25lSGludCB8IHNhZmVIdG1sXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjaW5wdXRGaWxlXG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImV2by11cGxvYWRfX2lucHV0XCJcbiAgICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXB0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IGlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIubXVsdGlwbGVdPVwibWF4RmlsZXMgPT09IDEgPyBudWxsIDogdHJ1ZVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImlucHV0Q2hhbmdlKCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGV2by1hbGVydCAqbmdJZj1cIiFlYXJseVZhbGlkYXRpb24gJiYgZmlsZXNGb3JtLmVycm9ycz8ubWF4RmlsZXNcIiB0eXBlPVwiZGFuZ2VyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICDQndC10LvRjNC30Y8g0LfQsNCz0YDRg9C30LjRgtGMINCx0L7Qu9C10LUge3sgbWF4RmlsZXMgfHwgMSB8IGRlY2xpbmF0aW9uOltcItGE0LDQudC70LBcIiwgXCLRhNCw0LnQu9C+0LJcIiwgXCLRhNCw0LnQu9C+0LJcIl0gfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9ldm8tYWxlcnQ+XG4gICAgPGV2by1hbGVydCAqbmdJZj1cImVhcmx5VmFsaWRhdGlvbiAmJiBmaWxlc0Zvcm0uZXJyb3JzXCIgdHlwZT1cImRhbmdlclwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJldm8tbGlzdFwiPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmlsZXNGb3JtLmVycm9ycy5tYXhGaWxlc1wiPlxuICAgICAgICAgICAgICAgINCd0LXQu9GM0LfRjyDQt9Cw0LPRgNGD0LfQuNGC0Ywg0LHQvtC70LXQtSB7eyBtYXhGaWxlcyB8fCAxIHwgZGVjbGluYXRpb246W1wi0YTQsNC50LvQsFwiLCBcItGE0LDQudC70L7QslwiLCBcItGE0LDQudC70L7QslwiXSB9fVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpbGVzRm9ybS5lcnJvcnMuc2l6ZVwiPtCc0LDQutGB0LjQvNCw0LvRjNC90YvQuSDRgNCw0LfQvNC10YAg0L7QtNC90L7Qs9C+INGE0LDQudC70LAg0L3QtSDQsdC+0LvQtdC1IHt7IGZpbGVzU2l6ZUxpbWl0VGV4dCB9fTwvbGk+XG4gICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWxlc0Zvcm0uZXJyb3JzLmV4dGVuc2lvblwiPtCS0YvQsdGA0LDQvSDRhNCw0LnQuyDQvdC10LTQvtC/0YPRgdGC0LjQvNC+0LPQviDRhNC+0YDQvNCw0YLQsDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9ldm8tYWxlcnQ+XG5cbiAgICA8dWwgY2xhc3M9XCJldm8tdXBsb2FkX19saXN0XCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlc0Zvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImV2by11cGxvYWRfX2xpc3QtaXRlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2by11cGxvYWRfX2l0ZW0taW5uZXJcIj5cbiAgICAgICAgICAgICAgICA8ZXZvLWljb24gc2hhcGU9XCJmaWxlXCIgc3ZnV2lkdGg9XCIyNFwiIHN2Z0hlaWdodD1cIjI0XCIgY2xhc3M9XCJldm8tdXBsb2FkX19maWxlLWljb25cIj48L2V2by1pY29uPlxuXG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjbGlja2FibGVGaWxlc1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fbGluayBldm8tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0ZpbGUuZW1pdCh7IGZpbGU6IGZpbGUudmFsdWUsIGluZGV4OiBpIH0pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZpbGUudmFsdWUubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNsaWNrYWJsZUZpbGVzXCI+e3sgZmlsZS52YWx1ZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxldm8taWNvblxuICAgICAgICAgICAgICAgIHNoYXBlPVwiZGVjbGluZVwiXG4gICAgICAgICAgICAgICAgc3ZnV2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgc3ZnSGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fYnV0dG9uLXJlbW92ZVwiXG4gICAgICAgICAgICAgICAgW2V2b1VpQ2xhc3NdPVwie2Rpc2FibGVkOiBsb2FkaW5nIHx8IGlzRGlzYWJsZWR9XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlSXRlbVJlbW92ZShpKVwiXG4gICAgICAgICAgICA+PC9ldm8taWNvbj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fbGlzdC1kZWxpbWl0ZXJcIlxuICAgICAgICAgICAgICAgIFtldm9VaUNsYXNzXT1cIntlcnJvcjogZmlsZXNGb3JtLmNvbnRyb2xzW2ldLmVycm9yc31cIlxuICAgICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJnZXRDb250cm9sRXJyb3IoZmlsZXNGb3JtLmNvbnRyb2xzW2ldKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NpemUnXCI+0KDQsNC30LzQtdGAINGE0LDQudC70LAg0L/RgNC10LLRi9GI0LDQtdGCINC00L7Qv9GD0YHRgtC40LzRi9C5PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2V4dGVuc2lvbidcIj7QndC10LLQtdGA0L3Ri9C5INGE0L7RgNC80LDRgiDRhNCw0LnQu9CwPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPGRpdiAqbmdJZj1cImZpbGVzRm9ybS5jb250cm9scy5sZW5ndGhcIiBjbGFzcz1cImV2by11cGxvYWRfX2NvbnRyb2xzXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVDbGVhckJ1dHRvblwiXG4gICAgICAgICAgICBldm9CdXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIHRoZW1lPVwicm91bmRlZC1vdXRsaW5lXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IGlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUmVzZXRCdXR0b25DbGljaygpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0KPQtNCw0LvQuNGC0Ywg0LLRgdGRXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIiFoaWRlU3VibWl0QnV0dG9uXCJcbiAgICAgICAgICAgIGV2b0J1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fc3VibWl0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWxlc0Zvcm0uaW52YWxpZCB8fCBsb2FkaW5nIHx8IGlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU3VibWl0QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCX0LDQs9GA0YPQt9C40YLRjFxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|