@wertzui/ngx-restworld-client 13.0.0 → 13.1.1
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/esm2022/lib/components/restworld-menu-button/restworld-menu-button.component.mjs +26 -13
- package/esm2022/lib/components/restworld-table/restworld-table.component.mjs +3 -3
- package/esm2022/lib/views/restworld-list-view/restworld-list-view.component.mjs +5 -4
- package/fesm2022/wertzui-ngx-restworld-client.mjs +29 -16
- package/fesm2022/wertzui-ngx-restworld-client.mjs.map +1 -1
- package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts +1 -1
- package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -18,32 +18,45 @@ export class RestWorldMenuButtonComponent {
|
|
|
18
18
|
constructor(_router) {
|
|
19
19
|
this._router = _router;
|
|
20
20
|
}
|
|
21
|
-
onClick(item) {
|
|
21
|
+
onClick(event, item) {
|
|
22
|
+
const openInNewWindow = event.ctrlKey || event.button === 1 || event.metaKey;
|
|
22
23
|
if (item.url) {
|
|
23
|
-
window.
|
|
24
|
+
window.open(item.url, openInNewWindow ? '_blank' : '_self');
|
|
24
25
|
}
|
|
25
26
|
else if (item.routerLink) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
if (openInNewWindow) {
|
|
28
|
+
const tree = this._router.createUrlTree(item.routerLink, {
|
|
29
|
+
queryParams: item.queryParams,
|
|
30
|
+
fragment: item.fragment,
|
|
31
|
+
queryParamsHandling: item.queryParamsHandling,
|
|
32
|
+
preserveFragment: item.preserveFragment,
|
|
33
|
+
});
|
|
34
|
+
const url = this._router.serializeUrl(tree);
|
|
35
|
+
window.open(url, '_blank');
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this._router.navigate(item.routerLink, {
|
|
39
|
+
queryParams: item.queryParams,
|
|
40
|
+
fragment: item.fragment,
|
|
41
|
+
queryParamsHandling: item.queryParamsHandling,
|
|
42
|
+
preserveFragment: item.preserveFragment,
|
|
43
|
+
skipLocationChange: item.skipLocationChange,
|
|
44
|
+
replaceUrl: item.replaceUrl,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
34
47
|
}
|
|
35
48
|
else if (item.command) {
|
|
36
49
|
item.command({ item: item });
|
|
37
50
|
}
|
|
38
51
|
}
|
|
39
52
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: RestWorldMenuButtonComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: RestWorldMenuButtonComponent, selector: "rw-menu-button", inputs: { items: "items" }, ngImport: i0, template: "<ng-container *ngFor=\"let item of items; index as i\">\n <p-button\n *ngIf=\"!item.items\"\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick(item)\"\n [class.ml-2]=\"i > 0\">\n </p-button>\n\n <p-splitButton\n *ngIf=\"item.items\"\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [model]=\"item.items\"\n appendTo=\"body\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick(item)\"\n [class.ml-2]=\"i > 0\">\n </p-splitButton>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "size", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i5.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps"], outputs: ["onClick", "onDropdownClick"] }] });
|
|
53
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: RestWorldMenuButtonComponent, selector: "rw-menu-button", inputs: { items: "items" }, ngImport: i0, template: "<ng-container *ngFor=\"let item of items; index as i\">\n <p-button\n *ngIf=\"!item.items\"\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-button>\n\n <p-splitButton\n *ngIf=\"item.items\"\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [model]=\"item.items\"\n appendTo=\"body\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-splitButton>\n</ng-container>\n", styles: [":host{display:flex;justify-content:flex-end}\n"], dependencies: [{ kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "size", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i5.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps"], outputs: ["onClick", "onDropdownClick"] }] });
|
|
41
54
|
}
|
|
42
55
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: RestWorldMenuButtonComponent, decorators: [{
|
|
43
56
|
type: Component,
|
|
44
|
-
args: [{ selector: 'rw-menu-button', template: "<ng-container *ngFor=\"let item of items; index as i\">\n <p-button\n *ngIf=\"!item.items\"\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick(item)\"\n [class.ml-2]=\"i > 0\">\n </p-button>\n\n <p-splitButton\n *ngIf=\"item.items\"\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [model]=\"item.items\"\n appendTo=\"body\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick(item)\"\n [class.ml-2]=\"i > 0\">\n </p-splitButton>\n</ng-container>\n" }]
|
|
57
|
+
args: [{ selector: 'rw-menu-button', template: "<ng-container *ngFor=\"let item of items; index as i\">\n <p-button\n *ngIf=\"!item.items\"\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-button>\n\n <p-splitButton\n *ngIf=\"item.items\"\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [model]=\"item.items\"\n appendTo=\"body\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-splitButton>\n</ng-container>\n", styles: [":host{display:flex;justify-content:flex-end}\n"] }]
|
|
45
58
|
}], ctorParameters: () => [{ type: i1.Router }], propDecorators: { items: [{
|
|
46
59
|
type: Input,
|
|
47
60
|
args: [{ required: true }]
|
|
48
61
|
}] } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLW1lbnUtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtbWVudS1idXR0b24vcmVzdHdvcmxkLW1lbnUtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtbWVudS1idXR0b24vcmVzdHdvcmxkLW1lbnUtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBSWpEOzs7R0FHRztBQU1ILE1BQU0sT0FBTyw0QkFBNEI7SUFPVjtJQU43Qjs7T0FFRztJQUVJLEtBQUssR0FBZSxFQUFFLENBQUM7SUFFOUIsWUFBNkIsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFFNUMsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFpQixFQUFFLElBQWM7UUFDdkMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzdFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNaLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0Q7YUFDSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDeEIsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ3ZELFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO29CQUM3QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2lCQUN4QyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzVCO2lCQUNJO2dCQUNILElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ3JDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO29CQUM3QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO29CQUN2QyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO29CQUMzQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7aUJBQzVCLENBQUMsQ0FBQzthQUNKO1NBQ0Y7YUFDSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQzt1R0F6Q1UsNEJBQTRCOzJGQUE1Qiw0QkFBNEIsa0ZDYnpDLHMyQkE2QkE7OzJGRGhCYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsZ0JBQWdCOzJFQVNuQixLQUFLO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG4vKipcbiAqIERpc3BsYXlzIG9uZSBidXR0b24gZm9yIGV2ZXJ5IGBNZW51SXRlbWAgZ2l2ZW4gaW4gdGhlIGl0ZW1zIGFycmF5LlxuICogSWYgYSBgTWVudUl0ZW1gIGhhcyBuZXN0ZWQgaXRlbXMsIGEgYnV0dG9uIHdpdGggYSBkcm9wZG93biBtZW51IHdpbGwgYmUgZGlzcGxheWVkLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdydy1tZW51LWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtbWVudS1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtbWVudS1idXR0b24uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZE1lbnVCdXR0b25Db21wb25lbnQge1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgbWVudSBpdGVtcyB0byBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXI6IFJvdXRlcikge1xuXG4gIH1cblxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBNZW51SXRlbSkge1xuICAgIGNvbnN0IG9wZW5Jbk5ld1dpbmRvdyA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYnV0dG9uID09PSAxIHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgaWYgKGl0ZW0udXJsKSB7XG4gICAgICB3aW5kb3cub3BlbihpdGVtLnVybCwgb3BlbkluTmV3V2luZG93ID8gJ19ibGFuaycgOiAnX3NlbGYnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXRlbS5yb3V0ZXJMaW5rKSB7XG4gICAgICBpZiAob3BlbkluTmV3V2luZG93KSB7XG4gICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLl9yb3V0ZXIuY3JlYXRlVXJsVHJlZShpdGVtLnJvdXRlckxpbmssIHtcbiAgICAgICAgICBxdWVyeVBhcmFtczogaXRlbS5xdWVyeVBhcmFtcyxcbiAgICAgICAgICBmcmFnbWVudDogaXRlbS5mcmFnbWVudCxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBpdGVtLnF1ZXJ5UGFyYW1zSGFuZGxpbmcsXG4gICAgICAgICAgcHJlc2VydmVGcmFnbWVudDogaXRlbS5wcmVzZXJ2ZUZyYWdtZW50LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fcm91dGVyLnNlcmlhbGl6ZVVybCh0cmVlKTtcbiAgICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKGl0ZW0ucm91dGVyTGluaywge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBpdGVtLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIGZyYWdtZW50OiBpdGVtLmZyYWdtZW50LFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IGl0ZW0ucXVlcnlQYXJhbXNIYW5kbGluZyxcbiAgICAgICAgICBwcmVzZXJ2ZUZyYWdtZW50OiBpdGVtLnByZXNlcnZlRnJhZ21lbnQsXG4gICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiBpdGVtLnNraXBMb2NhdGlvbkNoYW5nZSxcbiAgICAgICAgICByZXBsYWNlVXJsOiBpdGVtLnJlcGxhY2VVcmwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpdGVtLmNvbW1hbmQpIHtcbiAgICAgIGl0ZW0uY29tbWFuZCh7IGl0ZW06IGl0ZW0gfSk7XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBpbmRleCBhcyBpXCI+XG4gIDxwLWJ1dHRvblxuICAgICpuZ0lmPVwiIWl0ZW0uaXRlbXNcIlxuICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsIVwiXG4gICAgW2ljb25dPVwiaXRlbS5pY29uIVwiXG4gICAgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQhXCJcbiAgICBbc3R5bGVdPVwiaXRlbS5zdHlsZVwiXG4gICAgW3N0eWxlQ2xhc3NdPVwiaXRlbS5zdHlsZUNsYXNzIVwiXG4gICAgW3BUb29sdGlwXT1cIml0ZW0udG9vbHRpcCFcIlxuICAgIFt0b29sdGlwUG9zaXRpb25dPVwiaXRlbS50b29sdGlwUG9zaXRpb24hXCJcbiAgICAob25DbGljayk9XCJvbkNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgIFtjbGFzcy5tbC0yXT1cImkgPiAwXCI+XG4gIDwvcC1idXR0b24+XG5cbiAgPHAtc3BsaXRCdXR0b25cbiAgICAqbmdJZj1cIml0ZW0uaXRlbXNcIlxuICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsIVwiXG4gICAgW2ljb25dPVwiaXRlbS5pY29uIVwiXG4gICAgW21vZGVsXT1cIml0ZW0uaXRlbXNcIlxuICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQhXCJcbiAgICBbc3R5bGVdPVwiaXRlbS5zdHlsZVwiXG4gICAgW3N0eWxlQ2xhc3NdPVwiaXRlbS5zdHlsZUNsYXNzIVwiXG4gICAgW3BUb29sdGlwXT1cIml0ZW0udG9vbHRpcCFcIlxuICAgIFt0b29sdGlwUG9zaXRpb25dPVwiaXRlbS50b29sdGlwUG9zaXRpb24hXCJcbiAgICAob25DbGljayk9XCJvbkNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgIFtjbGFzcy5tbC0yXT1cImkgPiAwXCI+XG4gIDwvcC1zcGxpdEJ1dHRvbj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -448,7 +448,7 @@ export class RestWorldTableComponent {
|
|
|
448
448
|
this._editProperties = Object.fromEntries(this.editTemplate.properties.map(p => [p.name, p]));
|
|
449
449
|
}
|
|
450
450
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: RestWorldTableComponent, deps: [{ token: i1.ControlContainer }, { token: i2.FormService }], target: i0.ɵɵFactoryTarget.Component });
|
|
451
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: RestWorldTableComponent, selector: "rw-table", inputs: { apiName: "apiName", formArray: "formArray", searchTemplate: "searchTemplate", editTemplate: "editTemplate", rows: "rows", rowsPerPageOptions: "rowsPerPageOptions", rowsPerPage: "rowsPerPage", headerMenu: "headerMenu", rowMenu: "rowMenu", showRowMenuAsColumn: "showRowMenuAsColumn", showRowMenuOnRightClick: "showRowMenuOnRightClick", rowStyleClass: "rowStyleClass", cellStyleClass: "cellStyleClass", totalRecords: "totalRecords", styleClass: "styleClass", tableStyle: "tableStyle", scrollable: "scrollable", scrollHeight: "scrollHeight", selectionMode: "selectionMode", rowHover: "rowHover", selection: "selection", isLoading: "isLoading" }, outputs: { onFilterOrSortChanged: "onFilterOrSortChanged", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true }], ngImport: i0, template: "<p-table\n #table\n [value]=\"rows\"\n [columns]=\"columns\"\n [lazy]=\"true\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"true\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [rows]=\"rowsPerPage\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"isLoading\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [selectionMode]=\"selectionMode\"\n (onRowSelect)=\"onRowSelectInternal($event)\"\n (onRowUnselect)=\"onRowUnselectInternal($event)\"\n [rowHover]=\"rowHover\"\n [(selection)]=\"_selection\"\n (selectionChange)=\"onSelectionChangeInternal($event)\">\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center\">\n {{col.prompt}}\n <ng-container *ngIf=\"!col.readOnly\">\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter [type]=\"toColumnFilterType(col.type)\" [maxFractionDigits]=\"toMaxFractionDigits(col)\" [matchMode]=\"toMatchMode(col.type)\" [field]=\"col.name\" display=\"menu\"></p-columnFilter>\n </ng-container>\n </div>\n </th>\n <th *ngIf=\"showMenuColumn\" class=\"flex justify-content-end\">\n <rw-menu-button [items]=\"headerMenu\"></rw-menu-button>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode === null\" [className]=\"rowStyleClasses[rowIndex - (table.first ?? 0)]\">\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\" [className]=\"cellStyleClasses[rowIndex - (table.first ?? 0)][col.name]\">\n <ng-container *ngIf=\"showInputField(col); else textField\" [formGroup]=\"formArray!.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName!\" [property]=\"editProperties[col.name]\"></rw-input>\n </ng-container>\n <ng-template #textField>\n <ng-container *ngSwitchCase=\"PropertyType.Text\">\n <rw-avatar *ngIf=\"col.name === 'createdBy' || col.name === 'lastChangedBy'\" [user]=\"entity[col.name]\"></rw-avatar>\n <span *ngIf=\"col.name !== 'createdBy' && col.name !== 'lastChangedBy'\">{{entity[col.name]}}</span>\n </ng-container>\n <span *ngSwitchCase=\"PropertyType.Number\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Percent\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Currency\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Bool\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.name]\" [readonly]=\"true\" [disabled]=\"true\"></p-triStateCheckbox></span>\n <span *ngSwitchCase=\"PropertyType.Date\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Time\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Duration\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeLocal\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeOffset\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.Collection\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.name]\">{{arrayElement | json}}</p></span>\n <span *ngSwitchCase=\"PropertyType.Object\" class=\"flex justify-content-end\">{{entity[col.name] | json}}</span>\n <span *ngSwitchDefault [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n </ng-template>\n </td>\n <td *ngIf=\"showMenuColumn\" class=\"flex justify-content-end\">\n <rw-menu-button *ngIf=\"showRowMenuAsColumn\" [items]=\"rowMenus[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n </td>\n </tr>\n </ng-template>\n\n <p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems\"></p-contextMenu>\n</p-table>\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i5.ContextMenu, selector: "p-contextMenu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "ariaLabel", "ariaLabelledBy", "pressDelay"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i7.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i7.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "component", type: i7.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i7.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons"] }, { kind: "component", type: i8.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabel", "ariaLabelledBy", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon"], outputs: ["onChange"] }, { kind: "component", type: i9.RestWorldAvatarComponent, selector: "rw-avatar", inputs: ["user"] }, { kind: "component", type: i10.RestWorldInputComponent, selector: "rw-input", inputs: ["property", "apiName"] }, { kind: "component", type: i11.RestWorldMenuButtonComponent, selector: "rw-menu-button", inputs: ["items"] }, { kind: "pipe", type: i4.JsonPipe, name: "json" }, { kind: "pipe", type: i12.PropertyTypeFormatPipe, name: "propertyTypeFormat" }], viewProviders: [{
|
|
451
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: RestWorldTableComponent, selector: "rw-table", inputs: { apiName: "apiName", formArray: "formArray", searchTemplate: "searchTemplate", editTemplate: "editTemplate", rows: "rows", rowsPerPageOptions: "rowsPerPageOptions", rowsPerPage: "rowsPerPage", headerMenu: "headerMenu", rowMenu: "rowMenu", showRowMenuAsColumn: "showRowMenuAsColumn", showRowMenuOnRightClick: "showRowMenuOnRightClick", rowStyleClass: "rowStyleClass", cellStyleClass: "cellStyleClass", totalRecords: "totalRecords", styleClass: "styleClass", tableStyle: "tableStyle", scrollable: "scrollable", scrollHeight: "scrollHeight", selectionMode: "selectionMode", rowHover: "rowHover", selection: "selection", isLoading: "isLoading" }, outputs: { onFilterOrSortChanged: "onFilterOrSortChanged", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true }], ngImport: i0, template: "<p-table\n #table\n [value]=\"rows\"\n [columns]=\"columns\"\n [lazy]=\"true\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"true\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [rows]=\"rowsPerPage\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"isLoading\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [selectionMode]=\"selectionMode\"\n (onRowSelect)=\"onRowSelectInternal($event)\"\n (onRowUnselect)=\"onRowUnselectInternal($event)\"\n [rowHover]=\"rowHover\"\n [(selection)]=\"_selection\"\n (selectionChange)=\"onSelectionChangeInternal($event)\">\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center\">\n {{col.prompt}}\n <ng-container *ngIf=\"!col.readOnly\">\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter [type]=\"toColumnFilterType(col.type)\" [maxFractionDigits]=\"toMaxFractionDigits(col)\" [matchMode]=\"toMatchMode(col.type)\" [field]=\"col.name\" display=\"menu\"></p-columnFilter>\n </ng-container>\n </div>\n </th>\n <th *ngIf=\"showMenuColumn\">\n <rw-menu-button [items]=\"headerMenu\"></rw-menu-button>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode === null\" [className]=\"rowStyleClasses[rowIndex - (table.first ?? 0)]\">\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\" [className]=\"cellStyleClasses[rowIndex - (table.first ?? 0)][col.name]\">\n <ng-container *ngIf=\"showInputField(col); else textField\" [formGroup]=\"formArray!.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName!\" [property]=\"editProperties[col.name]\"></rw-input>\n </ng-container>\n <ng-template #textField>\n <ng-container *ngSwitchCase=\"PropertyType.Text\">\n <rw-avatar *ngIf=\"col.name === 'createdBy' || col.name === 'lastChangedBy'\" [user]=\"entity[col.name]\"></rw-avatar>\n <span *ngIf=\"col.name !== 'createdBy' && col.name !== 'lastChangedBy'\">{{entity[col.name]}}</span>\n </ng-container>\n <span *ngSwitchCase=\"PropertyType.Number\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Percent\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Currency\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Bool\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.name]\" [readonly]=\"true\" [disabled]=\"true\"></p-triStateCheckbox></span>\n <span *ngSwitchCase=\"PropertyType.Date\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Time\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Duration\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeLocal\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeOffset\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.Collection\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.name]\">{{arrayElement | json}}</p></span>\n <span *ngSwitchCase=\"PropertyType.Object\" class=\"flex justify-content-end\">{{entity[col.name] | json}}</span>\n <span *ngSwitchDefault [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n </ng-template>\n </td>\n <td *ngIf=\"showMenuColumn\">\n <rw-menu-button *ngIf=\"showRowMenuAsColumn\" [items]=\"rowMenus[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n </td>\n </tr>\n </ng-template>\n\n <p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems\"></p-contextMenu>\n</p-table>\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i5.ContextMenu, selector: "p-contextMenu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "ariaLabel", "ariaLabelledBy", "pressDelay"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i7.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i7.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "component", type: i7.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i7.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons"] }, { kind: "component", type: i8.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabel", "ariaLabelledBy", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon"], outputs: ["onChange"] }, { kind: "component", type: i9.RestWorldAvatarComponent, selector: "rw-avatar", inputs: ["user"] }, { kind: "component", type: i10.RestWorldInputComponent, selector: "rw-input", inputs: ["property", "apiName"] }, { kind: "component", type: i11.RestWorldMenuButtonComponent, selector: "rw-menu-button", inputs: ["items"] }, { kind: "pipe", type: i4.JsonPipe, name: "json" }, { kind: "pipe", type: i12.PropertyTypeFormatPipe, name: "propertyTypeFormat" }], viewProviders: [{
|
|
452
452
|
provide: ControlContainer,
|
|
453
453
|
deps: [[Optional, FormArrayName]],
|
|
454
454
|
useFactory: (arrayName) => arrayName,
|
|
@@ -460,7 +460,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
|
|
|
460
460
|
provide: ControlContainer,
|
|
461
461
|
deps: [[Optional, FormArrayName]],
|
|
462
462
|
useFactory: (arrayName) => arrayName,
|
|
463
|
-
}], template: "<p-table\n #table\n [value]=\"rows\"\n [columns]=\"columns\"\n [lazy]=\"true\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"true\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [rows]=\"rowsPerPage\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"isLoading\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [selectionMode]=\"selectionMode\"\n (onRowSelect)=\"onRowSelectInternal($event)\"\n (onRowUnselect)=\"onRowUnselectInternal($event)\"\n [rowHover]=\"rowHover\"\n [(selection)]=\"_selection\"\n (selectionChange)=\"onSelectionChangeInternal($event)\">\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center\">\n {{col.prompt}}\n <ng-container *ngIf=\"!col.readOnly\">\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter [type]=\"toColumnFilterType(col.type)\" [maxFractionDigits]=\"toMaxFractionDigits(col)\" [matchMode]=\"toMatchMode(col.type)\" [field]=\"col.name\" display=\"menu\"></p-columnFilter>\n </ng-container>\n </div>\n </th>\n <th *ngIf=\"showMenuColumn\"
|
|
463
|
+
}], template: "<p-table\n #table\n [value]=\"rows\"\n [columns]=\"columns\"\n [lazy]=\"true\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"true\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [rows]=\"rowsPerPage\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"isLoading\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [selectionMode]=\"selectionMode\"\n (onRowSelect)=\"onRowSelectInternal($event)\"\n (onRowUnselect)=\"onRowUnselectInternal($event)\"\n [rowHover]=\"rowHover\"\n [(selection)]=\"_selection\"\n (selectionChange)=\"onSelectionChangeInternal($event)\">\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center\">\n {{col.prompt}}\n <ng-container *ngIf=\"!col.readOnly\">\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter [type]=\"toColumnFilterType(col.type)\" [maxFractionDigits]=\"toMaxFractionDigits(col)\" [matchMode]=\"toMatchMode(col.type)\" [field]=\"col.name\" display=\"menu\"></p-columnFilter>\n </ng-container>\n </div>\n </th>\n <th *ngIf=\"showMenuColumn\">\n <rw-menu-button [items]=\"headerMenu\"></rw-menu-button>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode === null\" [className]=\"rowStyleClasses[rowIndex - (table.first ?? 0)]\">\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\" [className]=\"cellStyleClasses[rowIndex - (table.first ?? 0)][col.name]\">\n <ng-container *ngIf=\"showInputField(col); else textField\" [formGroup]=\"formArray!.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName!\" [property]=\"editProperties[col.name]\"></rw-input>\n </ng-container>\n <ng-template #textField>\n <ng-container *ngSwitchCase=\"PropertyType.Text\">\n <rw-avatar *ngIf=\"col.name === 'createdBy' || col.name === 'lastChangedBy'\" [user]=\"entity[col.name]\"></rw-avatar>\n <span *ngIf=\"col.name !== 'createdBy' && col.name !== 'lastChangedBy'\">{{entity[col.name]}}</span>\n </ng-container>\n <span *ngSwitchCase=\"PropertyType.Number\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Percent\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Currency\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Bool\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.name]\" [readonly]=\"true\" [disabled]=\"true\"></p-triStateCheckbox></span>\n <span *ngSwitchCase=\"PropertyType.Date\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Time\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Duration\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeLocal\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeOffset\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.Collection\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.name]\">{{arrayElement | json}}</p></span>\n <span *ngSwitchCase=\"PropertyType.Object\" class=\"flex justify-content-end\">{{entity[col.name] | json}}</span>\n <span *ngSwitchDefault [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n </ng-template>\n </td>\n <td *ngIf=\"showMenuColumn\">\n <rw-menu-button *ngIf=\"showRowMenuAsColumn\" [items]=\"rowMenus[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n </td>\n </tr>\n </ng-template>\n\n <p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems\"></p-contextMenu>\n</p-table>\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
|
|
464
464
|
}], ctorParameters: () => [{ type: i1.ControlContainer }, { type: i2.FormService }], propDecorators: { apiName: [{
|
|
465
465
|
type: Input
|
|
466
466
|
}], formArray: [{
|
|
@@ -519,4 +519,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
|
|
|
519
519
|
}], isLoading: [{
|
|
520
520
|
type: Input
|
|
521
521
|
}] } });
|
|
522
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtdGFibGUvcmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtdGFibGUvcmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQXlCLFlBQVksRUFBZSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFzQixNQUFNLGFBQWEsQ0FBQztBQUVsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFN0QsT0FBTyxFQUFtQixnQkFBZ0IsRUFBYSxhQUFhLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFHeEcsSUFBSyxnQkFLSjtBQUxELFdBQUssZ0JBQWdCO0lBQ25CLGlDQUFhLENBQUE7SUFDYix1Q0FBbUIsQ0FBQTtJQUNuQix1Q0FBbUIsQ0FBQTtJQUNuQixpQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxJLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFLcEI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFXSCxNQUFNLE9BQU8sdUJBQXVCO0lBNk5mO0lBQ0E7SUE3Tm5COzs7T0FHRztJQUVJLE9BQU8sQ0FBVTtJQUVoQixVQUFVLENBQThFO0lB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QkssT0FBTztzQkFEakIsS0FBSztnQkF1Q0MsbUJBQW1CO3NCQUR6QixLQUFLO2dCQU9DLHVCQUF1QjtzQkFEN0IsS0FBSztnQkFlSyxhQUFhO3NCQUR2QixLQUFLO2dCQXdCSyxjQUFjO3NCQUR4QixLQUFLO2dCQVlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBbURDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBT0MsVUFBVTtzQkFEaEIsS0FBSztnQkFRQyxVQUFVO3NCQURoQixLQUFLO2dCQVFDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBU0MscUJBQXFCO3NCQUQzQixNQUFNO2dCQU9BLFdBQVc7c0JBRGpCLE1BQU07Z0JBT0EsYUFBYTtzQkFEbkIsTUFBTTtnQkFRQSxhQUFhO3NCQURuQixLQUFLO2dCQU9DLFFBQVE7c0JBRGQsS0FBSztnQkFPSyxTQUFTO3NCQURuQixLQUFLO2dCQWNOLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYTtnQkFhakIsU0FBUztzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlLCBQcm9wZXJ0eSwgUHJvcGVydHlUeXBlLCBTaW1wbGVWYWx1ZSwgVGVtcGxhdGUgfSBmcm9tICdAd2VydHp1aS9uZ3gtaGFsLWNsaWVudCc7XG5pbXBvcnQgeyBGaWx0ZXJNYXRjaE1vZGUsIE1lbnVJdGVtLCBTb3J0TWV0YSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IE9EYXRhUGFyYW1ldGVycyB9IGZyb20gJy4uLy4uL21vZGVscy9vLWRhdGEnO1xuaW1wb3J0IHsgT0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvby1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICdwcmltZW5nL2NvbnRleHRtZW51JztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUFycmF5LCBGb3JtQXJyYXlOYW1lLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUYWJsZUxhenlMb2FkRXZlbnQsIFRhYmxlUm93U2VsZWN0RXZlbnQsIFRhYmxlUm93VW5TZWxlY3RFdmVudCB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuXG5lbnVtIENvbHVtbkZpbHRlclR5cGUge1xuICB0ZXh0ID0gJ3RleHQnLFxuICBudW1lcmljID0gJ251bWVyaWMnLFxuICBib29sZWFuID0gJ2Jvb2xlYW4nLFxuICBkYXRlID0gJ2RhdGUnXG59XG5cbi8qKlxuICogRGlzcGxheXMgYSB0YWJsZSBiYXNlZCBvbiBhIHNlYXJjaC0sIGFuIGVkaXQtdGVtcGxhdGUgYW5kIGEgbGlzdCBvZiBpdGVtcy5cbiAqIFRoZSBzZWFyY2gtdGVtcGxhdGUgaXMgcmVxdWlyZWQgYW5kIHVzZWQgdG8gZGlzcGxheSB0aGUgdGFibGUgY29sdW1ucyBhbmQgdG8gZmlsdGVyIGFuZCBzb3J0IHRoZSBpdGVtcy5cbiAqIFRoZSBlZGl0LXRlbXBsYXRlIGlzIG9wdGlvbmFsIGFuZCB1c2VkIHRvIGVkaXQgdGhlIGl0ZW1zLiBGb3IgdGhlIGVkaXQgY2FwYWJpbGl0eSwgdGhlIHRhYmxlIG11c3QgYmUgcGFydCBvZiBhIHJlYWN0aXZlIGZvcm0uXG4gKiBUaGUgaXRlbXMgYXJlIGRpc3BsYXllZCBhcyB0YWJsZSByb3dzLlxuICogVGhlIHRhYmxlIHN1cHBvcnRzIGxhenkgbG9hZGluZywgcm93IHNlbGVjdGlvbiwgcm93IG1lbnVzLCBhbmQgY29udGV4dCBtZW51cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogPHJ3LXRhYmxlXG4gKiAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxuICogICBbc2VhcmNoVGVtcGxhdGVdPVwic2VhcmNoVGVtcGxhdGVcIlxuICogICBbZWRpdFRlbXBsYXRlXT1cImVkaXRUZW1wbGF0ZVwiXG4gKiAgIFtyb3dzXT1cInJvd3NcIlxuICogICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjUsIDUwXVwiXG4gKiAgIFtoZWFkZXJNZW51XT1cImhlYWRlck1lbnVcIlxuICogICBbcm93TWVudV09XCJyb3dNZW51XCJcbiAqICAgW3Jvd1N0eWxlQ2xhc3NdPVwicm93U3R5bGVDbGFzc1wiXG4gKiAgIFtjZWxsU3R5bGVDbGFzc109XCJjZWxsU3R5bGVDbGFzc1wiXG4gKiAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAqICAgW211bHRpU29ydE1ldGFdPVwibXVsdGlTb3J0TWV0YVwiXG4gKiAgIFtzdHlsZUNsYXNzXT1cInN0eWxlQ2xhc3NcIlxuICogICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCJcbiAqICAgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiXG4gKiAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAqICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gKiAgIFtyb3dIb3Zlcl09XCJyb3dIb3ZlclwiXG4gKiAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAqICAgW2NvbnRleHRNZW51SXRlbXNdPVwiY29udGV4dE1lbnVJdGVtc1wiXG4gKiAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAqICAgKG9uRmlsdGVyT3JTb3J0Q2hhbmdlZCk9XCJvbkZpbHRlck9yU29ydENoYW5nZWQoJGV2ZW50KVwiXG4gKiAgIChvblJvd1NlbGVjdCk9XCJvblJvd1NlbGVjdCgkZXZlbnQpXCJcbiAqICAgKG9uUm93VW5zZWxlY3QpPVwib25Sb3dVbnNlbGVjdCgkZXZlbnQpXCJcbiAqICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICogPC9ydy10YWJsZT5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3J3LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC10YWJsZS5jb21wb25lbnQuY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lcixcbiAgICBkZXBzOiBbW09wdGlvbmFsLCBGb3JtQXJyYXlOYW1lXV0sXG4gICAgdXNlRmFjdG9yeTogKGFycmF5TmFtZTogRm9ybUFycmF5TmFtZSkgPT4gYXJyYXlOYW1lLFxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRUYWJsZUNvbXBvbmVudDxUTGlzdEl0ZW0gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXBpLlxuICAgKiBGb3IgdGhlIGVkaXRpbmcgY2FwYWJpbGl0eSwgeW91IG11c3QgYWxzbyBzZXQgdGhlIGVkaXRUZW1wbGF0ZSBhbmQgdGhlIGZvcm1BcnJheS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcGlOYW1lPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2Zvcm1BcnJheT86IEZvcm1BcnJheTxGb3JtR3JvdXA8eyBbSyBpbiBrZXlvZiBUTGlzdEl0ZW1dOiBBYnN0cmFjdENvbnRyb2w8dW5rbm93bj4gfT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBmb3JtIGdyb3VwcyBmb3IgdGhlIGl0ZW1zLlxuICAgKiBCaW5kIHRoaXMgdG8gdGhlIGZvcm0gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgZm9ybSBncm91cHMgZm9yIHRoZSBpdGVtcy5cbiAgICogRWFjaCBlbnRyeSBpbiB0aGUgYXJyYXkgcmVwcmVzZW50cyBvbmUgcm93IGluIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2Ugb2YgdGhlIHRhYmxlLlxuICAgKiBGb3IgdGhlIGVkaXRpbmcgY2FwYWJpbGl0eSwgeW91IG11c3QgYWxzbyBzZXQgdGhlIGFwaU5hbWUgYW5kIHRoZSBlZGl0VGVtcGxhdGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZvcm1BcnJheSh2YWx1ZTogRm9ybUFycmF5PEZvcm1Hcm91cDx7IFtLIGluIGtleW9mIFRMaXN0SXRlbV06IEFic3RyYWN0Q29udHJvbDx1bmtub3duPiB9Pj4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9mb3JtQXJyYXkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9ybUFycmF5KCk6IEZvcm1BcnJheTxGb3JtR3JvdXA8eyBbSyBpbiBrZXlvZiBUTGlzdEl0ZW1dOiBBYnN0cmFjdENvbnRyb2w8dW5rbm93bj4gfT4+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUFycmF5ID8/IHRoaXMuX2NvbnRyb2xDb250YWluZXI/LmNvbnRyb2wgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDx7IFtLIGluIGtleW9mIFRMaXN0SXRlbV06IEFic3RyYWN0Q29udHJvbDx1bmtub3duPiB9Pj4gfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF9zZWFyY2hUZW1wbGF0ZTogVGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoeyBwcm9wZXJ0aWVzOiBbXSB9KTtcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSB0YWJsZSBjb2x1bW5zIGFuZCB0byBmaWx0ZXIgYW5kIHNvcnQgdGhlIGl0ZW1zLlxuICAgKiBCaW5kIHRoaXMgdG8gdGhlIHRlbXBsYXRlIHRoYXQgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSB0YWJsZSBjb2x1bW5zIGFuZCB0byBmaWx0ZXIgYW5kIHNvcnQgdGhlIGl0ZW1zLlxuICAgKiBOb3JtYWxseSB0aGlzIGlzIHJldHVybmVkIGZyb20gdGhlIGJhY2tlbmQgYXMgcGFydCBvZiB0aGUgaGFsLWZvcm1zIHJlc291cmNlIGZyb20gYSBsaXN0IGVuZHBvaW50LlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCBzZWFyY2hUZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGUpIHtcbiAgICB0aGlzLl9zZWFyY2hUZW1wbGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX2NvbHVtbnMgPSB2YWx1ZT8ucHJvcGVydGllcy5maWx0ZXIocCA9PiBwLnR5cGUgIT09IFByb3BlcnR5VHlwZS5IaWRkZW4pID8/IFtdO1xuICAgIHRoaXMuc2V0U29ydEZpZWxkQW5kU29ydE9yZGVyKHZhbHVlKVxuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2hUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVGVtcGxhdGU7XG4gIH1cblxuICBwcml2YXRlIF9lZGl0VGVtcGxhdGU/OiBUZW1wbGF0ZTtcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgaXMgdXNlZCB0byBlZGl0IHRoZSBpdGVtcy5cbiAgICogQmluZCB0aGlzIHRvIHRoZSB0ZW1wbGF0ZSB0aGF0IGlzIHVzZWQgdG8gZWRpdCB0aGUgaXRlbXMuXG4gICAqIE5vcm1hbGx5IHRoaXMgaXMgcmV0dXJuZWQgZnJvbSB0aGUgYmFja2VuZCBhcyBwYXJ0IG9mIHRoZSBoYWwtZm9ybXMgcmVzb3VyY2UgZnJvbSBhIGxpc3QgZW5kcG9pbnQuXG4gICAqIEZvciB0aGUgZWRpdGluZyBjYXBhYmlsaXR5LCB5b3UgbXVzdCBhbHNvIHNldCB0aGUgYXBpTmFtZSBhbmQgdGhlIGZvcm1BcnJheS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRpdFRlbXBsYXRlKHZhbHVlOiBUZW1wbGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2VkaXRUZW1wbGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlRWRpdFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1BcnJheSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBlZGl0VGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRUZW1wbGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2VkaXRQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xuICBwdWJsaWMgZ2V0IGVkaXRQcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9lZGl0UHJvcGVydGllcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFZGl0YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0VGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmZvcm1BcnJheSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXBpTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jvd3M6IFRMaXN0SXRlbVtdID0gW107XG4gIHB1YmxpYyBnZXQgcm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm93cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaXRlbXMgdGhhdCBhcmUgZGlzcGxheWVkIGFzIHRhYmxlIHJvd3MuXG4gICAqIEJpbmQgdGhpcyB0byB0aGUgaXRlbXMgdGhhdCBhcmUgZGlzcGxheWVkIGFzIHRhYmxlIHJvd3MuXG4gICAqIE5vcm1hbGx5IHRoaXMgaXMgcmV0dXJuZWQgZnJvbSB0aGUgYmFja2VuZCBhcyBwYXJ0IG9mIHRoZSBoYWwtZm9ybXMgcmVzb3VyY2UgZnJvbSBhIGxpc3QgZW5kcG9pbnQuXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IHJvd3ModmFsdWU6IFRMaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5fcm93cyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlQ2FsY3VsYXRlZEZ1bmN0aW9uVmFsdWVzKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1BcnJheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBudW1iZXIgb2Ygcm93cyBwZXIgcGFnZS5cbiAgICogVGhlIGRlZmF1bHQgaXMgWzEwLCAyNSwgNTBdLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJvd3NQZXJQYWdlT3B0aW9ucyA9IFsxMCwgMjUsIDUwXTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiByb3dzIHBlciBwYWdlLlxuICAgKiBUaGUgZGVmYXVsdCBpcyAxMC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3dzUGVyUGFnZSA9IDEwO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBtZW51IHRoYXQgaXMgZGlzcGxheWVkIGF0IHRoZSB0b3AgcmlnaHQgb2YgdGhlIHRhYmxlLlxuICAgKiBAc2VlIFJlc3RXb3JsZE1lbnVCdXR0b25Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWFkZXJNZW51OiBNZW51SXRlbVtdID0gW107XG5cbiAgcHJpdmF0ZSBfcm93TWVudTogKHJvdzogVExpc3RJdGVtLCBvcGVuZWRCeVJpZ2h0Q2xpY2s6IGJvb2xlYW4pID0+IE1lbnVJdGVtW10gPSAoKSA9PiBbXTtcbiAgcHVibGljIGdldCByb3dNZW51KCk6IChyb3c6IFRMaXN0SXRlbSwgb3BlbmVkQnlSaWdodENsaWNrOiBib29sZWFuKSA9PiBNZW51SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcm93TWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbWVudSBmb3IgYSByb3cuXG4gICAqIEJhc2VkIG9uIHRoZSBvcGVuZWRCeVJpZ2h0Q2xpY2sgcGFyYW1ldGVyLCB0aGUgZnVuY3Rpb24gY2FuIHJldHVybiBkaWZmZXJlbnQgbWVudXMuXG4gICAqIFRoZSBtZW51IHdoZW4gaXQgaGFzIG5vdCBiZWVuIG9wZW5lZCBieSBhIHJpZ2h0IGNsaWNrIGlzIGRpc3BsYXllZCBpbiBhbiBleHRyYSBjb2x1bW4gdG8gdGhlIHJpZ2h0IG9mIHRoZSB0YWJsZSBpZiBgc2hvd1Jvd01lbnVBc0NvbHVtbmAgaXMgYHRydWVgLlxuICAgKiBUaGUgbWVudSB3aGVuIGl0IGhhcyBiZWVuIG9wZW5lZCBieSBhIHJpZ2h0IGNsaWNrIGlzIGRpc3BsYXllZCBhcyBhIGNvbnRleHQgbWVudSBpZiBgc2hvd1Jvd01lbnVPblJpZ2h0Q2xpY2tgIGlzIGB0cnVlYC5cbiAgICogQHBhcmFtIHJvdyBUaGUgcm93IGZvciB3aGljaCB0byByZXR1cm4gdGhlIG1lbnUuXG4gICAqIEBwYXJhbSBvcGVuZWRCeVJpZ2h0Q2xpY2sgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lbnUgd2FzIG9wZW5lZCBieSBhIHJpZ2h0IGNsaWNrLlxuICAgKiBAcmV0dXJucyBUaGUgbWVudSBmb3IgdGhlIHJvdy5cbiAgICogQHNlZSBzaG93Um93TWVudUFzQ29sdW1uXG4gICAqIEBzZWUgc2hvd1Jvd01lbnVPblJpZ2h0Q2xpY2tcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcm93TWVudSh2YWx1ZTogKHJvdzogVExpc3RJdGVtLCBvcGVuZWRCeVJpZ2h0Q2xpY2s6IGJvb2xlYW4pID0+IE1lbnVJdGVtW10pIHtcbiAgICB0aGlzLl9yb3dNZW51ID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVSb3dNZW51cyh0aGlzLnJvd3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcm93TWVudXM6IE1lbnVJdGVtW11bXSA9IFtdO1xuXG4gIHByaXZhdGUgdXBkYXRlQ2FsY3VsYXRlZEZ1bmN0aW9uVmFsdWVzKHZhbHVlOiBUTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMudXBkYXRlUm93TWVudXModmFsdWUpO1xuICAgIHRoaXMudXBkYXRlUm93U3R5bGVzKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUNlbGxTdHlsZXModmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDZWxsU3R5bGVzKHZhbHVlOiBUTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMuX2NlbGxTdHlsZUNsYXNzZXMgPSB2YWx1ZS5tYXAoKHIsIHJpKSA9PiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5jb2x1bW5zLm1hcCgoYywgY2kpID0+IFtjLm5hbWUsIHRoaXMuY2VsbFN0eWxlQ2xhc3MociwgYywgcmksIGNpKV0pKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJvd1N0eWxlcyh2YWx1ZTogVExpc3RJdGVtW10pIHtcbiAgICB0aGlzLl9yb3dTdHlsZUNsYXNzZXMgPSB2YWx1ZS5tYXAoKHIsIGkpID0+IHRoaXMucm93U3R5bGVDbGFzcyhyLCBpKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJvd01lbnVzKHZhbHVlOiBUTGlzdEl0ZW1bXSkge1xuICAgIGlmICh0aGlzLnNob3dSb3dNZW51QXNDb2x1bW4pXG4gICAgICB0aGlzLl9yb3dNZW51cyA9IHZhbHVlLm1hcChyID0+IHRoaXMucm93TWVudShyLCBmYWxzZSkpO1xuICB9XG5cbiAgcHVibGljIGdldCByb3dNZW51cygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm93TWVudXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3dNZW51Q29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmhlYWRlck1lbnUubGVuZ3RoID4gMCB8fCAodGhpcy5zaG93Um93TWVudUFzQ29sdW1uICYmIHRoaXMucm93TWVudXMuc29tZShtID0+IG0ubGVuZ3RoID4gMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSByb3cgbWVudSBpcyBkaXNwbGF5ZWQgYXMgYSBjb2x1bW4gdG8gdGhlIHJpZ2h0IG9mIHRoZSB0YWJsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Um93TWVudUFzQ29sdW1uID0gdHJ1ZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvdyBtZW51IGlzIGRpc3BsYXllZCBhcyBhIGNvbnRleHQgbWVudSB3aGVuIHRoZSB1c2VyIHJpZ2h0IGNsaWNrcyBvbiBhIHJvdy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Um93TWVudU9uUmlnaHRDbGljayA9IHRydWU7XG5cbiAgcHJpdmF0ZSBfcm93U3R5bGVDbGFzczogKHJvdzogVExpc3RJdGVtLCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgPSAoKSA9PiBcIlwiO1xuICBwdWJsaWMgZ2V0IHJvd1N0eWxlQ2xhc3MoKTogKHJvdzogVExpc3RJdGVtLCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yb3dTdHlsZUNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzdHlsZSBjbGFzcyBmb3IgYSByb3cuXG4gICAqIEBwYXJhbSByb3cgVGhlIHJvdyBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBzdHlsZSBjbGFzcy5cbiAgICogQHBhcmFtIHJvd0luZGV4IFRoZSBpbmRleCBvZiB0aGUgcm93IG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UuXG4gICAqIEByZXR1cm5zIFRoZSBzdHlsZSBjbGFzcyBmb3IgdGhlIHJvdy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcm93U3R5bGVDbGFzcyh2YWx1ZTogKHJvdzogVExpc3RJdGVtLCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yb3dTdHlsZUNsYXNzID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVSb3dTdHlsZXModGhpcy5yb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jvd1N0eWxlQ2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGdldCByb3dTdHlsZUNsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd1N0eWxlQ2xhc3NlcztcbiAgfVxuXG4gIHByaXZhdGUgX2NlbGxTdHlsZUNsYXNzOiAocm93OiBUTGlzdEl0ZW0sIGNvbHVtbjogUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPiwgcm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nID0gKCkgPT4gXCJcIjtcbiAgcHVibGljIGdldCBjZWxsU3R5bGVDbGFzcygpOiAocm93OiBUTGlzdEl0ZW0sIGNvbHVtbjogUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPiwgcm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2VsbFN0eWxlQ2xhc3M7XG4gIH1cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzdHlsZSBjbGFzcyBmb3IgYSBjZWxsLlxuICAgKiBAcGFyYW0gcm93IFRoZSByb3cgZm9yIHdoaWNoIHRvIHJldHVybiB0aGUgc3R5bGUgY2xhc3MuXG4gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBzdHlsZSBjbGFzcy5cbiAgICogQHBhcmFtIHJvd0luZGV4IFRoZSBpbmRleCBvZiB0aGUgcm93IG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UuXG4gICAqIEBwYXJhbSBjb2x1bW5JbmRleCBUaGUgaW5kZXggb2YgdGhlIGNvbHVtbi5cbiAgICogQHJldHVybnMgVGhlIHN0eWxlIGNsYXNzIGZvciB0aGUgY2VsbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY2VsbFN0eWxlQ2xhc3ModmFsdWU6IChyb3c6IFRMaXN0SXRlbSwgY29sdW1uOiBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+LCByb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jZWxsU3R5bGVDbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlQ2VsbFN0eWxlcyh0aGlzLnJvd3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2VsbFN0eWxlQ2xhc3NlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdID0gW107XG4gIHB1YmxpYyBnZXQgY2VsbFN0eWxlQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2VsbFN0eWxlQ2xhc3NlcztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSwpIHtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U29ydEZpZWxkQW5kU29ydE9yZGVyKHRlbXBsYXRlOiBUZW1wbGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG9yZGVyQnlQcm9wZXJ0eSA9IHRlbXBsYXRlPy5wcm9wZXJ0aWVzPy5maW5kKHAgPT4gcD8ubmFtZSA9PT0gXCIkb3JkZXJieVwiKTtcblxuICAgIC8vIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBjb250YWluIGFuICRvcmRlcmJ5IHByb3BlcnR5LCB3ZSBkbyBub3Qgc2V0IHRoZSBzb3J0IGZpZWxkIGFuZCBzb3J0IG9yZGVyXG4gICAgaWYgKG9yZGVyQnlQcm9wZXJ0eSA9PT0gbnVsbCB8fCBvcmRlckJ5UHJvcGVydHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb3JkZXJCeVByb3BlcnR5ICE9PSAnb2JqZWN0JylcbiAgICAgIHJldHVybjtcblxuICAgIC8vIElmIHRoZSAkb3JkZXJieSBwcm9wZXJ0eSBpcyBwcmVzZW50IGFuZCB0aGUgdmFsdWUgaXMgbm90IGEgc3RyaW5nLCB3ZSBzZXQgdGhlIHNvcnQgZmllbGQgYW5kIHNvcnQgb3JkZXIgdG8gbnVsbFxuICAgIGNvbnN0IG9yZGVyQnkgPSBvcmRlckJ5UHJvcGVydHk/LnZhbHVlO1xuICAgIGlmIChvcmRlckJ5ID09PSBudWxsIHx8IG9yZGVyQnkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb3JkZXJCeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMubXVsdGlTb3J0TWV0YSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgJG9yZGVyYnkgcHJvcGVydHkgaXMgcHJlc2VudCBhbmQgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCB3ZSBzZXQgdGhlIHNvcnQgZmllbGQgYW5kIHNvcnQgb3JkZXJcbiAgICBjb25zdCBzb3J0TWV0YXMgPSBvcmRlckJ5XG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKG8gPT4gby50cmltKCkpXG4gICAgICAuZmlsdGVyKG8gPT4gbyAhPT0gXCJcIilcbiAgICAgIC5tYXAobyA9PiB7XG4gICAgICAgIGNvbnN0IFtmaWVsZCwgb3JkZXJdID0gby5zcGxpdChcIiBcIik7XG4gICAgICAgIGNvbnN0IG9yZGVyQXNOdW1iZXIgPSBvcmRlcj8udG9Mb3dlckNhc2UoKSA9PT0gXCJkZXNjXCIgPyAtMSA6IDE7XG4gICAgICAgIHJldHVybiB7IGZpZWxkOiBmaWVsZCwgb3JkZXI6IG9yZGVyQXNOdW1iZXIgfTtcbiAgICAgIH0pO1xuXG4gICAgLy8gV2Ugb25seSBzZXQgaXQgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAgLy8gT3RoZXJ3aXNlIHdlIHdvdWxkIGNyZWF0ZSBhbiBpbmZpbml0ZSBsb29wLlxuICAgIGlmICh0aGlzLm11bHRpU29ydE1ldGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5tdWx0aVNvcnRNZXRhID09PSBudWxsIHx8XG4gICAgICAhQXJyYXkuaXNBcnJheSh0aGlzLm11bHRpU29ydE1ldGEpIHx8XG4gICAgICB0aGlzLm11bHRpU29ydE1ldGEubGVuZ3RoID09PSAwIHx8XG4gICAgICB0aGlzLm11bHRpU29ydE1ldGEuZXZlcnkobSA9PiBtLmZpZWxkICE9PSBzb3J0TWV0YXNbMF0uZmllbGQgfHwgbS5vcmRlciAhPT0gc29ydE1ldGFzWzBdLm9yZGVyKSkge1xuICAgICAgICB0aGlzLm11bHRpU29ydE1ldGEgPSBzb3J0TWV0YXM7XG4gICAgICB9XG4gIH1cblxuICBwdWJsaWMgbXVsdGlTb3J0TWV0YT86IFNvcnRNZXRhW10gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGUgY2xhc3MgZm9yIHRoZSB0YWJsZS5cbiAgICogVGhlIGRlZmF1bHQgaXMgXCJcIi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdHlsZUNsYXNzOiBzdHJpbmcgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5saW5lIHN0eWxlIGZvciB0aGUgdGFibGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGFibGVTdHlsZT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWJsZSBpcyBzY3JvbGxhYmxlLlxuICAgKiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2Nyb2xsYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNjcm9sbGFibGUgdGFibGUuXG4gICAqIFRoZSBkZWZhdWx0IGlzIFwiZmxleFwiLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNjcm9sbEhlaWdodDogc3RyaW5nID0gXCJmbGV4XCI7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgZmlsdGVyIG9yIHNvcnQgcGFyYW1ldGVycyBoYXZlIGNoYW5nZWQuXG4gICAqIFN1YnNjcmliZSB0byB0aGlzIGV2ZW50IHRvIGxvYWQgdGhlIGl0ZW1zIGZyb20gdGhlIGJhY2tlbmQuXG4gICAqIFRoaXMgaXMgb25lIG9mIHRoZSBjb3JlIGZlYXR1cmVzIG9mIHRoZSB0YWJsZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25GaWx0ZXJPclNvcnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxPRGF0YVBhcmFtZXRlcnM+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHJvdyBoYXMgYmVlbiBzZWxlY3RlZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25Sb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFRMaXN0SXRlbT4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcm93IGhhcyBiZWVuIHVuc2VsZWN0ZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uUm93VW5zZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFRMaXN0SXRlbT4oKTtcblxuICAvKipcbiAgICogVGhlIG1vZGUgaG93IHJvd3MgY2FuIGJlIHNlbGVjdGVkLlxuICAgKiBUaGUgZGVmYXVsdCBpcyBgbnVsbGAgd2hpY2ggbWVhbnMgcm93cyBjYW5ub3QgYmUgc2VsZWN0ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VsZWN0aW9uTW9kZTogXCJzaW5nbGVcIiB8IFwibXVsdGlwbGVcIiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUgcm93cyBhcmUgaGlnaGxpZ2h0ZWQgd2hlbiB0aGUgbW91c2UgaG92ZXJzIG92ZXIgdGhlbS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHJvd3MuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHNlbGVjdGlvbigpOiBUTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5fc2VsZWN0aW9uKSA/IHRoaXMuX3NlbGVjdGlvbiA6IFt0aGlzLl9zZWxlY3Rpb25dO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VsZWN0aW9uKHZhbHVlOiBUTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMuX3NlbGVjdGlvbiA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBfc2VsZWN0aW9uOiBUTGlzdEl0ZW0gfCBUTGlzdEl0ZW1bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZC5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBuZXcgc2VsZWN0aW9uLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFRMaXN0SXRlbVtdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKFwiY29udGV4dE1lbnVcIilcbiAgY29udGV4dE1lbnU/OiBDb250ZXh0TWVudTtcblxuICBwcml2YXRlIF9jb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gIHB1YmxpYyBnZXQgY29udGV4dE1lbnVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dE1lbnVJdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAqIFNldCB0aGlzIHRvIHRydWUgd2hpbGUgbG9hZGluZyBuZXcgaXRlbXMgZnJvbSB0aGUgYmFja2VuZCB3aGVuIHJlYWN0aW5nIHRvIHRoZSBgb25GaWx0ZXJPclNvcnRDaGFuZ2VkYCBldmVudC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIF9jb2x1bW5zOiBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+W10gPSBbXTtcbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICBwcml2YXRlIF9yb3dzQmVmb3JlQ3VycmVudFBhZ2U6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBnZXQgcm93c0JlZm9yZUN1cnJlbnRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NCZWZvcmVDdXJyZW50UGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kYXRlRm9ybWF0ID0gbmV3IERhdGUoMzMzMywgMTAsIDIyKSAvLyBtb250aHMgc3RhcnQgYXQgMCBpbiBKU1xuICAgIC50b0xvY2FsZURhdGVTdHJpbmcoKVxuICAgIC5yZXBsYWNlKFwiMjJcIiwgXCJkZFwiKVxuICAgIC5yZXBsYWNlKFwiMTFcIiwgXCJNTVwiKVxuICAgIC5yZXBsYWNlKFwiMzMzM1wiLCBcInl5XCIpXG4gICAgLnJlcGxhY2UoXCIzM1wiLCBcInlcIik7XG5cbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFJlc3RXb3JsZFRhYmxlQ29tcG9uZW50Ll9kYXRlRm9ybWF0O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RpbWVGb3JtYXQgPSBuZXcgRGF0ZSgxLCAxLCAxLCAyMiwgMzMsIDQ0KVxuICAgIC50b0xvY2FsZVRpbWVTdHJpbmcoKVxuICAgIC5yZXBsYWNlKFwiMjJcIiwgXCJoaFwiKVxuICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJtbVwiKVxuICAgIC5yZXBsYWNlKFwiNDRcIiwgXCJzc1wiKTtcblxuICBwdWJsaWMgZ2V0IHRpbWVGb3JtYXQoKSB7XG4gICAgcmV0dXJuIFJlc3RXb3JsZFRhYmxlQ29tcG9uZW50Ll90aW1lRm9ybWF0O1xuICB9XG5cbiAgcHVibGljIGdldCBQcm9wZXJ0eVR5cGUoKTogdHlwZW9mIFByb3BlcnR5VHlwZSB7XG4gICAgcmV0dXJuIFByb3BlcnR5VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkKGV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpIHtcbiAgICB0aGlzLm11bHRpU29ydE1ldGEgPSBldmVudC5tdWx0aVNvcnRNZXRhO1xuICAgIHRoaXMuX3Jvd3NCZWZvcmVDdXJyZW50UGFnZSA9IGV2ZW50LmZpcnN0ID8/IDA7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IE9EYXRhU2VydmljZS5jcmVhdGVQYXJhbWV0ZXJzRnJvbVRhYmxlTG9hZEV2ZW50KGV2ZW50LCB0aGlzLnNlYXJjaFRlbXBsYXRlKTtcbiAgICB0aGlzLm9uRmlsdGVyT3JTb3J0Q2hhbmdlZC5lbWl0KHBhcmFtZXRlcnMpO1xuICB9XG5cbiAgcHVibGljIG9wZW5Db250ZXh0TWVudShldmVudDogTW91c2VFdmVudCwgcm93OiBUTGlzdEl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd1Jvd01lbnVPblJpZ2h0Q2xpY2sgfHwgdGhpcy5jb250ZXh0TWVudSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5fY29udGV4dE1lbnVJdGVtcyA9IHRoaXMucm93TWVudShyb3csIHRydWUpO1xuICAgIHRoaXMuY29udGV4dE1lbnUuc2hvdyhldmVudCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dTZWxlY3RJbnRlcm5hbChldmVudDogVGFibGVSb3dTZWxlY3RFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25Sb3dTZWxlY3QuZW1pdChldmVudC5kYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd1Vuc2VsZWN0SW50ZXJuYWwoZXZlbnQ6IFRhYmxlUm93VW5TZWxlY3RFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25Sb3dVbnNlbGVjdC5lbWl0KGV2ZW50LmRhdGEpO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlSW50ZXJuYWwoZXZlbnQ6IFRMaXN0SXRlbSB8IFRMaXN0SXRlbVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChBcnJheS5pc0FycmF5KGV2ZW50KSA/IGV2ZW50IDogW2V2ZW50XSk7XG4gIH1cblxuICBwdWJsaWMgdG9Db2x1bW5GaWx0ZXJUeXBlKHByb3BlcnR5VHlwZTogUHJvcGVydHlUeXBlKTogQ29sdW1uRmlsdGVyVHlwZSB7XG4gICAgc3dpdGNoIChwcm9wZXJ0eVR5cGUpIHtcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLk51bWJlcjpcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLlBlcmNlbnQ6XG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5DdXJyZW5jeTpcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLk1vbnRoOlxuICAgICAgICByZXR1cm4gQ29sdW1uRmlsdGVyVHlwZS5udW1lcmljO1xuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuQm9vbDpcbiAgICAgICAgcmV0dXJuIENvbHVtbkZpbHRlclR5cGUuYm9vbGVhbjtcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLkRhdGU6XG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5EYXRldGltZUxvY2FsOlxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuRGF0ZXRpbWVPZmZzZXQ6XG4gICAgICAgIHJldHVybiBDb2x1bW5GaWx0ZXJUeXBlLmRhdGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gQ29sdW1uRmlsdGVyVHlwZS50ZXh0O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b01hdGNoTW9kZShwcm9wZXJ0eVR5cGU6IFByb3BlcnR5VHlwZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gVGhlcmUgaXMgYSBidWcgaW4gUHJpbWVORyByZXR1cm5pbmcgQ09OVEFJTlMgZm9yIGJvb2xlYW4gY29sdW1uc1xuICAgIC8vIE9uY2UgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCwgd2UgY2FuIHJlbW92ZSB0aGlzIHdvcmthcm91bmRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcHJpbWVmYWNlcy9wcmltZW5nL2lzc3Vlcy8xNDIxMFxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09IFByb3BlcnR5VHlwZS5Cb29sKVxuICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5FUVVBTFM7XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHRvTWF4RnJhY3Rpb25EaWdpdHMocHJvcGVydHk6IFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAocHJvcGVydHkudHlwZSkge1xuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuTnVtYmVyOlxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuUGVyY2VudDpcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLkN1cnJlbmN5OlxuICAgICAgICByZXR1cm4gcHJvcGVydHkuc3RlcD8udG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0/Lmxlbmd0aCA/PyAyO1xuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuTW9udGg6XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2hvd0lucHV0RmllbGQoY29sdW1uOiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc0VkaXRhYmxlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgZWRpdFByb3BlcnR5ID0gdGhpcy5lZGl0UHJvcGVydGllc1tjb2x1bW4ubmFtZV07XG5cbiAgICByZXR1cm4gZWRpdFByb3BlcnR5ICE9PSB1bmRlZmluZWQgJiYgZWRpdFByb3BlcnR5LnR5cGUgIT09IFByb3BlcnR5VHlwZS5IaWRkZW4gJiYgIWVkaXRQcm9wZXJ0eS5yZWFkT25seTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybUFycmF5KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0VkaXRhYmxlIHx8ICF0aGlzLnJvd3MgfHwgIXRoaXMuZm9ybUFycmF5IHx8ICF0aGlzLmVkaXRUZW1wbGF0ZSlcbiAgICAgIHJldHVybjtcblxuICAgIHRoaXMuZm9ybUFycmF5LmNsZWFyKCk7XG5cbiAgICBjb25zdCBuZXdDb250cm9scyA9IHRoaXMucm93c1xuICAgICAgLm1hcChyID0+IHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMuZWRpdFRlbXBsYXRlISkgYXMgRm9ybUdyb3VwO1xuICAgICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShyKTtcbiAgICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcbiAgICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIG5ld0NvbnRyb2xzKVxuICAgICAgdGhpcy5mb3JtQXJyYXkucHVzaChjb250cm9sKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRWRpdFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRUZW1wbGF0ZSlcbiAgICAgIHJldHVybjtcblxuICAgIHRoaXMuX2VkaXRQcm9wZXJ0aWVzID0gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuZWRpdFRlbXBsYXRlLnByb3BlcnRpZXMubWFwKHAgPT4gW3AubmFtZSwgcF0pKTtcbiAgfVxufVxuIiwiPHAtdGFibGVcbiAgI3RhYmxlXG4gIFt2YWx1ZV09XCJyb3dzXCJcbiAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gIFtsYXp5XT1cInRydWVcIlxuICBbbGF6eUxvYWRPbkluaXRdPVwiZmFsc2VcIlxuICAob25MYXp5TG9hZCk9XCJsb2FkKCRldmVudClcIlxuICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcbiAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxuICBbcm93c109XCJyb3dzUGVyUGFnZVwiXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgW2xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gIFttdWx0aVNvcnRNZXRhXT1cIm11bHRpU29ydE1ldGFcIlxuICBbc3R5bGVDbGFzc109XCJzdHlsZUNsYXNzXCJcbiAgW3RhYmxlU3R5bGVdPVwidGFibGVTdHlsZVwiXG4gIFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGVcIlxuICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXG4gIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxuICAob25Sb3dTZWxlY3QpPVwib25Sb3dTZWxlY3RJbnRlcm5hbCgkZXZlbnQpXCJcbiAgKG9uUm93VW5zZWxlY3QpPVwib25Sb3dVbnNlbGVjdEludGVybmFsKCRldmVudClcIlxuICBbcm93SG92ZXJdPVwicm93SG92ZXJcIlxuICBbKHNlbGVjdGlvbildPVwiX3NlbGVjdGlvblwiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VJbnRlcm5hbCgkZXZlbnQpXCI+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxuICAgIDx0cj5cbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLm5hbWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWQtZmxleCBwLWpjLWJldHdlZW4gcC1haS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7e2NvbC5wcm9tcHR9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLm5hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW3R5cGVdPVwidG9Db2x1bW5GaWx0ZXJUeXBlKGNvbC50eXBlKVwiIFttYXhGcmFjdGlvbkRpZ2l0c109XCJ0b01heEZyYWN0aW9uRGlnaXRzKGNvbClcIiBbbWF0Y2hNb2RlXT1cInRvTWF0Y2hNb2RlKGNvbC50eXBlKVwiIFtmaWVsZF09XCJjb2wubmFtZVwiIGRpc3BsYXk9XCJtZW51XCI+PC9wLWNvbHVtbkZpbHRlcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggKm5nSWY9XCJzaG93TWVudUNvbHVtblwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgPHJ3LW1lbnUtYnV0dG9uIFtpdGVtc109XCJoZWFkZXJNZW51XCI+PC9ydy1tZW51LWJ1dHRvbj5cbiAgICAgICAgPC90aD5cbiAgICA8L3RyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWVudGl0eSBsZXQtY29sdW1ucz1cImNvbHVtbnNcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxuICAgIDx0ciAoY29udGV4dG1lbnUpPVwib3BlbkNvbnRleHRNZW51KCRldmVudCwgZW50aXR5KVwiIFtwU2VsZWN0YWJsZVJvd109XCJlbnRpdHlcIiBbcFNlbGVjdGFibGVSb3dEaXNhYmxlZF09XCJzZWxlY3Rpb25Nb2RlID09PSBudWxsXCIgW2NsYXNzTmFtZV09XCJyb3dTdHlsZUNsYXNzZXNbcm93SW5kZXggLSAodGFibGUuZmlyc3QgPz8gMCldXCI+XG4gICAgICA8dGQgW25nU3dpdGNoXT1cImNvbC50eXBlXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCIgW2NsYXNzTmFtZV09XCJjZWxsU3R5bGVDbGFzc2VzW3Jvd0luZGV4IC0gKHRhYmxlLmZpcnN0ID8/IDApXVtjb2wubmFtZV1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0lucHV0RmllbGQoY29sKTsgZWxzZSB0ZXh0RmllbGRcIiBbZm9ybUdyb3VwXT1cImZvcm1BcnJheSEuY29udHJvbHNbcm93SW5kZXggLSAodGFibGUuZmlyc3QgPz8gMCldXCIgPlxuICAgICAgICAgICAgPHJ3LWlucHV0IFthcGlOYW1lXT1cImFwaU5hbWUhXCIgW3Byb3BlcnR5XT1cImVkaXRQcm9wZXJ0aWVzW2NvbC5uYW1lXVwiPjwvcnctaW5wdXQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0RmllbGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGV4dFwiPlxuICAgICAgICAgICAgICAgIDxydy1hdmF0YXIgKm5nSWY9XCJjb2wubmFtZSA9PT0gJ2NyZWF0ZWRCeScgfHwgY29sLm5hbWUgPT09ICdsYXN0Q2hhbmdlZEJ5J1wiIFt1c2VyXT1cImVudGl0eVtjb2wubmFtZV1cIj48L3J3LWF2YXRhcj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC5uYW1lICE9PSAnY3JlYXRlZEJ5JyAmJiBjb2wubmFtZSAhPT0gJ2xhc3RDaGFuZ2VkQnknXCI+e3tlbnRpdHlbY29sLm5hbWVdfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuTnVtYmVyXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuUGVyY2VudFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkN1cnJlbmN5XCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQm9vbFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+PHAtdHJpU3RhdGVDaGVja2JveCBbKG5nTW9kZWwpXT1cImVudGl0eVtjb2wubmFtZV1cIiBbcmVhZG9ubHldPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9wLXRyaVN0YXRlQ2hlY2tib3g+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EYXRlXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wubmFtZV1cIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGltZVwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkR1cmF0aW9uXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wubmFtZV1cIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRGF0ZXRpbWVMb2NhbFwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OlByb3BlcnR5VHlwZS5EYXRlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkRhdGV0aW1lT2Zmc2V0XCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wubmFtZV1cIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6UHJvcGVydHlUeXBlLkRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQ29sbGVjdGlvblwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+PHAgKm5nRm9yPVwibGV0IGFycmF5RWxlbWVudCBvZiBlbnRpdHlbY29sLm5hbWVdXCI+e3thcnJheUVsZW1lbnQgfCBqc29ufX08L3A+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5PYmplY3RcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5uYW1lXSB8IGpzb259fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgW3BUb29sdGlwXT1cImVudGl0eVtjb2wubmFtZV1cIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJzaG93TWVudUNvbHVtblwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgPHJ3LW1lbnUtYnV0dG9uICpuZ0lmPVwic2hvd1Jvd01lbnVBc0NvbHVtblwiIFtpdGVtc109XCJyb3dNZW51c1tyb3dJbmRleCAtICh0YWJsZS5maXJzdCA/PyAwKV1cIj48L3J3LW1lbnUtYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPHAtY29udGV4dE1lbnUgI2NvbnRleHRNZW51IGFwcGVuZFRvPVwiYm9keVwiIFttb2RlbF09XCJjb250ZXh0TWVudUl0ZW1zXCI+PC9wLWNvbnRleHRNZW51PlxuPC9wLXRhYmxlPlxuIl19
|
|
522
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtdGFibGUvcmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtdGFibGUvcmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQXlCLFlBQVksRUFBZSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFzQixNQUFNLGFBQWEsQ0FBQztBQUVsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFN0QsT0FBTyxFQUFtQixnQkFBZ0IsRUFBYSxhQUFhLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFHeEcsSUFBSyxnQkFLSjtBQUxELFdBQUssZ0JBQWdCO0lBQ25CLGlDQUFhLENBQUE7SUFDYix1Q0FBbUIsQ0FBQTtJQUNuQix1Q0FBbUIsQ0FBQTtJQUNuQixpQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxJLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFLcEI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFXSCxNQUFNLE9BQU8sdUJBQXVCO0lBNk5mO0lBQ0E7SUE3Tm5COzs7T0FHRztJQUVJLE9BQU8sQ0FBVTtJQUVoQixVQUFVLENBQThFO0lB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QkssT0FBTztzQkFEakIsS0FBSztnQkF1Q0MsbUJBQW1CO3NCQUR6QixLQUFLO2dCQU9DLHVCQUF1QjtzQkFEN0IsS0FBSztnQkFlSyxhQUFhO3NCQUR2QixLQUFLO2dCQXdCSyxjQUFjO3NCQUR4QixLQUFLO2dCQVlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBbURDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBT0MsVUFBVTtzQkFEaEIsS0FBSztnQkFRQyxVQUFVO3NCQURoQixLQUFLO2dCQVFDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBU0MscUJBQXFCO3NCQUQzQixNQUFNO2dCQU9BLFdBQVc7c0JBRGpCLE1BQU07Z0JBT0EsYUFBYTtzQkFEbkIsTUFBTTtnQkFRQSxhQUFhO3NCQURuQixLQUFLO2dCQU9DLFFBQVE7c0JBRGQsS0FBSztnQkFPSyxTQUFTO3NCQURuQixLQUFLO2dCQWNOLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYTtnQkFhakIsU0FBUztzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlLCBQcm9wZXJ0eSwgUHJvcGVydHlUeXBlLCBTaW1wbGVWYWx1ZSwgVGVtcGxhdGUgfSBmcm9tICdAd2VydHp1aS9uZ3gtaGFsLWNsaWVudCc7XG5pbXBvcnQgeyBGaWx0ZXJNYXRjaE1vZGUsIE1lbnVJdGVtLCBTb3J0TWV0YSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IE9EYXRhUGFyYW1ldGVycyB9IGZyb20gJy4uLy4uL21vZGVscy9vLWRhdGEnO1xuaW1wb3J0IHsgT0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvby1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICdwcmltZW5nL2NvbnRleHRtZW51JztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUFycmF5LCBGb3JtQXJyYXlOYW1lLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUYWJsZUxhenlMb2FkRXZlbnQsIFRhYmxlUm93U2VsZWN0RXZlbnQsIFRhYmxlUm93VW5TZWxlY3RFdmVudCB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuXG5lbnVtIENvbHVtbkZpbHRlclR5cGUge1xuICB0ZXh0ID0gJ3RleHQnLFxuICBudW1lcmljID0gJ251bWVyaWMnLFxuICBib29sZWFuID0gJ2Jvb2xlYW4nLFxuICBkYXRlID0gJ2RhdGUnXG59XG5cbi8qKlxuICogRGlzcGxheXMgYSB0YWJsZSBiYXNlZCBvbiBhIHNlYXJjaC0sIGFuIGVkaXQtdGVtcGxhdGUgYW5kIGEgbGlzdCBvZiBpdGVtcy5cbiAqIFRoZSBzZWFyY2gtdGVtcGxhdGUgaXMgcmVxdWlyZWQgYW5kIHVzZWQgdG8gZGlzcGxheSB0aGUgdGFibGUgY29sdW1ucyBhbmQgdG8gZmlsdGVyIGFuZCBzb3J0IHRoZSBpdGVtcy5cbiAqIFRoZSBlZGl0LXRlbXBsYXRlIGlzIG9wdGlvbmFsIGFuZCB1c2VkIHRvIGVkaXQgdGhlIGl0ZW1zLiBGb3IgdGhlIGVkaXQgY2FwYWJpbGl0eSwgdGhlIHRhYmxlIG11c3QgYmUgcGFydCBvZiBhIHJlYWN0aXZlIGZvcm0uXG4gKiBUaGUgaXRlbXMgYXJlIGRpc3BsYXllZCBhcyB0YWJsZSByb3dzLlxuICogVGhlIHRhYmxlIHN1cHBvcnRzIGxhenkgbG9hZGluZywgcm93IHNlbGVjdGlvbiwgcm93IG1lbnVzLCBhbmQgY29udGV4dCBtZW51cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogPHJ3LXRhYmxlXG4gKiAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxuICogICBbc2VhcmNoVGVtcGxhdGVdPVwic2VhcmNoVGVtcGxhdGVcIlxuICogICBbZWRpdFRlbXBsYXRlXT1cImVkaXRUZW1wbGF0ZVwiXG4gKiAgIFtyb3dzXT1cInJvd3NcIlxuICogICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjUsIDUwXVwiXG4gKiAgIFtoZWFkZXJNZW51XT1cImhlYWRlck1lbnVcIlxuICogICBbcm93TWVudV09XCJyb3dNZW51XCJcbiAqICAgW3Jvd1N0eWxlQ2xhc3NdPVwicm93U3R5bGVDbGFzc1wiXG4gKiAgIFtjZWxsU3R5bGVDbGFzc109XCJjZWxsU3R5bGVDbGFzc1wiXG4gKiAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAqICAgW211bHRpU29ydE1ldGFdPVwibXVsdGlTb3J0TWV0YVwiXG4gKiAgIFtzdHlsZUNsYXNzXT1cInN0eWxlQ2xhc3NcIlxuICogICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCJcbiAqICAgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiXG4gKiAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAqICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gKiAgIFtyb3dIb3Zlcl09XCJyb3dIb3ZlclwiXG4gKiAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAqICAgW2NvbnRleHRNZW51SXRlbXNdPVwiY29udGV4dE1lbnVJdGVtc1wiXG4gKiAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAqICAgKG9uRmlsdGVyT3JTb3J0Q2hhbmdlZCk9XCJvbkZpbHRlck9yU29ydENoYW5nZWQoJGV2ZW50KVwiXG4gKiAgIChvblJvd1NlbGVjdCk9XCJvblJvd1NlbGVjdCgkZXZlbnQpXCJcbiAqICAgKG9uUm93VW5zZWxlY3QpPVwib25Sb3dVbnNlbGVjdCgkZXZlbnQpXCJcbiAqICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICogPC9ydy10YWJsZT5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3J3LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC10YWJsZS5jb21wb25lbnQuY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lcixcbiAgICBkZXBzOiBbW09wdGlvbmFsLCBGb3JtQXJyYXlOYW1lXV0sXG4gICAgdXNlRmFjdG9yeTogKGFycmF5TmFtZTogRm9ybUFycmF5TmFtZSkgPT4gYXJyYXlOYW1lLFxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRUYWJsZUNvbXBvbmVudDxUTGlzdEl0ZW0gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXBpLlxuICAgKiBGb3IgdGhlIGVkaXRpbmcgY2FwYWJpbGl0eSwgeW91IG11c3QgYWxzbyBzZXQgdGhlIGVkaXRUZW1wbGF0ZSBhbmQgdGhlIGZvcm1BcnJheS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcGlOYW1lPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2Zvcm1BcnJheT86IEZvcm1BcnJheTxGb3JtR3JvdXA8eyBbSyBpbiBrZXlvZiBUTGlzdEl0ZW1dOiBBYnN0cmFjdENvbnRyb2w8dW5rbm93bj4gfT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBmb3JtIGdyb3VwcyBmb3IgdGhlIGl0ZW1zLlxuICAgKiBCaW5kIHRoaXMgdG8gdGhlIGZvcm0gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgZm9ybSBncm91cHMgZm9yIHRoZSBpdGVtcy5cbiAgICogRWFjaCBlbnRyeSBpbiB0aGUgYXJyYXkgcmVwcmVzZW50cyBvbmUgcm93IGluIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2Ugb2YgdGhlIHRhYmxlLlxuICAgKiBGb3IgdGhlIGVkaXRpbmcgY2FwYWJpbGl0eSwgeW91IG11c3QgYWxzbyBzZXQgdGhlIGFwaU5hbWUgYW5kIHRoZSBlZGl0VGVtcGxhdGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZvcm1BcnJheSh2YWx1ZTogRm9ybUFycmF5PEZvcm1Hcm91cDx7IFtLIGluIGtleW9mIFRMaXN0SXRlbV06IEFic3RyYWN0Q29udHJvbDx1bmtub3duPiB9Pj4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9mb3JtQXJyYXkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9ybUFycmF5KCk6IEZvcm1BcnJheTxGb3JtR3JvdXA8eyBbSyBpbiBrZXlvZiBUTGlzdEl0ZW1dOiBBYnN0cmFjdENvbnRyb2w8dW5rbm93bj4gfT4+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUFycmF5ID8/IHRoaXMuX2NvbnRyb2xDb250YWluZXI/LmNvbnRyb2wgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDx7IFtLIGluIGtleW9mIFRMaXN0SXRlbV06IEFic3RyYWN0Q29udHJvbDx1bmtub3duPiB9Pj4gfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF9zZWFyY2hUZW1wbGF0ZTogVGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoeyBwcm9wZXJ0aWVzOiBbXSB9KTtcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSB0YWJsZSBjb2x1bW5zIGFuZCB0byBmaWx0ZXIgYW5kIHNvcnQgdGhlIGl0ZW1zLlxuICAgKiBCaW5kIHRoaXMgdG8gdGhlIHRlbXBsYXRlIHRoYXQgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSB0YWJsZSBjb2x1bW5zIGFuZCB0byBmaWx0ZXIgYW5kIHNvcnQgdGhlIGl0ZW1zLlxuICAgKiBOb3JtYWxseSB0aGlzIGlzIHJldHVybmVkIGZyb20gdGhlIGJhY2tlbmQgYXMgcGFydCBvZiB0aGUgaGFsLWZvcm1zIHJlc291cmNlIGZyb20gYSBsaXN0IGVuZHBvaW50LlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCBzZWFyY2hUZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGUpIHtcbiAgICB0aGlzLl9zZWFyY2hUZW1wbGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX2NvbHVtbnMgPSB2YWx1ZT8ucHJvcGVydGllcy5maWx0ZXIocCA9PiBwLnR5cGUgIT09IFByb3BlcnR5VHlwZS5IaWRkZW4pID8/IFtdO1xuICAgIHRoaXMuc2V0U29ydEZpZWxkQW5kU29ydE9yZGVyKHZhbHVlKVxuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2hUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVGVtcGxhdGU7XG4gIH1cblxuICBwcml2YXRlIF9lZGl0VGVtcGxhdGU/OiBUZW1wbGF0ZTtcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgaXMgdXNlZCB0byBlZGl0IHRoZSBpdGVtcy5cbiAgICogQmluZCB0aGlzIHRvIHRoZSB0ZW1wbGF0ZSB0aGF0IGlzIHVzZWQgdG8gZWRpdCB0aGUgaXRlbXMuXG4gICAqIE5vcm1hbGx5IHRoaXMgaXMgcmV0dXJuZWQgZnJvbSB0aGUgYmFja2VuZCBhcyBwYXJ0IG9mIHRoZSBoYWwtZm9ybXMgcmVzb3VyY2UgZnJvbSBhIGxpc3QgZW5kcG9pbnQuXG4gICAqIEZvciB0aGUgZWRpdGluZyBjYXBhYmlsaXR5LCB5b3UgbXVzdCBhbHNvIHNldCB0aGUgYXBpTmFtZSBhbmQgdGhlIGZvcm1BcnJheS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRpdFRlbXBsYXRlKHZhbHVlOiBUZW1wbGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2VkaXRUZW1wbGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlRWRpdFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1BcnJheSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBlZGl0VGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRUZW1wbGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2VkaXRQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xuICBwdWJsaWMgZ2V0IGVkaXRQcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9lZGl0UHJvcGVydGllcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFZGl0YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0VGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmZvcm1BcnJheSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXBpTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jvd3M6IFRMaXN0SXRlbVtdID0gW107XG4gIHB1YmxpYyBnZXQgcm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm93cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaXRlbXMgdGhhdCBhcmUgZGlzcGxheWVkIGFzIHRhYmxlIHJvd3MuXG4gICAqIEJpbmQgdGhpcyB0byB0aGUgaXRlbXMgdGhhdCBhcmUgZGlzcGxheWVkIGFzIHRhYmxlIHJvd3MuXG4gICAqIE5vcm1hbGx5IHRoaXMgaXMgcmV0dXJuZWQgZnJvbSB0aGUgYmFja2VuZCBhcyBwYXJ0IG9mIHRoZSBoYWwtZm9ybXMgcmVzb3VyY2UgZnJvbSBhIGxpc3QgZW5kcG9pbnQuXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IHJvd3ModmFsdWU6IFRMaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5fcm93cyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlQ2FsY3VsYXRlZEZ1bmN0aW9uVmFsdWVzKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1BcnJheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBudW1iZXIgb2Ygcm93cyBwZXIgcGFnZS5cbiAgICogVGhlIGRlZmF1bHQgaXMgWzEwLCAyNSwgNTBdLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJvd3NQZXJQYWdlT3B0aW9ucyA9IFsxMCwgMjUsIDUwXTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiByb3dzIHBlciBwYWdlLlxuICAgKiBUaGUgZGVmYXVsdCBpcyAxMC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3dzUGVyUGFnZSA9IDEwO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBtZW51IHRoYXQgaXMgZGlzcGxheWVkIGF0IHRoZSB0b3AgcmlnaHQgb2YgdGhlIHRhYmxlLlxuICAgKiBAc2VlIFJlc3RXb3JsZE1lbnVCdXR0b25Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWFkZXJNZW51OiBNZW51SXRlbVtdID0gW107XG5cbiAgcHJpdmF0ZSBfcm93TWVudTogKHJvdzogVExpc3RJdGVtLCBvcGVuZWRCeVJpZ2h0Q2xpY2s6IGJvb2xlYW4pID0+IE1lbnVJdGVtW10gPSAoKSA9PiBbXTtcbiAgcHVibGljIGdldCByb3dNZW51KCk6IChyb3c6IFRMaXN0SXRlbSwgb3BlbmVkQnlSaWdodENsaWNrOiBib29sZWFuKSA9PiBNZW51SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcm93TWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbWVudSBmb3IgYSByb3cuXG4gICAqIEJhc2VkIG9uIHRoZSBvcGVuZWRCeVJpZ2h0Q2xpY2sgcGFyYW1ldGVyLCB0aGUgZnVuY3Rpb24gY2FuIHJldHVybiBkaWZmZXJlbnQgbWVudXMuXG4gICAqIFRoZSBtZW51IHdoZW4gaXQgaGFzIG5vdCBiZWVuIG9wZW5lZCBieSBhIHJpZ2h0IGNsaWNrIGlzIGRpc3BsYXllZCBpbiBhbiBleHRyYSBjb2x1bW4gdG8gdGhlIHJpZ2h0IG9mIHRoZSB0YWJsZSBpZiBgc2hvd1Jvd01lbnVBc0NvbHVtbmAgaXMgYHRydWVgLlxuICAgKiBUaGUgbWVudSB3aGVuIGl0IGhhcyBiZWVuIG9wZW5lZCBieSBhIHJpZ2h0IGNsaWNrIGlzIGRpc3BsYXllZCBhcyBhIGNvbnRleHQgbWVudSBpZiBgc2hvd1Jvd01lbnVPblJpZ2h0Q2xpY2tgIGlzIGB0cnVlYC5cbiAgICogQHBhcmFtIHJvdyBUaGUgcm93IGZvciB3aGljaCB0byByZXR1cm4gdGhlIG1lbnUuXG4gICAqIEBwYXJhbSBvcGVuZWRCeVJpZ2h0Q2xpY2sgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lbnUgd2FzIG9wZW5lZCBieSBhIHJpZ2h0IGNsaWNrLlxuICAgKiBAcmV0dXJucyBUaGUgbWVudSBmb3IgdGhlIHJvdy5cbiAgICogQHNlZSBzaG93Um93TWVudUFzQ29sdW1uXG4gICAqIEBzZWUgc2hvd1Jvd01lbnVPblJpZ2h0Q2xpY2tcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcm93TWVudSh2YWx1ZTogKHJvdzogVExpc3RJdGVtLCBvcGVuZWRCeVJpZ2h0Q2xpY2s6IGJvb2xlYW4pID0+IE1lbnVJdGVtW10pIHtcbiAgICB0aGlzLl9yb3dNZW51ID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVSb3dNZW51cyh0aGlzLnJvd3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcm93TWVudXM6IE1lbnVJdGVtW11bXSA9IFtdO1xuXG4gIHByaXZhdGUgdXBkYXRlQ2FsY3VsYXRlZEZ1bmN0aW9uVmFsdWVzKHZhbHVlOiBUTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMudXBkYXRlUm93TWVudXModmFsdWUpO1xuICAgIHRoaXMudXBkYXRlUm93U3R5bGVzKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUNlbGxTdHlsZXModmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDZWxsU3R5bGVzKHZhbHVlOiBUTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMuX2NlbGxTdHlsZUNsYXNzZXMgPSB2YWx1ZS5tYXAoKHIsIHJpKSA9PiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5jb2x1bW5zLm1hcCgoYywgY2kpID0+IFtjLm5hbWUsIHRoaXMuY2VsbFN0eWxlQ2xhc3MociwgYywgcmksIGNpKV0pKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJvd1N0eWxlcyh2YWx1ZTogVExpc3RJdGVtW10pIHtcbiAgICB0aGlzLl9yb3dTdHlsZUNsYXNzZXMgPSB2YWx1ZS5tYXAoKHIsIGkpID0+IHRoaXMucm93U3R5bGVDbGFzcyhyLCBpKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJvd01lbnVzKHZhbHVlOiBUTGlzdEl0ZW1bXSkge1xuICAgIGlmICh0aGlzLnNob3dSb3dNZW51QXNDb2x1bW4pXG4gICAgICB0aGlzLl9yb3dNZW51cyA9IHZhbHVlLm1hcChyID0+IHRoaXMucm93TWVudShyLCBmYWxzZSkpO1xuICB9XG5cbiAgcHVibGljIGdldCByb3dNZW51cygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm93TWVudXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3dNZW51Q29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmhlYWRlck1lbnUubGVuZ3RoID4gMCB8fCAodGhpcy5zaG93Um93TWVudUFzQ29sdW1uICYmIHRoaXMucm93TWVudXMuc29tZShtID0+IG0ubGVuZ3RoID4gMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSByb3cgbWVudSBpcyBkaXNwbGF5ZWQgYXMgYSBjb2x1bW4gdG8gdGhlIHJpZ2h0IG9mIHRoZSB0YWJsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Um93TWVudUFzQ29sdW1uID0gdHJ1ZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvdyBtZW51IGlzIGRpc3BsYXllZCBhcyBhIGNvbnRleHQgbWVudSB3aGVuIHRoZSB1c2VyIHJpZ2h0IGNsaWNrcyBvbiBhIHJvdy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Um93TWVudU9uUmlnaHRDbGljayA9IHRydWU7XG5cbiAgcHJpdmF0ZSBfcm93U3R5bGVDbGFzczogKHJvdzogVExpc3RJdGVtLCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgPSAoKSA9PiBcIlwiO1xuICBwdWJsaWMgZ2V0IHJvd1N0eWxlQ2xhc3MoKTogKHJvdzogVExpc3RJdGVtLCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yb3dTdHlsZUNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzdHlsZSBjbGFzcyBmb3IgYSByb3cuXG4gICAqIEBwYXJhbSByb3cgVGhlIHJvdyBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBzdHlsZSBjbGFzcy5cbiAgICogQHBhcmFtIHJvd0luZGV4IFRoZSBpbmRleCBvZiB0aGUgcm93IG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UuXG4gICAqIEByZXR1cm5zIFRoZSBzdHlsZSBjbGFzcyBmb3IgdGhlIHJvdy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcm93U3R5bGVDbGFzcyh2YWx1ZTogKHJvdzogVExpc3RJdGVtLCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yb3dTdHlsZUNsYXNzID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVSb3dTdHlsZXModGhpcy5yb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jvd1N0eWxlQ2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGdldCByb3dTdHlsZUNsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd1N0eWxlQ2xhc3NlcztcbiAgfVxuXG4gIHByaXZhdGUgX2NlbGxTdHlsZUNsYXNzOiAocm93OiBUTGlzdEl0ZW0sIGNvbHVtbjogUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPiwgcm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nID0gKCkgPT4gXCJcIjtcbiAgcHVibGljIGdldCBjZWxsU3R5bGVDbGFzcygpOiAocm93OiBUTGlzdEl0ZW0sIGNvbHVtbjogUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPiwgcm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2VsbFN0eWxlQ2xhc3M7XG4gIH1cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzdHlsZSBjbGFzcyBmb3IgYSBjZWxsLlxuICAgKiBAcGFyYW0gcm93IFRoZSByb3cgZm9yIHdoaWNoIHRvIHJldHVybiB0aGUgc3R5bGUgY2xhc3MuXG4gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBzdHlsZSBjbGFzcy5cbiAgICogQHBhcmFtIHJvd0luZGV4IFRoZSBpbmRleCBvZiB0aGUgcm93IG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UuXG4gICAqIEBwYXJhbSBjb2x1bW5JbmRleCBUaGUgaW5kZXggb2YgdGhlIGNvbHVtbi5cbiAgICogQHJldHVybnMgVGhlIHN0eWxlIGNsYXNzIGZvciB0aGUgY2VsbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY2VsbFN0eWxlQ2xhc3ModmFsdWU6IChyb3c6IFRMaXN0SXRlbSwgY29sdW1uOiBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+LCByb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jZWxsU3R5bGVDbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlQ2VsbFN0eWxlcyh0aGlzLnJvd3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2VsbFN0eWxlQ2xhc3NlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdID0gW107XG4gIHB1YmxpYyBnZXQgY2VsbFN0eWxlQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2VsbFN0eWxlQ2xhc3NlcztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSwpIHtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U29ydEZpZWxkQW5kU29ydE9yZGVyKHRlbXBsYXRlOiBUZW1wbGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG9yZGVyQnlQcm9wZXJ0eSA9IHRlbXBsYXRlPy5wcm9wZXJ0aWVzPy5maW5kKHAgPT4gcD8ubmFtZSA9PT0gXCIkb3JkZXJieVwiKTtcblxuICAgIC8vIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBjb250YWluIGFuICRvcmRlcmJ5IHByb3BlcnR5LCB3ZSBkbyBub3Qgc2V0IHRoZSBzb3J0IGZpZWxkIGFuZCBzb3J0IG9yZGVyXG4gICAgaWYgKG9yZGVyQnlQcm9wZXJ0eSA9PT0gbnVsbCB8fCBvcmRlckJ5UHJvcGVydHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb3JkZXJCeVByb3BlcnR5ICE9PSAnb2JqZWN0JylcbiAgICAgIHJldHVybjtcblxuICAgIC8vIElmIHRoZSAkb3JkZXJieSBwcm9wZXJ0eSBpcyBwcmVzZW50IGFuZCB0aGUgdmFsdWUgaXMgbm90IGEgc3RyaW5nLCB3ZSBzZXQgdGhlIHNvcnQgZmllbGQgYW5kIHNvcnQgb3JkZXIgdG8gbnVsbFxuICAgIGNvbnN0IG9yZGVyQnkgPSBvcmRlckJ5UHJvcGVydHk/LnZhbHVlO1xuICAgIGlmIChvcmRlckJ5ID09PSBudWxsIHx8IG9yZGVyQnkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb3JkZXJCeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMubXVsdGlTb3J0TWV0YSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgJG9yZGVyYnkgcHJvcGVydHkgaXMgcHJlc2VudCBhbmQgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCB3ZSBzZXQgdGhlIHNvcnQgZmllbGQgYW5kIHNvcnQgb3JkZXJcbiAgICBjb25zdCBzb3J0TWV0YXMgPSBvcmRlckJ5XG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKG8gPT4gby50cmltKCkpXG4gICAgICAuZmlsdGVyKG8gPT4gbyAhPT0gXCJcIilcbiAgICAgIC5tYXAobyA9PiB7XG4gICAgICAgIGNvbnN0IFtmaWVsZCwgb3JkZXJdID0gby5zcGxpdChcIiBcIik7XG4gICAgICAgIGNvbnN0IG9yZGVyQXNOdW1iZXIgPSBvcmRlcj8udG9Mb3dlckNhc2UoKSA9PT0gXCJkZXNjXCIgPyAtMSA6IDE7XG4gICAgICAgIHJldHVybiB7IGZpZWxkOiBmaWVsZCwgb3JkZXI6IG9yZGVyQXNOdW1iZXIgfTtcbiAgICAgIH0pO1xuXG4gICAgLy8gV2Ugb25seSBzZXQgaXQgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAgLy8gT3RoZXJ3aXNlIHdlIHdvdWxkIGNyZWF0ZSBhbiBpbmZpbml0ZSBsb29wLlxuICAgIGlmICh0aGlzLm11bHRpU29ydE1ldGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5tdWx0aVNvcnRNZXRhID09PSBudWxsIHx8XG4gICAgICAhQXJyYXkuaXNBcnJheSh0aGlzLm11bHRpU29ydE1ldGEpIHx8XG4gICAgICB0aGlzLm11bHRpU29ydE1ldGEubGVuZ3RoID09PSAwIHx8XG4gICAgICB0aGlzLm11bHRpU29ydE1ldGEuZXZlcnkobSA9PiBtLmZpZWxkICE9PSBzb3J0TWV0YXNbMF0uZmllbGQgfHwgbS5vcmRlciAhPT0gc29ydE1ldGFzWzBdLm9yZGVyKSkge1xuICAgICAgICB0aGlzLm11bHRpU29ydE1ldGEgPSBzb3J0TWV0YXM7XG4gICAgICB9XG4gIH1cblxuICBwdWJsaWMgbXVsdGlTb3J0TWV0YT86IFNvcnRNZXRhW10gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGUgY2xhc3MgZm9yIHRoZSB0YWJsZS5cbiAgICogVGhlIGRlZmF1bHQgaXMgXCJcIi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdHlsZUNsYXNzOiBzdHJpbmcgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5saW5lIHN0eWxlIGZvciB0aGUgdGFibGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGFibGVTdHlsZT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWJsZSBpcyBzY3JvbGxhYmxlLlxuICAgKiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2Nyb2xsYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNjcm9sbGFibGUgdGFibGUuXG4gICAqIFRoZSBkZWZhdWx0IGlzIFwiZmxleFwiLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNjcm9sbEhlaWdodDogc3RyaW5nID0gXCJmbGV4XCI7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgZmlsdGVyIG9yIHNvcnQgcGFyYW1ldGVycyBoYXZlIGNoYW5nZWQuXG4gICAqIFN1YnNjcmliZSB0byB0aGlzIGV2ZW50IHRvIGxvYWQgdGhlIGl0ZW1zIGZyb20gdGhlIGJhY2tlbmQuXG4gICAqIFRoaXMgaXMgb25lIG9mIHRoZSBjb3JlIGZlYXR1cmVzIG9mIHRoZSB0YWJsZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25GaWx0ZXJPclNvcnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxPRGF0YVBhcmFtZXRlcnM+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHJvdyBoYXMgYmVlbiBzZWxlY3RlZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25Sb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFRMaXN0SXRlbT4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcm93IGhhcyBiZWVuIHVuc2VsZWN0ZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uUm93VW5zZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFRMaXN0SXRlbT4oKTtcblxuICAvKipcbiAgICogVGhlIG1vZGUgaG93IHJvd3MgY2FuIGJlIHNlbGVjdGVkLlxuICAgKiBUaGUgZGVmYXVsdCBpcyBgbnVsbGAgd2hpY2ggbWVhbnMgcm93cyBjYW5ub3QgYmUgc2VsZWN0ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VsZWN0aW9uTW9kZTogXCJzaW5nbGVcIiB8IFwibXVsdGlwbGVcIiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUgcm93cyBhcmUgaGlnaGxpZ2h0ZWQgd2hlbiB0aGUgbW91c2UgaG92ZXJzIG92ZXIgdGhlbS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHJvd3MuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHNlbGVjdGlvbigpOiBUTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5fc2VsZWN0aW9uKSA/IHRoaXMuX3NlbGVjdGlvbiA6IFt0aGlzLl9zZWxlY3Rpb25dO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VsZWN0aW9uKHZhbHVlOiBUTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMuX3NlbGVjdGlvbiA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBfc2VsZWN0aW9uOiBUTGlzdEl0ZW0gfCBUTGlzdEl0ZW1bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZC5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBuZXcgc2VsZWN0aW9uLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFRMaXN0SXRlbVtdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKFwiY29udGV4dE1lbnVcIilcbiAgY29udGV4dE1lbnU/OiBDb250ZXh0TWVudTtcblxuICBwcml2YXRlIF9jb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gIHB1YmxpYyBnZXQgY29udGV4dE1lbnVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dE1lbnVJdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAqIFNldCB0aGlzIHRvIHRydWUgd2hpbGUgbG9hZGluZyBuZXcgaXRlbXMgZnJvbSB0aGUgYmFja2VuZCB3aGVuIHJlYWN0aW5nIHRvIHRoZSBgb25GaWx0ZXJPclNvcnRDaGFuZ2VkYCBldmVudC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIF9jb2x1bW5zOiBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+W10gPSBbXTtcbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICBwcml2YXRlIF9yb3dzQmVmb3JlQ3VycmVudFBhZ2U6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBnZXQgcm93c0JlZm9yZUN1cnJlbnRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NCZWZvcmVDdXJyZW50UGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kYXRlRm9ybWF0ID0gbmV3IERhdGUoMzMzMywgMTAsIDIyKSAvLyBtb250aHMgc3RhcnQgYXQgMCBpbiBKU1xuICAgIC50b0xvY2FsZURhdGVTdHJpbmcoKVxuICAgIC5yZXBsYWNlKFwiMjJcIiwgXCJkZFwiKVxuICAgIC5yZXBsYWNlKFwiMTFcIiwgXCJNTVwiKVxuICAgIC5yZXBsYWNlKFwiMzMzM1wiLCBcInl5XCIpXG4gICAgLnJlcGxhY2UoXCIzM1wiLCBcInlcIik7XG5cbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFJlc3RXb3JsZFRhYmxlQ29tcG9uZW50Ll9kYXRlRm9ybWF0O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RpbWVGb3JtYXQgPSBuZXcgRGF0ZSgxLCAxLCAxLCAyMiwgMzMsIDQ0KVxuICAgIC50b0xvY2FsZVRpbWVTdHJpbmcoKVxuICAgIC5yZXBsYWNlKFwiMjJcIiwgXCJoaFwiKVxuICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJtbVwiKVxuICAgIC5yZXBsYWNlKFwiNDRcIiwgXCJzc1wiKTtcblxuICBwdWJsaWMgZ2V0IHRpbWVGb3JtYXQoKSB7XG4gICAgcmV0dXJuIFJlc3RXb3JsZFRhYmxlQ29tcG9uZW50Ll90aW1lRm9ybWF0O1xuICB9XG5cbiAgcHVibGljIGdldCBQcm9wZXJ0eVR5cGUoKTogdHlwZW9mIFByb3BlcnR5VHlwZSB7XG4gICAgcmV0dXJuIFByb3BlcnR5VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkKGV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpIHtcbiAgICB0aGlzLm11bHRpU29ydE1ldGEgPSBldmVudC5tdWx0aVNvcnRNZXRhO1xuICAgIHRoaXMuX3Jvd3NCZWZvcmVDdXJyZW50UGFnZSA9IGV2ZW50LmZpcnN0ID8/IDA7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IE9EYXRhU2VydmljZS5jcmVhdGVQYXJhbWV0ZXJzRnJvbVRhYmxlTG9hZEV2ZW50KGV2ZW50LCB0aGlzLnNlYXJjaFRlbXBsYXRlKTtcbiAgICB0aGlzLm9uRmlsdGVyT3JTb3J0Q2hhbmdlZC5lbWl0KHBhcmFtZXRlcnMpO1xuICB9XG5cbiAgcHVibGljIG9wZW5Db250ZXh0TWVudShldmVudDogTW91c2VFdmVudCwgcm93OiBUTGlzdEl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd1Jvd01lbnVPblJpZ2h0Q2xpY2sgfHwgdGhpcy5jb250ZXh0TWVudSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5fY29udGV4dE1lbnVJdGVtcyA9IHRoaXMucm93TWVudShyb3csIHRydWUpO1xuICAgIHRoaXMuY29udGV4dE1lbnUuc2hvdyhldmVudCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dTZWxlY3RJbnRlcm5hbChldmVudDogVGFibGVSb3dTZWxlY3RFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25Sb3dTZWxlY3QuZW1pdChldmVudC5kYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd1Vuc2VsZWN0SW50ZXJuYWwoZXZlbnQ6IFRhYmxlUm93VW5TZWxlY3RFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25Sb3dVbnNlbGVjdC5lbWl0KGV2ZW50LmRhdGEpO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlSW50ZXJuYWwoZXZlbnQ6IFRMaXN0SXRlbSB8IFRMaXN0SXRlbVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChBcnJheS5pc0FycmF5KGV2ZW50KSA/IGV2ZW50IDogW2V2ZW50XSk7XG4gIH1cblxuICBwdWJsaWMgdG9Db2x1bW5GaWx0ZXJUeXBlKHByb3BlcnR5VHlwZTogUHJvcGVydHlUeXBlKTogQ29sdW1uRmlsdGVyVHlwZSB7XG4gICAgc3dpdGNoIChwcm9wZXJ0eVR5cGUpIHtcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLk51bWJlcjpcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLlBlcmNlbnQ6XG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5DdXJyZW5jeTpcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLk1vbnRoOlxuICAgICAgICByZXR1cm4gQ29sdW1uRmlsdGVyVHlwZS5udW1lcmljO1xuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuQm9vbDpcbiAgICAgICAgcmV0dXJuIENvbHVtbkZpbHRlclR5cGUuYm9vbGVhbjtcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLkRhdGU6XG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5EYXRldGltZUxvY2FsOlxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuRGF0ZXRpbWVPZmZzZXQ6XG4gICAgICAgIHJldHVybiBDb2x1bW5GaWx0ZXJUeXBlLmRhdGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gQ29sdW1uRmlsdGVyVHlwZS50ZXh0O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b01hdGNoTW9kZShwcm9wZXJ0eVR5cGU6IFByb3BlcnR5VHlwZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gVGhlcmUgaXMgYSBidWcgaW4gUHJpbWVORyByZXR1cm5pbmcgQ09OVEFJTlMgZm9yIGJvb2xlYW4gY29sdW1uc1xuICAgIC8vIE9uY2UgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCwgd2UgY2FuIHJlbW92ZSB0aGlzIHdvcmthcm91bmRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcHJpbWVmYWNlcy9wcmltZW5nL2lzc3Vlcy8xNDIxMFxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09IFByb3BlcnR5VHlwZS5Cb29sKVxuICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5FUVVBTFM7XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHRvTWF4RnJhY3Rpb25EaWdpdHMocHJvcGVydHk6IFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAocHJvcGVydHkudHlwZSkge1xuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuTnVtYmVyOlxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuUGVyY2VudDpcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLkN1cnJlbmN5OlxuICAgICAgICByZXR1cm4gcHJvcGVydHkuc3RlcD8udG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0/Lmxlbmd0aCA/PyAyO1xuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuTW9udGg6XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2hvd0lucHV0RmllbGQoY29sdW1uOiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc0VkaXRhYmxlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgZWRpdFByb3BlcnR5ID0gdGhpcy5lZGl0UHJvcGVydGllc1tjb2x1bW4ubmFtZV07XG5cbiAgICByZXR1cm4gZWRpdFByb3BlcnR5ICE9PSB1bmRlZmluZWQgJiYgZWRpdFByb3BlcnR5LnR5cGUgIT09IFByb3BlcnR5VHlwZS5IaWRkZW4gJiYgIWVkaXRQcm9wZXJ0eS5yZWFkT25seTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybUFycmF5KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0VkaXRhYmxlIHx8ICF0aGlzLnJvd3MgfHwgIXRoaXMuZm9ybUFycmF5IHx8ICF0aGlzLmVkaXRUZW1wbGF0ZSlcbiAgICAgIHJldHVybjtcblxuICAgIHRoaXMuZm9ybUFycmF5LmNsZWFyKCk7XG5cbiAgICBjb25zdCBuZXdDb250cm9scyA9IHRoaXMucm93c1xuICAgICAgLm1hcChyID0+IHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMuZWRpdFRlbXBsYXRlISkgYXMgRm9ybUdyb3VwO1xuICAgICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShyKTtcbiAgICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcbiAgICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIG5ld0NvbnRyb2xzKVxuICAgICAgdGhpcy5mb3JtQXJyYXkucHVzaChjb250cm9sKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRWRpdFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRUZW1wbGF0ZSlcbiAgICAgIHJldHVybjtcblxuICAgIHRoaXMuX2VkaXRQcm9wZXJ0aWVzID0gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuZWRpdFRlbXBsYXRlLnByb3BlcnRpZXMubWFwKHAgPT4gW3AubmFtZSwgcF0pKTtcbiAgfVxufVxuIiwiPHAtdGFibGVcbiAgI3RhYmxlXG4gIFt2YWx1ZV09XCJyb3dzXCJcbiAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gIFtsYXp5XT1cInRydWVcIlxuICBbbGF6eUxvYWRPbkluaXRdPVwiZmFsc2VcIlxuICAob25MYXp5TG9hZCk9XCJsb2FkKCRldmVudClcIlxuICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcbiAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxuICBbcm93c109XCJyb3dzUGVyUGFnZVwiXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgW2xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gIFttdWx0aVNvcnRNZXRhXT1cIm11bHRpU29ydE1ldGFcIlxuICBbc3R5bGVDbGFzc109XCJzdHlsZUNsYXNzXCJcbiAgW3RhYmxlU3R5bGVdPVwidGFibGVTdHlsZVwiXG4gIFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGVcIlxuICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXG4gIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxuICAob25Sb3dTZWxlY3QpPVwib25Sb3dTZWxlY3RJbnRlcm5hbCgkZXZlbnQpXCJcbiAgKG9uUm93VW5zZWxlY3QpPVwib25Sb3dVbnNlbGVjdEludGVybmFsKCRldmVudClcIlxuICBbcm93SG92ZXJdPVwicm93SG92ZXJcIlxuICBbKHNlbGVjdGlvbildPVwiX3NlbGVjdGlvblwiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VJbnRlcm5hbCgkZXZlbnQpXCI+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxuICAgIDx0cj5cbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLm5hbWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWQtZmxleCBwLWpjLWJldHdlZW4gcC1haS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7e2NvbC5wcm9tcHR9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLm5hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW3R5cGVdPVwidG9Db2x1bW5GaWx0ZXJUeXBlKGNvbC50eXBlKVwiIFttYXhGcmFjdGlvbkRpZ2l0c109XCJ0b01heEZyYWN0aW9uRGlnaXRzKGNvbClcIiBbbWF0Y2hNb2RlXT1cInRvTWF0Y2hNb2RlKGNvbC50eXBlKVwiIFtmaWVsZF09XCJjb2wubmFtZVwiIGRpc3BsYXk9XCJtZW51XCI+PC9wLWNvbHVtbkZpbHRlcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggKm5nSWY9XCJzaG93TWVudUNvbHVtblwiPlxuICAgICAgICAgIDxydy1tZW51LWJ1dHRvbiBbaXRlbXNdPVwiaGVhZGVyTWVudVwiPjwvcnctbWVudS1idXR0b24+XG4gICAgICAgIDwvdGg+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1lbnRpdHkgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICA8dHIgKGNvbnRleHRtZW51KT1cIm9wZW5Db250ZXh0TWVudSgkZXZlbnQsIGVudGl0eSlcIiBbcFNlbGVjdGFibGVSb3ddPVwiZW50aXR5XCIgW3BTZWxlY3RhYmxlUm93RGlzYWJsZWRdPVwic2VsZWN0aW9uTW9kZSA9PT0gbnVsbFwiIFtjbGFzc05hbWVdPVwicm93U3R5bGVDbGFzc2VzW3Jvd0luZGV4IC0gKHRhYmxlLmZpcnN0ID8/IDApXVwiPlxuICAgICAgPHRkIFtuZ1N3aXRjaF09XCJjb2wudHlwZVwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIFtjbGFzc05hbWVdPVwiY2VsbFN0eWxlQ2xhc3Nlc1tyb3dJbmRleCAtICh0YWJsZS5maXJzdCA/PyAwKV1bY29sLm5hbWVdXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dJbnB1dEZpZWxkKGNvbCk7IGVsc2UgdGV4dEZpZWxkXCIgW2Zvcm1Hcm91cF09XCJmb3JtQXJyYXkhLmNvbnRyb2xzW3Jvd0luZGV4IC0gKHRhYmxlLmZpcnN0ID8/IDApXVwiID5cbiAgICAgICAgICAgIDxydy1pbnB1dCBbYXBpTmFtZV09XCJhcGlOYW1lIVwiIFtwcm9wZXJ0eV09XCJlZGl0UHJvcGVydGllc1tjb2wubmFtZV1cIj48L3J3LWlucHV0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpZWxkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlRleHRcIj5cbiAgICAgICAgICAgICAgICA8cnctYXZhdGFyICpuZ0lmPVwiY29sLm5hbWUgPT09ICdjcmVhdGVkQnknIHx8IGNvbC5uYW1lID09PSAnbGFzdENoYW5nZWRCeSdcIiBbdXNlcl09XCJlbnRpdHlbY29sLm5hbWVdXCI+PC9ydy1hdmF0YXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2wubmFtZSAhPT0gJ2NyZWF0ZWRCeScgJiYgY29sLm5hbWUgIT09ICdsYXN0Q2hhbmdlZEJ5J1wiPnt7ZW50aXR5W2NvbC5uYW1lXX19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLk51bWJlclwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlBlcmNlbnRcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5uYW1lXSB8IHByb3BlcnR5VHlwZUZvcm1hdDpjb2wudHlwZX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5DdXJyZW5jeVwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkJvb2xcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPjxwLXRyaVN0YXRlQ2hlY2tib3ggWyhuZ01vZGVsKV09XCJlbnRpdHlbY29sLm5hbWVdXCIgW3JlYWRvbmx5XT1cInRydWVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvcC10cmlTdGF0ZUNoZWNrYm94Pjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRGF0ZVwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlRpbWVcIiBbcFRvb2x0aXBdPVwiZW50aXR5W2NvbC5uYW1lXVwiPnt7ZW50aXR5W2NvbC5uYW1lXSB8IHByb3BlcnR5VHlwZUZvcm1hdDpjb2wudHlwZX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EdXJhdGlvblwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkRhdGV0aW1lTG9jYWxcIiBbcFRvb2x0aXBdPVwiZW50aXR5W2NvbC5uYW1lXVwiPnt7ZW50aXR5W2NvbC5uYW1lXSB8IHByb3BlcnR5VHlwZUZvcm1hdDpQcm9wZXJ0eVR5cGUuRGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EYXRldGltZU9mZnNldFwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OlByb3BlcnR5VHlwZS5EYXRlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkNvbGxlY3Rpb25cIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPjxwICpuZ0Zvcj1cImxldCBhcnJheUVsZW1lbnQgb2YgZW50aXR5W2NvbC5uYW1lXVwiPnt7YXJyYXlFbGVtZW50IHwganNvbn19PC9wPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuT2JqZWN0XCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj57e2VudGl0eVtjb2wubmFtZV0gfCBqc29ufX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwic2hvd01lbnVDb2x1bW5cIj5cbiAgICAgICAgICA8cnctbWVudS1idXR0b24gKm5nSWY9XCJzaG93Um93TWVudUFzQ29sdW1uXCIgW2l0ZW1zXT1cInJvd01lbnVzW3Jvd0luZGV4IC0gKHRhYmxlLmZpcnN0ID8/IDApXVwiPjwvcnctbWVudS1idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8cC1jb250ZXh0TWVudSAjY29udGV4dE1lbnUgYXBwZW5kVG89XCJib2R5XCIgW21vZGVsXT1cImNvbnRleHRNZW51SXRlbXNcIj48L3AtY29udGV4dE1lbnU+XG48L3AtdGFibGU+XG4iXX0=
|
|
@@ -6,7 +6,8 @@ import * as i1 from "../../services/restworld-client-collection";
|
|
|
6
6
|
import * as i2 from "primeng/api";
|
|
7
7
|
import * as i3 from "../../services/avatar-generator";
|
|
8
8
|
import * as i4 from "@angular/router";
|
|
9
|
-
import * as i5 from "
|
|
9
|
+
import * as i5 from "primeng/confirmdialog";
|
|
10
|
+
import * as i6 from "../../components/restworld-table/restworld-table.component";
|
|
10
11
|
/**
|
|
11
12
|
* A component that displays a list of resources from a RESTworld API.
|
|
12
13
|
* This component is meant to be used in conjunction with the `RESTworldEditViewComponent`, but can also be used with any other component if a custom `editLink` is provided.
|
|
@@ -168,11 +169,11 @@ export class RESTworldListViewComponent {
|
|
|
168
169
|
return this._clients.getClient(this.apiName);
|
|
169
170
|
}
|
|
170
171
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: RESTworldListViewComponent, deps: [{ token: i1.RestWorldClientCollection }, { token: i2.ConfirmationService }, { token: i2.MessageService }, { token: i3.AvatarGenerator }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
171
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: RESTworldListViewComponent, selector: "rw-list", inputs: { createButtonMenu: "createButtonMenu", editLink: "editLink", apiName: "apiName", rel: "rel", initialOrderby: "initialOrderby" }, ngImport: i0, template: "<rw-table\r\n [apiName]=\"apiName\"\r\n [searchTemplate]=\"searchTemplate\"\r\n [rows]=\"value\"\r\n [headerMenu]=\"headerMenu\"\r\n [rowMenu]=\"rowMenu\"\r\n [totalRecords]=\"totalRecords\"\r\n [isLoading]=\"isLoading\"\r\n (onFilterOrSortChanged)=\"load($event)\">\r\n</rw-table>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "component", type: i5.RestWorldTableComponent, selector: "rw-table", inputs: ["apiName", "formArray", "searchTemplate", "editTemplate", "rows", "rowsPerPageOptions", "rowsPerPage", "headerMenu", "rowMenu", "showRowMenuAsColumn", "showRowMenuOnRightClick", "rowStyleClass", "cellStyleClass", "totalRecords", "styleClass", "tableStyle", "scrollable", "scrollHeight", "selectionMode", "rowHover", "selection", "isLoading"], outputs: ["onFilterOrSortChanged", "onRowSelect", "onRowUnselect", "selectionChange"] }] });
|
|
172
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: RESTworldListViewComponent, selector: "rw-list", inputs: { createButtonMenu: "createButtonMenu", editLink: "editLink", apiName: "apiName", rel: "rel", initialOrderby: "initialOrderby" }, ngImport: i0, template: "<rw-table\r\n [apiName]=\"apiName\"\r\n [searchTemplate]=\"searchTemplate\"\r\n [rows]=\"value\"\r\n [headerMenu]=\"headerMenu\"\r\n [rowMenu]=\"rowMenu\"\r\n [totalRecords]=\"totalRecords\"\r\n [isLoading]=\"isLoading\"\r\n (onFilterOrSortChanged)=\"load($event)\">\r\n</rw-table>\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "component", type: i5.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "component", type: i6.RestWorldTableComponent, selector: "rw-table", inputs: ["apiName", "formArray", "searchTemplate", "editTemplate", "rows", "rowsPerPageOptions", "rowsPerPage", "headerMenu", "rowMenu", "showRowMenuAsColumn", "showRowMenuOnRightClick", "rowStyleClass", "cellStyleClass", "totalRecords", "styleClass", "tableStyle", "scrollable", "scrollHeight", "selectionMode", "rowHover", "selection", "isLoading"], outputs: ["onFilterOrSortChanged", "onRowSelect", "onRowUnselect", "selectionChange"] }] });
|
|
172
173
|
}
|
|
173
174
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: RESTworldListViewComponent, decorators: [{
|
|
174
175
|
type: Component,
|
|
175
|
-
args: [{ selector: 'rw-list', template: "<rw-table\r\n [apiName]=\"apiName\"\r\n [searchTemplate]=\"searchTemplate\"\r\n [rows]=\"value\"\r\n [headerMenu]=\"headerMenu\"\r\n [rowMenu]=\"rowMenu\"\r\n [totalRecords]=\"totalRecords\"\r\n [isLoading]=\"isLoading\"\r\n (onFilterOrSortChanged)=\"load($event)\">\r\n</rw-table>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
|
|
176
|
+
args: [{ selector: 'rw-list', template: "<rw-table\r\n [apiName]=\"apiName\"\r\n [searchTemplate]=\"searchTemplate\"\r\n [rows]=\"value\"\r\n [headerMenu]=\"headerMenu\"\r\n [rowMenu]=\"rowMenu\"\r\n [totalRecords]=\"totalRecords\"\r\n [isLoading]=\"isLoading\"\r\n (onFilterOrSortChanged)=\"load($event)\">\r\n</rw-table>\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
|
|
176
177
|
}], ctorParameters: () => [{ type: i1.RestWorldClientCollection }, { type: i2.ConfirmationService }, { type: i2.MessageService }, { type: i3.AvatarGenerator }, { type: i4.Router }], propDecorators: { createButtonMenu: [{
|
|
177
178
|
type: Input
|
|
178
179
|
}], editLink: [{
|
|
@@ -186,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
|
|
|
186
187
|
}], initialOrderby: [{
|
|
187
188
|
type: Input
|
|
188
189
|
}] } });
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQXFCLGNBQWMsRUFBd0MsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFPNUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7O0FBRS9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFxRGxCO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFsRFosZ0JBQWdCLENBQWM7SUFDOUIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEMsUUFBUSxDQUErQjtJQUV0QyxTQUFTLEdBQUcsT0FBTyxDQUFDO0lBRTVCLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBTVcsUUFBUSxDQUFDLEtBQWE7UUFDL0IsSUFBRyxLQUFLO1lBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUNPLGVBQWUsR0FBb0IsRUFBRSxDQUFDO0lB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SUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUNqRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtpQkFDN0I7YUFDRixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRU0sMEJBQTBCLENBQUMsUUFBa0I7UUFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQztZQUNoQyxPQUFPLEVBQUUsNkNBQTZDO1lBQ3RELE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFFMUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQzt1R0F4TFUsMEJBQTBCOzJGQUExQiwwQkFBMEIseUxDdkN2Qyx1U0FVQTs7MkZENkJhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSxTQUFTO2dOQVdaLGdCQUFnQjtzQkFMdEIsS0FBSztnQkFzQkssUUFBUTtzQkFObEIsS0FBSztnQkFpREssT0FBTztzQkFMakIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBMkJkLEdBQUc7c0JBTGIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBZWQsY0FBYztzQkFMeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFnZWRMaXN0UmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBSZXNvdXJjZSwgUmVzb3VyY2VEdG8sIFJlc291cmNlT2ZEdG8sIFRlbXBsYXRlIH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJlc3RXb3JsZENsaWVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQnO1xyXG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC1jb2xsZWN0aW9uJztcclxuaW1wb3J0IHsgQXZhdGFyR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXZhdGFyLWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9EYXRhUGFyYW1ldGVycyB9IGZyb20gJy4uLy4uL21vZGVscy9vLWRhdGEnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJy4uLy4uL3V0aWwvZGVib3VuY2UnO1xyXG5cclxuLyoqXHJcbiAqIEEgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgYSBsaXN0IG9mIHJlc291cmNlcyBmcm9tIGEgUkVTVHdvcmxkIEFQSS5cclxuICogVGhpcyBjb21wb25lbnQgaXMgbWVhbnQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBgUkVTVHdvcmxkRWRpdFZpZXdDb21wb25lbnRgLCBidXQgY2FuIGFsc28gYmUgdXNlZCB3aXRoIGFueSBvdGhlciBjb21wb25lbnQgaWYgYSBjdXN0b20gYGVkaXRMaW5rYCBpcyBwcm92aWRlZC5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWxpc3QgYXBpTmFtZT1cImFwaVwiIHJlbD1cInJlbFwiPjwvcnctbGlzdD5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWxpc3QgYXBpTmFtZT1cImFwaVwiIHJlbD1cInJlbFwiIFtlZGl0TGlua109XCInL2VkaXQnXCI+PC9ydy1saXN0PlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8cnctbGlzdCBhcGlOYW1lPVwiYXBpXCIgcmVsPVwicmVsXCIgW2NyZWF0ZUJ1dHRvbk1lbnVdPVwiW3tsYWJlbDogJ0NyZWF0ZSBuZXcnLCBpY29uOiAnZmFzIGZhLXBsdXMnLCByb3V0ZXJMaW5rOiBbJy9lZGl0JywgJ2FwaScsICdyZWwnLCAnbmV3J119XVwiIFtlZGl0TGlua109XCInL2VkaXQnXCI+PC9ydy1saXN0PlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8cnctbGlzdCBhcGlOYW1lPVwiYXBpXCIgcmVsPVwicmVsXCIgW2NyZWF0ZUJ1dHRvbk1lbnVdPVwiW3tsYWJlbDogJ0NyZWF0ZSBuZXcnLCBpY29uOiAnZmFzIGZhLXBsdXMnLCByb3V0ZXJMaW5rOiBbJy9lZGl0JywgJ2FwaScsICdyZWwnLCAnbmV3J119XVwiIFtlZGl0TGlua109XCInL2VkaXQnXCI+XHJcbiAqICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAqICAgPGRpdiBjbGFzcz1cInAtZC1mbGV4IHAtYWktY2VudGVyXCI+XHJcbiAqICAgIDxkaXYgY2xhc3M9XCJwLW1yLTJcIj5cclxuICogICAgPGkgY2xhc3M9XCJmYXMgZmEtc2VhcmNoXCI+PC9pPlxyXG4gKiAgIDwvZGl2PlxyXG4gKiAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gKiAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIChpbnB1dCk9XCJsb2FkKHskc2VhcmNoOiAkZXZlbnQudGFyZ2V0LnZhbHVlfSlcIj5cclxuICogPC9kaXY+XHJcbiAqIDwvZGl2PlxyXG4gKiA8L25nLXRlbXBsYXRlPlxyXG4gKiA8L3J3LWxpc3Q+XHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtbGlzdC12aWV3LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQ8VExpc3REdG8gZXh0ZW5kcyBSZXNvdXJjZUR0byAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgbWVudSBpdGVtcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNyZWF0ZSBidXR0b24gZHJvcGRvd24gbWVudS5cclxuICAgKiBUaGF0IGlzIHRoZSBtZW51IGF0IHRoZSB0b3AgcmlnaHQgb2YgdGhlIGxpc3QuXHJcbiAgICovXHJcbiAgcHVibGljIGNyZWF0ZUJ1dHRvbk1lbnU/OiBNZW51SXRlbVtdO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcclxuICBwdWJsaWMgbG9hZCA9IGRlYm91bmNlKHRoaXMubG9hZEludGVybmFsLCAxMDApO1xyXG4gIHB1YmxpYyByZXNvdXJjZT86IFBhZ2VkTGlzdFJlc291cmNlPFRMaXN0RHRvPjtcclxuXHJcbiAgcHJpdmF0ZSBfZWRpdExpbmsgPSAnL2VkaXQnO1xyXG5cclxuICBwdWJsaWMgZ2V0IGVkaXRMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VkaXRMaW5rO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICAvKipcclxuICAgKiBUaGUgVVJMIGZvciB0aGUgZWRpdCBsaW5rIG9mIHRoZSBSRVNUd29ybGQgbGlzdCB2aWV3LlxyXG4gICAqIFVzZSBpdCBpZiB5b3Ugd2FudCB0byB1c2UgYSBjdXN0b20gZWRpdCB2aWV3IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYFJFU1R3b3JsZEVkaXRWaWV3Q29tcG9uZW50YC5cclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIGVkaXQgbGluayBVUkwuXHJcbiAgICovXHJcbiAgcHVibGljIHNldCBlZGl0TGluayh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZih2YWx1ZSlcclxuICAgICAgdGhpcy5fZWRpdExpbmsgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfbGFzdFBhcmFtZXRlcnM6IE9EYXRhUGFyYW1ldGVycyA9IHt9O1xyXG4gIHByaXZhdGUgX3NlYXJjaFRlbXBsYXRlOiBUZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZSh7IHByb3BlcnRpZXM6IFtdIH0pO1xyXG4gIHB1YmxpYyBfdG90YWxSZWNvcmRzID0gMDtcclxuXHJcbiAgcHVibGljIGhlYWRlck1lbnU6IE1lbnVJdGVtW10gPSBbXTtcclxuICBwdWJsaWMgcm93TWVudTogKHJvdzogUmVzb3VyY2VPZkR0bzxUTGlzdER0bz4sIG9wZW5lZEJ5UmlnaHRDbGljazogYm9vbGVhbikgPT4gTWVudUl0ZW1bXSA9IChyb3csIG9wZW5lZEJ5UmlnaHRDbGljaykgPT4ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIGljb246IFwiZmFzIGZhLWVkaXRcIixcclxuICAgICAgICBsYWJlbDogb3BlbmVkQnlSaWdodENsaWNrID8gXCJWaWV3IC8gRWRpdFwiIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRvb2x0aXA6ICFvcGVuZWRCeVJpZ2h0Q2xpY2sgPyBcIlZpZXcgLyBFZGl0XCIgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdG9vbHRpcFBvc2l0aW9uOiBcImxlZnRcIixcclxuICAgICAgICByb3V0ZXJMaW5rOiBbdGhpcy5lZGl0TGluaywgdGhpcy5hcGlOYW1lLCB0aGlzLnJlbCwgcm93Ll9saW5rcz8uc2VsZlswXS5ocmVmXVxyXG4gICAgICB9LCB7XHJcbiAgICAgICAgaWNvbjogXCJmYXMgZmEtdHJhc2gtYWx0XCIsXHJcbiAgICAgICAgbGFiZWw6IG9wZW5lZEJ5UmlnaHRDbGljayA/IFwiRGVsZXRlXCIgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdG9vbHRpcDogIW9wZW5lZEJ5UmlnaHRDbGljayA/IFwiRGVsZXRlXCIgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdG9vbHRpcFBvc2l0aW9uOiBcImxlZnRcIixcclxuICAgICAgICBzdHlsZUNsYXNzOiBcInAtYnV0dG9uLWRhbmdlclwiLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwocm93KVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnRzOiBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyByZWFkb25seSBhdmF0YXJHZW5lcmF0b3I6IEF2YXRhckdlbmVyYXRvcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlcjogUm91dGVyKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIEFQSSB0byBsb2FkIGFuZCB0cmlnZ2VycyBhIHJlbG9hZCBvZiB0aGUgZGF0YS5cclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5hbWUgb2YgdGhlIEFQSSB0byBsb2FkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXQgYXBpTmFtZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hcGlOYW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWQodGhpcy5fbGFzdFBhcmFtZXRlcnMpO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBnZXQgYXBpTmFtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hcGlOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBuZXdIcmVmKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZT8uZmluZExpbmsoJ25ldycpPy5ocmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVsITogc3RyaW5nO1xyXG4gIHB1YmxpYyBnZXQgcmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVsO1xyXG4gIH1cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHJlbCB2YWx1ZSBmb3IgdGhlIFJFU1RXb3JsZCBsaXN0IHZpZXcgY29tcG9uZW50LlxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHJlbCB2YWx1ZSB0byBzZXQuXHJcbiAgICovXHJcbiAgcHVibGljIHNldCByZWwodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcmVsID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWQodGhpcy5fbGFzdFBhcmFtZXRlcnMpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBpbml0aWFsICRvcmRlckJ5IHZhbHVlIGZvciB0aGUgUkVTVFdvcmxkIGxpc3QgdmlldyBjb21wb25lbnQuXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgJG9yZGVyQnkgdmFsdWUgdG8gc2V0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXQgaW5pdGlhbE9yZGVyYnkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbGFzdFBhcmFtZXRlcnMuJG9yZGVyYnkgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VhcmNoVGVtcGxhdGUoKTogVGVtcGxhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90b3RhbFJlY29yZHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFJlc291cmNlT2ZEdG88VExpc3REdG8+W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2U/Ll9lbWJlZGRlZD8uaXRlbXMgfHwgW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlTmV3KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbdGhpcy5lZGl0TGluaywgdGhpcy5hcGlOYW1lLCB0aGlzLnJlbCwgdGhpcy5uZXdIcmVmXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKHJlc291cmNlOiBSZXNvdXJjZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUgfHwgIXRoaXMucmVsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5kZWxldGUocmVzb3VyY2UpO1xyXG5cclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdEZWxldGVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIGRlbGV0ZWQuJyB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWRJbnRlcm5hbCh0aGlzLl9sYXN0UGFyYW1ldGVycyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZEludGVybmFsKHBhcmFtZXRlcnM6IE9EYXRhUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUgfHwgIXRoaXMucmVsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRMaXN0PFRMaXN0RHRvPih0aGlzLnJlbCwgcGFyYW1ldGVycyk7XHJcbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIHJlc291cmNlcyBmcm9tIHRoZSBBUEkuJywgZGF0YTogcmVzcG9uc2UgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyZXNwb25zZS5ib2R5KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRBbGxUZW1wbGF0ZXMocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoVGVtcGxhdGUgPSB0ZW1wbGF0ZXNbXCJTZWFyY2hcIl07XHJcbiAgICAgICAgaWYgKHNlYXJjaFRlbXBsYXRlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZWFyY2ggdGVtcGxhdGUgZm91bmQgaW4gdGhlIEFQSSByZXNwb25zZS5cIik7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoVGVtcGxhdGUgPSBzZWFyY2hUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoZTogdW5rbm93bikge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSByZXNvdXJjZXMgZnJvbSB0aGUgQVBJLiAnICsgZSwgZGF0YTogZSB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5yZXNvdXJjZSA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgIGNvbnN0IHJvd3NQZXJQYWdlID0gcGFyYW1ldGVycy4kdG9wID8/IHJlc3BvbnNlLmJvZHkuX2VtYmVkZGVkLml0ZW1zLmxlbmd0aDtcclxuICAgICAgY29uc3QgdG90YWxQYWdlcyA9IHJlc3BvbnNlLmJvZHkudG90YWxQYWdlcyA/PyAxO1xyXG4gICAgICB0aGlzLl90b3RhbFJlY29yZHMgPSB0b3RhbFBhZ2VzICogcm93c1BlclBhZ2U7XHJcblxyXG4gICAgICB0aGlzLmhlYWRlck1lbnUgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWNvbjogXCJmYXMgZmEtcGx1c1wiLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogXCJwLWJ1dHRvbi1zdWNjZXNzXCIsXHJcbiAgICAgICAgICByb3V0ZXJMaW5rOiBbdGhpcy5lZGl0TGluaywgdGhpcy5hcGlOYW1lLCB0aGlzLnJlbCwgdGhpcy5uZXdIcmVmXSxcclxuICAgICAgICAgIGl0ZW1zOiB0aGlzLmNyZWF0ZUJ1dHRvbk1lbnVcclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93RGVsZXRlQ29uZmlybWF0aW9Nb2RhbChyZXNvdXJjZTogUmVzb3VyY2UpIHtcclxuICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIG1lc3NhZ2U6ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVzb3VyY2U/JyxcclxuICAgICAgaGVhZGVyOiAnQ29uZmlybSBkZWxldGUnLFxyXG4gICAgICBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4gdGhpcy5kZWxldGUocmVzb3VyY2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2xpZW50KCk6IFJlc3RXb3JsZENsaWVudCB7XHJcbiAgICBpZiAoIXRoaXMuYXBpTmFtZSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IGEgY2xpZW50LCBiZWNhdXNlIHRoZSBhcGlOYW1lIGlzIG5vdCBzZXQuJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudHMuZ2V0Q2xpZW50KHRoaXMuYXBpTmFtZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxydy10YWJsZVxyXG4gIFthcGlOYW1lXT1cImFwaU5hbWVcIlxyXG4gIFtzZWFyY2hUZW1wbGF0ZV09XCJzZWFyY2hUZW1wbGF0ZVwiXHJcbiAgW3Jvd3NdPVwidmFsdWVcIlxyXG4gIFtoZWFkZXJNZW51XT1cImhlYWRlck1lbnVcIlxyXG4gIFtyb3dNZW51XT1cInJvd01lbnVcIlxyXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICBbaXNMb2FkaW5nXT1cImlzTG9hZGluZ1wiXHJcbiAgKG9uRmlsdGVyT3JTb3J0Q2hhbmdlZCk9XCJsb2FkKCRldmVudClcIj5cclxuPC9ydy10YWJsZT5cclxuIl19
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQXFCLGNBQWMsRUFBd0MsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFPNUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7OztBQUUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFNSCxNQUFNLE9BQU8sMEJBQTBCO0lBcURsQjtJQUNBO0lBQ0E7SUFDRDtJQUNDO0lBbERaLGdCQUFnQixDQUFjO0lBQzlCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsQ0FBK0I7SUFFdEMsU0FBUyxHQUFHLE9BQU8sQ0FBQztJQUU1QixJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQU1XLFFBQVEsQ0FBQyxLQUFhO1FBQy9CLElBQUcsS0FBSztZQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFDTyxlQUFlLEdBQW9CLEVBQUUsQ0FBQztJ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LElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztvQkFDakUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7aUJBQzdCO2FBQ0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVNLDBCQUEwQixDQUFDLFFBQWtCO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7WUFDaEMsT0FBTyxFQUFFLDZDQUE2QztZQUN0RCxNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBRTFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7dUdBeExVLDBCQUEwQjsyRkFBMUIsMEJBQTBCLHlMQ3ZDdkMsOFVBV0E7OzJGRDRCYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UsU0FBUztnTkFXWixnQkFBZ0I7c0JBTHRCLEtBQUs7Z0JBc0JLLFFBQVE7c0JBTmxCLEtBQUs7Z0JBaURLLE9BQU87c0JBTGpCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQTJCZCxHQUFHO3NCQUxiLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQWVkLGNBQWM7c0JBTHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhZ2VkTGlzdFJlc291cmNlLCBQcm9ibGVtRGV0YWlscywgUmVzb3VyY2UsIFJlc291cmNlRHRvLCBSZXNvdXJjZU9mRHRvLCBUZW1wbGF0ZSB9IGZyb20gJ0B3ZXJ0enVpL25neC1oYWwtY2xpZW50JztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVudUl0ZW0sIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcclxuaW1wb3J0IHsgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQtY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IEF2YXRhckdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F2YXRhci1nZW5lcmF0b3InO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPRGF0YVBhcmFtZXRlcnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvby1kYXRhJztcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICcuLi8uLi91dGlsL2RlYm91bmNlJztcclxuXHJcbi8qKlxyXG4gKiBBIGNvbXBvbmVudCB0aGF0IGRpc3BsYXlzIGEgbGlzdCBvZiByZXNvdXJjZXMgZnJvbSBhIFJFU1R3b3JsZCBBUEkuXHJcbiAqIFRoaXMgY29tcG9uZW50IGlzIG1lYW50IHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgYFJFU1R3b3JsZEVkaXRWaWV3Q29tcG9uZW50YCwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgd2l0aCBhbnkgb3RoZXIgY29tcG9uZW50IGlmIGEgY3VzdG9tIGBlZGl0TGlua2AgaXMgcHJvdmlkZWQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxydy1saXN0IGFwaU5hbWU9XCJhcGlcIiByZWw9XCJyZWxcIj48L3J3LWxpc3Q+XHJcbiAqIEBleGFtcGxlXHJcbiAqIDxydy1saXN0IGFwaU5hbWU9XCJhcGlcIiByZWw9XCJyZWxcIiBbZWRpdExpbmtdPVwiJy9lZGl0J1wiPjwvcnctbGlzdD5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWxpc3QgYXBpTmFtZT1cImFwaVwiIHJlbD1cInJlbFwiIFtjcmVhdGVCdXR0b25NZW51XT1cIlt7bGFiZWw6ICdDcmVhdGUgbmV3JywgaWNvbjogJ2ZhcyBmYS1wbHVzJywgcm91dGVyTGluazogWycvZWRpdCcsICdhcGknLCAncmVsJywgJ25ldyddfV1cIiBbZWRpdExpbmtdPVwiJy9lZGl0J1wiPjwvcnctbGlzdD5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWxpc3QgYXBpTmFtZT1cImFwaVwiIHJlbD1cInJlbFwiIFtjcmVhdGVCdXR0b25NZW51XT1cIlt7bGFiZWw6ICdDcmVhdGUgbmV3JywgaWNvbjogJ2ZhcyBmYS1wbHVzJywgcm91dGVyTGluazogWycvZWRpdCcsICdhcGknLCAncmVsJywgJ25ldyddfV1cIiBbZWRpdExpbmtdPVwiJy9lZGl0J1wiPlxyXG4gKiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gKiAgIDxkaXYgY2xhc3M9XCJwLWQtZmxleCBwLWFpLWNlbnRlclwiPlxyXG4gKiAgICA8ZGl2IGNsYXNzPVwicC1tci0yXCI+XHJcbiAqICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNlYXJjaFwiPjwvaT5cclxuICogICA8L2Rpdj5cclxuICogIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIj5cclxuICogIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiAoaW5wdXQpPVwibG9hZCh7JHNlYXJjaDogJGV2ZW50LnRhcmdldC52YWx1ZX0pXCI+XHJcbiAqIDwvZGl2PlxyXG4gKiA8L2Rpdj5cclxuICogPC9uZy10ZW1wbGF0ZT5cclxuICogPC9ydy1saXN0PlxyXG4gKlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50PFRMaXN0RHRvIGV4dGVuZHMgUmVzb3VyY2VEdG8gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xyXG5cclxuICBASW5wdXQoKVxyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIG1lbnUgaXRlbXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBjcmVhdGUgYnV0dG9uIGRyb3Bkb3duIG1lbnUuXHJcbiAgICogVGhhdCBpcyB0aGUgbWVudSBhdCB0aGUgdG9wIHJpZ2h0IG9mIHRoZSBsaXN0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjcmVhdGVCdXR0b25NZW51PzogTWVudUl0ZW1bXTtcclxuICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgcHVibGljIGxvYWQgPSBkZWJvdW5jZSh0aGlzLmxvYWRJbnRlcm5hbCwgMTAwKTtcclxuICBwdWJsaWMgcmVzb3VyY2U/OiBQYWdlZExpc3RSZXNvdXJjZTxUTGlzdER0bz47XHJcblxyXG4gIHByaXZhdGUgX2VkaXRMaW5rID0gJy9lZGl0JztcclxuXHJcbiAgcHVibGljIGdldCBlZGl0TGluaygpIHtcclxuICAgIHJldHVybiB0aGlzLl9lZGl0TGluaztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgLyoqXHJcbiAgICogVGhlIFVSTCBmb3IgdGhlIGVkaXQgbGluayBvZiB0aGUgUkVTVHdvcmxkIGxpc3Qgdmlldy5cclxuICAgKiBVc2UgaXQgaWYgeW91IHdhbnQgdG8gdXNlIGEgY3VzdG9tIGVkaXQgdmlldyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBSRVNUd29ybGRFZGl0Vmlld0NvbXBvbmVudGAuXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBlZGl0IGxpbmsgVVJMLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXQgZWRpdExpbmsodmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYodmFsdWUpXHJcbiAgICAgIHRoaXMuX2VkaXRMaW5rID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2xhc3RQYXJhbWV0ZXJzOiBPRGF0YVBhcmFtZXRlcnMgPSB7fTtcclxuICBwcml2YXRlIF9zZWFyY2hUZW1wbGF0ZTogVGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoeyBwcm9wZXJ0aWVzOiBbXSB9KTtcclxuICBwdWJsaWMgX3RvdGFsUmVjb3JkcyA9IDA7XHJcblxyXG4gIHB1YmxpYyBoZWFkZXJNZW51OiBNZW51SXRlbVtdID0gW107XHJcbiAgcHVibGljIHJvd01lbnU6IChyb3c6IFJlc291cmNlT2ZEdG88VExpc3REdG8+LCBvcGVuZWRCeVJpZ2h0Q2xpY2s6IGJvb2xlYW4pID0+IE1lbnVJdGVtW10gPSAocm93LCBvcGVuZWRCeVJpZ2h0Q2xpY2spID0+IHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBpY29uOiBcImZhcyBmYS1lZGl0XCIsXHJcbiAgICAgICAgbGFiZWw6IG9wZW5lZEJ5UmlnaHRDbGljayA/IFwiVmlldyAvIEVkaXRcIiA6IHVuZGVmaW5lZCxcclxuICAgICAgICB0b29sdGlwOiAhb3BlbmVkQnlSaWdodENsaWNrID8gXCJWaWV3IC8gRWRpdFwiIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRvb2x0aXBQb3NpdGlvbjogXCJsZWZ0XCIsXHJcbiAgICAgICAgcm91dGVyTGluazogW3RoaXMuZWRpdExpbmssIHRoaXMuYXBpTmFtZSwgdGhpcy5yZWwsIHJvdy5fbGlua3M/LnNlbGZbMF0uaHJlZl1cclxuICAgICAgfSwge1xyXG4gICAgICAgIGljb246IFwiZmFzIGZhLXRyYXNoLWFsdFwiLFxyXG4gICAgICAgIGxhYmVsOiBvcGVuZWRCeVJpZ2h0Q2xpY2sgPyBcIkRlbGV0ZVwiIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRvb2x0aXA6ICFvcGVuZWRCeVJpZ2h0Q2xpY2sgPyBcIkRlbGV0ZVwiIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRvb2x0aXBQb3NpdGlvbjogXCJsZWZ0XCIsXHJcbiAgICAgICAgc3R5bGVDbGFzczogXCJwLWJ1dHRvbi1kYW5nZXJcIixcclxuICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKHJvdylcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2xpZW50czogUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXZhdGFyR2VuZXJhdG9yOiBBdmF0YXJHZW5lcmF0b3IsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXI6IFJvdXRlcikge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBuYW1lIG9mIHRoZSBBUEkgdG8gbG9hZCBhbmQgdHJpZ2dlcnMgYSByZWxvYWQgb2YgdGhlIGRhdGEuXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBuYW1lIG9mIHRoZSBBUEkgdG8gbG9hZC5cclxuICAgKi9cclxuICBwdWJsaWMgc2V0IGFwaU5hbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYXBpTmFtZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RQYXJhbWV0ZXJzKTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgZ2V0IGFwaU5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXBpTmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbmV3SHJlZigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2U/LmZpbmRMaW5rKCduZXcnKT8uaHJlZjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbCE6IHN0cmluZztcclxuICBwdWJsaWMgZ2V0IHJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbDtcclxuICB9XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAvKipcclxuICAgKiBTZXRzIHRoZSByZWwgdmFsdWUgZm9yIHRoZSBSRVNUV29ybGQgbGlzdCB2aWV3IGNvbXBvbmVudC5cclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyByZWwgdmFsdWUgdG8gc2V0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXQgcmVsKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3JlbCA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RQYXJhbWV0ZXJzKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgaW5pdGlhbCAkb3JkZXJCeSB2YWx1ZSBmb3IgdGhlIFJFU1RXb3JsZCBsaXN0IHZpZXcgY29tcG9uZW50LlxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3ICRvcmRlckJ5IHZhbHVlIHRvIHNldC5cclxuICAgKi9cclxuICBwdWJsaWMgc2V0IGluaXRpYWxPcmRlcmJ5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2xhc3RQYXJhbWV0ZXJzLiRvcmRlcmJ5ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlYXJjaFRlbXBsYXRlKCk6IFRlbXBsYXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hUZW1wbGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdG90YWxSZWNvcmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdG90YWxSZWNvcmRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2YWx1ZSgpOiBSZXNvdXJjZU9mRHRvPFRMaXN0RHRvPltdIHtcclxuICAgIHJldHVybiB0aGlzLnJlc291cmNlPy5fZW1iZWRkZWQ/Lml0ZW1zIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZU5ldygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZWRpdExpbmssIHRoaXMuYXBpTmFtZSwgdGhpcy5yZWwsIHRoaXMubmV3SHJlZl0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlbGV0ZShyZXNvdXJjZTogUmVzb3VyY2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lIHx8ICF0aGlzLnJlbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZGVsZXRlKHJlc291cmNlKTtcclxuXHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnRGVsZXRlZCcsIGRldGFpbDogJ1RoZSByZXNvdXJjZSBoYXMgYmVlbiBkZWxldGVkLicgfSk7XHJcblxyXG4gICAgdGhpcy5sb2FkSW50ZXJuYWwodGhpcy5fbGFzdFBhcmFtZXRlcnMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWRJbnRlcm5hbChwYXJhbWV0ZXJzOiBPRGF0YVBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lIHx8ICF0aGlzLnJlbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZ2V0TGlzdDxUTGlzdER0bz4odGhpcy5yZWwsIHBhcmFtZXRlcnMpO1xyXG4gICAgaWYgKCFyZXNwb25zZS5vayB8fCBQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpIHx8ICFyZXNwb25zZS5ib2R5KSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSByZXNvdXJjZXMgZnJvbSB0aGUgQVBJLicsIGRhdGE6IHJlc3BvbnNlIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocmVzcG9uc2UuYm9keSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZ2V0QWxsVGVtcGxhdGVzKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFRlbXBsYXRlID0gdGVtcGxhdGVzW1wiU2VhcmNoXCJdO1xyXG4gICAgICAgIGlmIChzZWFyY2hUZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2VhcmNoIHRlbXBsYXRlIGZvdW5kIGluIHRoZSBBUEkgcmVzcG9uc2UuXCIpO1xyXG4gICAgICAgIHRoaXMuX3NlYXJjaFRlbXBsYXRlID0gc2VhcmNoVGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2ggKGU6IHVua25vd24pIHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiAnRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgcmVzb3VyY2VzIGZyb20gdGhlIEFQSS4gJyArIGUsIGRhdGE6IGUgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmVzb3VyY2UgPSByZXNwb25zZS5ib2R5O1xyXG4gICAgICBjb25zdCByb3dzUGVyUGFnZSA9IHBhcmFtZXRlcnMuJHRvcCA/PyByZXNwb25zZS5ib2R5Ll9lbWJlZGRlZC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSByZXNwb25zZS5ib2R5LnRvdGFsUGFnZXMgPz8gMTtcclxuICAgICAgdGhpcy5fdG90YWxSZWNvcmRzID0gdG90YWxQYWdlcyAqIHJvd3NQZXJQYWdlO1xyXG5cclxuICAgICAgdGhpcy5oZWFkZXJNZW51ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGljb246IFwiZmFzIGZhLXBsdXNcIixcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6IFwicC1idXR0b24tc3VjY2Vzc1wiLFxyXG4gICAgICAgICAgcm91dGVyTGluazogW3RoaXMuZWRpdExpbmssIHRoaXMuYXBpTmFtZSwgdGhpcy5yZWwsIHRoaXMubmV3SHJlZl0sXHJcbiAgICAgICAgICBpdGVtczogdGhpcy5jcmVhdGVCdXR0b25NZW51XHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwocmVzb3VyY2U6IFJlc291cmNlKSB7XHJcbiAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICBtZXNzYWdlOiAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlc291cmNlPycsXHJcbiAgICAgIGhlYWRlcjogJ0NvbmZpcm0gZGVsZXRlJyxcclxuICAgICAgaWNvbjogJ2ZhciBmYS10cmFzaC1hbHQnLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHRoaXMuZGVsZXRlKHJlc291cmNlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENsaWVudCgpOiBSZXN0V29ybGRDbGllbnQge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBhIGNsaWVudCwgYmVjYXVzZSB0aGUgYXBpTmFtZSBpcyBub3Qgc2V0LicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xyXG4gIH1cclxufVxyXG4iLCI8cnctdGFibGVcclxuICBbYXBpTmFtZV09XCJhcGlOYW1lXCJcclxuICBbc2VhcmNoVGVtcGxhdGVdPVwic2VhcmNoVGVtcGxhdGVcIlxyXG4gIFtyb3dzXT1cInZhbHVlXCJcclxuICBbaGVhZGVyTWVudV09XCJoZWFkZXJNZW51XCJcclxuICBbcm93TWVudV09XCJyb3dNZW51XCJcclxuICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gIChvbkZpbHRlck9yU29ydENoYW5nZWQpPVwibG9hZCgkZXZlbnQpXCI+XHJcbjwvcnctdGFibGU+XHJcbjxwLWNvbmZpcm1EaWFsb2c+PC9wLWNvbmZpcm1EaWFsb2c+XHJcbiJdfQ==
|