@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.
@@ -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/textbox";
11
- import * as i7 from "@ngx-translate/core";
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(_changeDetectorRef, layoutService) {
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: i0.ChangeDetectorRef }, { token: i1.PepLayoutService }], target: i0.ɵɵFactoryTarget.Component });
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 <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_OUT_OF' | translate }}</span>\n <span class=\"pep-spacing-element\">{{ getNumberOfPages() }}</span>\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 <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</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-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: "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.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: i7.TranslatePipe, name: "translate" }] });
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 <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_OUT_OF' | translate }}</span>\n <span class=\"pep-spacing-element\">{{ getNumberOfPages() }}</span>\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 <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</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-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"] }]
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: i0.ChangeDetectorRef }, { type: i1.PepLayoutService }]; }, propDecorators: { disabled: [{
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