ontimize-web-ngx 15.0.3 → 15.0.4
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/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +3 -3
- package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +3 -3
- package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +2 -2
- package/esm2020/lib/components/form/o-form.component.mjs +2 -2
- package/esm2020/lib/components/grid/o-grid.component.mjs +2 -11
- package/esm2020/lib/components/input/date-range/o-daterange-picker.component.mjs +6 -5
- package/esm2020/lib/components/list/o-list.component.mjs +2 -11
- package/esm2020/lib/components/o-service-base-component.class.mjs +2 -2
- package/esm2020/lib/components/table/extensions/header/table-column-resizer/o-table-column-resizer.component.mjs +18 -10
- package/esm2020/lib/components/table/o-table.component.mjs +2 -1
- package/esm2020/lib/components/tree/o-tree.component.mjs +18 -13
- package/esm2020/lib/interfaces/app-menu.interface.mjs +1 -1
- package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.component.mjs +32 -16
- package/esm2020/lib/services/ontimize-export-data-base-provider.service.mjs +34 -2
- package/fesm2015/ontimize-web-ngx.mjs +337 -296
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +337 -296
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/grid/o-grid.component.d.ts +1 -4
- package/lib/components/input/date-range/o-daterange-picker.component.d.ts +1 -0
- package/lib/components/list/o-list.component.d.ts +1 -4
- package/lib/components/table/extensions/header/table-column-resizer/o-table-column-resizer.component.d.ts +3 -3
- package/lib/components/tree/o-tree.component.d.ts +2 -0
- package/lib/interfaces/app-menu.interface.d.ts +1 -0
- package/lib/layouts/card-menu-layout/o-card-menu-layout.component.d.ts +10 -2
- package/lib/services/ontimize-export-data-base-provider.service.d.ts +1 -0
- package/ontimize.scss +35 -34
- package/package.json +1 -1
- package/theme.scss +34 -2
- package/theming/ontimize-style.scss +18 -7
|
@@ -201,15 +201,6 @@ export class OGridComponent extends AbstractOServiceComponent {
|
|
|
201
201
|
ngOnDestroy() {
|
|
202
202
|
this.destroy();
|
|
203
203
|
}
|
|
204
|
-
ngOnChanges(changes) {
|
|
205
|
-
if (changes.staticData !== undefined) {
|
|
206
|
-
this.dataResponseArray = changes.staticData.currentValue;
|
|
207
|
-
this.onDataLoaded.emit(this.dataResponseArray);
|
|
208
|
-
if (this.quickFilterComponent) {
|
|
209
|
-
this.filterData();
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
204
|
destroy() {
|
|
214
205
|
super.destroy();
|
|
215
206
|
if (this.subscription) {
|
|
@@ -337,7 +328,7 @@ OGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
|
|
|
337
328
|
OntimizeServiceProvider,
|
|
338
329
|
ComponentStateServiceProvider,
|
|
339
330
|
{ provide: O_COMPONENT_STATE_SERVICE, useClass: OGridComponentStateService },
|
|
340
|
-
], queries: [{ propertyName: "inputGridItems", predicate: i0.forwardRef(function () { return OGridItemComponent; }) }], viewQueries: [{ propertyName: "matpaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "gridItemDirectives", predicate: OGridItemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div [style.display]=\"isVisible()? '' : 'none'\" class=\"o-grid-container\" fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\n\n <!--TOOLBAR-->\n <o-data-toolbar *ngIf=\"hasControls()\" class=\"o-grid-toolbar\" [title]=\"title\" [show-title]=\"hasTitle()\">\n <ng-container o-data-toolbar-projection-start>\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" class=\"o-grid-add-button o-grid-button text\" mat-stroked-button\n aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'ADD' | oTranslate }}</span>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-stroked-button aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\" class=\"o-grid-button text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" class=\"o-grid-button o-grid-add-button no-text\" mat-icon-button\n aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-icon-button aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\" class=\"o-grid-button no-text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n </ng-template>\n\n <!--O-GRID-PAGINATOR-->\n <div class=\"o-grid-paginator\" *ngIf=\"showPageSize\">\n <div class=\"o-grid-page-size-label\">{{ 'GRID.ITEMS_PER_PAGE' | oTranslate }}:</div>\n <mat-form-field class=\"o-grid-select-page\">\n <mat-select placeholder=\"\" #pageSizeSelect [(value)]=\"queryRows\" (selectionChange)=\"pageSizeChanged()\">\n <mat-option *ngFor=\"let page of pageSizeOptions\" [value]=\"page\">\n {{ page }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!--O-GRID-SORT-->\n <div class=\"o-grid-sort\" *ngIf=\"showSort && sortableColumns.length > 0\">\n <mat-form-field class=\"o-grid-select-sort\">\n <mat-icon matPrefix>sort</mat-icon>\n <mat-select #sortSelect [value]=\"currentOrderColumn\" (selectionChange)=\"sortColumnChanged($event)\"\n placeholder=\" {{ 'GRID.SORT_BY' | oTranslate }}\">\n <mat-option *ngFor=\"let column of sortableColumns; let i = index\" [value]=\"i\">\n {{ getSortOptionText(column) }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n </ng-container>\n <ng-content select=\"[o-grid-toolbar][position=start]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar][position=end]\" ngProjectAs=\"[o-data-toolbar-custom-projection-end]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-container o-data-toolbar-projection-end>\n <o-search-input *ngIf=\"quickFilter\" [columns]=\"quickFilterColumns\" [filter-case-sensitive]=\"filterCaseSensitive\"\n [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\" [placeholder]=\"quickFilterPlaceholder\" [appearance]=\"quickFilterAppearance\"\n float-label=\"never\"></o-search-input>\n </ng-container>\n </o-data-toolbar>\n\n <ng-container *ngIf=\"(loading | async)===false\">\n <!--no results-->\n <div class=\"o-grid-no-results fill-remaining\" *ngIf=\"gridItems.length === 0\" fxLayoutAlign=\"center start\" layout-padding>\n {{'GRID.EMPTY' | oTranslate}}\n <ng-container *ngIf=\"quickFilter && searchInputComponent && searchInputComponent.getValue() && searchInputComponent.getValue().length > 0\">\n {{ 'GRID.EMPTY_USING_FILTER' | oTranslate : { values: [ searchInputComponent.getValue()] } }}\n </ng-container>\n </div>\n\n\n <!--MAT-GRID-LIST-->\n <mat-grid-list [cols]=\"cols\" [gutterSize]=\"gutterSize\" [rowHeight]=\"gridItemHeight\" class=\"o-mat-grid-list fill-remaining\"\n *ngIf=\"gridItems.length > 0\">\n <mat-grid-tile o-grid-item *ngFor=\"let item of gridItems\" [colspan]=\"item.colspan\" [rowspan]=\"item.rowspan\">\n <ng-container *ngTemplateOutlet=\"item.template\"></ng-container>\n </mat-grid-tile>\n </mat-grid-list>\n\n <button type=\"button\" aria-label=\"Insert\" *ngIf=\"insertButton && insertButtonFloatable\" mat-fab (click)=\"add()\"\n class=\"o-grid-add-floatable-button\" [class.o-grid-add-bottom-floatable-button]=\"insertButtonPosition ==='bottom'\"\n [class.o-grid-add-top-floatable-button]=\"insertButtonPosition ==='top'\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!-- GRID FOOTER -->\n <div *ngIf=\"!paginationControls && showFooter && (loading | async)===false\" fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"o-grid-footer\">\n <button type=\"button\" mat-button *ngIf=\"getDataArray().length < totalRecords && getDataArray().length>0\" (click)=\"loadMore()\"\n class=\"mat-raised-button\">\n {{ 'GRID.BUTTON_NEXT' | oTranslate }}\n </button>\n <span fxFlex></span>\n <span class=\"o-grid-totals\">{{ 'GRID.TEXT_SHOWN_ITEMS' | oTranslate :{values: [getDataArray().length, totalRecords]}\n }}</span>\n </div>\n\n <mat-paginator class=\"o-mat-paginator\" #paginator *ngIf=\"paginationControls && showFooter\" [length]=\"totalRecords\" [pageSize]=\"queryRows\"\n [pageSizeOptions]=\"pageSizeOptions\" [pageIndex]=\"currentPage\" [showFirstLastButtons]=\"true\" (page)=\"onChangePage($event)\"></mat-paginator>\n </ng-container>\n <div *ngIf=\"loading | async\" fxLayout=\"row\" fxLayoutAlign=\"center end\" class=\"o-loading-blocker\">\n <div fxLayoutAlign=\"center center\" [class.o-spinner-container-controls]=\"hasControls()\" class=\"o-spinner-container\">\n <o-grid-skeleton></o-grid-skeleton>\n </div>\n </div>\n\n\n</div>\n", styles: [".o-grid{height:100%}.o-grid .o-grid-container{position:relative;height:100%;display:flex}.o-grid .o-grid-container .o-grid-toolbar .mat-mdc-form-field-subscript-wrapper{display:none}.o-grid .o-grid-container .o-grid-no-results{padding:16px}.o-grid .o-grid-container .o-grid-paginator,.o-grid .o-grid-container .o-grid-sort{margin-right:1em}.o-grid .o-grid-container .o-grid-paginator{display:flex}.o-grid .o-grid-container .o-grid-paginator .o-grid-select-page{width:60px}.o-grid .o-grid-container .o-grid-paginator .o-grid-page-size-label{margin:0 4px 0 8px;align-self:center}.o-grid .o-grid-container .o-grid-footer .o-grid-totals{margin-right:8px;font-size:14px}.o-grid .o-grid-container .o-grid-footer,.o-grid .o-grid-container .o-mat-paginator{flex-shrink:0}.o-grid .o-grid-container .o-loading-blocker{position:absolute;top:0;left:0;right:0;bottom:0;z-index:500;visibility:visible;opacity:1;transition:opacity .25s linear}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container{width:100%;height:100%}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container.o-spinner-container-controls{height:calc(100% - 64px)}.o-grid.o-grid-fixed,.o-grid.o-grid-fixed .o-grid-container{max-height:100%;height:100%}.o-grid.o-grid-fixed .o-mat-grid-list{overflow:auto;padding-bottom:0!important}.o-grid.o-grid-fixed .o-grid-footer,.o-grid.o-grid-fixed .o-mat-paginator{flex:0 0 auto}.o-grid .o-grid-add-floatable-button{right:12px;position:absolute}.o-grid .o-grid-add-floatable-button.o-grid-add-bottom-floatable-button{bottom:36px}.o-grid .o-grid-add-floatable-button.o-grid-add-top-floatable-button{top:66px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.OSearchInputComponent, selector: "o-search-input", inputs: ["placeholder", "label", "width", "float-label", "appearance", "columns", "filter-case-sensitive", "show-case-sensitive-checkbox", "show-menu"], outputs: ["onSearch"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i11.ODataToolbarComponent, selector: "o-data-toolbar", inputs: ["show-title", "title"] }, { kind: "directive", type: i12.OGridItemDirective, selector: "mat-grid-tile[o-grid-item]" }, { kind: "component", type: i13.OGridSkeletonComponent, selector: "o-grid-skeleton" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
331
|
+
], queries: [{ propertyName: "inputGridItems", predicate: i0.forwardRef(function () { return OGridItemComponent; }) }], viewQueries: [{ propertyName: "matpaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "gridItemDirectives", predicate: OGridItemDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [style.display]=\"isVisible()? '' : 'none'\" class=\"o-grid-container\" fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\n\n <!--TOOLBAR-->\n <o-data-toolbar *ngIf=\"hasControls()\" class=\"o-grid-toolbar\" [title]=\"title\" [show-title]=\"hasTitle()\">\n <ng-container o-data-toolbar-projection-start>\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" class=\"o-grid-add-button o-grid-button text\" mat-stroked-button\n aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'ADD' | oTranslate }}</span>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-stroked-button aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\" class=\"o-grid-button text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" class=\"o-grid-button o-grid-add-button no-text\" mat-icon-button\n aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-icon-button aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\" class=\"o-grid-button no-text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n </ng-template>\n\n <!--O-GRID-PAGINATOR-->\n <div class=\"o-grid-paginator\" *ngIf=\"showPageSize\">\n <div class=\"o-grid-page-size-label\">{{ 'GRID.ITEMS_PER_PAGE' | oTranslate }}:</div>\n <mat-form-field class=\"o-grid-select-page\">\n <mat-select placeholder=\"\" #pageSizeSelect [(value)]=\"queryRows\" (selectionChange)=\"pageSizeChanged()\">\n <mat-option *ngFor=\"let page of pageSizeOptions\" [value]=\"page\">\n {{ page }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!--O-GRID-SORT-->\n <div class=\"o-grid-sort\" *ngIf=\"showSort && sortableColumns.length > 0\">\n <mat-form-field class=\"o-grid-select-sort\">\n <mat-icon matPrefix>sort</mat-icon>\n <mat-select #sortSelect [value]=\"currentOrderColumn\" (selectionChange)=\"sortColumnChanged($event)\"\n placeholder=\" {{ 'GRID.SORT_BY' | oTranslate }}\">\n <mat-option *ngFor=\"let column of sortableColumns; let i = index\" [value]=\"i\">\n {{ getSortOptionText(column) }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n </ng-container>\n <ng-content select=\"[o-grid-toolbar][position=start]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar][position=end]\" ngProjectAs=\"[o-data-toolbar-custom-projection-end]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-container o-data-toolbar-projection-end>\n <o-search-input *ngIf=\"quickFilter\" [columns]=\"quickFilterColumns\" [filter-case-sensitive]=\"filterCaseSensitive\"\n [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\" [placeholder]=\"quickFilterPlaceholder\" [appearance]=\"quickFilterAppearance\"\n float-label=\"never\"></o-search-input>\n </ng-container>\n </o-data-toolbar>\n\n <ng-container *ngIf=\"(loading | async)===false\">\n <!--no results-->\n <div class=\"o-grid-no-results fill-remaining\" *ngIf=\"gridItems.length === 0\" fxLayoutAlign=\"center start\" layout-padding>\n {{'GRID.EMPTY' | oTranslate}}\n <ng-container *ngIf=\"quickFilter && searchInputComponent && searchInputComponent.getValue() && searchInputComponent.getValue().length > 0\">\n {{ 'GRID.EMPTY_USING_FILTER' | oTranslate : { values: [ searchInputComponent.getValue()] } }}\n </ng-container>\n </div>\n\n\n <!--MAT-GRID-LIST-->\n <mat-grid-list [cols]=\"cols\" [gutterSize]=\"gutterSize\" [rowHeight]=\"gridItemHeight\" class=\"o-mat-grid-list fill-remaining\"\n *ngIf=\"gridItems.length > 0\">\n <mat-grid-tile o-grid-item *ngFor=\"let item of gridItems\" [colspan]=\"item.colspan\" [rowspan]=\"item.rowspan\">\n <ng-container *ngTemplateOutlet=\"item.template\"></ng-container>\n </mat-grid-tile>\n </mat-grid-list>\n\n <button type=\"button\" aria-label=\"Insert\" *ngIf=\"insertButton && insertButtonFloatable\" mat-fab (click)=\"add()\"\n class=\"o-grid-add-floatable-button\" [class.o-grid-add-bottom-floatable-button]=\"insertButtonPosition ==='bottom'\"\n [class.o-grid-add-top-floatable-button]=\"insertButtonPosition ==='top'\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!-- GRID FOOTER -->\n <div *ngIf=\"!paginationControls && showFooter && (loading | async)===false\" fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"o-grid-footer\">\n <button type=\"button\" mat-button *ngIf=\"getDataArray().length < totalRecords && getDataArray().length>0\" (click)=\"loadMore()\"\n class=\"mat-raised-button\">\n {{ 'GRID.BUTTON_NEXT' | oTranslate }}\n </button>\n <span fxFlex></span>\n <span class=\"o-grid-totals\">{{ 'GRID.TEXT_SHOWN_ITEMS' | oTranslate :{values: [getDataArray().length, totalRecords]}\n }}</span>\n </div>\n\n <mat-paginator class=\"o-mat-paginator\" #paginator *ngIf=\"paginationControls && showFooter\" [length]=\"totalRecords\" [pageSize]=\"queryRows\"\n [pageSizeOptions]=\"pageSizeOptions\" [pageIndex]=\"currentPage\" [showFirstLastButtons]=\"true\" (page)=\"onChangePage($event)\"></mat-paginator>\n </ng-container>\n <div *ngIf=\"loading | async\" fxLayout=\"row\" fxLayoutAlign=\"center end\" class=\"o-loading-blocker\">\n <div fxLayoutAlign=\"center center\" [class.o-spinner-container-controls]=\"hasControls()\" class=\"o-spinner-container\">\n <o-grid-skeleton></o-grid-skeleton>\n </div>\n </div>\n\n\n</div>\n", styles: [".o-grid{height:100%}.o-grid .o-grid-container{position:relative;height:100%;display:flex}.o-grid .o-grid-container .o-grid-toolbar .mat-mdc-form-field-subscript-wrapper{display:none}.o-grid .o-grid-container .o-grid-no-results{padding:16px}.o-grid .o-grid-container .o-grid-paginator,.o-grid .o-grid-container .o-grid-sort{margin-right:1em}.o-grid .o-grid-container .o-grid-paginator{display:flex}.o-grid .o-grid-container .o-grid-paginator .o-grid-select-page{width:60px}.o-grid .o-grid-container .o-grid-paginator .o-grid-page-size-label{margin:0 4px 0 8px;align-self:center}.o-grid .o-grid-container .o-grid-footer .o-grid-totals{margin-right:8px;font-size:14px}.o-grid .o-grid-container .o-grid-footer,.o-grid .o-grid-container .o-mat-paginator{flex-shrink:0}.o-grid .o-grid-container .o-loading-blocker{position:absolute;top:0;left:0;right:0;bottom:0;z-index:500;visibility:visible;opacity:1;transition:opacity .25s linear}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container{width:100%;height:100%}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container.o-spinner-container-controls{height:calc(100% - 64px)}.o-grid.o-grid-fixed,.o-grid.o-grid-fixed .o-grid-container{max-height:100%;height:100%}.o-grid.o-grid-fixed .o-mat-grid-list{overflow:auto;padding-bottom:0!important}.o-grid.o-grid-fixed .o-grid-footer,.o-grid.o-grid-fixed .o-mat-paginator{flex:0 0 auto}.o-grid .o-grid-add-floatable-button{right:12px;position:absolute}.o-grid .o-grid-add-floatable-button.o-grid-add-bottom-floatable-button{bottom:36px}.o-grid .o-grid-add-floatable-button.o-grid-add-top-floatable-button{top:66px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.OSearchInputComponent, selector: "o-search-input", inputs: ["placeholder", "label", "width", "float-label", "appearance", "columns", "filter-case-sensitive", "show-case-sensitive-checkbox", "show-menu"], outputs: ["onSearch"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i11.ODataToolbarComponent, selector: "o-data-toolbar", inputs: ["show-title", "title"] }, { kind: "directive", type: i12.OGridItemDirective, selector: "mat-grid-tile[o-grid-item]" }, { kind: "component", type: i13.OGridSkeletonComponent, selector: "o-grid-skeleton" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
341
332
|
__decorate([
|
|
342
333
|
BooleanInputConverter(),
|
|
343
334
|
__metadata("design:type", Boolean)
|
|
@@ -395,4 +386,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
395
386
|
type: ViewChild,
|
|
396
387
|
args: [MatPaginator]
|
|
397
388
|
}] } });
|
|
398
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBSVIsUUFBUSxFQUNSLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0gsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFHakcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxN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LDRGQ3BKbEMsMndNQXNIQTtBRHZCRTtJQUFDLHFCQUFxQixFQUFFOzttREFDWTtBQUVwQztJQUFDLHFCQUFxQixFQUFFOztvREFDYTtBQUVyQztJQUFDLHFCQUFxQixFQUFFOztnREFDUztBQUVqQztJQUFDLHFCQUFxQixFQUFFOztrREFDVTtBQUlsQztJQUFDLHFCQUFxQixFQUFFOztxREFDYTtBQUVyQztJQUFDLHFCQUFxQixFQUFFOztvREFDTTtBQUU5QjtJQUFDLHFCQUFxQixFQUFFOzs2REFDcUI7QUFFN0M7SUFBQyxxQkFBcUIsRUFBRTs7dURBQ1M7NEZBN0J0QixjQUFjO2tCQWhCMUIsU0FBUzsrQkFDRSxRQUFRLGFBQ1A7d0JBQ1QsdUJBQXVCO3dCQUN2Qiw2QkFBNkI7d0JBQzdCLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRTtxQkFDN0UsVUFDTyxxQkFBcUIsaUJBR2QsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixnQkFBZ0IsRUFBRSxNQUFNO3dCQUN4QixzQkFBc0IsRUFBRSxhQUFhO3FCQUN0Qzs7MEJBOEZFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQzs0Q0F0Ri9DLFdBQVcsTUFHWCxZQUFZLE1BR1osUUFBUSxNQUdSLFVBQVUsTUFLVixhQUFhLE1BR3BCLFlBQVksTUFHTCxxQkFBcUIsTUFHNUIsZUFBZSxNQTRCUixjQUFjO3NCQURwQixlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFHOUMsa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLGtCQUFrQjtnQkFHekIsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVkaWFDaGFuZ2UsIE1lZGlhT2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U2VsZWN0Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBJR3JpZEl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tZ3JpZC1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdGF0ZVNlcnZpY2VQcm92aWRlciwgT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgT250aW1pemVTZXJ2aWNlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgT0dyaWRDb21wb25lbnRTdGF0ZUNsYXNzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGUvby1ncmlkLWNvbXBvbmVudC1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBPR3JpZENvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tZ3JpZC1jb21wb25lbnQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBPUXVlcnlEYXRhQXJncyB9IGZyb20gJy4uLy4uL3R5cGVzL3F1ZXJ5LWRhdGEtYXJncy50eXBlJztcbmltcG9ydCB7IFNRTE9yZGVyIH0gZnJvbSAnLi4vLi4vdHlwZXMvc3FsLW9yZGVyLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFNlcnZpY2VVdGlscyB9IGZyb20gJy4uLy4uL3V0aWwvc2VydmljZS51dGlscyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQgfSBmcm9tICcuLi9vLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzJztcbmltcG9ydCB7IE9NYXRTb3J0IH0gZnJvbSAnLi4vdGFibGUvZXh0ZW5zaW9ucy9zb3J0L28tbWF0LXNvcnQnO1xuaW1wb3J0IHsgT0dyaWRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLWl0ZW0vby1ncmlkLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE9HcmlkSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vZ3JpZC1pdGVtL28tZ3JpZC1pdGVtLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0dSSUQgPSBbXG4gIC8vIGNvbHM6IEFtb3VudCBvZiBjb2x1bW5zIGluIHRoZSBncmlkIGxpc3QuIERlZmF1bHQgaW4gZXh0cmEgc21hbGwgYW5kIHNtYWxsIHNjcmVlbiBpcyAxLCBpbiBtZWRpdW0gc2NyZWVuIGlzIDIsIGluIGxhcmdlIHNjcmVlbiBpcyAzIGFuZCBleHRyYSBsYXJnZSBzY3JlZW4gaXMgNC5cbiAgJ2NvbHMnLFxuICAvLyBzaG93LXBhZ2Utc2l6ZTpXaGV0aGVyIHRvIGhpZGUgdGhlIHBhZ2Ugc2l6ZSBzZWxlY3Rpb24gVUkgZnJvbSB0aGUgdXNlci5cbiAgJ3Nob3dQYWdlU2l6ZTogc2hvdy1wYWdlLXNpemUnLFxuICAvLyBzaG93LXNvcnQ6d2hldGhlciBvciBub3QgdGhlIHNvcnQgc2VsZWN0IGlzIHNob3duIGluIHRoZSB0b29sYmFyXG4gICdzaG93U29ydDogb3JkZXJhYmxlJyxcbiAgLy8gc29ydGFibGVbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgZmlsdGVyLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NvcnRhYmxlQ29sdW1uczogc29ydGFibGUtY29sdW1ucycsXG4gIC8vIHNvcnRDb2x1bW5zW3N0cmluZ106IGNvbHVtbnMgb2YgdGhlIHNvcnRpbmdjb2x1bW5zLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NvcnRDb2x1bW46IHNvcnQtY29sdW1uJyxcbiAgLy8gcXVpY2stZmlsdGVyLWNvbHVtbnMgW3N0cmluZ106IGNvbHVtbnMgb2YgdGhlIGZpbHRlciwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdxdWlja0ZpbHRlckNvbHVtbnM6IHF1aWNrLWZpbHRlci1jb2x1bW5zJyxcbiAgLy8gIGdyaWQtaXRlbS1oZWlnaHRbc3RyaW5nXTogU2V0IGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHJvdyBoZWlnaHQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCB2YWx1ZS4uIERlZmF1bHQ6IDE6MS5cbiAgJ2dyaWRJdGVtSGVpZ2h0OiBncmlkLWl0ZW0taGVpZ2h0JyxcbiAgLy8gcmVmcmVzaC1idXR0b24gW25vfHllc106IHNob3cgcmVmcmVzaCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ3JlZnJlc2hCdXR0b246IHJlZnJlc2gtYnV0dG9uJyxcbiAgLy8gZ3V0dGVyU2l6ZTogU2l6ZSBvZiB0aGUgZ3JpZCBsaXN0J3MgZ3V0dGVyIGluIHBpeGVscy5cbiAgJ2d1dHRlclNpemU6Z3V0dGVyLXNpemUnLFxuICAvLyBmaXgtaGVhZGVyIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IGZpeGVkIGZvb3RlciB3aGVuIHRoZSBjb250ZW50IGlzIGdyZWF0aGVyIHRoYW4gaXRzIG93biBoZWlnaHQuIERlZmF1bHQ6IG5vLlxuICAnZml4ZWRIZWFkZXI6Zml4ZWQtaGVhZGVyJyxcbiAgLy8gc2hvdy1mb290ZXI6SW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhlIGZvb3RlcjpEZWZhdWx0OnRydWVcbiAgJ3Nob3dGb290ZXI6c2hvdy1mb290ZXInLFxuICAvLyBpbnNlcnQtYnV0dG9uLXBvc2l0aW9uIFsgdG9wIHwgYm90dG9tIF06IHBvc2l0aW9uIG9mIHRoZSBpbnNlcnQgYnV0dG9uLiBEZWZhdWx0OiAnYm90dG9tJ1xuICAnaW5zZXJ0QnV0dG9uUG9zaXRpb246aW5zZXJ0LWJ1dHRvbi1wb3NpdGlvbicsXG4gIC8vIGluc2VydC1idXR0b24tZmxvYXRhYmxlIFtub3x5ZXNdOiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gcG9zaXRpb24gb2YgdGhlIGluc2VydCBidXR0b24gaXMgZmxvYXRpbmcgLiBEZWZhdWx0OiAneWVzJ1xuICAnaW5zZXJ0QnV0dG9uRmxvYXRhYmxlOmluc2VydC1idXR0b24tZmxvYXRhYmxlJyxcbiAgLy8gc2hvdy1idXR0b25zLXRleHQgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0ZXh0IG9mIGJ1dHRvbnMuIERlZmF1bHQ6IG5vLlxuICAnc2hvd0J1dHRvbnNUZXh0OiBzaG93LWJ1dHRvbnMtdGV4dCdcbl07XG5cblxuY29uc3QgUEFHRV9TSVpFX09QVElPTlMgPSBbOCwgMTYsIDI0LCAzMiwgNjRdO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWdyaWQnLFxuICBwcm92aWRlcnM6IFtcbiAgICBPbnRpbWl6ZVNlcnZpY2VQcm92aWRlcixcbiAgICBDb21wb25lbnRTdGF0ZVNlcnZpY2VQcm92aWRlcixcbiAgICB7IHByb3ZpZGU6IE9fQ09NUE9ORU5UX1NUQVRFX1NFUlZJQ0UsIHVzZUNsYXNzOiBPR3JpZENvbXBvbmVudFN0YXRlU2VydmljZSB9LFxuICBdLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fR1JJRCxcbiAgdGVtcGxhdGVVcmw6ICcuL28tZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tZ3JpZC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLWdyaWRdJzogJ3RydWUnLFxuICAgICdbY2xhc3Muby1ncmlkLWZpeGVkXSc6ICdmaXhlZEhlYWRlcidcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPR3JpZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQ8T0dyaWRDb21wb25lbnRTdGF0ZVNlcnZpY2U+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB7XG5cbiAgLyogSW5wdXRzICovXG4gIHByb3RlY3RlZCBfcXVlcnlSb3dzID0gMzI7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBmaXhlZEhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgc2hvd1BhZ2VTaXplOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93U29ydDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgc2hvd0Zvb3RlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgcHVibGljIGdyaWRJdGVtSGVpZ2h0ID0gJzE6MSc7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyByZWZyZXNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgaW5zZXJ0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBpbnNlcnRCdXR0b25GbG9hdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93QnV0dG9uc1RleHQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgaW5zZXJ0QnV0dG9uUG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbScgPSAnYm90dG9tJztcbiAgcGFnaW5hdGlvbkNvbnRyb2xzID0gZmFsc2U7XG4gIHB1YmxpYyBndXR0ZXJTaXplID0gJzFweCc7XG4gIHByb3RlY3RlZCBfcXVpY2tGaWx0ZXJBcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ291dGxpbmUnO1xuICBnZXQgY29scygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jb2xzIHx8IHRoaXMuX2NvbHNEZWZhdWx0O1xuICB9XG4gIHNldCBjb2xzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jb2xzID0gdmFsdWU7XG4gIH1cblxuICBnZXQgc29ydGFibGVDb2x1bW5zKCk6IFNRTE9yZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9zb3J0YWJsZUNvbHVtbnM7XG4gIH1cbiAgc2V0IHNvcnRhYmxlQ29sdW1ucyh2YWwpIHtcbiAgICBsZXQgcGFyc2VkID0gW107XG4gICAgaWYgKCFVdGlsLmlzQXJyYXkodmFsKSkge1xuICAgICAgcGFyc2VkID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnMoU3RyaW5nKHZhbCkpO1xuICAgIH1cbiAgICB0aGlzLl9zb3J0YWJsZUNvbHVtbnMgPSBwYXJzZWQ7XG4gIH1cblxuICBwdWJsaWMgcXVpY2tGaWx0ZXJDb2x1bW5zOiBzdHJpbmc7XG4gIC8qIEVuZCBJbnB1dHMgKi9cblxuICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gT0dyaWRJdGVtQ29tcG9uZW50KSlcbiAgcHVibGljIGlucHV0R3JpZEl0ZW1zOiBRdWVyeUxpc3Q8T0dyaWRJdGVtQ29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZHJlbihPR3JpZEl0ZW1EaXJlY3RpdmUpXG4gIHB1YmxpYyBncmlkSXRlbURpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxPR3JpZEl0ZW1EaXJlY3RpdmU+O1xuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcilcbiAgcHVibGljIG1hdHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gIC8qIFBhcnNlZCBJbnB1dHMgKi9cbiAgcHJvdGVjdGVkIF9zb3J0YWJsZUNvbHVtbnM6IFNRTE9yZGVyW10gPSBbXTtcbiAgcHVibGljIHNvcnRDb2x1bW5PcmRlcjogU1FMT3JkZXI7XG4gIC8qIEVuZCBwYXJzZWQgSW5wdXRzICovXG5cbiAgcHJvdGVjdGVkIF9jb2xzO1xuICBwcm90ZWN0ZWQgX2NvbHNEZWZhdWx0ID0gMTtcbiAgX3BhZ2VTaXplT3B0aW9ucyA9IFBBR0VfU0laRV9PUFRJT05TO1xuICBwcm90ZWN0ZWQgc29ydENvbHVtbjogc3RyaW5nO1xuICBwdWJsaWMgc3RvcmVQYWdpbmF0aW9uU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzZXQgZ3JpZEl0ZW1zKHZhbHVlOiBJR3JpZEl0ZW1bXSkge1xuICAgIHRoaXMuX2dyaWRJdGVtcyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGdyaWRJdGVtcygpOiBJR3JpZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2dyaWRJdGVtcztcbiAgfVxuXG4gIHByb3RlY3RlZCBfZ3JpZEl0ZW1zOiBJR3JpZEl0ZW1bXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJvdGVjdGVkIG1lZGlhOiBNZWRpYU9ic2VydmVyO1xuXG4gIHByb3RlY3RlZCBvTWF0U29ydDogT01hdFNvcnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPRm9ybUNvbXBvbmVudCkpIGZvcm06IE9Gb3JtQ29tcG9uZW50XG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCBlbFJlZiwgZm9ybSk7XG4gICAgdGhpcy5tZWRpYSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1lZGlhT2JzZXJ2ZXIpO1xuICAgIHRoaXMub01hdFNvcnQgPSBuZXcgT01hdFNvcnQoKTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBPR3JpZENvbXBvbmVudFN0YXRlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5zdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbHVtbnMpKSB7XG4gICAgICB0aGlzLnF1aWNrRmlsdGVyQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMucXVpY2tGaWx0ZXJDb2x1bW5zLCB0cnVlKTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLnNvcnRDb2x1bW4pKSB7XG4gICAgICB0aGlzLnNvcnRDb2x1bW4gPSB0aGlzLnN0YXRlLnNvcnRDb2x1bW47XG4gICAgfVxuICAgIHRoaXMucGFyc2VTb3J0Q29sdW1uKCk7XG5cbiAgICBjb25zdCBleGlzdGluZ09wdGlvbiA9IHRoaXMucGFnZVNpemVPcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbiA9PT0gdGhpcy5xdWVyeVJvd3MpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoZXhpc3RpbmdPcHRpb24pKSB7XG4gICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMucHVzaCh0aGlzLnF1ZXJ5Um93cyk7XG4gICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMuc29ydCgoaTogbnVtYmVyLCBqOiBudW1iZXIpID0+IGkgLSBqKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5zdGF0ZS5jdXJyZW50UGFnZTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUucXVlcnlSb3dzKSkge1xuICAgICAgdGhpcy5xdWVyeVJvd3MgPSB0aGlzLnN0YXRlLnF1ZXJ5Um93cztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmUgPSBVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmZpbHRlckNhc2VTZW5zaXRpdmUpID9cbiAgICAgIHRoaXMuc3RhdGUuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA6XG4gICAgICB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gICAgdGhpcy5zZXRHcmlkSXRlbURpcmVjdGl2ZXNEYXRhKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb01lZGlhQ2hhbmdlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJRdWlja0ZpbHRlcih0aGlzLnNlYXJjaElucHV0Q29tcG9uZW50KTtcbiAgICBpZiAodGhpcy5xdWVyeU9uSW5pdCkge1xuICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZEl0ZW1zID0gdGhpcy5pbnB1dEdyaWRJdGVtcy50b0FycmF5KCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaW5wdXRHcmlkSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUocXVlcnlDaGFuZ2VzID0+IHtcbiAgICAgIHRoaXMuZ3JpZEl0ZW1zID0gcXVlcnlDaGFuZ2VzLl9yZXN1bHRzO1xuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb01lZGlhQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5tZWRpYS5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKGNoYW5nZTogTWVkaWFDaGFuZ2VbXSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZSAmJiBjaGFuZ2VbMF0pIHtcbiAgICAgICAgc3dpdGNoIChjaGFuZ2VbMF0ubXFBbGlhcykge1xuICAgICAgICAgIGNhc2UgJ3hzJzpcbiAgICAgICAgICBjYXNlICdzbSc6XG4gICAgICAgICAgICB0aGlzLl9jb2xzRGVmYXVsdCA9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgICAgICB0aGlzLl9jb2xzRGVmYXVsdCA9IDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdsZyc6XG4gICAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgICAgdGhpcy5fY29sc0RlZmF1bHQgPSA0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZERhdGEoKTogdm9pZCB7XG4gICAgbGV0IHF1ZXJ5QXJnczogT1F1ZXJ5RGF0YUFyZ3MgPSB7fTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCA9IDA7XG4gICAgICBxdWVyeUFyZ3MgPSB7XG4gICAgICAgIG9mZnNldDogdGhpcy5wYWdpbmF0aW9uQ29udHJvbHMgPyAodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzKSA6IDAsXG4gICAgICAgIGxlbmd0aDogTWF0aC5tYXgodGhpcy5xdWVyeVJvd3MsIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkubGVuZ3RoKSxcbiAgICAgICAgcmVwbGFjZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5xdWVyeURhdGEodm9pZCAwLCBxdWVyeUFyZ3MpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZFBhZ2luYXRlZERhdGFGcm9tU3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gICAgdGhpcy5kYXRhUmVzcG9uc2VBcnJheSA9IFtdO1xuICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvcnRlZERhdGFGcm9tQXJyYXkoZGF0YUFycmF5OiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0Q29sdW1uT3JkZXIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vTWF0U29ydC5nZXRTb3J0ZWREYXRhQnlTUUxPcmRlcihkYXRhQXJyYXksIFt0aGlzLnNvcnRDb2x1bW5PcmRlcl0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YUFycmF5O1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyR3JpZEl0ZW1EaXJlY3RpdmUoaXRlbTogT0dyaWRJdGVtRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmRldGFpbE1vZGUgPT09IENvZGVzLkRFVEFJTF9NT0RFX0NMSUNLKSB7XG4gICAgICAgIGl0ZW0ub25DbGljayhncmlkSXRlbSA9PiB0aGlzLm9uSXRlbURldGFpbENsaWNrKGdyaWRJdGVtKSk7XG4gICAgICB9XG4gICAgICBpZiAoQ29kZXMuaXNEb3VibGVDbGlja01vZGUodGhpcy5kZXRhaWxNb2RlKSkge1xuICAgICAgICBpdGVtLm9uRG91YmxlQ2xpY2soZ3JpZEl0ZW0gPT4gdGhpcy5vbkl0ZW1EZXRhaWxEYmxDbGljayhncmlkSXRlbSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkl0ZW1EZXRhaWxDbGljayhpdGVtOiBPR3JpZEl0ZW1EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUl0ZW1DbGljayhpdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkl0ZW1EZXRhaWxEYmxDbGljayhpdGVtOiBPR3JpZEl0ZW1EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUl0ZW1EYmxDbGljayhpdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtwcm9wTmFtZTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5zdGF0aWNEYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkgPSBjaGFuZ2VzLnN0YXRpY0RhdGEuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCh0aGlzLmRhdGFSZXNwb25zZUFycmF5KTtcbiAgICAgIC8qIGlmIHRoZSBzdGF0aWMgZGF0YSBjaGFuZ2VzIGFmdGVyIHJlZ2lzdGVyaW5nIHRoZSBxdWljayBmaWx0ZXIsXG4gICAgICB0aGUgZmlsdGVyRGF0YSBtZXRob2QgaXMgY2FsbGVkIGVsc2Ugd2hlbiByZWdpc3RlcmluZyB0aGUgcXVpY2tmaWx0ZXJcbiAgICAgIG9yIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzICovXG4gICAgICBpZiAodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmZpbHRlckRhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBsb2FkTW9yZSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlICs9IDE7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5QXJnczogT1F1ZXJ5RGF0YUFyZ3MgPSB7XG4gICAgICAgIG9mZnNldDogdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCxcbiAgICAgICAgbGVuZ3RoOiB0aGlzLnF1ZXJ5Um93c1xuICAgICAgfTtcbiAgICAgIHRoaXMucXVlcnlEYXRhKHZvaWQgMCwgcXVlcnlBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJEYXRhKHZvaWQgMCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cblxuICBwdWJsaWMgZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyOiBvYmplY3QsIG92cnJBcmdzPzogT1F1ZXJ5RGF0YUFyZ3MpOiBhbnlbXSB7XG4gICAgY29uc3QgcXVlcnlBcmd1bWVudHMgPSBzdXBlci5nZXRRdWVyeUFyZ3VtZW50cyhmaWx0ZXIsIG92cnJBcmdzKTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnRDb2x1bW4pKSB7XG4gICAgICBxdWVyeUFyZ3VtZW50c1s2XSA9IHRoaXMuc29ydENvbHVtbk9yZGVyID8gW3RoaXMuc29ydENvbHVtbk9yZGVyXSA6IHRoaXMuc29ydENvbHVtbk9yZGVyO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnlBcmd1bWVudHM7XG4gIH1cblxuICBwdWJsaWMgcGFyc2VTb3J0Q29sdW1uKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcnNlZCA9IChTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyh0aGlzLnNvcnRDb2x1bW4pIHx8IFtdKVswXTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFNvcnRhYmxlQ29sdW1uSW5kZXgocGFyc2VkKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoaW5kZXgpICYmIGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uT3JkZXIgPSBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGN1cnJlbnRPcmRlckNvbHVtbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZpbmRTb3J0YWJsZUNvbHVtbkluZGV4KHRoaXMuc29ydENvbHVtbk9yZGVyKTtcbiAgfVxuXG4gIHNldCBjdXJyZW50T3JkZXJDb2x1bW4odmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNvcnRDb2x1bW5PcmRlciA9IHRoaXMuc29ydGFibGVDb2x1bW5zW3ZhbF07XG4gIH1cblxuICBwcm90ZWN0ZWQgZmluZFNvcnRhYmxlQ29sdW1uSW5kZXgoc29ydGFibGVDb2x1bW46IFNRTE9yZGVyKTogbnVtYmVyIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNvcnRhYmxlQ29sdW1uKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNvcnRhYmxlQ29sdW1uc1xuICAgICAgLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uY29sdW1uTmFtZSA9PT0gc29ydGFibGVDb2x1bW4uY29sdW1uTmFtZVxuICAgICAgICAmJiBpdGVtLmFzY2VuZGVudCA9PT0gc29ydGFibGVDb2x1bW4uYXNjZW5kZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhVG9TdG9yZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5nZXREYXRhVG9TdG9yZSgpO1xuICB9XG5cbiAgcHVibGljIGdldFNvcnRPcHRpb25UZXh0KGNvbDogU1FMT3JkZXIpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGNvbFRleHRLZXkgPSBgR1JJRC5TT1JUX0JZXyR7Y29sLmNvbHVtbk5hbWUudG9VcHBlckNhc2UoKX1fYCArIChjb2wuYXNjZW5kZW50ID8gJ0FTQycgOiAnREVTQycpO1xuICAgIHJlc3VsdCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoY29sVGV4dEtleSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gY29sVGV4dEtleSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY29sVGV4dEtleSA9ICdHUklELlNPUlRfQllfJyArIChjb2wuYXNjZW5kZW50ID8gJ0FTQycgOiAnREVTQycpO1xuICAgIHJlc3VsdCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoY29sVGV4dEtleSwgWyh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGNvbC5jb2x1bW5OYW1lKSB8fCAnJyldKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFkZCgpOiB2b2lkIHtcbiAgICBzdXBlci5pbnNlcnREZXRhaWwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVJlc3BvbnNlQXJyYXkoZGF0YTogYW55W10sIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgaWYgKHRoaXMucGFnZWFibGUgJiYgIXJlcGxhY2UpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzID8gZGF0YSA6ICh0aGlzLmRhdGFSZXNwb25zZUFycmF5IHx8IFtdKS5jb25jYXQoZGF0YSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5wYWdlYWJsZSkge1xuICAgICAgcmVzdWx0ID0gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBzdXBlci5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuc3RvcmVQYWdpbmF0aW9uU3RhdGUgPSB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEdyaWRJdGVtRGlyZWN0aXZlc0RhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkSXRlbURpcmVjdGl2ZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5ncmlkSXRlbURpcmVjdGl2ZXMudG9BcnJheSgpLmZvckVhY2goKGVsZW1lbnQ6IE9HcmlkSXRlbURpcmVjdGl2ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRJdGVtRGF0YSh0aGlzLmRhdGFBcnJheVtpbmRleF0pO1xuICAgICAgICBlbGVtZW50LnNldEdyaWRDb21wb25lbnQodGhpcyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJHcmlkSXRlbURpcmVjdGl2ZShlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHBhZ2VTaXplQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzb3J0Q29sdW1uQ2hhbmdlZChldmVudDogTWF0U2VsZWN0Q2hhbmdlKSB7XG4gICAgdGhpcy5jdXJyZW50T3JkZXJDb2x1bW4gPSBldmVudC52YWx1ZTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcmVnaXN0ZXJRdWlja0ZpbHRlcihhcmc6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLnJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5xdWlja0ZpbHRlckFjdGl2ZUNvbHVtbnMpKSB7XG4gICAgICBjb25zdCBwYXJzZWRBcnIgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5zdGF0ZS5xdWlja0ZpbHRlckFjdGl2ZUNvbHVtbnMsIHRydWUpO1xuICAgICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5zZXRBY3RpdmVDb2x1bW5zKHBhcnNlZEFycik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2luYXRpb25EYXRhRnJvbUFycmF5KGRhdGFBcnJheTogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IHJlc3VsdDogYW55W107XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzKSB7XG4gICAgICByZXN1bHQgPSBkYXRhQXJyYXkuc3BsaWNlKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cywgdGhpcy5xdWVyeVJvd3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBkYXRhQXJyYXkuc3BsaWNlKDAsIHRoaXMucXVlcnlSb3dzICogKHRoaXMuY3VycmVudFBhZ2UgKyAxKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiIsIjxkaXYgW3N0eWxlLmRpc3BsYXldPVwiaXNWaXNpYmxlKCk/ICcnIDogJ25vbmUnXCIgY2xhc3M9XCJvLWdyaWQtY29udGFpbmVyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiPlxuXG4gIDwhLS1UT09MQkFSLS0+XG4gIDxvLWRhdGEtdG9vbGJhciAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBjbGFzcz1cIm8tZ3JpZC10b29sYmFyXCIgW3RpdGxlXT1cInRpdGxlXCIgW3Nob3ctdGl0bGVdPVwiaGFzVGl0bGUoKVwiPlxuICAgIDxuZy1jb250YWluZXIgby1kYXRhLXRvb2xiYXItcHJvamVjdGlvbi1zdGFydD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QnV0dG9uc1RleHQ7ZWxzZSBzaG93QnV0dG9uc1dpdGhvdXRUZXh0XCI+XG4gICAgICAgIDwhLS0gYnV0dG9uIG5ldy0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5zZXJ0QnV0dG9uICYmICFpbnNlcnRCdXR0b25GbG9hdGFibGVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvLWdyaWQtYWRkLWJ1dHRvbiBvLWdyaWQtYnV0dG9uIHRleHRcIiBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKGNsaWNrKT1cImFkZCgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7ICdBREQnIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLWJ1dHRvbiByZWZyZXNoLS0+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUmVmcmVzaFwiIChjbGljayk9XCJyZWxvYWREYXRhKClcIiAqbmdJZj1cInJlZnJlc2hCdXR0b25cIiBjbGFzcz1cIm8tZ3JpZC1idXR0b24gdGV4dFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YXV0b3JlbmV3XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnUkVGUkVTSCcgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3Nob3dCdXR0b25zV2l0aG91dFRleHQ+XG4gICAgICAgIDwhLS0gYnV0dG9uIG5ldy0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5zZXJ0QnV0dG9uICYmICFpbnNlcnRCdXR0b25GbG9hdGFibGVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvLWdyaWQtYnV0dG9uIG8tZ3JpZC1hZGQtYnV0dG9uIG5vLXRleHRcIiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKGNsaWNrKT1cImFkZCgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8IS0tYnV0dG9uIHJlZnJlc2gtLT5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJSZWZyZXNoXCIgKGNsaWNrKT1cInJlbG9hZERhdGEoKVwiICpuZ0lmPVwicmVmcmVzaEJ1dHRvblwiIGNsYXNzPVwiby1ncmlkLWJ1dHRvbiBuby10ZXh0XCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphdXRvcmVuZXdcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwhLS1PLUdSSUQtUEFHSU5BVE9SLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1ncmlkLXBhZ2luYXRvclwiICpuZ0lmPVwic2hvd1BhZ2VTaXplXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLWdyaWQtcGFnZS1zaXplLWxhYmVsXCI+e3sgJ0dSSUQuSVRFTVNfUEVSX1BBR0UnIHwgb1RyYW5zbGF0ZSB9fTo8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiby1ncmlkLXNlbGVjdC1wYWdlXCI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJcIiAjcGFnZVNpemVTZWxlY3QgWyh2YWx1ZSldPVwicXVlcnlSb3dzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJwYWdlU2l6ZUNoYW5nZWQoKVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHBhZ2Ugb2YgcGFnZVNpemVPcHRpb25zXCIgW3ZhbHVlXT1cInBhZ2VcIj5cbiAgICAgICAgICAgICAge3sgcGFnZSB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tTy1HUklELVNPUlQtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWdyaWQtc29ydFwiICpuZ0lmPVwic2hvd1NvcnQgJiYgc29ydGFibGVDb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiby1ncmlkLXNlbGVjdC1zb3J0XCI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5zb3J0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LXNlbGVjdCAjc29ydFNlbGVjdCBbdmFsdWVdPVwiY3VycmVudE9yZGVyQ29sdW1uXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJzb3J0Q29sdW1uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiIHt7ICdHUklELlNPUlRfQlknIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzb3J0YWJsZUNvbHVtbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiaVwiPlxuICAgICAgICAgICAgICB7eyBnZXRTb3J0T3B0aW9uVGV4dChjb2x1bW4pIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1ncmlkLXRvb2xiYXJdW3Bvc2l0aW9uPXN0YXJ0XVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLXN0YXJ0XVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1ncmlkLXRvb2xiYXJdW3Bvc2l0aW9uPWVuZF1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1lbmRdXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLWdyaWQtdG9vbGJhcl1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1zdGFydF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciBvLWRhdGEtdG9vbGJhci1wcm9qZWN0aW9uLWVuZD5cbiAgICAgIDxvLXNlYXJjaC1pbnB1dCAqbmdJZj1cInF1aWNrRmlsdGVyXCIgW2NvbHVtbnNdPVwicXVpY2tGaWx0ZXJDb2x1bW5zXCIgW2ZpbHRlci1jYXNlLXNlbnNpdGl2ZV09XCJmaWx0ZXJDYXNlU2Vuc2l0aXZlXCJcbiAgICAgICAgW3Nob3ctY2FzZS1zZW5zaXRpdmUtY2hlY2tib3hdPVwic2hvd0Nhc2VTZW5zaXRpdmVDaGVja2JveCgpXCIgW3BsYWNlaG9sZGVyXT1cInF1aWNrRmlsdGVyUGxhY2Vob2xkZXJcIiBbYXBwZWFyYW5jZV09XCJxdWlja0ZpbHRlckFwcGVhcmFuY2VcIlxuICAgICAgICBmbG9hdC1sYWJlbD1cIm5ldmVyXCI+PC9vLXNlYXJjaC1pbnB1dD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9vLWRhdGEtdG9vbGJhcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGxvYWRpbmcgfCBhc3luYyk9PT1mYWxzZVwiPlxuICAgIDwhLS1ubyByZXN1bHRzLS0+XG4gICAgPGRpdiBjbGFzcz1cIm8tZ3JpZC1uby1yZXN1bHRzIGZpbGwtcmVtYWluaW5nXCIgKm5nSWY9XCJncmlkSXRlbXMubGVuZ3RoID09PSAwXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBzdGFydFwiIGxheW91dC1wYWRkaW5nPlxuICAgICAge3snR1JJRC5FTVBUWScgfCBvVHJhbnNsYXRlfX1cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja0ZpbHRlciAmJiBzZWFyY2hJbnB1dENvbXBvbmVudCAmJiBzZWFyY2hJbnB1dENvbXBvbmVudC5nZXRWYWx1ZSgpICYmIHNlYXJjaElucHV0Q29tcG9uZW50LmdldFZhbHVlKCkubGVuZ3RoID4gMFwiPlxuICAgICAgICB7eyAnR1JJRC5FTVBUWV9VU0lOR19GSUxURVInIHwgb1RyYW5zbGF0ZSA6IHsgdmFsdWVzOiBbIHNlYXJjaElucHV0Q29tcG9uZW50LmdldFZhbHVlKCldIH0gfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG5cbiAgICA8IS0tTUFULUdSSUQtTElTVC0tPlxuICAgIDxtYXQtZ3JpZC1saXN0IFtjb2xzXT1cImNvbHNcIiBbZ3V0dGVyU2l6ZV09XCJndXR0ZXJTaXplXCIgW3Jvd0hlaWdodF09XCJncmlkSXRlbUhlaWdodFwiIGNsYXNzPVwiby1tYXQtZ3JpZC1saXN0IGZpbGwtcmVtYWluaW5nXCJcbiAgICAgICpuZ0lmPVwiZ3JpZEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxtYXQtZ3JpZC10aWxlIG8tZ3JpZC1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyaWRJdGVtc1wiIFtjb2xzcGFuXT1cIml0ZW0uY29sc3BhblwiIFtyb3dzcGFuXT1cIml0ZW0ucm93c3BhblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbS50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgIDwvbWF0LWdyaWQtbGlzdD5cblxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJJbnNlcnRcIiAqbmdJZj1cImluc2VydEJ1dHRvbiAmJiBpbnNlcnRCdXR0b25GbG9hdGFibGVcIiBtYXQtZmFiIChjbGljayk9XCJhZGQoKVwiXG4gICAgICBjbGFzcz1cIm8tZ3JpZC1hZGQtZmxvYXRhYmxlLWJ1dHRvblwiIFtjbGFzcy5vLWdyaWQtYWRkLWJvdHRvbS1mbG9hdGFibGUtYnV0dG9uXT1cImluc2VydEJ1dHRvblBvc2l0aW9uID09PSdib3R0b20nXCJcbiAgICAgIFtjbGFzcy5vLWdyaWQtYWRkLXRvcC1mbG9hdGFibGUtYnV0dG9uXT1cImluc2VydEJ1dHRvblBvc2l0aW9uID09PSd0b3AnXCI+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmFkZFwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8IS0tIEdSSUQgRk9PVEVSIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhcGFnaW5hdGlvbkNvbnRyb2xzICYmIHNob3dGb290ZXIgJiYgKGxvYWRpbmcgfCBhc3luYyk9PT1mYWxzZVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cIm8tZ3JpZC1mb290ZXJcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gKm5nSWY9XCJnZXREYXRhQXJyYXkoKS5sZW5ndGggPCB0b3RhbFJlY29yZHMgJiYgZ2V0RGF0YUFycmF5KCkubGVuZ3RoPjBcIiAoY2xpY2spPVwibG9hZE1vcmUoKVwiXG4gICAgICAgIGNsYXNzPVwibWF0LXJhaXNlZC1idXR0b25cIj5cbiAgICAgICAge3sgJ0dSSUQuQlVUVE9OX05FWFQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvLWdyaWQtdG90YWxzXCI+e3sgJ0dSSUQuVEVYVF9TSE9XTl9JVEVNUycgfCBvVHJhbnNsYXRlIDp7dmFsdWVzOiBbZ2V0RGF0YUFycmF5KCkubGVuZ3RoLCB0b3RhbFJlY29yZHNdfVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtcGFnaW5hdG9yIGNsYXNzPVwiby1tYXQtcGFnaW5hdG9yXCIgI3BhZ2luYXRvciAqbmdJZj1cInBhZ2luYXRpb25Db250cm9scyAmJiBzaG93Rm9vdGVyXCIgW2xlbmd0aF09XCJ0b3RhbFJlY29yZHNcIiBbcGFnZVNpemVdPVwicXVlcnlSb3dzXCJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCIgW3BhZ2VJbmRleF09XCJjdXJyZW50UGFnZVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCIgKHBhZ2UpPVwib25DaGFuZ2VQYWdlKCRldmVudClcIj48L21hdC1wYWdpbmF0b3I+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZyB8IGFzeW5jXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGVuZFwiIGNsYXNzPVwiby1sb2FkaW5nLWJsb2NrZXJcIj5cbiAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgW2NsYXNzLm8tc3Bpbm5lci1jb250YWluZXItY29udHJvbHNdPVwiaGFzQ29udHJvbHMoKVwiIGNsYXNzPVwiby1zcGlubmVyLWNvbnRhaW5lclwiPlxuICAgICAgPG8tZ3JpZC1za2VsZXRvbj48L28tZ3JpZC1za2VsZXRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuPC9kaXY+XG4iXX0=
|
|
389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBSVIsUUFBUSxFQUNSLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0gsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFHakcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxN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YztrQkFoQjFCLFNBQVM7K0JBQ0UsUUFBUSxhQUNQO3dCQUNULHVCQUF1Qjt3QkFDdkIsNkJBQTZCO3dCQUM3QixFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUU7cUJBQzdFLFVBQ08scUJBQXFCLGlCQUdkLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osZ0JBQWdCLEVBQUUsTUFBTTt3QkFDeEIsc0JBQXNCLEVBQUUsYUFBYTtxQkFDdEM7OzBCQThGRSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7NENBdEYvQyxXQUFXLE1BR1gsWUFBWSxNQUdaLFFBQVEsTUFHUixVQUFVLE1BS1YsYUFBYSxNQUdwQixZQUFZLE1BR0wscUJBQXFCLE1BRzVCLGVBQWUsTUE0QlIsY0FBYztzQkFEcEIsZUFBZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7Z0JBRzlDLGtCQUFrQjtzQkFEeEIsWUFBWTt1QkFBQyxrQkFBa0I7Z0JBR3pCLFlBQVk7c0JBRGxCLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2UsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lZGlhQ2hhbmdlLCBNZWRpYU9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgSUdyaWRJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLWdyaWQtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsIE9fQ09NUE9ORU5UX1NUQVRFX1NFUlZJQ0UsIE9udGltaXplU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE9HcmlkQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tZ3JpZC1jb21wb25lbnQtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgT0dyaWRDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLWdyaWQtY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1F1ZXJ5RGF0YUFyZ3MgfSBmcm9tICcuLi8uLi90eXBlcy9xdWVyeS1kYXRhLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBTUUxPcmRlciB9IGZyb20gJy4uLy4uL3R5cGVzL3NxbC1vcmRlci50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3NlcnZpY2UudXRpbHMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0vby1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdE9TZXJ2aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vby1zZXJ2aWNlLWNvbXBvbmVudC5jbGFzcyc7XG5pbXBvcnQgeyBPTWF0U29ydCB9IGZyb20gJy4uL3RhYmxlL2V4dGVuc2lvbnMvc29ydC9vLW1hdC1zb3J0JztcbmltcG9ydCB7IE9HcmlkSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC1pdGVtL28tZ3JpZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPR3JpZEl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2dyaWQtaXRlbS9vLWdyaWQtaXRlbS5kaXJlY3RpdmUnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19HUklEID0gW1xuICAvLyBjb2xzOiBBbW91bnQgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZCBsaXN0LiBEZWZhdWx0IGluIGV4dHJhIHNtYWxsIGFuZCBzbWFsbCBzY3JlZW4gaXMgMSwgaW4gbWVkaXVtIHNjcmVlbiBpcyAyLCBpbiBsYXJnZSBzY3JlZW4gaXMgMyBhbmQgZXh0cmEgbGFyZ2Ugc2NyZWVuIGlzIDQuXG4gICdjb2xzJyxcbiAgLy8gc2hvdy1wYWdlLXNpemU6V2hldGhlciB0byBoaWRlIHRoZSBwYWdlIHNpemUgc2VsZWN0aW9uIFVJIGZyb20gdGhlIHVzZXIuXG4gICdzaG93UGFnZVNpemU6IHNob3ctcGFnZS1zaXplJyxcbiAgLy8gc2hvdy1zb3J0OndoZXRoZXIgb3Igbm90IHRoZSBzb3J0IHNlbGVjdCBpcyBzaG93biBpbiB0aGUgdG9vbGJhclxuICAnc2hvd1NvcnQ6IG9yZGVyYWJsZScsXG4gIC8vIHNvcnRhYmxlW3N0cmluZ106IGNvbHVtbnMgb2YgdGhlIGZpbHRlciwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdzb3J0YWJsZUNvbHVtbnM6IHNvcnRhYmxlLWNvbHVtbnMnLFxuICAvLyBzb3J0Q29sdW1uc1tzdHJpbmddOiBjb2x1bW5zIG9mIHRoZSBzb3J0aW5nY29sdW1ucywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdzb3J0Q29sdW1uOiBzb3J0LWNvbHVtbicsXG4gIC8vIHF1aWNrLWZpbHRlci1jb2x1bW5zIFtzdHJpbmddOiBjb2x1bW5zIG9mIHRoZSBmaWx0ZXIsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAncXVpY2tGaWx0ZXJDb2x1bW5zOiBxdWljay1maWx0ZXItY29sdW1ucycsXG4gIC8vICBncmlkLWl0ZW0taGVpZ2h0W3N0cmluZ106IFNldCBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiByb3cgaGVpZ2h0IGZyb20gdGhlIHVzZXItcHJvdmlkZWQgdmFsdWUuLiBEZWZhdWx0OiAxOjEuXG4gICdncmlkSXRlbUhlaWdodDogZ3JpZC1pdGVtLWhlaWdodCcsXG4gIC8vIHJlZnJlc2gtYnV0dG9uIFtub3x5ZXNdOiBzaG93IHJlZnJlc2ggYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gICdyZWZyZXNoQnV0dG9uOiByZWZyZXNoLWJ1dHRvbicsXG4gIC8vIGd1dHRlclNpemU6IFNpemUgb2YgdGhlIGdyaWQgbGlzdCdzIGd1dHRlciBpbiBwaXhlbHMuXG4gICdndXR0ZXJTaXplOmd1dHRlci1zaXplJyxcbiAgLy8gZml4LWhlYWRlciBbeWVzfG5vfHRydWV8ZmFsc2VdOiBmaXhlZCBmb290ZXIgd2hlbiB0aGUgY29udGVudCBpcyBncmVhdGhlciB0aGFuIGl0cyBvd24gaGVpZ2h0LiBEZWZhdWx0OiBuby5cbiAgJ2ZpeGVkSGVhZGVyOmZpeGVkLWhlYWRlcicsXG4gIC8vIHNob3ctZm9vdGVyOkluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSBmb290ZXI6RGVmYXVsdDp0cnVlXG4gICdzaG93Rm9vdGVyOnNob3ctZm9vdGVyJyxcbiAgLy8gaW5zZXJ0LWJ1dHRvbi1wb3NpdGlvbiBbIHRvcCB8IGJvdHRvbSBdOiBwb3NpdGlvbiBvZiB0aGUgaW5zZXJ0IGJ1dHRvbi4gRGVmYXVsdDogJ2JvdHRvbSdcbiAgJ2luc2VydEJ1dHRvblBvc2l0aW9uOmluc2VydC1idXR0b24tcG9zaXRpb24nLFxuICAvLyBpbnNlcnQtYnV0dG9uLWZsb2F0YWJsZSBbbm98eWVzXTogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIHBvc2l0aW9uIG9mIHRoZSBpbnNlcnQgYnV0dG9uIGlzIGZsb2F0aW5nIC4gRGVmYXVsdDogJ3llcydcbiAgJ2luc2VydEJ1dHRvbkZsb2F0YWJsZTppbnNlcnQtYnV0dG9uLWZsb2F0YWJsZScsXG4gIC8vIHNob3ctYnV0dG9ucy10ZXh0IFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgdGV4dCBvZiBidXR0b25zLiBEZWZhdWx0OiBuby5cbiAgJ3Nob3dCdXR0b25zVGV4dDogc2hvdy1idXR0b25zLXRleHQnXG5dO1xuXG5cbmNvbnN0IFBBR0VfU0laRV9PUFRJT05TID0gWzgsIDE2LCAyNCwgMzIsIDY0XTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1ncmlkJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgT250aW1pemVTZXJ2aWNlUHJvdmlkZXIsXG4gICAgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsXG4gICAgeyBwcm92aWRlOiBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFLCB1c2VDbGFzczogT0dyaWRDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSxcbiAgXSxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0dSSUQsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby1ncmlkXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm8tZ3JpZC1maXhlZF0nOiAnZml4ZWRIZWFkZXInXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgT0dyaWRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE9TZXJ2aWNlQ29tcG9uZW50PE9HcmlkQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQge1xuXG4gIC8qIElucHV0cyAqL1xuICBwcm90ZWN0ZWQgX3F1ZXJ5Um93cyA9IDMyO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgZml4ZWRIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHNob3dQYWdlU2l6ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgc2hvd1NvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHNob3dGb290ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHB1YmxpYyBncmlkSXRlbUhlaWdodCA9ICcxOjEnO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgcmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGluc2VydEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgaW5zZXJ0QnV0dG9uRmxvYXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd0J1dHRvbnNUZXh0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGluc2VydEJ1dHRvblBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nID0gJ2JvdHRvbSc7XG4gIHBhZ2luYXRpb25Db250cm9scyA9IGZhbHNlO1xuICBwdWJsaWMgZ3V0dGVyU2l6ZSA9ICcxcHgnO1xuICBwcm90ZWN0ZWQgX3F1aWNrRmlsdGVyQXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdvdXRsaW5lJztcbiAgZ2V0IGNvbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY29scyB8fCB0aGlzLl9jb2xzRGVmYXVsdDtcbiAgfVxuICBzZXQgY29scyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fY29scyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHNvcnRhYmxlQ29sdW1ucygpOiBTUUxPcmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydGFibGVDb2x1bW5zO1xuICB9XG4gIHNldCBzb3J0YWJsZUNvbHVtbnModmFsKSB7XG4gICAgbGV0IHBhcnNlZCA9IFtdO1xuICAgIGlmICghVXRpbC5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHBhcnNlZCA9IFNlcnZpY2VVdGlscy5wYXJzZVNvcnRDb2x1bW5zKFN0cmluZyh2YWwpKTtcbiAgICB9XG4gICAgdGhpcy5fc29ydGFibGVDb2x1bW5zID0gcGFyc2VkO1xuICB9XG5cbiAgcHVibGljIHF1aWNrRmlsdGVyQ29sdW1uczogc3RyaW5nO1xuICAvKiBFbmQgSW5wdXRzICovXG5cbiAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IE9HcmlkSXRlbUNvbXBvbmVudCkpXG4gIHB1YmxpYyBpbnB1dEdyaWRJdGVtczogUXVlcnlMaXN0PE9HcmlkSXRlbUNvbXBvbmVudD47XG4gIEBWaWV3Q2hpbGRyZW4oT0dyaWRJdGVtRGlyZWN0aXZlKVxuICBwdWJsaWMgZ3JpZEl0ZW1EaXJlY3RpdmVzOiBRdWVyeUxpc3Q8T0dyaWRJdGVtRGlyZWN0aXZlPjtcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpXG4gIHB1YmxpYyBtYXRwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICAvKiBQYXJzZWQgSW5wdXRzICovXG4gIHByb3RlY3RlZCBfc29ydGFibGVDb2x1bW5zOiBTUUxPcmRlcltdID0gW107XG4gIHB1YmxpYyBzb3J0Q29sdW1uT3JkZXI6IFNRTE9yZGVyO1xuICAvKiBFbmQgcGFyc2VkIElucHV0cyAqL1xuXG4gIHByb3RlY3RlZCBfY29scztcbiAgcHJvdGVjdGVkIF9jb2xzRGVmYXVsdCA9IDE7XG4gIF9wYWdlU2l6ZU9wdGlvbnMgPSBQQUdFX1NJWkVfT1BUSU9OUztcbiAgcHJvdGVjdGVkIHNvcnRDb2x1bW46IHN0cmluZztcbiAgcHVibGljIHN0b3JlUGFnaW5hdGlvblN0YXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2V0IGdyaWRJdGVtcyh2YWx1ZTogSUdyaWRJdGVtW10pIHtcbiAgICB0aGlzLl9ncmlkSXRlbXMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBncmlkSXRlbXMoKTogSUdyaWRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLl9ncmlkSXRlbXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2dyaWRJdGVtczogSUdyaWRJdGVtW10gPSBbXTtcblxuICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByb3RlY3RlZCBtZWRpYTogTWVkaWFPYnNlcnZlcjtcblxuICBwcm90ZWN0ZWQgb01hdFNvcnQ6IE9NYXRTb3J0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1Db21wb25lbnQpKSBmb3JtOiBPRm9ybUNvbXBvbmVudFxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgZWxSZWYsIGZvcm0pO1xuICAgIHRoaXMubWVkaWEgPSB0aGlzLmluamVjdG9yLmdldChNZWRpYU9ic2VydmVyKTtcbiAgICB0aGlzLm9NYXRTb3J0ID0gbmV3IE9NYXRTb3J0KCk7XG4gIH1cblxuICBnZXQgc3RhdGUoKTogT0dyaWRDb21wb25lbnRTdGF0ZUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RhdGU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5pbml0aWFsaXplKCk7XG5cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMucXVpY2tGaWx0ZXJDb2x1bW5zKSkge1xuICAgICAgdGhpcy5xdWlja0ZpbHRlckNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgfVxuICAgIHRoaXMucXVpY2tGaWx0ZXJDb2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLnF1aWNrRmlsdGVyQ29sdW1ucywgdHJ1ZSk7XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5zb3J0Q29sdW1uKSkge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uID0gdGhpcy5zdGF0ZS5zb3J0Q29sdW1uO1xuICAgIH1cbiAgICB0aGlzLnBhcnNlU29ydENvbHVtbigpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdPcHRpb24gPSB0aGlzLnBhZ2VTaXplT3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24gPT09IHRoaXMucXVlcnlSb3dzKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKGV4aXN0aW5nT3B0aW9uKSkge1xuICAgICAgdGhpcy5fcGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5xdWVyeVJvd3MpO1xuICAgICAgdGhpcy5fcGFnZVNpemVPcHRpb25zLnNvcnQoKGk6IG51bWJlciwgajogbnVtYmVyKSA9PiBpIC0gaik7XG4gICAgfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmN1cnJlbnRQYWdlKSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuc3RhdGUuY3VycmVudFBhZ2U7XG4gICAgfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLnF1ZXJ5Um93cykpIHtcbiAgICAgIHRoaXMucXVlcnlSb3dzID0gdGhpcy5zdGF0ZS5xdWVyeVJvd3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5hZnRlclZpZXdJbml0KCk7XG4gICAgdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlID0gVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5maWx0ZXJDYXNlU2Vuc2l0aXZlKSA/XG4gICAgICB0aGlzLnN0YXRlLmZpbHRlckNhc2VTZW5zaXRpdmUgOlxuICAgICAgdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIHRoaXMuc2V0R3JpZEl0ZW1EaXJlY3RpdmVzRGF0YSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9NZWRpYUNoYW5nZXMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyUXVpY2tGaWx0ZXIodGhpcy5zZWFyY2hJbnB1dENvbXBvbmVudCk7XG4gICAgaWYgKHRoaXMucXVlcnlPbkluaXQpIHtcbiAgICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyaWRJdGVtcyA9IHRoaXMuaW5wdXRHcmlkSXRlbXMudG9BcnJheSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmlucHV0R3JpZEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKHF1ZXJ5Q2hhbmdlcyA9PiB7XG4gICAgICB0aGlzLmdyaWRJdGVtcyA9IHF1ZXJ5Q2hhbmdlcy5fcmVzdWx0cztcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9NZWRpYUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMubWVkaWEuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChjaGFuZ2U6IE1lZGlhQ2hhbmdlW10pID0+IHtcbiAgICAgIGlmIChjaGFuZ2UgJiYgY2hhbmdlWzBdKSB7XG4gICAgICAgIHN3aXRjaCAoY2hhbmdlWzBdLm1xQWxpYXMpIHtcbiAgICAgICAgICBjYXNlICd4cyc6XG4gICAgICAgICAgY2FzZSAnc20nOlxuICAgICAgICAgICAgdGhpcy5fY29sc0RlZmF1bHQgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWQnOlxuICAgICAgICAgICAgdGhpcy5fY29sc0RlZmF1bHQgPSAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbGcnOlxuICAgICAgICAgIGNhc2UgJ3hsJzpcbiAgICAgICAgICAgIHRoaXMuX2NvbHNEZWZhdWx0ID0gNDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWREYXRhKCk6IHZvaWQge1xuICAgIGxldCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge307XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQgPSAwO1xuICAgICAgcXVlcnlBcmdzID0ge1xuICAgICAgICBvZmZzZXQ6IHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzID8gKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cykgOiAwLFxuICAgICAgICBsZW5ndGg6IE1hdGgubWF4KHRoaXMucXVlcnlSb3dzLCB0aGlzLmRhdGFSZXNwb25zZUFycmF5Lmxlbmd0aCksXG4gICAgICAgIHJlcGxhY2U6IHRydWVcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMucXVlcnlEYXRhKHZvaWQgMCwgcXVlcnlBcmdzKTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkgPSBbXTtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTb3J0ZWREYXRhRnJvbUFycmF5KGRhdGFBcnJheTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc29ydENvbHVtbk9yZGVyKSkge1xuICAgICAgcmV0dXJuIHRoaXMub01hdFNvcnQuZ2V0U29ydGVkRGF0YUJ5U1FMT3JkZXIoZGF0YUFycmF5LCBbdGhpcy5zb3J0Q29sdW1uT3JkZXJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFBcnJheTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckdyaWRJdGVtRGlyZWN0aXZlKGl0ZW06IE9HcmlkSXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpZiAodGhpcy5kZXRhaWxNb2RlID09PSBDb2Rlcy5ERVRBSUxfTU9ERV9DTElDSykge1xuICAgICAgICBpdGVtLm9uQ2xpY2soZ3JpZEl0ZW0gPT4gdGhpcy5vbkl0ZW1EZXRhaWxDbGljayhncmlkSXRlbSkpO1xuICAgICAgfVxuICAgICAgaWYgKENvZGVzLmlzRG91YmxlQ2xpY2tNb2RlKHRoaXMuZGV0YWlsTW9kZSkpIHtcbiAgICAgICAgaXRlbS5vbkRvdWJsZUNsaWNrKGdyaWRJdGVtID0+IHRoaXMub25JdGVtRGV0YWlsRGJsQ2xpY2soZ3JpZEl0ZW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25JdGVtRGV0YWlsQ2xpY2soaXRlbTogT0dyaWRJdGVtRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVJdGVtQ2xpY2soaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgb25JdGVtRGV0YWlsRGJsQ2xpY2soaXRlbTogT0dyaWRJdGVtRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVJdGVtRGJsQ2xpY2soaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBsb2FkTW9yZSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlICs9IDE7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5QXJnczogT1F1ZXJ5RGF0YUFyZ3MgPSB7XG4gICAgICAgIG9mZnNldDogdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCxcbiAgICAgICAgbGVuZ3RoOiB0aGlzLnF1ZXJ5Um93c1xuICAgICAgfTtcbiAgICAgIHRoaXMucXVlcnlEYXRhKHZvaWQgMCwgcXVlcnlBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJEYXRhKHZvaWQgMCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cblxuICBwdWJsaWMgZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyOiBvYmplY3QsIG92cnJBcmdzPzogT1F1ZXJ5RGF0YUFyZ3MpOiBhbnlbXSB7XG4gICAgY29uc3QgcXVlcnlBcmd1bWVudHMgPSBzdXBlci5nZXRRdWVyeUFyZ3VtZW50cyhmaWx0ZXIsIG92cnJBcmdzKTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnRDb2x1bW4pKSB7XG4gICAgICBxdWVyeUFyZ3VtZW50c1s2XSA9IHRoaXMuc29ydENvbHVtbk9yZGVyID8gW3RoaXMuc29ydENvbHVtbk9yZGVyXSA6IHRoaXMuc29ydENvbHVtbk9yZGVyO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnlBcmd1bWVudHM7XG4gIH1cblxuICBwdWJsaWMgcGFyc2VTb3J0Q29sdW1uKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcnNlZCA9IChTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyh0aGlzLnNvcnRDb2x1bW4pIHx8IFtdKVswXTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFNvcnRhYmxlQ29sdW1uSW5kZXgocGFyc2VkKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoaW5kZXgpICYmIGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uT3JkZXIgPSBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGN1cnJlbnRPcmRlckNvbHVtbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZpbmRTb3J0YWJsZUNvbHVtbkluZGV4KHRoaXMuc29ydENvbHVtbk9yZGVyKTtcbiAgfVxuXG4gIHNldCBjdXJyZW50T3JkZXJDb2x1bW4odmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNvcnRDb2x1bW5PcmRlciA9IHRoaXMuc29ydGFibGVDb2x1bW5zW3ZhbF07XG4gIH1cblxuICBwcm90ZWN0ZWQgZmluZFNvcnRhYmxlQ29sdW1uSW5kZXgoc29ydGFibGVDb2x1bW46IFNRTE9yZGVyKTogbnVtYmVyIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNvcnRhYmxlQ29sdW1uKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNvcnRhYmxlQ29sdW1uc1xuICAgICAgLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uY29sdW1uTmFtZSA9PT0gc29ydGFibGVDb2x1bW4uY29sdW1uTmFtZVxuICAgICAgICAmJiBpdGVtLmFzY2VuZGVudCA9PT0gc29ydGFibGVDb2x1bW4uYXNjZW5kZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhVG9TdG9yZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5nZXREYXRhVG9TdG9yZSgpO1xuICB9XG5cbiAgcHVibGljIGdldFNvcnRPcHRpb25UZXh0KGNvbDogU1FMT3JkZXIpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGNvbFRleHRLZXkgPSBgR1JJRC5TT1JUX0JZXyR7Y29sLmNvbHVtbk5hbWUudG9VcHBlckNhc2UoKX1fYCArIChjb2wuYXNjZW5kZW50ID8gJ0FTQycgOiAnREVTQycpO1xuICAgIHJlc3VsdCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoY29sVGV4dEtleSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gY29sVGV4dEtleSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY29sVGV4dEtleSA9ICdHUklELlNPUlRfQllfJyArIChjb2wuYXNjZW5kZW50ID8gJ0FTQycgOiAnREVTQycpO1xuICAgIHJlc3VsdCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoY29sVGV4dEtleSwgWyh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGNvbC5jb2x1bW5OYW1lKSB8fCAnJyldKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFkZCgpOiB2b2lkIHtcbiAgICBzdXBlci5pbnNlcnREZXRhaWwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVJlc3BvbnNlQXJyYXkoZGF0YTogYW55W10sIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgaWYgKHRoaXMucGFnZWFibGUgJiYgIXJlcGxhY2UpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzID8gZGF0YSA6ICh0aGlzLmRhdGFSZXNwb25zZUFycmF5IHx8IFtdKS5jb25jYXQoZGF0YSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5wYWdlYWJsZSkge1xuICAgICAgcmVzdWx0ID0gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBzdXBlci5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuc3RvcmVQYWdpbmF0aW9uU3RhdGUgPSB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEdyaWRJdGVtRGlyZWN0aXZlc0RhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkSXRlbURpcmVjdGl2ZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5ncmlkSXRlbURpcmVjdGl2ZXMudG9BcnJheSgpLmZvckVhY2goKGVsZW1lbnQ6IE9HcmlkSXRlbURpcmVjdGl2ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRJdGVtRGF0YSh0aGlzLmRhdGFBcnJheVtpbmRleF0pO1xuICAgICAgICBlbGVtZW50LnNldEdyaWRDb21wb25lbnQodGhpcyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJHcmlkSXRlbURpcmVjdGl2ZShlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHBhZ2VTaXplQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzb3J0Q29sdW1uQ2hhbmdlZChldmVudDogTWF0U2VsZWN0Q2hhbmdlKSB7XG4gICAgdGhpcy5jdXJyZW50T3JkZXJDb2x1bW4gPSBldmVudC52YWx1ZTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcmVnaXN0ZXJRdWlja0ZpbHRlcihhcmc6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLnJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5xdWlja0ZpbHRlckFjdGl2ZUNvbHVtbnMpKSB7XG4gICAgICBjb25zdCBwYXJzZWRBcnIgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5zdGF0ZS5xdWlja0ZpbHRlckFjdGl2ZUNvbHVtbnMsIHRydWUpO1xuICAgICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5zZXRBY3RpdmVDb2x1bW5zKHBhcnNlZEFycik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2luYXRpb25EYXRhRnJvbUFycmF5KGRhdGFBcnJheTogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IHJlc3VsdDogYW55W107XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzKSB7XG4gICAgICByZXN1bHQgPSBkYXRhQXJyYXkuc3BsaWNlKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cywgdGhpcy5xdWVyeVJvd3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBkYXRhQXJyYXkuc3BsaWNlKDAsIHRoaXMucXVlcnlSb3dzICogKHRoaXMuY3VycmVudFBhZ2UgKyAxKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiIsIjxkaXYgW3N0eWxlLmRpc3BsYXldPVwiaXNWaXNpYmxlKCk/ICcnIDogJ25vbmUnXCIgY2xhc3M9XCJvLWdyaWQtY29udGFpbmVyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiPlxuXG4gIDwhLS1UT09MQkFSLS0+XG4gIDxvLWRhdGEtdG9vbGJhciAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBjbGFzcz1cIm8tZ3JpZC10b29sYmFyXCIgW3RpdGxlXT1cInRpdGxlXCIgW3Nob3ctdGl0bGVdPVwiaGFzVGl0bGUoKVwiPlxuICAgIDxuZy1jb250YWluZXIgby1kYXRhLXRvb2xiYXItcHJvamVjdGlvbi1zdGFydD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QnV0dG9uc1RleHQ7ZWxzZSBzaG93QnV0dG9uc1dpdGhvdXRUZXh0XCI+XG4gICAgICAgIDwhLS0gYnV0dG9uIG5ldy0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5zZXJ0QnV0dG9uICYmICFpbnNlcnRCdXR0b25GbG9hdGFibGVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvLWdyaWQtYWRkLWJ1dHRvbiBvLWdyaWQtYnV0dG9uIHRleHRcIiBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKGNsaWNrKT1cImFkZCgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7ICdBREQnIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLWJ1dHRvbiByZWZyZXNoLS0+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUmVmcmVzaFwiIChjbGljayk9XCJyZWxvYWREYXRhKClcIiAqbmdJZj1cInJlZnJlc2hCdXR0b25cIiBjbGFzcz1cIm8tZ3JpZC1idXR0b24gdGV4dFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YXV0b3JlbmV3XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnUkVGUkVTSCcgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3Nob3dCdXR0b25zV2l0aG91dFRleHQ+XG4gICAgICAgIDwhLS0gYnV0dG9uIG5ldy0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5zZXJ0QnV0dG9uICYmICFpbnNlcnRCdXR0b25GbG9hdGFibGVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvLWdyaWQtYnV0dG9uIG8tZ3JpZC1hZGQtYnV0dG9uIG5vLXRleHRcIiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKGNsaWNrKT1cImFkZCgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8IS0tYnV0dG9uIHJlZnJlc2gtLT5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJSZWZyZXNoXCIgKGNsaWNrKT1cInJlbG9hZERhdGEoKVwiICpuZ0lmPVwicmVmcmVzaEJ1dHRvblwiIGNsYXNzPVwiby1ncmlkLWJ1dHRvbiBuby10ZXh0XCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphdXRvcmVuZXdcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwhLS1PLUdSSUQtUEFHSU5BVE9SLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1ncmlkLXBhZ2luYXRvclwiICpuZ0lmPVwic2hvd1BhZ2VTaXplXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLWdyaWQtcGFnZS1zaXplLWxhYmVsXCI+e3sgJ0dSSUQuSVRFTVNfUEVSX1BBR0UnIHwgb1RyYW5zbGF0ZSB9fTo8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiby1ncmlkLXNlbGVjdC1wYWdlXCI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJcIiAjcGFnZVNpemVTZWxlY3QgWyh2YWx1ZSldPVwicXVlcnlSb3dzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJwYWdlU2l6ZUNoYW5nZWQoKVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHBhZ2Ugb2YgcGFnZVNpemVPcHRpb25zXCIgW3ZhbHVlXT1cInBhZ2VcIj5cbiAgICAgICAgICAgICAge3sgcGFnZSB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tTy1HUklELVNPUlQtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWdyaWQtc29ydFwiICpuZ0lmPVwic2hvd1NvcnQgJiYgc29ydGFibGVDb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiby1ncmlkLXNlbGVjdC1zb3J0XCI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5zb3J0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LXNlbGVjdCAjc29ydFNlbGVjdCBbdmFsdWVdPVwiY3VycmVudE9yZGVyQ29sdW1uXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJzb3J0Q29sdW1uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiIHt7ICdHUklELlNPUlRfQlknIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzb3J0YWJsZUNvbHVtbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiaVwiPlxuICAgICAgICAgICAgICB7eyBnZXRTb3J0T3B0aW9uVGV4dChjb2x1bW4pIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1ncmlkLXRvb2xiYXJdW3Bvc2l0aW9uPXN0YXJ0XVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLXN0YXJ0XVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1ncmlkLXRvb2xiYXJdW3Bvc2l0aW9uPWVuZF1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1lbmRdXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLWdyaWQtdG9vbGJhcl1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1zdGFydF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciBvLWRhdGEtdG9vbGJhci1wcm9qZWN0aW9uLWVuZD5cbiAgICAgIDxvLXNlYXJjaC1pbnB1dCAqbmdJZj1cInF1aWNrRmlsdGVyXCIgW2NvbHVtbnNdPVwicXVpY2tGaWx0ZXJDb2x1bW5zXCIgW2ZpbHRlci1jYXNlLXNlbnNpdGl2ZV09XCJmaWx0ZXJDYXNlU2Vuc2l0aXZlXCJcbiAgICAgICAgW3Nob3ctY2FzZS1zZW5zaXRpdmUtY2hlY2tib3hdPVwic2hvd0Nhc2VTZW5zaXRpdmVDaGVja2JveCgpXCIgW3BsYWNlaG9sZGVyXT1cInF1aWNrRmlsdGVyUGxhY2Vob2xkZXJcIiBbYXBwZWFyYW5jZV09XCJxdWlja0ZpbHRlckFwcGVhcmFuY2VcIlxuICAgICAgICBmbG9hdC1sYWJlbD1cIm5ldmVyXCI+PC9vLXNlYXJjaC1pbnB1dD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9vLWRhdGEtdG9vbGJhcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGxvYWRpbmcgfCBhc3luYyk9PT1mYWxzZVwiPlxuICAgIDwhLS1ubyByZXN1bHRzLS0+XG4gICAgPGRpdiBjbGFzcz1cIm8tZ3JpZC1uby1yZXN1bHRzIGZpbGwtcmVtYWluaW5nXCIgKm5nSWY9XCJncmlkSXRlbXMubGVuZ3RoID09PSAwXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBzdGFydFwiIGxheW91dC1wYWRkaW5nPlxuICAgICAge3snR1JJRC5FTVBUWScgfCBvVHJhbnNsYXRlfX1cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja0ZpbHRlciAmJiBzZWFyY2hJbnB1dENvbXBvbmVudCAmJiBzZWFyY2hJbnB1dENvbXBvbmVudC5nZXRWYWx1ZSgpICYmIHNlYXJjaElucHV0Q29tcG9uZW50LmdldFZhbHVlKCkubGVuZ3RoID4gMFwiPlxuICAgICAgICB7eyAnR1JJRC5FTVBUWV9VU0lOR19GSUxURVInIHwgb1RyYW5zbGF0ZSA6IHsgdmFsdWVzOiBbIHNlYXJjaElucHV0Q29tcG9uZW50LmdldFZhbHVlKCldIH0gfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG5cbiAgICA8IS0tTUFULUdSSUQtTElTVC0tPlxuICAgIDxtYXQtZ3JpZC1saXN0IFtjb2xzXT1cImNvbHNcIiBbZ3V0dGVyU2l6ZV09XCJndXR0ZXJTaXplXCIgW3Jvd0hlaWdodF09XCJncmlkSXRlbUhlaWdodFwiIGNsYXNzPVwiby1tYXQtZ3JpZC1saXN0IGZpbGwtcmVtYWluaW5nXCJcbiAgICAgICpuZ0lmPVwiZ3JpZEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxtYXQtZ3JpZC10aWxlIG8tZ3JpZC1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyaWRJdGVtc1wiIFtjb2xzcGFuXT1cIml0ZW0uY29sc3BhblwiIFtyb3dzcGFuXT1cIml0ZW0ucm93c3BhblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbS50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgIDwvbWF0LWdyaWQtbGlzdD5cblxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJJbnNlcnRcIiAqbmdJZj1cImluc2VydEJ1dHRvbiAmJiBpbnNlcnRCdXR0b25GbG9hdGFibGVcIiBtYXQtZmFiIChjbGljayk9XCJhZGQoKVwiXG4gICAgICBjbGFzcz1cIm8tZ3JpZC1hZGQtZmxvYXRhYmxlLWJ1dHRvblwiIFtjbGFzcy5vLWdyaWQtYWRkLWJvdHRvbS1mbG9hdGFibGUtYnV0dG9uXT1cImluc2VydEJ1dHRvblBvc2l0aW9uID09PSdib3R0b20nXCJcbiAgICAgIFtjbGFzcy5vLWdyaWQtYWRkLXRvcC1mbG9hdGFibGUtYnV0dG9uXT1cImluc2VydEJ1dHRvblBvc2l0aW9uID09PSd0b3AnXCI+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmFkZFwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8IS0tIEdSSUQgRk9PVEVSIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhcGFnaW5hdGlvbkNvbnRyb2xzICYmIHNob3dGb290ZXIgJiYgKGxvYWRpbmcgfCBhc3luYyk9PT1mYWxzZVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cIm8tZ3JpZC1mb290ZXJcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gKm5nSWY9XCJnZXREYXRhQXJyYXkoKS5sZW5ndGggPCB0b3RhbFJlY29yZHMgJiYgZ2V0RGF0YUFycmF5KCkubGVuZ3RoPjBcIiAoY2xpY2spPVwibG9hZE1vcmUoKVwiXG4gICAgICAgIGNsYXNzPVwibWF0LXJhaXNlZC1idXR0b25cIj5cbiAgICAgICAge3sgJ0dSSUQuQlVUVE9OX05FWFQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvLWdyaWQtdG90YWxzXCI+e3sgJ0dSSUQuVEVYVF9TSE9XTl9JVEVNUycgfCBvVHJhbnNsYXRlIDp7dmFsdWVzOiBbZ2V0RGF0YUFycmF5KCkubGVuZ3RoLCB0b3RhbFJlY29yZHNdfVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtcGFnaW5hdG9yIGNsYXNzPVwiby1tYXQtcGFnaW5hdG9yXCIgI3BhZ2luYXRvciAqbmdJZj1cInBhZ2luYXRpb25Db250cm9scyAmJiBzaG93Rm9vdGVyXCIgW2xlbmd0aF09XCJ0b3RhbFJlY29yZHNcIiBbcGFnZVNpemVdPVwicXVlcnlSb3dzXCJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCIgW3BhZ2VJbmRleF09XCJjdXJyZW50UGFnZVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCIgKHBhZ2UpPVwib25DaGFuZ2VQYWdlKCRldmVudClcIj48L21hdC1wYWdpbmF0b3I+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZyB8IGFzeW5jXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGVuZFwiIGNsYXNzPVwiby1sb2FkaW5nLWJsb2NrZXJcIj5cbiAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgW2NsYXNzLm8tc3Bpbm5lci1jb250YWluZXItY29udHJvbHNdPVwiaGFzQ29udHJvbHMoKVwiIGNsYXNzPVwiby1zcGlubmVyLWNvbnRhaW5lclwiPlxuICAgICAgPG8tZ3JpZC1za2VsZXRvbj48L28tZ3JpZC1za2VsZXRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuPC9kaXY+XG4iXX0=
|