@pepperi-addons/ngx-lib 0.4.2-beta.315 → 0.4.2-beta.317
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/esm2020/assets/i18n/en.ngx-lib.json +3 -0
- package/esm2020/list/list-pager.component.mjs +56 -9
- package/esm2020/list/list.component.mjs +16 -3
- package/esm2020/list/list.model.mjs +1 -1
- package/esm2020/list/list.module.mjs +5 -1
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs +76 -12
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib.mjs +3 -0
- package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs +75 -12
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib.mjs +3 -0
- package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/list/list-pager.component.d.ts +16 -6
- package/list/list.component.d.ts +4 -1
- package/list/list.module.d.ts +4 -3
- package/package.json +1 -1
- package/src/assets/i18n/en.ngx-lib.json +3 -0
|
@@ -136,6 +136,9 @@
|
|
|
136
136
|
"PAGER_NEXT": "Next",
|
|
137
137
|
"PAGER_OUT_OF": "Out of",
|
|
138
138
|
"PAGER_PAGE": "Page",
|
|
139
|
+
"PAGER_FIRST": "First",
|
|
140
|
+
"PAGER_LAST": "Last",
|
|
141
|
+
"PAGER_ITEMS_PER_PAGE": "items per page",
|
|
139
142
|
"SELECT": "Select",
|
|
140
143
|
"SELECTED": "selected",
|
|
141
144
|
"SORT_BY": "Sort by",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
2
2
|
import { Component, EventEmitter, Injectable, Input, Output, } from '@angular/core';
|
|
3
|
+
import { PepScreenSizeType, } from '@pepperi-addons/ngx-lib';
|
|
3
4
|
import { DEFAULT_PAGE_SIZE } from './list.model';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@pepperi-addons/ngx-lib";
|
|
@@ -7,19 +8,42 @@ import * as i2 from "@angular/common";
|
|
|
7
8
|
import * as i3 from "@angular/material/button";
|
|
8
9
|
import * as i4 from "@angular/material/icon";
|
|
9
10
|
import * as i5 from "@pepperi-addons/ngx-lib/icon";
|
|
10
|
-
import * as i6 from "@pepperi-addons/ngx-lib/
|
|
11
|
-
import * as i7 from "@ngx-
|
|
11
|
+
import * as i6 from "@pepperi-addons/ngx-lib/select";
|
|
12
|
+
import * as i7 from "@pepperi-addons/ngx-lib/textbox";
|
|
13
|
+
import * as i8 from "@ngx-translate/core";
|
|
12
14
|
export class IPepListPagerChangeEvent {
|
|
13
15
|
}
|
|
14
16
|
export class PepListPagerComponent {
|
|
15
|
-
constructor(
|
|
16
|
-
this._changeDetectorRef = _changeDetectorRef;
|
|
17
|
+
constructor(layoutService) {
|
|
17
18
|
this.layoutService = layoutService;
|
|
18
19
|
this.disabled = false;
|
|
20
|
+
this.showPageSizeSelector = false;
|
|
21
|
+
this.showFirstLastButtons = false;
|
|
22
|
+
this.PepScreenSizeType = PepScreenSizeType;
|
|
23
|
+
this.screenSize = PepScreenSizeType.LG;
|
|
24
|
+
this.pageSizeOptionsForSelect = [
|
|
25
|
+
{ key: '10', value: '10' },
|
|
26
|
+
{ key: '20', value: '20' },
|
|
27
|
+
{ key: '50', value: '50' },
|
|
28
|
+
];
|
|
29
|
+
this._pageSizeOptions = [10, 20, 50];
|
|
19
30
|
this._pageIndex = 0;
|
|
20
31
|
this.length = 0;
|
|
21
32
|
this.pageSize = DEFAULT_PAGE_SIZE;
|
|
22
33
|
this.pagerChange = new EventEmitter();
|
|
34
|
+
this.resizeSub = this.layoutService.onResize$.subscribe((size) => {
|
|
35
|
+
this.screenSize = size;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
set pageSizeOptions(value) {
|
|
39
|
+
this._pageSizeOptions = Array.isArray(value) && value.length > 0 ? value : [10, 20, 50];
|
|
40
|
+
this.pageSizeOptionsForSelect = this._pageSizeOptions.map((n) => ({
|
|
41
|
+
key: n.toString(),
|
|
42
|
+
value: n.toString(),
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
get pageSizeOptions() {
|
|
46
|
+
return this._pageSizeOptions;
|
|
23
47
|
}
|
|
24
48
|
set pageIndex(value) {
|
|
25
49
|
this.setPageIndex(value);
|
|
@@ -27,6 +51,9 @@ export class PepListPagerComponent {
|
|
|
27
51
|
get pageIndex() {
|
|
28
52
|
return this._pageIndex;
|
|
29
53
|
}
|
|
54
|
+
ngOnDestroy() {
|
|
55
|
+
this.resizeSub?.unsubscribe();
|
|
56
|
+
}
|
|
30
57
|
nextPage() {
|
|
31
58
|
if (!this.hasNextPage()) {
|
|
32
59
|
return;
|
|
@@ -76,6 +103,20 @@ export class PepListPagerComponent {
|
|
|
76
103
|
const pageNumber = coerceNumberProperty(value);
|
|
77
104
|
this.setPageIndex(pageNumber - 1); // - 1 to convert number into index.
|
|
78
105
|
}
|
|
106
|
+
onPageSizeChange(value) {
|
|
107
|
+
const newPageSize = coerceNumberProperty(value);
|
|
108
|
+
if (!newPageSize || newPageSize === this.pageSize) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const previousPageIndex = this.pageIndex;
|
|
112
|
+
this.pageSize = newPageSize;
|
|
113
|
+
// Reset to first page on page-size change.
|
|
114
|
+
this.setPageIndex(0);
|
|
115
|
+
// If we were already on page 0, setPageIndex won't emit, so emit explicitly.
|
|
116
|
+
if (this.pageIndex === previousPageIndex) {
|
|
117
|
+
this._emitChangeEvent(previousPageIndex);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
79
120
|
setPageIndex(newIndex) {
|
|
80
121
|
const previousPageIndex = this.pageIndex;
|
|
81
122
|
if (newIndex >= 0 && newIndex < this.getNumberOfPages()) {
|
|
@@ -98,15 +139,21 @@ export class PepListPagerComponent {
|
|
|
98
139
|
});
|
|
99
140
|
}
|
|
100
141
|
}
|
|
101
|
-
PepListPagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepListPagerComponent, deps: [{ token:
|
|
102
|
-
PepListPagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepListPagerComponent, selector: "pep-list-pager", inputs: { disabled: "disabled", pageIndex: "pageIndex", length: "length", pageSize: "pageSize" }, outputs: { pagerChange: "pagerChange" }, ngImport: i0, template: "<div class=\"pager-container body-sm\">\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_PAGE' | translate }}</span>\n <pep-textbox pepAutoWidth class=\"page-index pep-spacing-element\" [key]=\"'pageIndex'\" [type]=\"'int'\"\n [disabled]=\"disabled\" [xAlignment]=\"'center'\" [renderTitle]=\"false\" [renderError]=\"false\" [renderSymbol]=\"false\"\n [value]=\"pageIndex + 1\" [minValue]=\"1\" [maxValue]=\"this.getNumberOfPages()\"\n [maxFieldCharacters]=\"6\" [mandatory]=\"true\" (valueChange)=\"onValueChange($event)\">\n </pep-textbox>\n <
|
|
142
|
+
PepListPagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepListPagerComponent, deps: [{ token: i1.PepLayoutService }], target: i0.ɵɵFactoryTarget.Component });
|
|
143
|
+
PepListPagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepListPagerComponent, selector: "pep-list-pager", inputs: { disabled: "disabled", showPageSizeSelector: "showPageSizeSelector", showFirstLastButtons: "showFirstLastButtons", pageSizeOptions: "pageSizeOptions", pageIndex: "pageIndex", length: "length", pageSize: "pageSize" }, outputs: { pagerChange: "pagerChange" }, ngImport: i0, template: "<div class=\"pager-container body-sm\">\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_PAGE' | translate }}</span>\n <button *ngIf=\"showFirstLastButtons && screenSize <= PepScreenSizeType.MD\" mat-button [disabled]=\"disabled || !hasPreviousPage()\"\n [ngClass]=\"{ disabled: disabled || !hasPreviousPage() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"firstPage()\"\n [title]=\"('LIST.PAGER_FIRST' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_back_right' : 'arrow_back_left'\"></pep-icon>\n </mat-icon>\n </button>\n <button mat-button [disabled]=\"disabled || _previousButtonsDisabled()\"\n [ngClass]=\"{ disabled: disabled || _previousButtonsDisabled() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"previousPage()\"\n [title]=\"('LIST.PAGER_PREVIOUS' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_right' : 'arrow_left'\"></pep-icon>\n </mat-icon>\n </button>\n <pep-textbox pepAutoWidth class=\"page-index pep-spacing-element\" [key]=\"'pageIndex'\" [type]=\"'int'\"\n [disabled]=\"disabled\" [xAlignment]=\"'center'\" [renderTitle]=\"false\" [renderError]=\"false\" [renderSymbol]=\"false\"\n [value]=\"pageIndex + 1\" [minValue]=\"1\" [maxValue]=\"this.getNumberOfPages()\"\n [maxFieldCharacters]=\"6\" [mandatory]=\"true\" (valueChange)=\"onValueChange($event)\">\n </pep-textbox>\n <button mat-button [disabled]=\"disabled || _nextButtonsDisabled()\"\n [ngClass]=\"{ disabled: disabled || _nextButtonsDisabled() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"nextPage()\"\n [title]=\"('LIST.PAGER_NEXT' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_left' : 'arrow_right'\"></pep-icon>\n </mat-icon>\n </button>\n <button *ngIf=\"showFirstLastButtons && screenSize <= PepScreenSizeType.MD\" mat-button [disabled]=\"disabled || !hasNextPage()\"\n [ngClass]=\"{ disabled: disabled || !hasNextPage() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"lastPage()\"\n [title]=\"('LIST.PAGER_LAST' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_back_left' : 'arrow_back_right'\"></pep-icon>\n </mat-icon>\n </button>\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_OUT_OF' | translate }}</span>\n <span class=\"pep-spacing-element\">{{ getNumberOfPages() }}</span>\n <ng-container *ngIf=\"showPageSizeSelector\">\n <pep-select pepAutoWidth class=\"page-size pep-spacing-element\" [key]=\"'pageSize'\" [value]=\"pageSize?.toString()\"\n [disabled]=\"disabled\" [renderTitle]=\"false\" [emptyOption]=\"false\" [options]=\"pageSizeOptionsForSelect\"\n (valueChange)=\"onPageSizeChange($event)\">\n </pep-select>\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_ITEMS_PER_PAGE' | translate }}</span>\n </ng-container>\n</div>", styles: [".pager-container{display:flex;justify-content:center;align-items:center;height:calc(2rem + calc(var(--pep-spacing-sm, .5rem) * 2));padding:var(--pep-spacing-sm, .5rem)}.pager-container .page-size{min-height:unset;margin-bottom:0}.pager-container .page-size ::ng-deep .mat-form-field-flex{padding:0 .5rem;min-height:2rem}.pager-container .page-index{min-height:unset;margin-bottom:0}.pager-container .page-index ::ng-deep .mat-form-field-flex{padding:0 .5rem;min-height:2rem}.pager-container .page-index ::ng-deep .mat-form-field-flex .mat-input-element{min-width:1.25rem}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.PepInputAutoWidthDirective, selector: "[pepAutoWidth]", inputs: ["includePadding"] }, { kind: "directive", type: i1.PepMenuBlurDirective, selector: "[pepMenuBlur]" }, { kind: "directive", type: i1.PepRtlDirectionDirective, selector: "[pepRtlDirection]" }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "component", type: i6.PepSelectComponent, selector: "pep-select", inputs: ["key", "value", "label", "type", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "placeholder", "placeholderWhenDisabled", "autoSortOptions", "options", "visible", "emptyOption", "form", "layoutType", "parentFieldKey", "isActive", "showTitle", "renderTitle", "typeaheadDebounceInterval", "addValueToOptionsIfNotExist"], outputs: ["valueChange", "validationChange"] }, { kind: "component", type: i7.PepTextboxComponent, selector: "pep-textbox", inputs: ["key", "value", "minFractionDigits", "maxFractionDigits", "accessory", "label", "placeholder", "type", "mandatory", "disabled", "readonly", "maxFieldCharacters", "hint", "textColor", "xAlignment", "rowSpan", "minValue", "maxValue", "visible", "form", "isActive", "showTitle", "renderTitle", "renderError", "renderSymbol", "layoutType", "parentFieldKey", "regex", "regexError", "isInFocus"], outputs: ["valueChange", "keyup", "validationChange"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
103
144
|
PepListPagerComponent.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepListPagerComponent });
|
|
104
145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepListPagerComponent, decorators: [{
|
|
105
146
|
type: Component,
|
|
106
|
-
args: [{ selector: 'pep-list-pager', template: "<div class=\"pager-container body-sm\">\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_PAGE' | translate }}</span>\n <pep-textbox pepAutoWidth class=\"page-index pep-spacing-element\" [key]=\"'pageIndex'\" [type]=\"'int'\"\n [disabled]=\"disabled\" [xAlignment]=\"'center'\" [renderTitle]=\"false\" [renderError]=\"false\" [renderSymbol]=\"false\"\n [value]=\"pageIndex + 1\" [minValue]=\"1\" [maxValue]=\"this.getNumberOfPages()\"\n [maxFieldCharacters]=\"6\" [mandatory]=\"true\" (valueChange)=\"onValueChange($event)\">\n </pep-textbox>\n <
|
|
147
|
+
args: [{ selector: 'pep-list-pager', template: "<div class=\"pager-container body-sm\">\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_PAGE' | translate }}</span>\n <button *ngIf=\"showFirstLastButtons && screenSize <= PepScreenSizeType.MD\" mat-button [disabled]=\"disabled || !hasPreviousPage()\"\n [ngClass]=\"{ disabled: disabled || !hasPreviousPage() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"firstPage()\"\n [title]=\"('LIST.PAGER_FIRST' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_back_right' : 'arrow_back_left'\"></pep-icon>\n </mat-icon>\n </button>\n <button mat-button [disabled]=\"disabled || _previousButtonsDisabled()\"\n [ngClass]=\"{ disabled: disabled || _previousButtonsDisabled() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"previousPage()\"\n [title]=\"('LIST.PAGER_PREVIOUS' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_right' : 'arrow_left'\"></pep-icon>\n </mat-icon>\n </button>\n <pep-textbox pepAutoWidth class=\"page-index pep-spacing-element\" [key]=\"'pageIndex'\" [type]=\"'int'\"\n [disabled]=\"disabled\" [xAlignment]=\"'center'\" [renderTitle]=\"false\" [renderError]=\"false\" [renderSymbol]=\"false\"\n [value]=\"pageIndex + 1\" [minValue]=\"1\" [maxValue]=\"this.getNumberOfPages()\"\n [maxFieldCharacters]=\"6\" [mandatory]=\"true\" (valueChange)=\"onValueChange($event)\">\n </pep-textbox>\n <button mat-button [disabled]=\"disabled || _nextButtonsDisabled()\"\n [ngClass]=\"{ disabled: disabled || _nextButtonsDisabled() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"nextPage()\"\n [title]=\"('LIST.PAGER_NEXT' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_left' : 'arrow_right'\"></pep-icon>\n </mat-icon>\n </button>\n <button *ngIf=\"showFirstLastButtons && screenSize <= PepScreenSizeType.MD\" mat-button [disabled]=\"disabled || !hasNextPage()\"\n [ngClass]=\"{ disabled: disabled || !hasNextPage() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"lastPage()\"\n [title]=\"('LIST.PAGER_LAST' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_back_left' : 'arrow_back_right'\"></pep-icon>\n </mat-icon>\n </button>\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_OUT_OF' | translate }}</span>\n <span class=\"pep-spacing-element\">{{ getNumberOfPages() }}</span>\n <ng-container *ngIf=\"showPageSizeSelector\">\n <pep-select pepAutoWidth class=\"page-size pep-spacing-element\" [key]=\"'pageSize'\" [value]=\"pageSize?.toString()\"\n [disabled]=\"disabled\" [renderTitle]=\"false\" [emptyOption]=\"false\" [options]=\"pageSizeOptionsForSelect\"\n (valueChange)=\"onPageSizeChange($event)\">\n </pep-select>\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_ITEMS_PER_PAGE' | translate }}</span>\n </ng-container>\n</div>", styles: [".pager-container{display:flex;justify-content:center;align-items:center;height:calc(2rem + calc(var(--pep-spacing-sm, .5rem) * 2));padding:var(--pep-spacing-sm, .5rem)}.pager-container .page-size{min-height:unset;margin-bottom:0}.pager-container .page-size ::ng-deep .mat-form-field-flex{padding:0 .5rem;min-height:2rem}.pager-container .page-index{min-height:unset;margin-bottom:0}.pager-container .page-index ::ng-deep .mat-form-field-flex{padding:0 .5rem;min-height:2rem}.pager-container .page-index ::ng-deep .mat-form-field-flex .mat-input-element{min-width:1.25rem}\n"] }]
|
|
107
148
|
}, {
|
|
108
149
|
type: Injectable
|
|
109
|
-
}], ctorParameters: function () { return [{ type:
|
|
150
|
+
}], ctorParameters: function () { return [{ type: i1.PepLayoutService }]; }, propDecorators: { disabled: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], showPageSizeSelector: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], showFirstLastButtons: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], pageSizeOptions: [{
|
|
110
157
|
type: Input
|
|
111
158
|
}], pageIndex: [{
|
|
112
159
|
type: Input
|
|
@@ -117,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
117
164
|
}], pagerChange: [{
|
|
118
165
|
type: Output
|
|
119
166
|
}] } });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1wYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2xpc3QvbGlzdC1wYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2xpc3QvbGlzdC1wYWdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7OztBQUVqRCxNQUFNLE9BQU8sd0JBQXdCO0NBS3BDO0FBUUQsTUFBTSxPQUFPLHFCQUFxQjtJQWlCOUIsWUFDWSxrQkFBcUMsRUFDdEMsYUFBK0I7UUFEOUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUN0QyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFsQmpDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDbEIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQVNkLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFDWCxhQUFRLEdBQUcsaUJBQWlCLENBQUM7UUFHdEMsZ0JBQVcsR0FBMkMsSUFBSSxZQUFZLEVBQTRCLENBQUM7SUFJckQsQ0FBQztJQWhCL0MsSUFDSSxTQUFTLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQVlELFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3JCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDekIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUN6QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxlQUFlO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsV0FBVztRQUNQLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixPQUFPLENBQUMsQ0FBQztTQUNaO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsb0JBQW9CO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLHdCQUF3QjtRQUNwQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFhO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsb0NBQW9DO0lBQzNFLENBQUM7SUFFTyxZQUFZLENBQUMsUUFBZ0I7UUFDakMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRXpDLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7U0FDOUI7YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGlCQUFpQixFQUFFO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELCtGQUErRjtJQUN2RixnQkFBZ0IsQ0FBQyxpQkFBeUI7UUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDbEIsaUJBQWlCO1lBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3RCLENBQUMsQ0FBQztJQUNQLENBQUM7O2tIQTNHUSxxQkFBcUI7c0dBQXJCLHFCQUFxQixpTUN6QmxDLGdyREF5Qk07c0hEQU8scUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0ksZ0JBQWdCOztrQkFJN0IsVUFBVTt1SUFFRSxRQUFRO3NCQUFoQixLQUFLO2dCQUdGLFNBQVM7c0JBRFosS0FBSztnQkFRRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFHTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGVwTGF5b3V0U2VydmljZSwgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBERUZBVUxUX1BBR0VfU0laRSB9IGZyb20gJy4vbGlzdC5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBJUGVwTGlzdFBhZ2VyQ2hhbmdlRXZlbnQge1xuICAgIHBhZ2VJbmRleDogbnVtYmVyO1xuICAgIHByZXZpb3VzUGFnZUluZGV4OiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBsZW5ndGg6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtbGlzdC1wYWdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtcGFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xpc3QtcGFnZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGVwTGlzdFBhZ2VyQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3BhZ2VJbmRleCA9IDA7XG4gICAgQElucHV0KClcbiAgICBzZXQgcGFnZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXRQYWdlSW5kZXgodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgcGFnZUluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbGVuZ3RoID0gMDtcbiAgICBASW5wdXQoKSBwYWdlU2l6ZSA9IERFRkFVTFRfUEFHRV9TSVpFO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcGFnZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwTGlzdFBhZ2VyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwTGlzdFBhZ2VyQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogUGVwTGF5b3V0U2VydmljZSkgeyB9XG5cbiAgICBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc05leHRQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KHRoaXMucGFnZUluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KHRoaXMucGFnZUluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgZmlyc3RQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KDApO1xuICAgIH1cblxuICAgIGxhc3RQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzTmV4dFBhZ2UoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRQYWdlSW5kZXgodGhpcy5nZXROdW1iZXJPZlBhZ2VzKCkgLSAxKTtcbiAgICB9XG5cbiAgICBoYXNQcmV2aW91c1BhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VJbmRleCA+PSAxICYmIHRoaXMucGFnZVNpemUgIT0gMDtcbiAgICB9XG5cbiAgICBoYXNOZXh0UGFnZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbWF4UGFnZUluZGV4ID0gdGhpcy5nZXROdW1iZXJPZlBhZ2VzKCkgLSAxO1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlSW5kZXggPCBtYXhQYWdlSW5kZXggJiYgdGhpcy5wYWdlU2l6ZSAhPSAwO1xuICAgIH1cblxuICAgIGdldE51bWJlck9mUGFnZXMoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2VTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5sZW5ndGggLyB0aGlzLnBhZ2VTaXplKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGJ1dHRvbnMgZm9yIGdvaW5nIGZvcndhcmRzIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgICBfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzTmV4dFBhZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGJ1dHRvbnMgZm9yIGdvaW5nIGJhY2t3YXJkcyBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gICAgX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKTtcbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFnZU51bWJlciA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRQYWdlSW5kZXgocGFnZU51bWJlciAtIDEpOyAvLyAtIDEgdG8gY29udmVydCBudW1iZXIgaW50byBpbmRleC5cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFBhZ2VJbmRleChuZXdJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUGFnZUluZGV4ID0gdGhpcy5wYWdlSW5kZXg7XG5cbiAgICAgICAgaWYgKG5ld0luZGV4ID49IDAgJiYgbmV3SW5kZXggPCB0aGlzLmdldE51bWJlck9mUGFnZXMoKSkge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUluZGV4ID0gbmV3SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wYWdlSW5kZXggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFnZUluZGV4ICE9PSBwcmV2aW91c1BhZ2VJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYW5nZUV2ZW50KHByZXZpb3VzUGFnZUluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBFbWl0cyBhbiBldmVudCBub3RpZnlpbmcgdGhhdCBhIGNoYW5nZSBvZiB0aGUgcGFnaW5hdG9yJ3MgcHJvcGVydGllcyBoYXMgYmVlbiB0cmlnZ2VyZWQuICovXG4gICAgcHJpdmF0ZSBfZW1pdENoYW5nZUV2ZW50KHByZXZpb3VzUGFnZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdlckNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4LFxuICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBhZ2VyLWNvbnRhaW5lciBib2R5LXNtXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJwZXAtc3BhY2luZy1lbGVtZW50XCI+e3sgJ0xJU1QuUEFHRVJfUEFHRScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPHBlcC10ZXh0Ym94IHBlcEF1dG9XaWR0aCBjbGFzcz1cInBhZ2UtaW5kZXggcGVwLXNwYWNpbmctZWxlbWVudFwiIFtrZXldPVwiJ3BhZ2VJbmRleCdcIiBbdHlwZV09XCInaW50J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt4QWxpZ25tZW50XT1cIidjZW50ZXInXCIgW3JlbmRlclRpdGxlXT1cImZhbHNlXCIgW3JlbmRlckVycm9yXT1cImZhbHNlXCIgW3JlbmRlclN5bWJvbF09XCJmYWxzZVwiXG4gICAgICAgIFt2YWx1ZV09XCJwYWdlSW5kZXggKyAxXCIgW21pblZhbHVlXT1cIjFcIiBbbWF4VmFsdWVdPVwidGhpcy5nZXROdW1iZXJPZlBhZ2VzKClcIlxuICAgICAgICBbbWF4RmllbGRDaGFyYWN0ZXJzXT1cIjZcIiBbbWFuZGF0b3J5XT1cInRydWVcIiAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPC9wZXAtdGV4dGJveD5cbiAgICA8c3BhbiBjbGFzcz1cInBlcC1zcGFjaW5nLWVsZW1lbnRcIj57eyAnTElTVC5QQUdFUl9PVVRfT0YnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicGVwLXNwYWNpbmctZWxlbWVudFwiPnt7IGdldE51bWJlck9mUGFnZXMoKSB9fTwvc3Bhbj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IF9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZWQgfHwgX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkgfVwiXG4gICAgICAgIGNsYXNzPVwicGVwLWJ1dHRvbiBpY29uLWJ1dHRvbiBwZXAtc3BhY2luZy1lbGVtZW50IHNtIHdlYWtcIiBwZXBSdGxEaXJlY3Rpb24gcGVwTWVudUJsdXIgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgW3RpdGxlXT1cIignTElTVC5QQUdFUl9QUkVWSU9VUycgfCB0cmFuc2xhdGUpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBbbmFtZV09XCJsYXlvdXRTZXJ2aWNlLmlzUnRsKCkgPyAnYXJyb3dfcmlnaHQnIDogJ2Fycm93X2xlZnQnXCI+PC9wZXAtaWNvbj5cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IF9uZXh0QnV0dG9uc0Rpc2FibGVkKClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCB8fCBfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpIH1cIlxuICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gcGVwLXNwYWNpbmctZWxlbWVudCBzbSB3ZWFrXCIgcGVwUnRsRGlyZWN0aW9uIHBlcE1lbnVCbHVyIChjbGljayk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgW3RpdGxlXT1cIignTElTVC5QQUdFUl9ORVhUJyB8IHRyYW5zbGF0ZSlcIj5cbiAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgPHBlcC1pY29uIFtuYW1lXT1cImxheW91dFNlcnZpY2UuaXNSdGwoKSA/ICdhcnJvd19sZWZ0JyA6ICdhcnJvd19yaWdodCdcIj48L3BlcC1pY29uPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+Il19
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1wYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2xpc3QvbGlzdC1wYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2xpc3QvbGlzdC1wYWdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWdDLGlCQUFpQixHQUFHLE1BQU0seUJBQXlCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7O0FBRWpELE1BQU0sT0FBTyx3QkFBd0I7Q0FLcEM7QUFRRCxNQUFNLE9BQU8scUJBQXFCO0lBMkM5QixZQUNXLGFBQStCO1FBQS9CLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQTNDakMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0IseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRXRDLHNCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQ3RDLGVBQVUsR0FBc0IsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBRXJELDZCQUF3QixHQUFzQjtZQUMxQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUMxQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUMxQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtTQUM3QixDQUFDO1FBRU0scUJBQWdCLEdBQWEsQ0FBQyxFQUFF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LElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1NBQzlCO2FBQU07WUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztTQUN2QjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxpQkFBaUIsRUFBRTtZQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7SUFFRCwrRkFBK0Y7SUFDdkYsZ0JBQWdCLENBQUMsaUJBQXlCO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2xCLGlCQUFpQjtZQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN0QixDQUFDLENBQUM7SUFDUCxDQUFDOztrSEE5SlEscUJBQXFCO3NHQUFyQixxQkFBcUIsaVVDMUJsQyxzdUdBZ0RNO3NIRHRCTyxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDSSxnQkFBZ0I7O2tCQUk3QixVQUFVO3VHQUVFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFhRixlQUFlO3NCQURsQixLQUFLO2dCQWNGLFNBQVM7c0JBRFosS0FBSztnQkFRRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFHTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVBlcE9wdGlvbiwgUGVwTGF5b3V0U2VydmljZSwgUGVwU2NyZWVuU2l6ZVR5cGUsIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHsgREVGQVVMVF9QQUdFX1NJWkUgfSBmcm9tICcuL2xpc3QubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgSVBlcExpc3RQYWdlckNoYW5nZUV2ZW50IHtcbiAgICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgICBwcmV2aW91c1BhZ2VJbmRleDogbnVtYmVyO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgbGVuZ3RoOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLWxpc3QtcGFnZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saXN0LXBhZ2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9saXN0LXBhZ2VyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBlcExpc3RQYWdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNob3dQYWdlU2l6ZVNlbGVjdG9yID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgPSBmYWxzZTtcblxuICAgIFBlcFNjcmVlblNpemVUeXBlID0gUGVwU2NyZWVuU2l6ZVR5cGU7XG4gICAgc2NyZWVuU2l6ZTogUGVwU2NyZWVuU2l6ZVR5cGUgPSBQZXBTY3JlZW5TaXplVHlwZS5MRztcbiAgICBwcml2YXRlIHJlc2l6ZVN1YjogU3Vic2NyaXB0aW9uO1xuICAgIHBhZ2VTaXplT3B0aW9uc0ZvclNlbGVjdDogQXJyYXk8SVBlcE9wdGlvbj4gPSBbXG4gICAgICAgIHsga2V5OiAnMTAnLCB2YWx1ZTogJzEwJyB9LFxuICAgICAgICB7IGtleTogJzIwJywgdmFsdWU6ICcyMCcgfSxcbiAgICAgICAgeyBrZXk6ICc1MCcsIHZhbHVlOiAnNTAnIH0sXG4gICAgXTtcblxuICAgIHByaXZhdGUgX3BhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDIwLCA1MF07XG4gICAgQElucHV0KClcbiAgICBzZXQgcGFnZVNpemVPcHRpb25zKHZhbHVlOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiBbMTAsIDIwLCA1MF07XG4gICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zRm9yU2VsZWN0ID0gdGhpcy5fcGFnZVNpemVPcHRpb25zLm1hcCgobikgPT4gKHtcbiAgICAgICAgICAgIGtleTogbi50b1N0cmluZygpLFxuICAgICAgICAgICAgdmFsdWU6IG4udG9TdHJpbmcoKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBnZXQgcGFnZVNpemVPcHRpb25zKCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYWdlSW5kZXggPSAwO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHBhZ2VJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHBhZ2VJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnZUluZGV4O1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGxlbmd0aCA9IDA7XG4gICAgQElucHV0KCkgcGFnZVNpemUgPSBERUZBVUxUX1BBR0VfU0laRTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHBhZ2VyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SVBlcExpc3RQYWdlckNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcExpc3RQYWdlckNoYW5nZUV2ZW50PigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBsYXlvdXRTZXJ2aWNlOiBQZXBMYXlvdXRTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMucmVzaXplU3ViID0gdGhpcy5sYXlvdXRTZXJ2aWNlLm9uUmVzaXplJC5zdWJzY3JpYmUoKHNpemUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2NyZWVuU2l6ZSA9IHNpemU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc05leHRQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KHRoaXMucGFnZUluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KHRoaXMucGFnZUluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgZmlyc3RQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KDApO1xuICAgIH1cblxuICAgIGxhc3RQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzTmV4dFBhZ2UoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRQYWdlSW5kZXgodGhpcy5nZXROdW1iZXJPZlBhZ2VzKCkgLSAxKTtcbiAgICB9XG5cbiAgICBoYXNQcmV2aW91c1BhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VJbmRleCA+PSAxICYmIHRoaXMucGFnZVNpemUgIT0gMDtcbiAgICB9XG5cbiAgICBoYXNOZXh0UGFnZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbWF4UGFnZUluZGV4ID0gdGhpcy5nZXROdW1iZXJPZlBhZ2VzKCkgLSAxO1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlSW5kZXggPCBtYXhQYWdlSW5kZXggJiYgdGhpcy5wYWdlU2l6ZSAhPSAwO1xuICAgIH1cblxuICAgIGdldE51bWJlck9mUGFnZXMoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2VTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5sZW5ndGggLyB0aGlzLnBhZ2VTaXplKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGJ1dHRvbnMgZm9yIGdvaW5nIGZvcndhcmRzIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgICBfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzTmV4dFBhZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGJ1dHRvbnMgZm9yIGdvaW5nIGJhY2t3YXJkcyBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gICAgX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKTtcbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFnZU51bWJlciA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRQYWdlSW5kZXgocGFnZU51bWJlciAtIDEpOyAvLyAtIDEgdG8gY29udmVydCBudW1iZXIgaW50byBpbmRleC5cbiAgICB9XG5cbiAgICBvblBhZ2VTaXplQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbmV3UGFnZVNpemUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGlmICghbmV3UGFnZVNpemUgfHwgbmV3UGFnZVNpemUgPT09IHRoaXMucGFnZVNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZXZpb3VzUGFnZUluZGV4ID0gdGhpcy5wYWdlSW5kZXg7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBuZXdQYWdlU2l6ZTtcblxuICAgICAgICAvLyBSZXNldCB0byBmaXJzdCBwYWdlIG9uIHBhZ2Utc2l6ZSBjaGFuZ2UuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KDApO1xuXG4gICAgICAgIC8vIElmIHdlIHdlcmUgYWxyZWFkeSBvbiBwYWdlIDAsIHNldFBhZ2VJbmRleCB3b24ndCBlbWl0LCBzbyBlbWl0IGV4cGxpY2l0bHkuXG4gICAgICAgIGlmICh0aGlzLnBhZ2VJbmRleCA9PT0gcHJldmlvdXNQYWdlSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VFdmVudChwcmV2aW91c1BhZ2VJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFBhZ2VJbmRleChuZXdJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUGFnZUluZGV4ID0gdGhpcy5wYWdlSW5kZXg7XG5cbiAgICAgICAgaWYgKG5ld0luZGV4ID49IDAgJiYgbmV3SW5kZXggPCB0aGlzLmdldE51bWJlck9mUGFnZXMoKSkge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUluZGV4ID0gbmV3SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wYWdlSW5kZXggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFnZUluZGV4ICE9PSBwcmV2aW91c1BhZ2VJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYW5nZUV2ZW50KHByZXZpb3VzUGFnZUluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBFbWl0cyBhbiBldmVudCBub3RpZnlpbmcgdGhhdCBhIGNoYW5nZSBvZiB0aGUgcGFnaW5hdG9yJ3MgcHJvcGVydGllcyBoYXMgYmVlbiB0cmlnZ2VyZWQuICovXG4gICAgcHJpdmF0ZSBfZW1pdENoYW5nZUV2ZW50KHByZXZpb3VzUGFnZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdlckNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4LFxuICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBhZ2VyLWNvbnRhaW5lciBib2R5LXNtXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJwZXAtc3BhY2luZy1lbGVtZW50XCI+e3sgJ0xJU1QuUEFHRVJfUEFHRScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGJ1dHRvbiAqbmdJZj1cInNob3dGaXJzdExhc3RCdXR0b25zICYmIHNjcmVlblNpemUgPD0gUGVwU2NyZWVuU2l6ZVR5cGUuTURcIiBtYXQtYnV0dG9uIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAhaGFzUHJldmlvdXNQYWdlKClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCB8fCAhaGFzUHJldmlvdXNQYWdlKCkgfVwiXG4gICAgICAgIGNsYXNzPVwicGVwLWJ1dHRvbiBpY29uLWJ1dHRvbiBwZXAtc3BhY2luZy1lbGVtZW50IHNtIHdlYWtcIiBwZXBSdGxEaXJlY3Rpb24gcGVwTWVudUJsdXIgKGNsaWNrKT1cImZpcnN0UGFnZSgpXCJcbiAgICAgICAgW3RpdGxlXT1cIignTElTVC5QQUdFUl9GSVJTVCcgfCB0cmFuc2xhdGUpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBbbmFtZV09XCJsYXlvdXRTZXJ2aWNlLmlzUnRsKCkgPyAnYXJyb3dfYmFja19yaWdodCcgOiAnYXJyb3dfYmFja19sZWZ0J1wiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBfcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGRpc2FibGVkIHx8IF9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpIH1cIlxuICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gcGVwLXNwYWNpbmctZWxlbWVudCBzbSB3ZWFrXCIgcGVwUnRsRGlyZWN0aW9uIHBlcE1lbnVCbHVyIChjbGljayk9XCJwcmV2aW91c1BhZ2UoKVwiXG4gICAgICAgIFt0aXRsZV09XCIoJ0xJU1QuUEFHRVJfUFJFVklPVVMnIHwgdHJhbnNsYXRlKVwiPlxuICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICA8cGVwLWljb24gW25hbWVdPVwibGF5b3V0U2VydmljZS5pc1J0bCgpID8gJ2Fycm93X3JpZ2h0JyA6ICdhcnJvd19sZWZ0J1wiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPHBlcC10ZXh0Ym94IHBlcEF1dG9XaWR0aCBjbGFzcz1cInBhZ2UtaW5kZXggcGVwLXNwYWNpbmctZWxlbWVudFwiIFtrZXldPVwiJ3BhZ2VJbmRleCdcIiBbdHlwZV09XCInaW50J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt4QWxpZ25tZW50XT1cIidjZW50ZXInXCIgW3JlbmRlclRpdGxlXT1cImZhbHNlXCIgW3JlbmRlckVycm9yXT1cImZhbHNlXCIgW3JlbmRlclN5bWJvbF09XCJmYWxzZVwiXG4gICAgICAgIFt2YWx1ZV09XCJwYWdlSW5kZXggKyAxXCIgW21pblZhbHVlXT1cIjFcIiBbbWF4VmFsdWVdPVwidGhpcy5nZXROdW1iZXJPZlBhZ2VzKClcIlxuICAgICAgICBbbWF4RmllbGRDaGFyYWN0ZXJzXT1cIjZcIiBbbWFuZGF0b3J5XT1cInRydWVcIiAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPC9wZXAtdGV4dGJveD5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IF9uZXh0QnV0dG9uc0Rpc2FibGVkKClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCB8fCBfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpIH1cIlxuICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gcGVwLXNwYWNpbmctZWxlbWVudCBzbSB3ZWFrXCIgcGVwUnRsRGlyZWN0aW9uIHBlcE1lbnVCbHVyIChjbGljayk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgW3RpdGxlXT1cIignTElTVC5QQUdFUl9ORVhUJyB8IHRyYW5zbGF0ZSlcIj5cbiAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgPHBlcC1pY29uIFtuYW1lXT1cImxheW91dFNlcnZpY2UuaXNSdGwoKSA/ICdhcnJvd19sZWZ0JyA6ICdhcnJvd19yaWdodCdcIj48L3BlcC1pY29uPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJzaG93Rmlyc3RMYXN0QnV0dG9ucyAmJiBzY3JlZW5TaXplIDw9IFBlcFNjcmVlblNpemVUeXBlLk1EXCIgbWF0LWJ1dHRvbiBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgIWhhc05leHRQYWdlKClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCB8fCAhaGFzTmV4dFBhZ2UoKSB9XCJcbiAgICAgICAgY2xhc3M9XCJwZXAtYnV0dG9uIGljb24tYnV0dG9uIHBlcC1zcGFjaW5nLWVsZW1lbnQgc20gd2Vha1wiIHBlcFJ0bERpcmVjdGlvbiBwZXBNZW51Qmx1ciAoY2xpY2spPVwibGFzdFBhZ2UoKVwiXG4gICAgICAgIFt0aXRsZV09XCIoJ0xJU1QuUEFHRVJfTEFTVCcgfCB0cmFuc2xhdGUpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBbbmFtZV09XCJsYXlvdXRTZXJ2aWNlLmlzUnRsKCkgPyAnYXJyb3dfYmFja19sZWZ0JyA6ICdhcnJvd19iYWNrX3JpZ2h0J1wiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPHNwYW4gY2xhc3M9XCJwZXAtc3BhY2luZy1lbGVtZW50XCI+e3sgJ0xJU1QuUEFHRVJfT1VUX09GJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInBlcC1zcGFjaW5nLWVsZW1lbnRcIj57eyBnZXROdW1iZXJPZlBhZ2VzKCkgfX08L3NwYW4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQYWdlU2l6ZVNlbGVjdG9yXCI+XG4gICAgICAgIDxwZXAtc2VsZWN0IHBlcEF1dG9XaWR0aCBjbGFzcz1cInBhZ2Utc2l6ZSBwZXAtc3BhY2luZy1lbGVtZW50XCIgW2tleV09XCIncGFnZVNpemUnXCIgW3ZhbHVlXT1cInBhZ2VTaXplPy50b1N0cmluZygpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZW5kZXJUaXRsZV09XCJmYWxzZVwiIFtlbXB0eU9wdGlvbl09XCJmYWxzZVwiIFtvcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc0ZvclNlbGVjdFwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDwvcGVwLXNlbGVjdD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXAtc3BhY2luZy1lbGVtZW50XCI+e3sgJ0xJU1QuUEFHRVJfSVRFTVNfUEVSX1BBR0UnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+Il19
|