@energycap/components 0.28.4 → 0.28.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/energycap-components.umd.js +8 -2
- package/bundles/energycap-components.umd.js.map +1 -1
- package/bundles/energycap-components.umd.min.js +1 -1
- package/bundles/energycap-components.umd.min.js.map +1 -1
- package/energycap-components.metadata.json +1 -1
- package/esm2015/lib/display/table/searchable-table.component.js +9 -3
- package/fesm2015/energycap-components.js +8 -2
- package/fesm2015/energycap-components.js.map +1 -1
- package/lib/display/table/searchable-table.component.d.ts +4 -0
- package/package.json +1 -1
|
@@ -96,6 +96,10 @@ export class SearchableTableComponent {
|
|
|
96
96
|
this.additionalCountText = '';
|
|
97
97
|
/** Enables table row selection and row highlighting styles when true */
|
|
98
98
|
this.selectable = false;
|
|
99
|
+
/** When true, removes the card styles from the table wrapper */
|
|
100
|
+
this.removeCard = false;
|
|
101
|
+
/** Classes to add to the overlay/card element */
|
|
102
|
+
this.overlayClasses = '';
|
|
99
103
|
/**
|
|
100
104
|
* Text displayed in the footer.
|
|
101
105
|
* Sometimes `noDataMessage`, sometimes `noSearchResultsMessage`
|
|
@@ -246,7 +250,7 @@ export class SearchableTableComponent {
|
|
|
246
250
|
SearchableTableComponent.decorators = [
|
|
247
251
|
{ type: Component, args: [{
|
|
248
252
|
selector: 'ec-searchable-table',
|
|
249
|
-
template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column flex-shrink-max\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate
|
|
253
|
+
template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column flex-shrink-max {{overlayClasses}}\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\r\n ecOverlay\r\n [status]=\"status.status\"\r\n [message]=\"status.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-content select=\".card-header\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\r\n </ng-container>\r\n\r\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \r\n If that doesn't work for you then you can specify a customContentTemplate to use instead\r\n and still retain all the event handling, header, footer pagination, etc support -->\r\n <ng-template #defaultContentTemplate>\r\n <ec-table id=\"{{id}}_table\"\r\n class=\"flex-shrink-max {{tableClasses}}\"\r\n [class.is-fixed]=\"tableLayoutFixed\"\r\n [sortable]=\"sortable\"\r\n [sort]=\"sort\"\r\n (sortChange)=\"onSortChange($event)\"\r\n [resizable]=\"resizable\"\r\n [scrollable]=\"true\"\r\n [selectable]=\"selectable\"\r\n [selectionContext]=\"selectionContext\"\r\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </ec-table>\r\n </ng-template>\r\n\r\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\r\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\r\n class=\"d-flex flex-shrink align-items-center\"\r\n [class.border-top]=\"!customContentTemplate\">\r\n <ec-table-pagination id=\"{{id}}_pager\"\r\n class=\"font-color-primary\"\r\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\r\n [pageSize]=\"pageSize\"\r\n [maxTabs]=\"maxTabs\"\r\n [pageNumber]=\"pageInfo?.pageNumber\"\r\n (pageChanged)=\"onPageChange($event)\">\r\n </ec-table-pagination>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto mr-2 font-color-hint text-truncate\" \r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n\r\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\r\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\r\n class=\"p-2 d-flex\"\r\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\r\n <ng-content *ngIf=\"!tableCaption\"\r\n select=\".searchable-table-footer\"></ng-content>\r\n <div id=\"tableCaption\"\r\n *ngIf=\"tableCaption\"\r\n [innerHTML]=\"tableCaption\"></div>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto text-truncate\"\r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n</section>",
|
|
250
254
|
styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:flex;flex:1 1;flex-direction:column;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}footer{font-size:.75rem;line-height:1rem}footer.has-results{color:rgba(26,26,35,.38);text-align:right}.card.has-mask{min-height:15rem}"]
|
|
251
255
|
},] }
|
|
252
256
|
];
|
|
@@ -289,6 +293,8 @@ SearchableTableComponent.propDecorators = {
|
|
|
289
293
|
resizableColumns: [{ type: ContentChildren, args: [ResizableColumnComponent, { descendants: true },] }],
|
|
290
294
|
additionalCountText: [{ type: Input }],
|
|
291
295
|
selectable: [{ type: Input }],
|
|
292
|
-
customContentTemplate: [{ type: Input }]
|
|
296
|
+
customContentTemplate: [{ type: Input }],
|
|
297
|
+
removeCard: [{ type: Input }],
|
|
298
|
+
overlayClasses: [{ type: Input }]
|
|
293
299
|
};
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFpQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0osT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQWMsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWE3RSxNQUFNLE9BQU8sd0JBQXdCO0lBOExuQyxZQUNVLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxZQUEwQjtR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QUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLElBQUksc0NBQXNDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3JKO1FBRUQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksbUNBQW1DLENBQUMsQ0FBQztJQUNsRyxDQUFDOzs7WUExV0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLHdwSUFBZ0Q7O2FBRWpEOzs7WUFqQlEsWUFBWTtZQUhaLGdCQUFnQjtZQUloQixZQUFZOzs7aUJBbUJsQixLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSzttQkFDTCxLQUFLO3dCQUNMLEtBQUs7MkJBS0wsS0FBSzt5QkFHTCxNQUFNO2dDQUdOLE1BQU0sU0FBQyxZQUFZO21DQUduQixLQUFLO3dCQU9MLEtBQUs7NEJBT0wsS0FBSztxQ0FZTCxLQUFLO29CQVVMLEtBQUs7dUJBV0wsS0FBSztzQkFHTCxLQUFLO3FCQUdMLEtBQUs7K0JBS0wsS0FBSzswQkFHTCxNQUFNO2dDQUdOLEtBQUs7MkJBR0wsS0FBSztnQ0FHTCxLQUFLO3lCQUdMLEtBQUs7eUJBR0wsS0FBSzt5QkFHTCxLQUFLO3VCQXNCTCxLQUFLO3VCQUtMLEtBQUs7c0JBS0wsS0FBSztnQ0FLTCxLQUFLOytCQUdMLEtBQUs7dUNBR0wsS0FBSzsrQkFFTCxlQUFlLFNBQUMsd0JBQXdCLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2tDQUc3RCxLQUFLO3lCQUdMLEtBQUs7b0NBSUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBFTVBUWSwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2VUaW1lLCBtYXAsIHBsdWNrLCBza2lwVW50aWwsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZXJyb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvd0NvdW50UGlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9kaXNwbGF5L3BpcGVzL3Jvdy1jb3VudC5waXBlJztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uL3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzaXphYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNpemFibGUtY29sdW1uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBhZ2luZ0luZm8sIFRhYmxlUGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtcGFnaW5hdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZVNlbGVjdGFibGVSb3dDb250ZXh0IH0gZnJvbSAnLi90YWJsZS1zZWxlY3RhYmxlLXJvdy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZVNvcnQgfSBmcm9tICcuL3RhYmxlLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgdHlwZSBUYWJsZVNlYXJjaFJlc3VsdHMgPSB7IGl0ZW1zOiB1bmtub3duW10sIHRvdGFsSXRlbXM6IG51bWJlciwgdG90YWxJdGVtc0JlZm9yZVBhZ2luZz86IG51bWJlciB9O1xyXG5leHBvcnQgdHlwZSBTZWFyY2hhYmxlVGFibGVSZWZyZXNoT3B0aW9ucyA9IHsgY2xlYXJTZWFyY2g/OiBib29sZWFuIH07XHJcblxyXG50eXBlIFNlYXJjaGFibGVUYWJsZUZvcm1Nb2RlbCA9IHsgc2VhcmNoTW9kZWw/OiBzdHJpbmcgfTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtc2VhcmNoYWJsZS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaGFibGUtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaGFibGUtdGFibGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGlkID0gJyc7XHJcbiAgQElucHV0KCkgcmVzaXphYmxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc29ydGFibGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzb3J0PzogVGFibGVTb3J0O1xyXG4gIEBJbnB1dCgpIGF1dG9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipTZXQgdG8gYSBzcGFjZS1zZXBhcmF0ZWQgc2V0IG9mIHN0cmluZ3MgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGVjLXRhYmxlIGNsYXNzIGF0dHJpYnV0ZVxyXG4gICAqIHRoaXMgYWxsb3dzIGZpbmVyIGNvbnRyb2wgb3ZlciBzdHlsaW5nLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRhYmxlQ2xhc3Nlczogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIHRhYmxlIHNvcnQgaGFzIGNoYW5nZWQgKi9cclxuICBAT3V0cHV0KCkgc29ydENoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU29ydD4oKTtcclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIHRhYmxlIHBhZ2UgaGFzIGNoYW5nZWQgKi9cclxuICBAT3V0cHV0KCdwYWdlQ2hhbmdlJykgcGFnZUNoYW5nZUVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxQYWdpbmdJbmZvPiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnaW5nSW5mbz4oKTtcclxuXHJcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBzZWFyY2hib3ggKi9cclxuICBASW5wdXQoKSBzZWFyY2hib3hQbGFjZWhvbGRlciA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBGb3JtR3JvdXAgZm9yIHRoZSBzZWFyY2hib3hcclxuICAgKlxyXG4gICAqIFRoZSByZWZlcmVuY2VkIEZvcm1Hcm91cCAqKm11c3QqKiBjb250YWluIGEgRm9ybUNvbnRyb2wgY2FsbGVkICdzZWFyY2hNb2RlbCcuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGZvcm1Nb2RlbCE6IEZvcm1Hcm91cDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheWVkIGluIG92ZXJsYXkgd2hlbiBubyBkYXRhIGlzIHJldHVybmVkICh3aXRob3V0IHNlYXJjaGluZykuXHJcbiAgICpcclxuICAgKiBEZWZhdWx0cyB0byBcIlNlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQ1wiXHJcbiAgICovXHJcbiAgQElucHV0KCkgbm9EYXRhTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXllZCBpbiBvdmVybGF5IHdoZW4gbm8gZGF0YSBpcyByZXR1cm5lZCAoYWZ0ZXIgc2VhcmNoaW5nKS5cclxuICAgKiBFbnN1cmUgdHJhbnNsYXRpb24gaGFzIGFuIGludGVycG9sYXRpb24gcGxhY2Vob2xkZXIgZm9yIFwic2VhcmNoVGV4dFwiLlxyXG4gICAqXHJcbiAgICogRGVmYXVsdHMgdG8gXCJTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob01hdGNoZXNfU0NcIlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLyA3IHJlcXVpcmVzIHNpbmdsZSBjdXJseSBicmFjZXNcclxuICAgKiBObyBpdGVtcyBmb3VuZCBtYXRjaGluZyA8c3Ryb25nPnt7c2VhcmNoVGV4dH19PC9zdHJvbmc+XHJcbiAgICovXHJcbiAgQElucHV0KCkgbm9TZWFyY2hSZXN1bHRzTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vTWF0Y2hlc19TQyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYXRlcyBob3N0aW5nIHBhZ2UgaXMgcmVhZHkgZm9yIHRoZSB0YWJsZSB0byBsb2FkIGRhdGEuXHJcbiAgICpcclxuICAgKiBOZXh0IGFuZCBDb21wbGV0ZSB0aGlzIG9ic2VydmFibGUgYWZ0ZXIgaG9zdGluZyBwYWdlIGhhcyBtYWRlIGFueSBwcmVsaW1pbmFyeVxyXG4gICAqIEFQSSAob3Igb3RoZXIgYXN5bmNocm9ub3VzKSBjYWxscyB0byBsb2FkIHByZXJlcXVpc2l0ZSBkYXRhIHVwb24gd2hpY2ggdGhlIGNvZGVcclxuICAgKiBpbiB0aGUgYGdldEl0ZW1zYCBmdW5jdGlvbiBkZXBlbmRzLiAgVXNlIGEgYFJlcGxheVN1YmplY3RgIHRvIGVuc3VyZSBldmVyeSBjb21wb25lbnRcclxuICAgKiB0aGF0IHVzZXMgdGhpcyBvYnNlcnZhYmxlIGdldHMgdGhlIE5leHQgYW5kIENvbXBsZXRlIG5vdGlmaWNhdGlvbnMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcmVhZHkhOiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBjYWxsZWQgdG8gZ2V0IGl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIHRhYmxlLlxyXG4gICAqIElmIHBhZ2VhYmxlIGlzIHRydWUsIHRoZSBUYWJsZVNlYXJjaFJlc3VsdHMgbmVlZCB0byBpbmNsdWRlIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmcsIHdoaWNoIGlzIHRoZVxyXG4gICAqIGNvdW50IG9mIGl0ZW1zIGJlZm9yZSB5b3UndmUgYXBwbGllZCBhbnkgcGFnaW5hdGlvbiAoaS5lLiB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FtZSBiYWNrIGZyb20gdGhlIHNlYXJjaCkuXHJcbiAgICpcclxuICAgKiBNYWtlIHN1cmUgdG8gYmluZCB0aGUgc2NvcGUgaW4gdGhlIHRlbXBsYXRlXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBbZ2V0SXRlbXNdPVwieW91ckZ1bmN0aW9uLmJpbmQodGhpcylcIlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGdldEl0ZW1zITogKHNlYXJjaD86IHN0cmluZywgcGFnZUNoYW5nZUluZm8/OiBQYWdpbmdJbmZvKSA9PiBPYnNlcnZhYmxlPFRhYmxlU2VhcmNoUmVzdWx0cz47XHJcblxyXG4gIC8qKiBPYnNlcnZhYmxlIHRoYXQgd2lsbCBmb3JjZSB0aGUgZ2V0SXRlbXMgZnVuY3Rpb24gdG8gZ2V0IGNhbGxlZCBhZ2FpbiAqL1xyXG4gIEBJbnB1dCgpIHJlZnJlc2g/OiBPYnNlcnZhYmxlPFNlYXJjaGFibGVUYWJsZVJlZnJlc2hPcHRpb25zIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgLyoqIEFsbG93IHRoZSBob3N0IGNvbXBvbmVudCB0byBzdXBwbHkgYW4gb3ZlcmxheSB0byBjb250cm9sIHRoZSBwZW5kaW5nIHN0YXRlIG9mIHRoZSB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHN0YXR1czogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdoYXNEYXRhJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVuZGVybHlpbmcgdGFibGUncyBsYXlvdXQgdG8gZml4ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGFibGVMYXlvdXRGaXhlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogRW1pdHMgaXRlbXMgcmV0dXJuZWQgYnkgdGhlIGdldEl0ZW1zIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIHRvdGFsIGNvdW50ICovXHJcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTZWFyY2hSZXN1bHRzPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTZWFyY2hSZXN1bHRzPigpO1xyXG5cclxuICAvKiogT3B0aW9uYWwgdGFiIGluZGV4IGZvciB0aGUgc2VhcmNoYm94ICovXHJcbiAgQElucHV0KCkgc2VhcmNoYm94VGFiSW5kZXg/OiBudW1iZXI7XHJcblxyXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byBzaG93IGluIHRoZSB0YWJsZSAoZGVmYXVsdDogMTAwKSAqL1xyXG4gIEBJbnB1dCgpIG1heEl0ZW1Db3VudDogbnVtYmVyID0gMTAwO1xyXG5cclxuICAvKiogU2V0IHRvIHRydWUgdG8gaGlkZSBzZWFyY2ggYm94IChkb2VzIG5vdCBoaWRlIHRoZSBvdGhlciBzZWFyY2hhYmxlIHRhYmxlIGNvbnRyb2xzICovXHJcbiAgQElucHV0KCkgaGlkZVNlYXJjaENvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgdGhlIGVudGlyZSBoZWFkZXIgKi9cclxuICBASW5wdXQoKSBoaWRlSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUeXBlIG9mIG9iamVjdCBpbiB0aGUgdGFibGUuIERpc3BsYXllZCBpbiBmb290ZXIgKGRlZmF1bHQ6ICdyZXN1bHRzJykqL1xyXG4gIEBJbnB1dCgpIG9iamVjdFR5cGU6IHN0cmluZyA9ICdyZXN1bHRzJztcclxuXHJcbiAgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgdGhlIHRhYmxlIGZvb3RlciAqL1xyXG4gIEBJbnB1dCgpIGhpZGVGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIHBhZ2luZy4gSWYgcGFnaW5nIGlzIGVuYWJsZWQsIHBhZ2VTaXplIG11c3QgYmUgcHJvdmlkZWQuXHJcbiAgICogZ2V0SXRlbXMgd2lsbCBiZSBwYXNzZWQgYm90aCBhIHNlYXJjaCBhbmQgYSBQYWdpbmdJbmZvIG9iamVjdCB3aGVuIGNhbGxlZC4gSXQgbXVzdCBpbmNsdWRlIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmcgaW4gdGhlIFRhYmxlU2VhcmNoUmVzdWx0cyBvdXRwdXQuXHJcbiAgICogSGVyZSBpcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbjogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBnZXRJdGVtcyhzZWFyY2g/OiBzdHJpbmcsIHBhZ2VDaGFuZ2VJbmZvPzogUGFnaW5nSW5mbyk6IE9ic2VydmFibGU8VGFibGVTZWFyY2hSZXN1bHRzPiB7XHJcbiAgICAgIGxldCByZXN1bHRzOiBTaW1wbGVJdGVtW10gPSBbLi4udGhpcy5wYWdpbmF0ZWRUYWJsZUl0ZW1zXTtcclxuICAgICAgLy9hcHBseSBzZWFyY2hcclxuICAgICAgaWYoc2VhcmNoKSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMucGFnaW5hdGVkVGFibGVJdGVtcy5maWx0ZXIoaSA9PiBpLmEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vZ2V0IGNvdW50IGJlZm9yZSBhcHBseWluZyBwYWdpbmdcclxuICAgICAgbGV0IGNvdW50QmVmb3JlUGFnaW5nID0gcmVzdWx0cy5sZW5ndGg7XHJcbiAgICAgIC8vYXBwbHkgcGFnaW5nXHJcbiAgICAgIGlmKHBhZ2VDaGFuZ2VJbmZvKSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc2xpY2UocGFnZUNoYW5nZUluZm8hLnNraXAsIHBhZ2VDaGFuZ2VJbmZvIS5za2lwICsgcGFnZUNoYW5nZUluZm8hLnBhZ2VTaXplKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2YoeyBpdGVtczogcmVzdWx0cywgdG90YWxJdGVtczogcmVzdWx0cy5sZW5ndGgsIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmc6IGNvdW50QmVmb3JlUGFnaW5nIH0pO1xyXG4gICAgfVxyXG4gICovXHJcbiAgQElucHV0KCkgcGFnZWFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4IHNpemUgb2YgYSBwYWdlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICogTWF4aW11bSBudW1iZXIgb2YgcGFnZSB0YWJzIHRvIHNob3dcclxuICovXHJcbiAgQElucHV0KCkgbWF4VGFicz86IG51bWJlciA9IDEwO1xyXG5cclxuICAvKipcclxuICAgKiBNYWtlcyB0aGUgc2VhcmNoYm94IHJlYWRvbmx5IGlmIHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2VhcmNoYm94UmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFBhc3NlZCB0byB0aGUgaW5uZXIgVGFibGVDb21wb25lbnQgdG8gZW5hYmxlIHJvdyBzZWxlY3Rpb24gKi9cclxuICBASW5wdXQoKSBzZWxlY3Rpb25Db250ZXh0PzogVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dDtcclxuXHJcbiAgLyoqIFBhc3NlZCB0byB0aGUgaW5uZXIgVGFibGVDb21wb25lbnQgdG8gZGlzcGxheSBhIHRvb2xiYXIgd2hlbiAxIG9yIG1vcmUgcm93cyBhcmUgc2VsZWN0ZWQuIFJlcXVpcmVzIGBbc2VsZWN0aW9uQ29udGV4dF1gIHRvIGJlIGRlZmluZWQuICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uVG9vbGJhclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBcclxuICBAQ29udGVudENoaWxkcmVuKFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgcmVzaXphYmxlQ29sdW1ucyE6IFF1ZXJ5TGlzdDxSZXNpemFibGVDb2x1bW5Db21wb25lbnQ+O1xyXG5cclxuICAvKiogT3B0aW9uYWwgdGV4dCB0byBhZGQgdG8gdGhlIHJlc3VsdHMgY291bnQgaW4gdGhlIHRhYmxlIGZvb3Rlci4gVGhpcyB0ZXh0IHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIGNvdW50IGFuZCBvYmplY3RUeXBlLiAqL1xyXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb3VudFRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogRW5hYmxlcyB0YWJsZSByb3cgc2VsZWN0aW9uIGFuZCByb3cgaGlnaGxpZ2h0aW5nIHN0eWxlcyB3aGVuIHRydWUgKi9cclxuICBASW5wdXQoKSBzZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKkRlZmF1bHRzIHRvIHVuZGVmaW5lZC4gU3BlY2lmeSB5b3VyIG93biB0ZW1wbGF0ZSBpZiBhbiBlYy10YWJsZSB3cmFwcGVkIGFyb3VuZCB5b3VyIHRyYW5zY2x1ZGVkIGNvbnRlbnQgd29uJ3QgbWVldCB5b3VyIG5lZWRzXHJcbiAgICovXHJcbiAgQElucHV0KCkgY3VzdG9tQ29udGVudFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogUGFnaW5nSW5mbyBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgcGFnZUluZm8/OiBQYWdpbmdJbmZvO1xyXG5cclxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzZWFyY2hNb2RlbCAqL1xyXG4gIHB1YmxpYyBnZXQgc2VhcmNoTW9kZWwoKTogRm9ybUNvbnRyb2wge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybU1vZGVsLmNvbnRyb2xzLnNlYXJjaE1vZGVsIGFzIEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGV4dCBkaXNwbGF5ZWQgaW4gdGhlIGZvb3Rlci5cclxuICAgKiBTb21ldGltZXMgYG5vRGF0YU1lc3NhZ2VgLCBzb21ldGltZXMgYG5vU2VhcmNoUmVzdWx0c01lc3NhZ2VgXHJcbiAgICovXHJcbiAgcHVibGljIHRhYmxlQ2FwdGlvbjogc3RyaW5nID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5ub0RhdGFNZXNzYWdlIHx8ICdTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob0RhdGFfU0MnKTtcclxuXHJcbiAgLyoqIGNvdW50IG9mIHJlc3VsdHMgZGlzcGxheWVkIGluIHRoZSB0YWJsZSAqL1xyXG4gIHB1YmxpYyByZXN1bHRzQ291bnQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogSXRlbXMgcmV0dXJuZWQgYnkgdGhlIGdldEl0ZW1zIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIHRvdGFsIGNvdW50ICovXHJcbiAgcHVibGljIHNlYXJjaFJlc3VsdHM6IFRhYmxlU2VhcmNoUmVzdWx0cyA9IHsgaXRlbXM6IFtdLCB0b3RhbEl0ZW1zOiAwIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHBhc3NlZCBhbiBpbnB1dCBmb3IgcmVmcmVzaCwgdHJpZ2dlcnMgcmVsb2FkaW5nIGl0ZW1zLlxyXG4gICAqIE90aGVyd2lzZSwgY29tcGxldGVzIGltbWVkaWF0ZWx5ICh3aWxsIG5ldmVyIHRyaWdnZXIgcmVsb2FkKS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlZnJlc2hUcmlnZ2VyOiBPYnNlcnZhYmxlPFNlYXJjaGFibGVUYWJsZUZvcm1Nb2RlbCB8IHVuZGVmaW5lZD4gPSBFTVBUWTtcclxuICBwcml2YXRlIGRlc3Ryb3llZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgcGFnZUNoYW5nZWQ6IFN1YmplY3Q8U2VhcmNoYWJsZVRhYmxlRm9ybU1vZGVsPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKiBUcmlnZ2VycyB0aGUgaW5pdGlhbCBsb2FkIG9mIHRoZSB0YWJsZSAqL1xyXG4gIHByaXZhdGUgaW5pdFRhYmxlID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvd0NvdW50UGlwZTogUm93Q291bnRQaXBlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMucGFnZVNpemUgJiYgIWNoYW5nZXMucGFnZVNpemUuZmlyc3RDaGFuZ2UgJiYgdGhpcy5wYWdlYWJsZSkge1xyXG4gICAgICAvLyBJZiB0aGUgcGFnZVNpemUgY2hhbmdlcywgcmVzZXQgdG8gdGhlIGZpcnN0IHBhZ2UgYW5kIHJlZnJlc2guXHJcbiAgICAgIHRoaXMucGFnZUluZm8gPSBUYWJsZVBhZ2luYXRpb25Db21wb25lbnQuZ2V0UGFnaW5nSW5mbygxLCB0aGlzLnBhZ2VTaXplISk7XHJcbiAgICAgIHRoaXMub25QYWdlQ2hhbmdlKHRoaXMucGFnZUluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCAnTG9hZGluZycpO1xyXG4gICAgdGhpcy5zZXRVcFJlZnJlc2hUcmlnZ2VyKCk7XHJcblxyXG4gICAgLy8gV2F0Y2ggZm9yIHNlYXJjaGJveC9vdGhlciBjb250cm9sIGNoYW5nZXMgb3IgcmVmcmVzaCByZXF1ZXN0c1xyXG4gICAgY29uc3Qgc2VhcmNoT3JSZWZyZXNoID0gbWVyZ2UoXHJcbiAgICAgIHRoaXMuZm9ybU1vZGVsLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgIHNraXBVbnRpbCh0aGlzLnJlYWR5KSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyLFxyXG4gICAgICB0aGlzLmluaXRUYWJsZVxyXG4gICAgKS5waXBlKHRhcCgoKT0+IHtcclxuICAgICAgLy9hIGNoYW5nZSB0byBhbnkgZm9ybSBjb250cm9sIG9yIGEgcmVmcmVzaCBzaG91bGQgcmVzZXQgdGhlIHBhZ2VJbmZvIHRvIHRoZSBmaXJzdCBwYWdlIGlmIHRoZSB0YWJsZSBpcyBwYWdlYWJsZS5cclxuICAgICAgLy8oaWYgd2UgZGlkbnQgcmVzZXQgdGhlIHBhZ2VJbmZvLCB3ZSdkIGhhdmUgdG8gY2FsbCBnZXRJdGVtcyB3aXRoIHRoZSBwcmV2aW91cyBwYWdlSW5mbywgd2hpY2ggbWF5IG5vdCBiZSB2YWxpZCBmb3IgdGhlIG5ldyByZXN1bHRzKVxyXG4gICAgICBpZih0aGlzLnBhZ2VhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlSW5mbyA9IFRhYmxlUGFnaW5hdGlvbkNvbXBvbmVudC5nZXRQYWdpbmdJbmZvKDEsIHRoaXMucGFnZVNpemUhKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVJlc3VsdHMgPSBtZXJnZShcclxuICAgICAgc2VhcmNoT3JSZWZyZXNoLFxyXG4gICAgICB0aGlzLnBhZ2VDaGFuZ2VkLnBpcGUoXHJcbiAgICAgICAgLy8gUHJldmVudCBhIGNhbGwgdG8gZ2V0SXRlbXMgd2hlbiB0aGUgcGFnZVNpemUgaXMgc2V0IGR1cmluZyBwYWdlIGluaXQgYW5kIGJlZm9yZSByZWFkeSBpcyBjb21wbGV0ZWRcclxuICAgICAgICBza2lwVW50aWwodGhpcy5yZWFkeSlcclxuICAgICAgKVxyXG4gICAgKVxyXG5cclxuICAgIC8vIENhbGwgZ2V0SXRlbXMgYW5kIHdhdGNoIGZvciBlcnJvcnNcclxuICAgIGNvbnN0IGdldERhdGEgPSB1cGRhdGVSZXN1bHRzLnBpcGUoXHJcbiAgICAgIC8vIFBsdWNrIHRoZSBzZWFyY2hNb2RlbCB2YWx1ZSBvdXQgb2YgdGhlIGZvcm1Nb2RlbFxyXG4gICAgICBwbHVjaygnc2VhcmNoTW9kZWwnKSxcclxuXHJcbiAgICAgIC8vIEVuc3VyZSBzZWFyY2ggc3RyaW5nIGlzIGRlZmluZWRcclxuICAgICAgLy8gVHJpbSBhbmQgbG93ZXJjYXNlIGl0IHRvIGFpZCBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaGluZ1xyXG4gICAgICBtYXAoKHNlYXJjaFN0cmluZz86IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBzZWFyY2ggPSBzZWFyY2hTdHJpbmcgfHwgJyc7XHJcbiAgICAgICAgcmV0dXJuIHNlYXJjaC50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfSksXHJcblxyXG4gICAgICAvLyBTaG93IHN0YXR1cyBvdmVybGF5XHJcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCAnTG9hZGluZycpKSxcclxuXHJcbiAgICAgIC8vIENhbGwgcGFzc2VkIGZ1bmN0aW9uXHJcbiAgICAgIHN3aXRjaE1hcCgoc2VhcmNoU3RyaW5nOiBzdHJpbmcpID0+IFxyXG4gICAgICAgIC8vaWYgdGhlIHRhYmxlIGlzIHBhZ2VhYmxlLCBwYWdlSW5mbyB3aWxsIGJlIGRlZmluZWQuXHJcbiAgICAgICAgdGhpcy5nZXRJdGVtcyhzZWFyY2hTdHJpbmcsIHRoaXMucGFnZUluZm8pXHJcbiAgICAgICksXHJcblxyXG4gICAgICAvLyBJZiBwYXNzZWQgZnVuY3Rpb24gZmFpbHMsIHNob3cgZXJyb3Igc3RhdHVzXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVyciwgY2F1Z2h0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdlcnJvcicsIHRoaXMuZXJyb3JTZXJ2aWNlLnBhcnNlQXBpRXJyb3IoZXJyKSk7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBjYXVnaHQgb2JzZXJ2YWJsZSBzbyB0aGUgc3Vic2NyaXB0aW9uIGRvZXNuJ3QgY29tcGxldGVcclxuICAgICAgICByZXR1cm4gY2F1Z2h0O1xyXG4gICAgICB9KSxcclxuXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCksXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEhhbmRsZSByZXR1cm5lZCBkYXRhIGFuZCBub3RpZnkgcGFyZW50XHJcbiAgICBnZXREYXRhLnN1YnNjcmliZSgocmVzdWx0czogVGFibGVTZWFyY2hSZXN1bHRzKSA9PiB7XHJcbiAgICAgIC8vIExpbWl0aW5nIG51bWJlciBvZiByZXN1bHRzIHRvIHNob3cgaWYgbm90IHBhZ2VhYmxlIChpZiBwYWdlYWJsZSB0aGUgbWF4IG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGFibGVcclxuICAgICAgLy8gY2FuIGJlIG1vZGlmaWVkIGJ5IGluY3JlYXNpbmcvZGVjcmVhc2luZyB0aGUgcGFnZVNpemUuKVxyXG4gICAgICBpZighdGhpcy5wYWdlYWJsZSkge1xyXG4gICAgICAgIHJlc3VsdHMuaXRlbXMgPSByZXN1bHRzLml0ZW1zLnNsaWNlKDAsIHRoaXMubWF4SXRlbUNvdW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTmVlZCB0byBrbm93IHRoaXMgKGFsb25nIHdpdGggaWYgdGhlcmUncyBhIHZhbHVlIGluIHRoZSBmb3JtTW9kZWwpIHRvIGRldGVybWluZSB3aGF0IHRvIHNob3cgaW4gdGhlIGZvb3RlclxyXG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSByZXN1bHRzO1xyXG4gICAgXHJcbiAgICAgIHRoaXMudGFibGVDYXB0aW9uID0gdGhpcy5nZXRDYXB0aW9uKHJlc3VsdHMpO1xyXG4gICAgICB0aGlzLnJlc3VsdHNDb3VudCA9IHRoaXMucGFnZWFibGUgPyB0aGlzLnJvd0NvdW50UGlwZS50cmFuc2Zvcm0ocmVzdWx0cywgdGhpcy5vYmplY3RUeXBlLCB1bmRlZmluZWQsIHRoaXMucGFnZUluZm8pOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0NvdW50UGlwZS50cmFuc2Zvcm0ocmVzdWx0cywgdGhpcy5vYmplY3RUeXBlLCB0aGlzLm1heEl0ZW1Db3VudCk7XHJcblxyXG4gICAgICAvLyBEaXNhYmxlIHNlYXJjaGJveCB3aGVuIGluIG5vLWRhdGEgc3RhdGVcclxuICAgICAgaWYgKCFyZXN1bHRzLml0ZW1zLmxlbmd0aCAmJiAhdGhpcy5zZWFyY2hNb2RlbC52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTW9kZWwuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hNb2RlbC5kaXNhYmxlZCkge1xyXG4gICAgICAgIC8vIHJlLWVuYWJsZSBpZiBpdCB3YXMgZGlzYWJsZWQsIGJ1dCBub3cgaGFzIGl0ZW1zXHJcbiAgICAgICAgdGhpcy5zZWFyY2hNb2RlbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ2hhc0RhdGEnKTtcclxuICAgICAgLy8gU2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgcGFyZW50IGNvbXBvbmVudFxyXG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQocmVzdWx0cyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBXaGVuICdyZWFkeScgaXMgY29tcGxldGVkIGJ5IHRoZSBob3N0LCBpbml0aWFsaXplIHRoZSB0YWJsZSB3aXRoIHRoZSBjdXJyZW50IGZvcm0gbW9kZWwgdmFsdWVzXHJcbiAgICB0aGlzLnJlYWR5LnN1YnNjcmliZSh7XHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbml0VGFibGUubmV4dCh0aGlzLmZvcm1Nb2RlbC52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5pbml0VGFibGUuY29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKiogUGFzcyBhbG9uZyBzb3J0IHRvIHBhcmVudCBjb21wb25lbnQgKi9cclxuICBvblNvcnRDaGFuZ2Uoc29ydDogVGFibGVTb3J0KTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChzb3J0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYSBwYWdlIGNoYW5nZXMsIHN0b3JlIHRoZSBuZXcgcGFnaW5nSW5mbyBhbmQgZW1pdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZm9ybSB0byB0cmlnZ2VyIGdldERhdGEuXHJcbiAgICovXHJcbiAgb25QYWdlQ2hhbmdlKHBhZ2luZ0luZm86IFBhZ2luZ0luZm8pIHtcclxuICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygncGVuZGluZycsICdMb2FkaW5nJyk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvID0gcGFnaW5nSW5mbztcclxuICAgIHRoaXMucGFnZUNoYW5nZUVtaXR0ZXIuZW1pdChwYWdpbmdJbmZvKTtcclxuICAgIHRoaXMucGFnZUNoYW5nZWQubmV4dCh0aGlzLmZvcm1Nb2RlbC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogV2lyZSB1cCBhIGhhbmRsZXIgdG8gdGhlIGByZWZyZXNoYCBvYnNlcnZhYmxlIHNvIHRoYXQgd2hlblxyXG4gICAqIHRoZSBob3N0IHBhZ2UgY29udGV4dCBjaGFuZ2VzIGl0IGNhbiBmb3JjZSB0aGUgdGFibGUgdG8gdXBkYXRlIGFzIHdlbGwuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgYHJlZnJlc2hgIG9ic2VydmFibGUgcGFzc2VzIG9wdGlvbnMgYW5kIHRoZSBgY2xlYXJTZWFyY2hgIHByb3BlcnR5XHJcbiAgICogaXMgc2V0IHRvIHRydWUsIHJlc2V0IHRoZSBzZWFyY2hNb2RlbCBhbmQgcGFzcyBhbiBlbXB0eSBzdHJpbmcuXHJcbiAgICpcclxuICAgKiBJZiBgcmVmcmVzaGAgb2JzZXJ2YWJsZSBkb2VzIG5vdCBwYXNzIG9wdGlvbnMgb3IgdGhlIGBjbGVhclNlYXJjaGAgcHJvcGVydHlcclxuICAgKiBpcyBzZXQgdG8gZmFsc2UsIHBhc3MgYWxvbmcgdGhlIGN1cnJlbnQgc2VhcmNoTW9kZWwgVmFsdWUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRVcFJlZnJlc2hUcmlnZ2VyKCkge1xyXG4gICAgaWYgKHRoaXMucmVmcmVzaCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyID0gdGhpcy5yZWZyZXNoLnBpcGUoXHJcbiAgICAgICAgbWFwKG9wdHMgPT4ge1xyXG4gICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5jbGVhclNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGVsLnJlc2V0KCcnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMuZm9ybU1vZGVsLCBzZWFyY2hNb2RlbDogJycgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1Nb2RlbC52YWx1ZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRleHQgdG8gZGlzcGxheSBpbiB0aGUgZm9vdGVyLiAqL1xyXG4gIHByaXZhdGUgZ2V0Q2FwdGlvbihyZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMpOiBzdHJpbmcge1xyXG4gICAgaWYgKHJlc3VsdHMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hNb2RlbC52YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5ub1NlYXJjaFJlc3VsdHNNZXNzYWdlIHx8ICdTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob01hdGNoZXNfU0MnLCB7IHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoTW9kZWwudmFsdWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMubm9EYXRhTWVzc2FnZSB8fCAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9EYXRhX1NDJyk7XHJcbiAgfVxyXG5cclxufSJdfQ==
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFpQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0osT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQWMsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWE3RSxNQUFNLE9BQU8sd0JBQXdCO0lBb01uQyxZQUNVLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxZQUEwQjtR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dGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRU1QVFksIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgbWFwLCBwbHVjaywgc2tpcFVudGlsLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2Vycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3dDb3VudFBpcGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGlzcGxheS9waXBlcy9yb3ctY291bnQucGlwZSc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi92aWV3LW92ZXJsYXkvdmlldy1vdmVybGF5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vcmVzaXphYmxlLWNvbHVtbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYWdpbmdJbmZvLCBUYWJsZVBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXBhZ2luYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dCB9IGZyb20gJy4vdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVTb3J0IH0gZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHR5cGUgVGFibGVTZWFyY2hSZXN1bHRzID0geyBpdGVtczogdW5rbm93bltdLCB0b3RhbEl0ZW1zOiBudW1iZXIsIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmc/OiBudW1iZXIgfTtcclxuZXhwb3J0IHR5cGUgU2VhcmNoYWJsZVRhYmxlUmVmcmVzaE9wdGlvbnMgPSB7IGNsZWFyU2VhcmNoPzogYm9vbGVhbiB9O1xyXG5cclxudHlwZSBTZWFyY2hhYmxlVGFibGVGb3JtTW9kZWwgPSB7IHNlYXJjaE1vZGVsPzogc3RyaW5nIH07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLXNlYXJjaGFibGUtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlYXJjaGFibGVUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG5cclxuICBASW5wdXQoKSBpZCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJlc2l6YWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNvcnRhYmxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc29ydD86IFRhYmxlU29ydDtcclxuICBASW5wdXQoKSBhdXRvZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqU2V0IHRvIGEgc3BhY2Utc2VwYXJhdGVkIHNldCBvZiBzdHJpbmdzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBlYy10YWJsZSBjbGFzcyBhdHRyaWJ1dGVcclxuICAgKiB0aGlzIGFsbG93cyBmaW5lciBjb250cm9sIG92ZXIgc3R5bGluZy5cclxuICAgKi9cclxuICBASW5wdXQoKSB0YWJsZUNsYXNzZXM6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogRW1pdHMgd2hlbiB0YWJsZSBzb3J0IGhhcyBjaGFuZ2VkICovXHJcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnQ+KCk7XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSB0YWJsZSBwYWdlIGhhcyBjaGFuZ2VkICovXHJcbiAgQE91dHB1dCgncGFnZUNoYW5nZScpIHBhZ2VDaGFuZ2VFbWl0dGVyOiBFdmVudEVtaXR0ZXI8UGFnaW5nSW5mbz4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2luZ0luZm8+KCk7XHJcblxyXG4gIC8qKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgc2VhcmNoYm94ICovXHJcbiAgQElucHV0KCkgc2VhcmNoYm94UGxhY2Vob2xkZXIgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybUdyb3VwIGZvciB0aGUgc2VhcmNoYm94XHJcbiAgICpcclxuICAgKiBUaGUgcmVmZXJlbmNlZCBGb3JtR3JvdXAgKiptdXN0KiogY29udGFpbiBhIEZvcm1Db250cm9sIGNhbGxlZCAnc2VhcmNoTW9kZWwnLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtTW9kZWwhOiBGb3JtR3JvdXA7XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXllZCBpbiBvdmVybGF5IHdoZW4gbm8gZGF0YSBpcyByZXR1cm5lZCAod2l0aG91dCBzZWFyY2hpbmcpLlxyXG4gICAqXHJcbiAgICogRGVmYXVsdHMgdG8gXCJTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob0RhdGFfU0NcIlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyA9ICdTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob0RhdGFfU0MnO1xyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5ZWQgaW4gb3ZlcmxheSB3aGVuIG5vIGRhdGEgaXMgcmV0dXJuZWQgKGFmdGVyIHNlYXJjaGluZykuXHJcbiAgICogRW5zdXJlIHRyYW5zbGF0aW9uIGhhcyBhbiBpbnRlcnBvbGF0aW9uIHBsYWNlaG9sZGVyIGZvciBcInNlYXJjaFRleHRcIi5cclxuICAgKlxyXG4gICAqIERlZmF1bHRzIHRvIFwiU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9NYXRjaGVzX1NDXCJcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogLy8gNyByZXF1aXJlcyBzaW5nbGUgY3VybHkgYnJhY2VzXHJcbiAgICogTm8gaXRlbXMgZm91bmQgbWF0Y2hpbmcgPHN0cm9uZz57e3NlYXJjaFRleHR9fTwvc3Ryb25nPlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5vU2VhcmNoUmVzdWx0c01lc3NhZ2U6IHN0cmluZyA9ICdTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob01hdGNoZXNfU0MnO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZXMgaG9zdGluZyBwYWdlIGlzIHJlYWR5IGZvciB0aGUgdGFibGUgdG8gbG9hZCBkYXRhLlxyXG4gICAqXHJcbiAgICogTmV4dCBhbmQgQ29tcGxldGUgdGhpcyBvYnNlcnZhYmxlIGFmdGVyIGhvc3RpbmcgcGFnZSBoYXMgbWFkZSBhbnkgcHJlbGltaW5hcnlcclxuICAgKiBBUEkgKG9yIG90aGVyIGFzeW5jaHJvbm91cykgY2FsbHMgdG8gbG9hZCBwcmVyZXF1aXNpdGUgZGF0YSB1cG9uIHdoaWNoIHRoZSBjb2RlXHJcbiAgICogaW4gdGhlIGBnZXRJdGVtc2AgZnVuY3Rpb24gZGVwZW5kcy4gIFVzZSBhIGBSZXBsYXlTdWJqZWN0YCB0byBlbnN1cmUgZXZlcnkgY29tcG9uZW50XHJcbiAgICogdGhhdCB1c2VzIHRoaXMgb2JzZXJ2YWJsZSBnZXRzIHRoZSBOZXh0IGFuZCBDb21wbGV0ZSBub3RpZmljYXRpb25zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJlYWR5ITogT2JzZXJ2YWJsZTx2b2lkPjtcclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gY2FsbGVkIHRvIGdldCBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSB0YWJsZS5cclxuICAgKiBJZiBwYWdlYWJsZSBpcyB0cnVlLCB0aGUgVGFibGVTZWFyY2hSZXN1bHRzIG5lZWQgdG8gaW5jbHVkZSB0b3RhbEl0ZW1zQmVmb3JlUGFnaW5nLCB3aGljaCBpcyB0aGVcclxuICAgKiBjb3VudCBvZiBpdGVtcyBiZWZvcmUgeW91J3ZlIGFwcGxpZWQgYW55IHBhZ2luYXRpb24gKGkuZS4gdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbWUgYmFjayBmcm9tIHRoZSBzZWFyY2gpLlxyXG4gICAqXHJcbiAgICogTWFrZSBzdXJlIHRvIGJpbmQgdGhlIHNjb3BlIGluIHRoZSB0ZW1wbGF0ZVxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogW2dldEl0ZW1zXT1cInlvdXJGdW5jdGlvbi5iaW5kKHRoaXMpXCJcclxuICAgKi9cclxuICBASW5wdXQoKSBnZXRJdGVtcyE6IChzZWFyY2g/OiBzdHJpbmcsIHBhZ2VDaGFuZ2VJbmZvPzogUGFnaW5nSW5mbykgPT4gT2JzZXJ2YWJsZTxUYWJsZVNlYXJjaFJlc3VsdHM+O1xyXG5cclxuICAvKiogT2JzZXJ2YWJsZSB0aGF0IHdpbGwgZm9yY2UgdGhlIGdldEl0ZW1zIGZ1bmN0aW9uIHRvIGdldCBjYWxsZWQgYWdhaW4gKi9cclxuICBASW5wdXQoKSByZWZyZXNoPzogT2JzZXJ2YWJsZTxTZWFyY2hhYmxlVGFibGVSZWZyZXNoT3B0aW9ucyB8IHVuZGVmaW5lZD47XHJcblxyXG4gIC8qKiBBbGxvdyB0aGUgaG9zdCBjb21wb25lbnQgdG8gc3VwcGx5IGFuIG92ZXJsYXkgdG8gY29udHJvbCB0aGUgcGVuZGluZyBzdGF0ZSBvZiB0aGUgdGFibGUgKi9cclxuICBASW5wdXQoKSBzdGF0dXM6IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgnaGFzRGF0YScpO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1bmRlcmx5aW5nIHRhYmxlJ3MgbGF5b3V0IHRvIGZpeGVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRhYmxlTGF5b3V0Rml4ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIEVtaXRzIGl0ZW1zIHJldHVybmVkIGJ5IHRoZSBnZXRJdGVtcyBmdW5jdGlvbiwgYWxvbmcgd2l0aCB0b3RhbCBjb3VudCAqL1xyXG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlU2VhcmNoUmVzdWx0cz4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU2VhcmNoUmVzdWx0cz4oKTtcclxuXHJcbiAgLyoqIE9wdGlvbmFsIHRhYiBpbmRleCBmb3IgdGhlIHNlYXJjaGJveCAqL1xyXG4gIEBJbnB1dCgpIHNlYXJjaGJveFRhYkluZGV4PzogbnVtYmVyO1xyXG5cclxuICAvKiogTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gc2hvdyBpbiB0aGUgdGFibGUgKGRlZmF1bHQ6IDEwMCkgKi9cclxuICBASW5wdXQoKSBtYXhJdGVtQ291bnQ6IG51bWJlciA9IDEwMDtcclxuXHJcbiAgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgc2VhcmNoIGJveCAoZG9lcyBub3QgaGlkZSB0aGUgb3RoZXIgc2VhcmNoYWJsZSB0YWJsZSBjb250cm9scyAqL1xyXG4gIEBJbnB1dCgpIGhpZGVTZWFyY2hDb250cm9sOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBTZXQgdG8gdHJ1ZSB0byBoaWRlIHRoZSBlbnRpcmUgaGVhZGVyICovXHJcbiAgQElucHV0KCkgaGlkZUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogVHlwZSBvZiBvYmplY3QgaW4gdGhlIHRhYmxlLiBEaXNwbGF5ZWQgaW4gZm9vdGVyIChkZWZhdWx0OiAncmVzdWx0cycpKi9cclxuICBASW5wdXQoKSBvYmplY3RUeXBlOiBzdHJpbmcgPSAncmVzdWx0cyc7XHJcblxyXG4gIC8qKiBTZXQgdG8gdHJ1ZSB0byBoaWRlIHRoZSB0YWJsZSBmb290ZXIgKi9cclxuICBASW5wdXQoKSBoaWRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0byB0cnVlIHRvIGVuYWJsZSBwYWdpbmcuIElmIHBhZ2luZyBpcyBlbmFibGVkLCBwYWdlU2l6ZSBtdXN0IGJlIHByb3ZpZGVkLlxyXG4gICAqIGdldEl0ZW1zIHdpbGwgYmUgcGFzc2VkIGJvdGggYSBzZWFyY2ggYW5kIGEgUGFnaW5nSW5mbyBvYmplY3Qgd2hlbiBjYWxsZWQuIEl0IG11c3QgaW5jbHVkZSB0b3RhbEl0ZW1zQmVmb3JlUGFnaW5nIGluIHRoZSBUYWJsZVNlYXJjaFJlc3VsdHMgb3V0cHV0LlxyXG4gICAqIEhlcmUgaXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb246IFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogZ2V0SXRlbXMoc2VhcmNoPzogc3RyaW5nLCBwYWdlQ2hhbmdlSW5mbz86IFBhZ2luZ0luZm8pOiBPYnNlcnZhYmxlPFRhYmxlU2VhcmNoUmVzdWx0cz4ge1xyXG4gICAgICBsZXQgcmVzdWx0czogU2ltcGxlSXRlbVtdID0gWy4uLnRoaXMucGFnaW5hdGVkVGFibGVJdGVtc107XHJcbiAgICAgIC8vYXBwbHkgc2VhcmNoXHJcbiAgICAgIGlmKHNlYXJjaCkge1xyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnBhZ2luYXRlZFRhYmxlSXRlbXMuZmlsdGVyKGkgPT4gaS5hLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgfVxyXG4gICAgICAvL2dldCBjb3VudCBiZWZvcmUgYXBwbHlpbmcgcGFnaW5nXHJcbiAgICAgIGxldCBjb3VudEJlZm9yZVBhZ2luZyA9IHJlc3VsdHMubGVuZ3RoO1xyXG4gICAgICAvL2FwcGx5IHBhZ2luZ1xyXG4gICAgICBpZihwYWdlQ2hhbmdlSW5mbykge1xyXG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKHBhZ2VDaGFuZ2VJbmZvIS5za2lwLCBwYWdlQ2hhbmdlSW5mbyEuc2tpcCArIHBhZ2VDaGFuZ2VJbmZvIS5wYWdlU2l6ZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9mKHsgaXRlbXM6IHJlc3VsdHMsIHRvdGFsSXRlbXM6IHJlc3VsdHMubGVuZ3RoLCB0b3RhbEl0ZW1zQmVmb3JlUGFnaW5nOiBjb3VudEJlZm9yZVBhZ2luZyB9KTtcclxuICAgIH1cclxuICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heCBzaXplIG9mIGEgcGFnZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBwYWdlU2l6ZT86IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAqIE1heGltdW0gbnVtYmVyIG9mIHBhZ2UgdGFicyB0byBzaG93XHJcbiAqL1xyXG4gIEBJbnB1dCgpIG1heFRhYnM/OiBudW1iZXIgPSAxMDtcclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZXMgdGhlIHNlYXJjaGJveCByZWFkb25seSBpZiB0cnVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNlYXJjaGJveFJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBQYXNzZWQgdG8gdGhlIGlubmVyIFRhYmxlQ29tcG9uZW50IHRvIGVuYWJsZSByb3cgc2VsZWN0aW9uICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uQ29udGV4dD86IFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHQ7XHJcblxyXG4gIC8qKiBQYXNzZWQgdG8gdGhlIGlubmVyIFRhYmxlQ29tcG9uZW50IHRvIGRpc3BsYXkgYSB0b29sYmFyIHdoZW4gMSBvciBtb3JlIHJvd3MgYXJlIHNlbGVjdGVkLiBSZXF1aXJlcyBgW3NlbGVjdGlvbkNvbnRleHRdYCB0byBiZSBkZWZpbmVkLiAqL1xyXG4gIEBJbnB1dCgpIHNlbGVjdGlvblRvb2xiYXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgXHJcbiAgQENvbnRlbnRDaGlsZHJlbihSZXNpemFibGVDb2x1bW5Db21wb25lbnQsIHtkZXNjZW5kYW50czogdHJ1ZX0pIHJlc2l6YWJsZUNvbHVtbnMhOiBRdWVyeUxpc3Q8UmVzaXphYmxlQ29sdW1uQ29tcG9uZW50PjtcclxuXHJcbiAgLyoqIE9wdGlvbmFsIHRleHQgdG8gYWRkIHRvIHRoZSByZXN1bHRzIGNvdW50IGluIHRoZSB0YWJsZSBmb290ZXIuIFRoaXMgdGV4dCB3aWxsIGJlIGFkZGVkIGFmdGVyIHRoZSBjb3VudCBhbmQgb2JqZWN0VHlwZS4gKi9cclxuICBASW5wdXQoKSBhZGRpdGlvbmFsQ291bnRUZXh0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEVuYWJsZXMgdGFibGUgcm93IHNlbGVjdGlvbiBhbmQgcm93IGhpZ2hsaWdodGluZyBzdHlsZXMgd2hlbiB0cnVlICovXHJcbiAgQElucHV0KCkgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipEZWZhdWx0cyB0byB1bmRlZmluZWQuIFNwZWNpZnkgeW91ciBvd24gdGVtcGxhdGUgaWYgYW4gZWMtdGFibGUgd3JhcHBlZCBhcm91bmQgeW91ciB0cmFuc2NsdWRlZCBjb250ZW50IHdvbid0IG1lZXQgeW91ciBuZWVkc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNvbnRlbnRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBXaGVuIHRydWUsIHJlbW92ZXMgdGhlIGNhcmQgc3R5bGVzIGZyb20gdGhlIHRhYmxlIHdyYXBwZXIgKi9cclxuICBASW5wdXQoKSByZW1vdmVDYXJkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBDbGFzc2VzIHRvIGFkZCB0byB0aGUgb3ZlcmxheS9jYXJkIGVsZW1lbnQgKi9cclxuICBASW5wdXQoKSBvdmVybGF5Q2xhc3Nlczogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhZ2luZ0luZm8gZm9yIHRoZSBjdXJyZW50IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIHBhZ2VJbmZvPzogUGFnaW5nSW5mbztcclxuXHJcbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2VhcmNoTW9kZWwgKi9cclxuICBwdWJsaWMgZ2V0IHNlYXJjaE1vZGVsKCk6IEZvcm1Db250cm9sIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Nb2RlbC5jb250cm9scy5zZWFyY2hNb2RlbCBhcyBGb3JtQ29udHJvbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRleHQgZGlzcGxheWVkIGluIHRoZSBmb290ZXIuXHJcbiAgICogU29tZXRpbWVzIGBub0RhdGFNZXNzYWdlYCwgc29tZXRpbWVzIGBub1NlYXJjaFJlc3VsdHNNZXNzYWdlYFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0YWJsZUNhcHRpb246IHN0cmluZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMubm9EYXRhTWVzc2FnZSB8fCAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9EYXRhX1NDJyk7XHJcblxyXG4gIC8qKiBjb3VudCBvZiByZXN1bHRzIGRpc3BsYXllZCBpbiB0aGUgdGFibGUgKi9cclxuICBwdWJsaWMgcmVzdWx0c0NvdW50OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEl0ZW1zIHJldHVybmVkIGJ5IHRoZSBnZXRJdGVtcyBmdW5jdGlvbiwgYWxvbmcgd2l0aCB0b3RhbCBjb3VudCAqL1xyXG4gIHB1YmxpYyBzZWFyY2hSZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMgPSB7IGl0ZW1zOiBbXSwgdG90YWxJdGVtczogMCB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBwYXNzZWQgYW4gaW5wdXQgZm9yIHJlZnJlc2gsIHRyaWdnZXJzIHJlbG9hZGluZyBpdGVtcy5cclxuICAgKiBPdGhlcndpc2UsIGNvbXBsZXRlcyBpbW1lZGlhdGVseSAod2lsbCBuZXZlciB0cmlnZ2VyIHJlbG9hZCkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWZyZXNoVHJpZ2dlcjogT2JzZXJ2YWJsZTxTZWFyY2hhYmxlVGFibGVGb3JtTW9kZWwgfCB1bmRlZmluZWQ+ID0gRU1QVFk7XHJcbiAgcHJpdmF0ZSBkZXN0cm95ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIHBhZ2VDaGFuZ2VkOiBTdWJqZWN0PFNlYXJjaGFibGVUYWJsZUZvcm1Nb2RlbD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKiogVHJpZ2dlcnMgdGhlIGluaXRpYWwgbG9hZCBvZiB0aGUgdGFibGUgKi9cclxuICBwcml2YXRlIGluaXRUYWJsZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3dDb3VudFBpcGU6IFJvd0NvdW50UGlwZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLnBhZ2VTaXplICYmICFjaGFuZ2VzLnBhZ2VTaXplLmZpcnN0Q2hhbmdlICYmIHRoaXMucGFnZWFibGUpIHtcclxuICAgICAgLy8gSWYgdGhlIHBhZ2VTaXplIGNoYW5nZXMsIHJlc2V0IHRvIHRoZSBmaXJzdCBwYWdlIGFuZCByZWZyZXNoLlxyXG4gICAgICB0aGlzLnBhZ2VJbmZvID0gVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50LmdldFBhZ2luZ0luZm8oMSwgdGhpcy5wYWdlU2l6ZSEpO1xyXG4gICAgICB0aGlzLm9uUGFnZUNoYW5nZSh0aGlzLnBhZ2VJbmZvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdwZW5kaW5nJywgJ0xvYWRpbmcnKTtcclxuICAgIHRoaXMuc2V0VXBSZWZyZXNoVHJpZ2dlcigpO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciBzZWFyY2hib3gvb3RoZXIgY29udHJvbCBjaGFuZ2VzIG9yIHJlZnJlc2ggcmVxdWVzdHNcclxuICAgIGNvbnN0IHNlYXJjaE9yUmVmcmVzaCA9IG1lcmdlKFxyXG4gICAgICB0aGlzLmZvcm1Nb2RlbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICBza2lwVW50aWwodGhpcy5yZWFkeSksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMClcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5yZWZyZXNoVHJpZ2dlcixcclxuICAgICAgdGhpcy5pbml0VGFibGVcclxuICAgICkucGlwZSh0YXAoKCk9PiB7XHJcbiAgICAgIC8vYSBjaGFuZ2UgdG8gYW55IGZvcm0gY29udHJvbCBvciBhIHJlZnJlc2ggc2hvdWxkIHJlc2V0IHRoZSBwYWdlSW5mbyB0byB0aGUgZmlyc3QgcGFnZSBpZiB0aGUgdGFibGUgaXMgcGFnZWFibGUuXHJcbiAgICAgIC8vKGlmIHdlIGRpZG50IHJlc2V0IHRoZSBwYWdlSW5mbywgd2UnZCBoYXZlIHRvIGNhbGwgZ2V0SXRlbXMgd2l0aCB0aGUgcHJldmlvdXMgcGFnZUluZm8sIHdoaWNoIG1heSBub3QgYmUgdmFsaWQgZm9yIHRoZSBuZXcgcmVzdWx0cylcclxuICAgICAgaWYodGhpcy5wYWdlYWJsZSkge1xyXG4gICAgICAgIHRoaXMucGFnZUluZm8gPSBUYWJsZVBhZ2luYXRpb25Db21wb25lbnQuZ2V0UGFnaW5nSW5mbygxLCB0aGlzLnBhZ2VTaXplISk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVSZXN1bHRzID0gbWVyZ2UoXHJcbiAgICAgIHNlYXJjaE9yUmVmcmVzaCxcclxuICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5waXBlKFxyXG4gICAgICAgIC8vIFByZXZlbnQgYSBjYWxsIHRvIGdldEl0ZW1zIHdoZW4gdGhlIHBhZ2VTaXplIGlzIHNldCBkdXJpbmcgcGFnZSBpbml0IGFuZCBiZWZvcmUgcmVhZHkgaXMgY29tcGxldGVkXHJcbiAgICAgICAgc2tpcFVudGlsKHRoaXMucmVhZHkpXHJcbiAgICAgIClcclxuICAgIClcclxuXHJcbiAgICAvLyBDYWxsIGdldEl0ZW1zIGFuZCB3YXRjaCBmb3IgZXJyb3JzXHJcbiAgICBjb25zdCBnZXREYXRhID0gdXBkYXRlUmVzdWx0cy5waXBlKFxyXG4gICAgICAvLyBQbHVjayB0aGUgc2VhcmNoTW9kZWwgdmFsdWUgb3V0IG9mIHRoZSBmb3JtTW9kZWxcclxuICAgICAgcGx1Y2soJ3NlYXJjaE1vZGVsJyksXHJcblxyXG4gICAgICAvLyBFbnN1cmUgc2VhcmNoIHN0cmluZyBpcyBkZWZpbmVkXHJcbiAgICAgIC8vIFRyaW0gYW5kIGxvd2VyY2FzZSBpdCB0byBhaWQgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2hpbmdcclxuICAgICAgbWFwKChzZWFyY2hTdHJpbmc/OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBsZXQgc2VhcmNoID0gc2VhcmNoU3RyaW5nIHx8ICcnO1xyXG4gICAgICAgIHJldHVybiBzZWFyY2gudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH0pLFxyXG5cclxuICAgICAgLy8gU2hvdyBzdGF0dXMgb3ZlcmxheVxyXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdwZW5kaW5nJywgJ0xvYWRpbmcnKSksXHJcblxyXG4gICAgICAvLyBDYWxsIHBhc3NlZCBmdW5jdGlvblxyXG4gICAgICBzd2l0Y2hNYXAoKHNlYXJjaFN0cmluZzogc3RyaW5nKSA9PiBcclxuICAgICAgICAvL2lmIHRoZSB0YWJsZSBpcyBwYWdlYWJsZSwgcGFnZUluZm8gd2lsbCBiZSBkZWZpbmVkLlxyXG4gICAgICAgIHRoaXMuZ2V0SXRlbXMoc2VhcmNoU3RyaW5nLCB0aGlzLnBhZ2VJbmZvKVxyXG4gICAgICApLFxyXG5cclxuICAgICAgLy8gSWYgcGFzc2VkIGZ1bmN0aW9uIGZhaWxzLCBzaG93IGVycm9yIHN0YXR1c1xyXG4gICAgICBjYXRjaEVycm9yKChlcnIsIGNhdWdodCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygnZXJyb3InLCB0aGlzLmVycm9yU2VydmljZS5wYXJzZUFwaUVycm9yKGVycikpO1xyXG4gICAgICAgIC8vIHJldHVybiB0aGUgY2F1Z2h0IG9ic2VydmFibGUgc28gdGhlIHN1YnNjcmlwdGlvbiBkb2Vzbid0IGNvbXBsZXRlXHJcbiAgICAgICAgcmV0dXJuIGNhdWdodDtcclxuICAgICAgfSksXHJcblxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBIYW5kbGUgcmV0dXJuZWQgZGF0YSBhbmQgbm90aWZ5IHBhcmVudFxyXG4gICAgZ2V0RGF0YS5zdWJzY3JpYmUoKHJlc3VsdHM6IFRhYmxlU2VhcmNoUmVzdWx0cykgPT4ge1xyXG4gICAgICAvLyBMaW1pdGluZyBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93IGlmIG5vdCBwYWdlYWJsZSAoaWYgcGFnZWFibGUgdGhlIG1heCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRhYmxlXHJcbiAgICAgIC8vIGNhbiBiZSBtb2RpZmllZCBieSBpbmNyZWFzaW5nL2RlY3JlYXNpbmcgdGhlIHBhZ2VTaXplLilcclxuICAgICAgaWYoIXRoaXMucGFnZWFibGUpIHtcclxuICAgICAgICByZXN1bHRzLml0ZW1zID0gcmVzdWx0cy5pdGVtcy5zbGljZSgwLCB0aGlzLm1heEl0ZW1Db3VudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5lZWQgdG8ga25vdyB0aGlzIChhbG9uZyB3aXRoIGlmIHRoZXJlJ3MgYSB2YWx1ZSBpbiB0aGUgZm9ybU1vZGVsKSB0byBkZXRlcm1pbmUgd2hhdCB0byBzaG93IGluIHRoZSBmb290ZXJcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gcmVzdWx0cztcclxuICAgIFxyXG4gICAgICB0aGlzLnRhYmxlQ2FwdGlvbiA9IHRoaXMuZ2V0Q2FwdGlvbihyZXN1bHRzKTtcclxuICAgICAgdGhpcy5yZXN1bHRzQ291bnQgPSB0aGlzLnBhZ2VhYmxlID8gdGhpcy5yb3dDb3VudFBpcGUudHJhbnNmb3JtKHJlc3VsdHMsIHRoaXMub2JqZWN0VHlwZSwgdW5kZWZpbmVkLCB0aGlzLnBhZ2VJbmZvKTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dDb3VudFBpcGUudHJhbnNmb3JtKHJlc3VsdHMsIHRoaXMub2JqZWN0VHlwZSwgdGhpcy5tYXhJdGVtQ291bnQpO1xyXG5cclxuICAgICAgLy8gRGlzYWJsZSBzZWFyY2hib3ggd2hlbiBpbiBuby1kYXRhIHN0YXRlXHJcbiAgICAgIGlmICghcmVzdWx0cy5pdGVtcy5sZW5ndGggJiYgIXRoaXMuc2VhcmNoTW9kZWwudmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE1vZGVsLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoTW9kZWwuZGlzYWJsZWQpIHtcclxuICAgICAgICAvLyByZS1lbmFibGUgaWYgaXQgd2FzIGRpc2FibGVkLCBidXQgbm93IGhhcyBpdGVtc1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTW9kZWwuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdoYXNEYXRhJyk7XHJcbiAgICAgIC8vIFNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHBhcmVudCBjb21wb25lbnRcclxuICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHJlc3VsdHMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV2hlbiAncmVhZHknIGlzIGNvbXBsZXRlZCBieSB0aGUgaG9zdCwgaW5pdGlhbGl6ZSB0aGUgdGFibGUgd2l0aCB0aGUgY3VycmVudCBmb3JtIG1vZGVsIHZhbHVlc1xyXG4gICAgdGhpcy5yZWFkeS5zdWJzY3JpYmUoe1xyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5pdFRhYmxlLm5leHQodGhpcy5mb3JtTW9kZWwudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaW5pdFRhYmxlLmNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFBhc3MgYWxvbmcgc29ydCB0byBwYXJlbnQgY29tcG9uZW50ICovXHJcbiAgb25Tb3J0Q2hhbmdlKHNvcnQ6IFRhYmxlU29ydCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGEgcGFnZSBjaGFuZ2VzLCBzdG9yZSB0aGUgbmV3IHBhZ2luZ0luZm8gYW5kIGVtaXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZvcm0gdG8gdHJpZ2dlciBnZXREYXRhLlxyXG4gICAqL1xyXG4gIG9uUGFnZUNoYW5nZShwYWdpbmdJbmZvOiBQYWdpbmdJbmZvKSB7XHJcbiAgICB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCAnTG9hZGluZycpO1xyXG4gICAgdGhpcy5wYWdlSW5mbyA9IHBhZ2luZ0luZm87XHJcbiAgICB0aGlzLnBhZ2VDaGFuZ2VFbWl0dGVyLmVtaXQocGFnaW5nSW5mbyk7XHJcbiAgICB0aGlzLnBhZ2VDaGFuZ2VkLm5leHQodGhpcy5mb3JtTW9kZWwudmFsdWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFdpcmUgdXAgYSBoYW5kbGVyIHRvIHRoZSBgcmVmcmVzaGAgb2JzZXJ2YWJsZSBzbyB0aGF0IHdoZW5cclxuICAgKiB0aGUgaG9zdCBwYWdlIGNvbnRleHQgY2hhbmdlcyBpdCBjYW4gZm9yY2UgdGhlIHRhYmxlIHRvIHVwZGF0ZSBhcyB3ZWxsLlxyXG4gICAqXHJcbiAgICogSWYgdGhlIGByZWZyZXNoYCBvYnNlcnZhYmxlIHBhc3NlcyBvcHRpb25zIGFuZCB0aGUgYGNsZWFyU2VhcmNoYCBwcm9wZXJ0eVxyXG4gICAqIGlzIHNldCB0byB0cnVlLCByZXNldCB0aGUgc2VhcmNoTW9kZWwgYW5kIHBhc3MgYW4gZW1wdHkgc3RyaW5nLlxyXG4gICAqXHJcbiAgICogSWYgYHJlZnJlc2hgIG9ic2VydmFibGUgZG9lcyBub3QgcGFzcyBvcHRpb25zIG9yIHRoZSBgY2xlYXJTZWFyY2hgIHByb3BlcnR5XHJcbiAgICogaXMgc2V0IHRvIGZhbHNlLCBwYXNzIGFsb25nIHRoZSBjdXJyZW50IHNlYXJjaE1vZGVsIFZhbHVlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VXBSZWZyZXNoVHJpZ2dlcigpIHtcclxuICAgIGlmICh0aGlzLnJlZnJlc2gpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoVHJpZ2dlciA9IHRoaXMucmVmcmVzaC5waXBlKFxyXG4gICAgICAgIG1hcChvcHRzID0+IHtcclxuICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMuY2xlYXJTZWFyY2gpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hNb2RlbC5yZXNldCgnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4geyAuLi50aGlzLmZvcm1Nb2RlbCwgc2VhcmNoTW9kZWw6ICcnIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtTW9kZWwudmFsdWU7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEdldCB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIGZvb3Rlci4gKi9cclxuICBwcml2YXRlIGdldENhcHRpb24ocmVzdWx0czogVGFibGVTZWFyY2hSZXN1bHRzKTogc3RyaW5nIHtcclxuICAgIGlmIChyZXN1bHRzLml0ZW1zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoTW9kZWwudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMubm9TZWFyY2hSZXN1bHRzTWVzc2FnZSB8fCAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9NYXRjaGVzX1NDJywgeyBzZWFyY2hUZXh0OiB0aGlzLnNlYXJjaE1vZGVsLnZhbHVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLm5vRGF0YU1lc3NhZ2UgfHwgJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQycpO1xyXG4gIH1cclxuXHJcbn0iXX0=
|
|
@@ -6436,6 +6436,10 @@ class SearchableTableComponent {
|
|
|
6436
6436
|
this.additionalCountText = '';
|
|
6437
6437
|
/** Enables table row selection and row highlighting styles when true */
|
|
6438
6438
|
this.selectable = false;
|
|
6439
|
+
/** When true, removes the card styles from the table wrapper */
|
|
6440
|
+
this.removeCard = false;
|
|
6441
|
+
/** Classes to add to the overlay/card element */
|
|
6442
|
+
this.overlayClasses = '';
|
|
6439
6443
|
/**
|
|
6440
6444
|
* Text displayed in the footer.
|
|
6441
6445
|
* Sometimes `noDataMessage`, sometimes `noSearchResultsMessage`
|
|
@@ -6586,7 +6590,7 @@ class SearchableTableComponent {
|
|
|
6586
6590
|
SearchableTableComponent.decorators = [
|
|
6587
6591
|
{ type: Component, args: [{
|
|
6588
6592
|
selector: 'ec-searchable-table',
|
|
6589
|
-
template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column flex-shrink-max\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate
|
|
6593
|
+
template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column flex-shrink-max {{overlayClasses}}\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\r\n ecOverlay\r\n [status]=\"status.status\"\r\n [message]=\"status.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-content select=\".card-header\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\r\n </ng-container>\r\n\r\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \r\n If that doesn't work for you then you can specify a customContentTemplate to use instead\r\n and still retain all the event handling, header, footer pagination, etc support -->\r\n <ng-template #defaultContentTemplate>\r\n <ec-table id=\"{{id}}_table\"\r\n class=\"flex-shrink-max {{tableClasses}}\"\r\n [class.is-fixed]=\"tableLayoutFixed\"\r\n [sortable]=\"sortable\"\r\n [sort]=\"sort\"\r\n (sortChange)=\"onSortChange($event)\"\r\n [resizable]=\"resizable\"\r\n [scrollable]=\"true\"\r\n [selectable]=\"selectable\"\r\n [selectionContext]=\"selectionContext\"\r\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </ec-table>\r\n </ng-template>\r\n\r\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\r\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\r\n class=\"d-flex flex-shrink align-items-center\"\r\n [class.border-top]=\"!customContentTemplate\">\r\n <ec-table-pagination id=\"{{id}}_pager\"\r\n class=\"font-color-primary\"\r\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\r\n [pageSize]=\"pageSize\"\r\n [maxTabs]=\"maxTabs\"\r\n [pageNumber]=\"pageInfo?.pageNumber\"\r\n (pageChanged)=\"onPageChange($event)\">\r\n </ec-table-pagination>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto mr-2 font-color-hint text-truncate\" \r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n\r\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\r\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\r\n class=\"p-2 d-flex\"\r\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\r\n <ng-content *ngIf=\"!tableCaption\"\r\n select=\".searchable-table-footer\"></ng-content>\r\n <div id=\"tableCaption\"\r\n *ngIf=\"tableCaption\"\r\n [innerHTML]=\"tableCaption\"></div>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto text-truncate\"\r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n</section>",
|
|
6590
6594
|
styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:flex;flex:1 1;flex-direction:column;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}footer{font-size:.75rem;line-height:1rem}footer.has-results{color:rgba(26,26,35,.38);text-align:right}.card.has-mask{min-height:15rem}"]
|
|
6591
6595
|
},] }
|
|
6592
6596
|
];
|
|
@@ -6629,7 +6633,9 @@ SearchableTableComponent.propDecorators = {
|
|
|
6629
6633
|
resizableColumns: [{ type: ContentChildren, args: [ResizableColumnComponent, { descendants: true },] }],
|
|
6630
6634
|
additionalCountText: [{ type: Input }],
|
|
6631
6635
|
selectable: [{ type: Input }],
|
|
6632
|
-
customContentTemplate: [{ type: Input }]
|
|
6636
|
+
customContentTemplate: [{ type: Input }],
|
|
6637
|
+
removeCard: [{ type: Input }],
|
|
6638
|
+
overlayClasses: [{ type: Input }]
|
|
6633
6639
|
};
|
|
6634
6640
|
|
|
6635
6641
|
class TableDetailRowComponent {
|