@ecodev/natural 50.3.0 → 50.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/modules/table-button/table-button.component.mjs +6 -3
- package/esm2020/lib/services/abstract-model.service.mjs +7 -5
- package/fesm2015/ecodev-natural.mjs +11 -6
- package/fesm2015/ecodev-natural.mjs.map +1 -1
- package/fesm2020/ecodev-natural.mjs +11 -6
- package/fesm2020/ecodev-natural.mjs.map +1 -1
- package/lib/modules/table-button/table-button.component.d.ts +2 -1
- package/package.json +1 -1
|
@@ -21,6 +21,7 @@ export class NaturalTableButtonComponent {
|
|
|
21
21
|
this.queryParamsHandling = '';
|
|
22
22
|
this.navigate = [];
|
|
23
23
|
this.preserveFragment = false;
|
|
24
|
+
this.disabled = false;
|
|
24
25
|
this.raised = false;
|
|
25
26
|
this.buttonClick = new EventEmitter();
|
|
26
27
|
this.type = 'none';
|
|
@@ -41,10 +42,10 @@ export class NaturalTableButtonComponent {
|
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
NaturalTableButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NaturalTableButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
44
|
-
NaturalTableButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: NaturalTableButtonComponent, selector: "natural-table-button", inputs: { queryParams: "queryParams", queryParamsHandling: "queryParamsHandling", label: "label", icon: "icon", href: "href", navigate: "navigate", fragment: "fragment", preserveFragment: "preserveFragment", raised: "raised", color: "color" }, outputs: { buttonClick: "buttonClick" }, usesOnChanges: true, ngImport: i0, template: "<!-- Because directives can't be applied conditionally (routerLink, mat-button and mat-icon-button), we have to use different elements -->\n\n<!-- Edge case of a button without any kind of link at all -->\n<span *ngIf=\"type === 'none'\">\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span *ngIf=\"label\">{{ label }}</span>\n</span>\n\n<ng-container *ngIf=\"!raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n mat-icon-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- Click with label... -->\n <a
|
|
45
|
+
NaturalTableButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: NaturalTableButtonComponent, selector: "natural-table-button", inputs: { queryParams: "queryParams", queryParamsHandling: "queryParamsHandling", label: "label", icon: "icon", href: "href", navigate: "navigate", fragment: "fragment", preserveFragment: "preserveFragment", disabled: "disabled", raised: "raised", color: "color" }, outputs: { buttonClick: "buttonClick" }, usesOnChanges: true, ngImport: i0, template: "<!-- Because directives can't be applied conditionally (routerLink, mat-button and mat-icon-button), we have to use different elements -->\n\n<!-- Edge case of a button without any kind of link at all -->\n<span *ngIf=\"type === 'none'\">\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span *ngIf=\"label\">{{ label }}</span>\n</span>\n\n<ng-container *ngIf=\"!raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n (click)=\"buttonClick.emit($event)\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a *ngIf=\"type === 'click' && !label\" (click)=\"buttonClick.emit($event)\" [disabled]=\"disabled\" mat-icon-button>\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n\n<ng-container *ngIf=\"raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'click' && !label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-raised-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n", styles: ["natural-table-button{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}natural-table-button mat-icon:not(:last-child){margin-right:5px}natural-table-button a.mat-mdc-button{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:flex-start}natural-table-button a.mat-mdc-button .mdc-button__label{display:flex;flex-direction:row;align-items:center}natural-table-button>span{padding:0 8px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconAnchor, selector: "a[mat-icon-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i4.NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
45
46
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NaturalTableButtonComponent, decorators: [{
|
|
46
47
|
type: Component,
|
|
47
|
-
args: [{ selector: 'natural-table-button', encapsulation: ViewEncapsulation.None, template: "<!-- Because directives can't be applied conditionally (routerLink, mat-button and mat-icon-button), we have to use different elements -->\n\n<!-- Edge case of a button without any kind of link at all -->\n<span *ngIf=\"type === 'none'\">\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span *ngIf=\"label\">{{ label }}</span>\n</span>\n\n<ng-container *ngIf=\"!raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n mat-icon-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- Click with label... -->\n <a
|
|
48
|
+
args: [{ selector: 'natural-table-button', encapsulation: ViewEncapsulation.None, template: "<!-- Because directives can't be applied conditionally (routerLink, mat-button and mat-icon-button), we have to use different elements -->\n\n<!-- Edge case of a button without any kind of link at all -->\n<span *ngIf=\"type === 'none'\">\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span *ngIf=\"label\">{{ label }}</span>\n</span>\n\n<ng-container *ngIf=\"!raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n (click)=\"buttonClick.emit($event)\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a *ngIf=\"type === 'click' && !label\" (click)=\"buttonClick.emit($event)\" [disabled]=\"disabled\" mat-icon-button>\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n\n<ng-container *ngIf=\"raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'click' && !label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-raised-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n", styles: ["natural-table-button{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}natural-table-button mat-icon:not(:last-child){margin-right:5px}natural-table-button a.mat-mdc-button{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:flex-start}natural-table-button a.mat-mdc-button .mdc-button__label{display:flex;flex-direction:row;align-items:center}natural-table-button>span{padding:0 8px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}\n"] }]
|
|
48
49
|
}], propDecorators: { queryParams: [{
|
|
49
50
|
type: Input
|
|
50
51
|
}], queryParamsHandling: [{
|
|
@@ -61,6 +62,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImpor
|
|
|
61
62
|
type: Input
|
|
62
63
|
}], preserveFragment: [{
|
|
63
64
|
type: Input
|
|
65
|
+
}], disabled: [{
|
|
66
|
+
type: Input
|
|
64
67
|
}], raised: [{
|
|
65
68
|
type: Input
|
|
66
69
|
}], color: [{
|
|
@@ -68,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImpor
|
|
|
68
71
|
}], buttonClick: [{
|
|
69
72
|
type: Output
|
|
70
73
|
}] } });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3RhYmxlLWJ1dHRvbi90YWJsZS1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvdGFibGUtYnV0dG9uL3RhYmxlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBSW5HOzs7Ozs7Ozs7R0FTRztBQU9ILE1BQU0sT0FBTywyQkFBMkI7SUFOeEM7UUFPb0IsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsd0JBQW1CLEdBQXdCLEVBQUUsQ0FBQztRQUk5QyxhQUFRLEdBQTZCLEVBQUUsQ0FBQztRQUV4QyxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVMLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUNoRSxTQUFJLEdBQTZDLE1BQU0sQ0FBQztLQWFsRTtJQVhVLFdBQVc7UUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUMvRCxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztTQUM1QjthQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7U0FDdkI7YUFBTTtZQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQzs7d0hBeEJRLDJCQUEyQjs0R0FBM0IsMkJBQTJCLDhXQ3BCeEMscTZJQThIQTsyRkQxR2EsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNJLHNCQUFzQixpQkFHakIsaUJBQWlCLENBQUMsSUFBSTs4QkFHckIsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ29CLFdBQVc7c0JBQXBDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGFyYW1zLCBRdWVyeVBhcmFtc0hhbmRsaW5nLCBSb3V0ZXJMaW5rfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG4vKipcbiAqIEJ1dHRvbiB0aGF0IGZpdHMgd2VsbCBpbiBhIGA8bWF0LXRhYmxlPmAgYW5kIHN1cHBvcnQgZWl0aGVyXG4gKiByb3V0ZSBuYXZpZ2F0aW9uIHZpYSBgbmF2aWdhdGVgLCBvciBleHRlcm5hbCBVUkwgdmlhIGBocmVmYCxcbiAqIG9yIGNhbGxiYWNrIHZpYSBgYnV0dG9uQ2xpY2tgLlxuICpcbiAqIElmIG5laXRoZXIgYG5hdmlnYXRlYCBub3IgYGhyZWZgIG5vciBgYnV0dG9uQ2xpY2tgIGhhdmUgYSBtZWFuaW5nZnVsIHZhbHVlLCB0aGVuXG4gKiBpdCB3aWxsIHNob3cgdGhlIGljb24gYW5kL29yIGxhYmVsIGluIGEgYDxzcGFuPmAgaW5zdGVhZCBvZiBhIGJ1dHRvbi5cbiAqXG4gKiBFeHRlcm5hbCBVUkwgd2lsbCBhbHdheXMgYmUgb3BlbmVkIGluIG5ldyB0YWIuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmF0dXJhbC10YWJsZS1idXR0b24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxUYWJsZUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgcHVibGljIHF1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcXVlcnlQYXJhbXNIYW5kbGluZzogUXVlcnlQYXJhbXNIYW5kbGluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbD86IHN0cmluZyB8IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIGljb24/OiBzdHJpbmcgfCBudWxsO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBocmVmPzogc3RyaW5nIHwgbnVsbDtcbiAgICBASW5wdXQoKSBwdWJsaWMgbmF2aWdhdGU6IFJvdXRlckxpbmtbJ3JvdXRlckxpbmsnXSA9IFtdO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmcmFnbWVudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSBwdWJsaWMgcHJlc2VydmVGcmFnbWVudCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByYWlzZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY29sb3I6IFRoZW1lUGFsZXR0ZTtcbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAgIHB1YmxpYyB0eXBlOiAncm91dGVyTGluaycgfCAnaHJlZicgfCAnY2xpY2snIHwgJ25vbmUnID0gJ25vbmUnO1xuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZT8ubGVuZ3RoIHx8IE9iamVjdC5rZXlzKHRoaXMucXVlcnlQYXJhbXMpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gJ3JvdXRlckxpbmsnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaHJlZikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gJ2hyZWYnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYnV0dG9uQ2xpY2sub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9ICdjbGljayc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8IS0tIEJlY2F1c2UgZGlyZWN0aXZlcyBjYW4ndCBiZSBhcHBsaWVkIGNvbmRpdGlvbmFsbHkgKHJvdXRlckxpbmssIG1hdC1idXR0b24gYW5kIG1hdC1pY29uLWJ1dHRvbiksIHdlIGhhdmUgdG8gdXNlIGRpZmZlcmVudCBlbGVtZW50cyAtLT5cblxuPCEtLSBFZGdlIGNhc2Ugb2YgYSBidXR0b24gd2l0aG91dCBhbnkga2luZCBvZiBsaW5rIGF0IGFsbCAtLT5cbjxzcGFuICpuZ0lmPVwidHlwZSA9PT0gJ25vbmUnXCI+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIFtuYXR1cmFsSWNvbl09XCJpY29uXCI+PC9tYXQtaWNvbj5cbiAgICA8c3BhbiAqbmdJZj1cImxhYmVsXCI+e3sgbGFiZWwgfX08L3NwYW4+XG48L3NwYW4+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhcmFpc2VkXCI+XG4gICAgPCEtLSBBcHAgcm91dGVkIGxpbmsgd2l0aCBsYWJlbC4uLiAtLT5cbiAgICA8YVxuICAgICAgICAqbmdJZj1cInR5cGUgPT09ICdyb3V0ZXJMaW5rJyAmJiBsYWJlbFwiXG4gICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgIFtxdWVyeVBhcmFtc109XCJxdWVyeVBhcmFtc1wiXG4gICAgICAgIFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cInF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICBbcm91dGVyTGlua109XCJuYXZpZ2F0ZVwiXG4gICAgICAgIFtmcmFnbWVudF09XCJmcmFnbWVudFwiXG4gICAgICAgIFtwcmVzZXJ2ZUZyYWdtZW50XT1cInByZXNlcnZlRnJhZ21lbnRcIlxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgW25hdHVyYWxJY29uXT1cImljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICA8L2E+XG5cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICA8YVxuICAgICAgICAqbmdJZj1cInR5cGUgPT09ICdyb3V0ZXJMaW5rJyAmJiAhbGFiZWxcIlxuICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICBbcXVlcnlQYXJhbXNdPVwicXVlcnlQYXJhbXNcIlxuICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJxdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgW3JvdXRlckxpbmtdPVwibmF2aWdhdGVcIlxuICAgICAgICBbZnJhZ21lbnRdPVwiZnJhZ21lbnRcIlxuICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJwcmVzZXJ2ZUZyYWdtZW50XCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgW25hdHVyYWxJY29uXT1cImljb25cIj48L21hdC1pY29uPlxuICAgIDwvYT5cblxuICAgIDwhLS0gQ2xpY2sgd2l0aCBsYWJlbC4uLiAtLT5cbiAgICA8YSAqbmdJZj1cInR5cGUgPT09ICdjbGljaycgJiYgbGFiZWxcIiBbY29sb3JdPVwiY29sb3JcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2suZW1pdCgkZXZlbnQpXCIgbWF0LWJ1dHRvbj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIFtuYXR1cmFsSWNvbl09XCJpY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgPC9hPlxuXG4gICAgPCEtLSAuLi4gYW5kIHdpdGhvdXQgbGFiZWwgLS0+XG4gICAgPGEgKm5nSWY9XCJ0eXBlID09PSAnY2xpY2snICYmICFsYWJlbFwiIChjbGljayk9XCJidXR0b25DbGljay5lbWl0KCRldmVudClcIiBtYXQtaWNvbi1idXR0b24+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25cIiBbbmF0dXJhbEljb25dPVwiaWNvblwiPjwvbWF0LWljb24+XG4gICAgPC9hPlxuXG4gICAgPCEtLSBFeHRlcm5hbCBsaW5rIHdpdGggbGFiZWwuLi4gLS0+XG4gICAgPGEgKm5nSWY9XCJ0eXBlID09PSAnaHJlZicgJiYgbGFiZWxcIiBbYXR0ci5ocmVmXT1cImhyZWZcIiBbY29sb3JdPVwiY29sb3JcIiBtYXQtYnV0dG9uIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgW25hdHVyYWxJY29uXT1cImljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICA8L2E+XG5cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICA8YSAqbmdJZj1cInR5cGUgPT09ICdocmVmJyAmJiAhbGFiZWxcIiBbYXR0ci5ocmVmXT1cImhyZWZcIiBbY29sb3JdPVwiY29sb3JcIiBtYXQtaWNvbi1idXR0b24gdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25cIiBbbmF0dXJhbEljb25dPVwiaWNvblwiPjwvbWF0LWljb24+XG4gICAgPC9hPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJyYWlzZWRcIj5cbiAgICA8IS0tIEFwcCByb3V0ZWQgbGluayB3aXRoIGxhYmVsLi4uIC0tPlxuICAgIDxhXG4gICAgICAgICpuZ0lmPVwidHlwZSA9PT0gJ3JvdXRlckxpbmsnICYmIGxhYmVsXCJcbiAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInF1ZXJ5UGFyYW1zXCJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwicXVlcnlQYXJhbXNIYW5kbGluZ1wiXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5hdmlnYXRlXCJcbiAgICAgICAgW2ZyYWdtZW50XT1cImZyYWdtZW50XCJcbiAgICAgICAgW3ByZXNlcnZlRnJhZ21lbnRdPVwicHJlc2VydmVGcmFnbWVudFwiXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgW25hdHVyYWxJY29uXT1cImljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICA8L2E+XG5cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICA8YVxuICAgICAgICAqbmdJZj1cInR5cGUgPT09ICdyb3V0ZXJMaW5rJyAmJiAhbGFiZWxcIlxuICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICBbcXVlcnlQYXJhbXNdPVwicXVlcnlQYXJhbXNcIlxuICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJxdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgW3JvdXRlckxpbmtdPVwibmF2aWdhdGVcIlxuICAgICAgICBbZnJhZ21lbnRdPVwiZnJhZ21lbnRcIlxuICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJwcmVzZXJ2ZUZyYWdtZW50XCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16NFwiXG4gICAgPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgW25hdHVyYWxJY29uXT1cImljb25cIj48L21hdC1pY29uPlxuICAgIDwvYT5cbiAgICA8IS0tIENsaWNrIHdpdGggbGFiZWwuLi4gLS0+XG4gICAgPGEgKm5nSWY9XCJ0eXBlID09PSAnY2xpY2snICYmIGxhYmVsXCIgW2NvbG9yXT1cImNvbG9yXCIgKGNsaWNrKT1cImJ1dHRvbkNsaWNrLmVtaXQoJGV2ZW50KVwiIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgW25hdHVyYWxJY29uXT1cImljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICA8L2E+XG5cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICA8YVxuICAgICAgICAqbmdJZj1cInR5cGUgPT09ICdjbGljaycgJiYgIWxhYmVsXCJcbiAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgKGNsaWNrKT1cImJ1dHRvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejRcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIFtuYXR1cmFsSWNvbl09XCJpY29uXCI+PC9tYXQtaWNvbj5cbiAgICA8L2E+XG5cbiAgICA8IS0tIEV4dGVybmFsIGxpbmsgd2l0aCBsYWJlbC4uLiAtLT5cbiAgICA8YSAqbmdJZj1cInR5cGUgPT09ICdocmVmJyAmJiBsYWJlbFwiIFthdHRyLmhyZWZdPVwiaHJlZlwiIFtjb2xvcl09XCJjb2xvclwiIG1hdC1yYWlzZWQtYnV0dG9uIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgW25hdHVyYWxJY29uXT1cImljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICA8L2E+XG5cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICA8YVxuICAgICAgICAqbmdJZj1cInR5cGUgPT09ICdocmVmJyAmJiAhbGFiZWxcIlxuICAgICAgICBbYXR0ci5ocmVmXT1cImhyZWZcIlxuICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo0XCJcbiAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICA+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25cIiBbbmF0dXJhbEljb25dPVwiaWNvblwiPjwvbWF0LWljb24+XG4gICAgPC9hPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3RhYmxlLWJ1dHRvbi90YWJsZS1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvdGFibGUtYnV0dG9uL3RhYmxlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBSW5HOzs7Ozs7Ozs7R0FTRztBQU9ILE1BQU0sT0FBTywyQkFBMkI7SUFOeEM7UUFPb0IsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsd0JBQW1CLEdBQXdCLEVBQUUsQ0FBQztRQUk5QyxhQUFRLEdBQTZCLEVBQUUsQ0FBQztRQUV4QyxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRUwsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBQ2hFLFNBQUksR0FBNkMsTUFBTSxDQUFDO0tBYWxFO0lBWFUsV0FBVztRQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQy9ELElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1NBQzVCO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1NBQ3RCO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztTQUN2QjthQUFNO1lBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7U0FDdEI7SUFDTCxDQUFDOzt3SEF6QlEsMkJBQTJCOzRHQUEzQiwyQkFBMkIsb1lDcEJ4QyxxaEtBcUtBOzJGRGpKYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0ksc0JBQXNCLGlCQUdqQixpQkFBaUIsQ0FBQyxJQUFJOzhCQUdyQixXQUFXO3NCQUExQixLQUFLO2dCQUNVLG1CQUFtQjtzQkFBbEMsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNvQixXQUFXO3NCQUFwQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BhcmFtcywgUXVlcnlQYXJhbXNIYW5kbGluZywgUm91dGVyTGlua30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuLyoqXG4gKiBCdXR0b24gdGhhdCBmaXRzIHdlbGwgaW4gYSBgPG1hdC10YWJsZT5gIGFuZCBzdXBwb3J0IGVpdGhlclxuICogcm91dGUgbmF2aWdhdGlvbiB2aWEgYG5hdmlnYXRlYCwgb3IgZXh0ZXJuYWwgVVJMIHZpYSBgaHJlZmAsXG4gKiBvciBjYWxsYmFjayB2aWEgYGJ1dHRvbkNsaWNrYC5cbiAqXG4gKiBJZiBuZWl0aGVyIGBuYXZpZ2F0ZWAgbm9yIGBocmVmYCBub3IgYGJ1dHRvbkNsaWNrYCBoYXZlIGEgbWVhbmluZ2Z1bCB2YWx1ZSwgdGhlblxuICogaXQgd2lsbCBzaG93IHRoZSBpY29uIGFuZC9vciBsYWJlbCBpbiBhIGA8c3Bhbj5gIGluc3RlYWQgb2YgYSBidXR0b24uXG4gKlxuICogRXh0ZXJuYWwgVVJMIHdpbGwgYWx3YXlzIGJlIG9wZW5lZCBpbiBuZXcgdGFiLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtdGFibGUtYnV0dG9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsVGFibGVCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIHB1YmxpYyBxdWVyeVBhcmFtczogUGFyYW1zID0ge307XG4gICAgQElucHV0KCkgcHVibGljIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFF1ZXJ5UGFyYW1zSGFuZGxpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWw/OiBzdHJpbmcgfCBudWxsO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpY29uPzogc3RyaW5nIHwgbnVsbDtcbiAgICBASW5wdXQoKSBwdWJsaWMgaHJlZj86IHN0cmluZyB8IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIG5hdmlnYXRlOiBSb3V0ZXJMaW5rWydyb3V0ZXJMaW5rJ10gPSBbXTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZnJhZ21lbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgcHVibGljIHByZXNlcnZlRnJhZ21lbnQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcmFpc2VkID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGNvbG9yOiBUaGVtZVBhbGV0dGU7XG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBidXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgICBwdWJsaWMgdHlwZTogJ3JvdXRlckxpbmsnIHwgJ2hyZWYnIHwgJ2NsaWNrJyB8ICdub25lJyA9ICdub25lJztcblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdGU/Lmxlbmd0aCB8fCBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5UGFyYW1zKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9ICdyb3V0ZXJMaW5rJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhyZWYpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9ICdocmVmJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1dHRvbkNsaWNrLm9ic2VydmVkKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSAnY2xpY2snO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gJ25vbmUnO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPCEtLSBCZWNhdXNlIGRpcmVjdGl2ZXMgY2FuJ3QgYmUgYXBwbGllZCBjb25kaXRpb25hbGx5IChyb3V0ZXJMaW5rLCBtYXQtYnV0dG9uIGFuZCBtYXQtaWNvbi1idXR0b24pLCB3ZSBoYXZlIHRvIHVzZSBkaWZmZXJlbnQgZWxlbWVudHMgLS0+XG5cbjwhLS0gRWRnZSBjYXNlIG9mIGEgYnV0dG9uIHdpdGhvdXQgYW55IGtpbmQgb2YgbGluayBhdCBhbGwgLS0+XG48c3BhbiAqbmdJZj1cInR5cGUgPT09ICdub25lJ1wiPlxuICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25cIiBbbmF0dXJhbEljb25dPVwiaWNvblwiPjwvbWF0LWljb24+XG4gICAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuPC9zcGFuPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIXJhaXNlZFwiPlxuICAgIDwhLS0gQXBwIHJvdXRlZCBsaW5rIHdpdGggbGFiZWwuLi4gLS0+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAncm91dGVyTGluaycgJiYgbGFiZWxcIlxuICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICBbcXVlcnlQYXJhbXNdPVwicXVlcnlQYXJhbXNcIlxuICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJxdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgW3JvdXRlckxpbmtdPVwibmF2aWdhdGVcIlxuICAgICAgICBbZnJhZ21lbnRdPVwiZnJhZ21lbnRcIlxuICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJwcmVzZXJ2ZUZyYWdtZW50XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgbWF0LWJ1dHRvblxuICAgID5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIFtuYXR1cmFsSWNvbl09XCJpY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgPC9hPlxuXG4gICAgPCEtLSAuLi4gYW5kIHdpdGhvdXQgbGFiZWwgLS0+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAncm91dGVyTGluaycgJiYgIWxhYmVsXCJcbiAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInF1ZXJ5UGFyYW1zXCJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwicXVlcnlQYXJhbXNIYW5kbGluZ1wiXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5hdmlnYXRlXCJcbiAgICAgICAgW2ZyYWdtZW50XT1cImZyYWdtZW50XCJcbiAgICAgICAgW3ByZXNlcnZlRnJhZ21lbnRdPVwicHJlc2VydmVGcmFnbWVudFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgID5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIFtuYXR1cmFsSWNvbl09XCJpY29uXCI+PC9tYXQtaWNvbj5cbiAgICA8L2E+XG5cbiAgICA8IS0tIENsaWNrIHdpdGggbGFiZWwuLi4gLS0+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAnY2xpY2snICYmIGxhYmVsXCJcbiAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgKGNsaWNrKT1cImJ1dHRvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIG1hdC1idXR0b25cbiAgICA+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25cIiBbbmF0dXJhbEljb25dPVwiaWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgIDwvYT5cblxuICAgIDwhLS0gLi4uIGFuZCB3aXRob3V0IGxhYmVsIC0tPlxuICAgIDxhICpuZ0lmPVwidHlwZSA9PT0gJ2NsaWNrJyAmJiAhbGFiZWxcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2suZW1pdCgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgbWF0LWljb24tYnV0dG9uPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgW25hdHVyYWxJY29uXT1cImljb25cIj48L21hdC1pY29uPlxuICAgIDwvYT5cblxuICAgIDwhLS0gRXh0ZXJuYWwgbGluayB3aXRoIGxhYmVsLi4uIC0tPlxuICAgIDxhXG4gICAgICAgICpuZ0lmPVwidHlwZSA9PT0gJ2hyZWYnICYmIGxhYmVsXCJcbiAgICAgICAgW2F0dHIuaHJlZl09XCJocmVmXCJcbiAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIFtuYXR1cmFsSWNvbl09XCJpY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgPC9hPlxuXG4gICAgPCEtLSAuLi4gYW5kIHdpdGhvdXQgbGFiZWwgLS0+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAnaHJlZicgJiYgIWxhYmVsXCJcbiAgICAgICAgW2F0dHIuaHJlZl09XCJocmVmXCJcbiAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgW25hdHVyYWxJY29uXT1cImljb25cIj48L21hdC1pY29uPlxuICAgIDwvYT5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwicmFpc2VkXCI+XG4gICAgPCEtLSBBcHAgcm91dGVkIGxpbmsgd2l0aCBsYWJlbC4uLiAtLT5cbiAgICA8YVxuICAgICAgICAqbmdJZj1cInR5cGUgPT09ICdyb3V0ZXJMaW5rJyAmJiBsYWJlbFwiXG4gICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgIFtxdWVyeVBhcmFtc109XCJxdWVyeVBhcmFtc1wiXG4gICAgICAgIFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cInF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICBbcm91dGVyTGlua109XCJuYXZpZ2F0ZVwiXG4gICAgICAgIFtmcmFnbWVudF09XCJmcmFnbWVudFwiXG4gICAgICAgIFtwcmVzZXJ2ZUZyYWdtZW50XT1cInByZXNlcnZlRnJhZ21lbnRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgID5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIFtuYXR1cmFsSWNvbl09XCJpY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgPC9hPlxuXG4gICAgPCEtLSAuLi4gYW5kIHdpdGhvdXQgbGFiZWwgLS0+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAncm91dGVyTGluaycgJiYgIWxhYmVsXCJcbiAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInF1ZXJ5UGFyYW1zXCJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwicXVlcnlQYXJhbXNIYW5kbGluZ1wiXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5hdmlnYXRlXCJcbiAgICAgICAgW2ZyYWdtZW50XT1cImZyYWdtZW50XCJcbiAgICAgICAgW3ByZXNlcnZlRnJhZ21lbnRdPVwicHJlc2VydmVGcmFnbWVudFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejRcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIFtuYXR1cmFsSWNvbl09XCJpY29uXCI+PC9tYXQtaWNvbj5cbiAgICA8L2E+XG4gICAgPCEtLSBDbGljayB3aXRoIGxhYmVsLi4uIC0tPlxuICAgIDxhXG4gICAgICAgICpuZ0lmPVwidHlwZSA9PT0gJ2NsaWNrJyAmJiBsYWJlbFwiXG4gICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJidXR0b25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgID5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIFtuYXR1cmFsSWNvbl09XCJpY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgPC9hPlxuXG4gICAgPCEtLSAuLi4gYW5kIHdpdGhvdXQgbGFiZWwgLS0+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAnY2xpY2snICYmICFsYWJlbFwiXG4gICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJidXR0b25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo0XCJcbiAgICA+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25cIiBbbmF0dXJhbEljb25dPVwiaWNvblwiPjwvbWF0LWljb24+XG4gICAgPC9hPlxuXG4gICAgPCEtLSBFeHRlcm5hbCBsaW5rIHdpdGggbGFiZWwuLi4gLS0+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAnaHJlZicgJiYgbGFiZWxcIlxuICAgICAgICBbYXR0ci5ocmVmXT1cImhyZWZcIlxuICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIFtuYXR1cmFsSWNvbl09XCJpY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgPC9hPlxuXG4gICAgPCEtLSAuLi4gYW5kIHdpdGhvdXQgbGFiZWwgLS0+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAnaHJlZicgJiYgIWxhYmVsXCJcbiAgICAgICAgW2F0dHIuaHJlZl09XCJocmVmXCJcbiAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16NFwiXG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgW25hdHVyYWxJY29uXT1cImljb25cIj48L21hdC1pY29uPlxuICAgIDwvYT5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -2,7 +2,7 @@ import { gql } from 'apollo-angular';
|
|
|
2
2
|
import { NetworkStatus } from '@apollo/client/core';
|
|
3
3
|
import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
|
|
4
4
|
import { defaults, merge, mergeWith, omit, pick } from 'lodash-es';
|
|
5
|
-
import { catchError, combineLatest, EMPTY, first, Observable, of } from 'rxjs';
|
|
5
|
+
import { catchError, combineLatest, EMPTY, first, from, Observable, of } from 'rxjs';
|
|
6
6
|
import { debounceTime, filter, map, shareReplay, switchMap, takeWhile, tap } from 'rxjs/operators';
|
|
7
7
|
import { NaturalQueryVariablesManager } from '../classes/query-variable-manager';
|
|
8
8
|
import { makePlural, mergeOverrideArray, relationsToIds, upperCaseFirstLetter } from '../classes/utility';
|
|
@@ -314,9 +314,11 @@ export class NaturalAbstractModelService {
|
|
|
314
314
|
mutation: this.deleteMutation,
|
|
315
315
|
variables: variables,
|
|
316
316
|
})
|
|
317
|
-
.pipe(
|
|
318
|
-
|
|
319
|
-
|
|
317
|
+
.pipe(
|
|
318
|
+
// Delay the observable until Apollo refetch is completed
|
|
319
|
+
switchMap(result => {
|
|
320
|
+
const mappedResult = this.mapDelete(result);
|
|
321
|
+
return from(this.apollo.client.reFetchObservableQueries()).pipe(map(() => mappedResult));
|
|
320
322
|
}));
|
|
321
323
|
}
|
|
322
324
|
/**
|
|
@@ -486,4 +488,4 @@ export class NaturalAbstractModelService {
|
|
|
486
488
|
}
|
|
487
489
|
}
|
|
488
490
|
}
|
|
489
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUyxHQUFHLEVBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFjLGFBQWEsRUFBd0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGdCQUFnQixFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEgsT0FBTyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFtQixNQUFNLE1BQU0sQ0FBQztBQUMvRixPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFDLDRCQUE0QixFQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBRS9GLE9BQU8sRUFBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUEwQnhHLE1BQU0sT0FBZ0IsMkJBQTJCO0lBaUI3QyxZQUN1QixNQUFjLEVBQ2Qsc0JBQThDLEVBQzlDLElBQVksRUFDWixRQUE2QixFQUM3QixRQUE2QixFQUM3QixjQUFtQyxFQUNuQyxjQUFtQyxFQUNuQyxjQUFtQztRQVBuQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3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RUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFFLEVBQUUsRUFBUyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FDekUsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWUsQ0FBQyxLQUEwQjtRQUM5QyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1NBQ25HO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcG9sbG8sIGdxbCwgTXV0YXRpb25SZXN1bHR9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7RmV0Y2hSZXN1bHQsIE5ldHdvcmtTdGF0dXMsIFdhdGNoUXVlcnlGZXRjaFBvbGljeX0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JGbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtEb2N1bWVudE5vZGV9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHtkZWZhdWx0cywgbWVyZ2UsIG1lcmdlV2l0aCwgb21pdCwgcGlja30gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgY29tYmluZUxhdGVzdCwgRU1QVFksIGZpcnN0LCBPYnNlcnZhYmxlLCBvZiwgT3BlcmF0b3JGdW5jdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRha2VXaGlsZSwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIsIFF1ZXJ5VmFyaWFibGVzfSBmcm9tICcuLi9jbGFzc2VzL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge21ha2VQbHVyYWwsIG1lcmdlT3ZlcnJpZGVBcnJheSwgcmVsYXRpb25zVG9JZHMsIHVwcGVyQ2FzZUZpcnN0TGV0dGVyfSBmcm9tICcuLi9jbGFzc2VzL3V0aWxpdHknO1xuaW1wb3J0IHtQYWdpbmF0ZWREYXRhfSBmcm9tICcuLi9jbGFzc2VzL2RhdGEtc291cmNlJztcbmltcG9ydCB7TmF0dXJhbERlYm91bmNlU2VydmljZX0gZnJvbSAnLi9kZWJvdW5jZS5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtVmFsaWRhdG9ycyB7XG4gICAgW2tleTogc3RyaW5nXTogVmFsaWRhdG9yRm5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtQXN5bmNWYWxpZGF0b3JzIHtcbiAgICBba2V5OiBzdHJpbmddOiBBc3luY1ZhbGlkYXRvckZuW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVzV2l0aElucHV0IHtcbiAgICBpbnB1dDogTGl0ZXJhbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtQ29udHJvbHMge1xuICAgIFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbDtcbn1cblxuaW50ZXJmYWNlIFJlc29sdmU8VE9uZT4ge1xuICAgIG1vZGVsOiBUT25lO1xufVxuXG5leHBvcnQgdHlwZSBXaXRoSWQ8VD4gPSB7aWQ6IHN0cmluZ30gJiBUO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlPFxuICAgIFRvbmUsXG4gICAgVm9uZSBleHRlbmRzIHtpZDogc3RyaW5nfSxcbiAgICBUYWxsIGV4dGVuZHMgUGFnaW5hdGVkRGF0YTxMaXRlcmFsPixcbiAgICBWYWxsIGV4dGVuZHMgUXVlcnlWYXJpYWJsZXMsXG4gICAgVGNyZWF0ZSxcbiAgICBWY3JlYXRlIGV4dGVuZHMgVmFyaWFibGVzV2l0aElucHV0LFxuICAgIFR1cGRhdGUsXG4gICAgVnVwZGF0ZSBleHRlbmRzIHtpZDogc3RyaW5nOyBpbnB1dDogTGl0ZXJhbH0sXG4gICAgVGRlbGV0ZSxcbiAgICBWZGVsZXRlIGV4dGVuZHMge2lkczogc3RyaW5nW119LFxuPiB7XG4gICAgLyoqXG4gICAgICogU3RvcmUgdGhlIGNyZWF0aW9uIG11dGF0aW9ucyB0aGF0IGFyZSBwZW5kaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcmVhdGluZ0NhY2hlID0gbmV3IE1hcDxWY3JlYXRlWydpbnB1dCddIHwgV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+LCBPYnNlcnZhYmxlPFRjcmVhdGU+PigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBvbGxvOiBBcG9sbG8sXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBuYXR1cmFsRGVib3VuY2VTZXJ2aWNlOiBOYXR1cmFsRGVib3VuY2VTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb25lUXVlcnk6IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBhbGxRdWVyeTogRG9jdW1lbnROb2RlIHwgbnVsbCxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNyZWF0ZU11dGF0aW9uOiBEb2N1bWVudE5vZGUgfCBudWxsLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdXBkYXRlTXV0YXRpb246IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBkZWxldGVNdXRhdGlvbjogRG9jdW1lbnROb2RlIHwgbnVsbCxcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgZ2V0Q29uc29saWRhdGVkRm9yQ2xpZW50KCk6IExpdGVyYWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0aGlzLmdldERlZmF1bHRGb3JTZXJ2ZXIoKSwgdGhpcy5nZXREZWZhdWx0Rm9yQ2xpZW50KCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgaW5kaXZpZHVhbCBmaWVsZHMgdmFsaWRhdG9yc1xuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgZ2V0Rm9ybVZhbGlkYXRvcnMobW9kZWw/OiBMaXRlcmFsKTogRm9ybVZhbGlkYXRvcnMge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBpbmRpdmlkdWFsIGFzeW5jIGZpZWxkcyB2YWxpZGF0b3JzXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBnZXRGb3JtQXN5bmNWYWxpZGF0b3JzKG1vZGVsPzogTGl0ZXJhbCk6IEZvcm1Bc3luY1ZhbGlkYXRvcnMge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBncm91cGVkIGZpZWxkcyB2YWxpZGF0b3JzIChsaWtlIHBhc3N3b3JkICsgY29uZmlybSBwYXNzd29yZClcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldEZvcm1Hcm91cFZhbGlkYXRvcnMobW9kZWw/OiBMaXRlcmFsKTogVmFsaWRhdG9yRm5bXSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGFzeW5jIGdyb3VwIGZpZWxkcyB2YWxpZGF0b3JzIChsaWtlIHVuaXF1ZSBjb25zdHJhaW50IG9uIG11bHRpcGxlIGNvbHVtbnMpXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBnZXRGb3JtR3JvdXBBc3luY1ZhbGlkYXRvcnMobW9kZWw/OiBMaXRlcmFsKTogQXN5bmNWYWxpZGF0b3JGbltdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtQ29uZmlnKG1vZGVsOiBMaXRlcmFsKTogRm9ybUNvbnRyb2xzIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRDb25zb2xpZGF0ZWRGb3JDbGllbnQoKTtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuZ2V0Rm9ybVZhbGlkYXRvcnMobW9kZWwpO1xuICAgICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSB0aGlzLmdldEZvcm1Bc3luY1ZhbGlkYXRvcnMobW9kZWwpO1xuICAgICAgICBjb25zdCBjb250cm9sczogRm9ybUNvbnRyb2xzID0ge307XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gbW9kZWwucGVybWlzc2lvbnMgPyAhbW9kZWwucGVybWlzc2lvbnMudXBkYXRlIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKG1vZGVsLmlkKSB7XG4gICAgICAgICAgICBjb250cm9sc1snaWQnXSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woe3ZhbHVlOiBtb2RlbC5pZCwgZGlzYWJsZWQ6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbmZpZ3VyZSBmb3JtIGZvciBlYWNoIGZpZWxkIG9mIG1vZGVsXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kZWxba2V5XSAhPT0gdW5kZWZpbmVkID8gbW9kZWxba2V5XSA6IHZhbHVlc1trZXldO1xuICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdHlwZW9mIHZhbGlkYXRvcnNba2V5XSAhPT0gJ3VuZGVmaW5lZCcgPyB2YWxpZGF0b3JzW2tleV0gOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgYXN5bmNWYWxpZGF0b3IgPSB0eXBlb2YgYXN5bmNWYWxpZGF0b3JzW2tleV0gIT09ICd1bmRlZmluZWQnID8gYXN5bmNWYWxpZGF0b3JzW2tleV0gOiBudWxsO1xuXG4gICAgICAgICAgICBjb250cm9sc1trZXldID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChmb3JtU3RhdGUsIHZhbGlkYXRvciwgYXN5bmNWYWxpZGF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uZmlndXJlIGZvcm0gZm9yIGV4dHJhIHZhbGlkYXRvcnMgdGhhdCBhcmUgbm90IG9uIGEgc3BlY2lmaWMgZmllbGRcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsaWRhdG9ycykpIHtcbiAgICAgICAgICAgIGlmICghY29udHJvbHNba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1TdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1vZGVsW2tleV0gPyBtb2RlbFtrZXldIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb250cm9sc1trZXldID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChmb3JtU3RhdGUsIHZhbGlkYXRvcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhc3luY1ZhbGlkYXRvcnMpKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbHNba2V5XSAmJiBhc3luY1ZhbGlkYXRvcnNba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xzW2tleV0uc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9yc1trZXldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbW9kZWxba2V5XSA/IG1vZGVsW2tleV0gOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgbnVsbCwgYXN5bmNWYWxpZGF0b3JzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSB0aGUgZmluYWwgRm9ybUdyb3VwIGZvciB0aGUgb2JqZWN0LCBpbmNsdWRpbmcgYWxsIHZhbGlkYXRvcnNcbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCAqKm5vdCoqIGJlIG92ZXJyaWRkZW4sIGJ1dCBpbnN0ZWFkIGBnZXRGb3JtQ29uZmlnYCxcbiAgICAgKiBgZ2V0Rm9ybUdyb3VwVmFsaWRhdG9yc2AsIGBnZXRGb3JtR3JvdXBBc3luY1ZhbGlkYXRvcnNgIG1pZ2h0IGJlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGb3JtR3JvdXAobW9kZWw6IExpdGVyYWwpOiBVbnR5cGVkRm9ybUdyb3VwIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbmZpZyA9IHRoaXMuZ2V0Rm9ybUNvbmZpZyhtb2RlbCk7XG4gICAgICAgIHJldHVybiBuZXcgVW50eXBlZEZvcm1Hcm91cChmb3JtQ29uZmlnLCB7XG4gICAgICAgICAgICB2YWxpZGF0b3JzOiB0aGlzLmdldEZvcm1Hcm91cFZhbGlkYXRvcnMobW9kZWwpLFxuICAgICAgICAgICAgYXN5bmNWYWxpZGF0b3JzOiB0aGlzLmdldEZvcm1Hcm91cEFzeW5jVmFsaWRhdG9ycyhtb2RlbCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIHNpbmdsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIElmIGF2YWlsYWJsZSBpdCB3aWxsIGVtaXQgb2JqZWN0IGZyb20gY2FjaGUgaW1tZWRpYXRlbHksIHRoZW4gaXRcbiAgICAgKiB3aWxsICoqYWx3YXlzKiogZmV0Y2ggZnJvbSBuZXR3b3JrIGFuZCB0aGVuIHRoZSBvYnNlcnZhYmxlIHdpbGwgYmUgY29tcGxldGVkXG4gICAgICovXG4gICAgcHVibGljIGdldE9uZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxUb25lPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUoaWQpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLm9uZVF1ZXJ5KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZXNGb3JPbmUoaWQpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAodmFyaWFibGVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLm9uZVF1ZXJ5KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwb2xsby53YXRjaFF1ZXJ5PHVua25vd24sIFZvbmU+KHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMub25lUXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogJ2NhY2hlLWFuZC1uZXR3b3JrJyxcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZldGNoUG9saWN5OiAnY2FjaGUtb25seScsXG4gICAgICAgICAgICAgICAgfSkudmFsdWVDaGFuZ2VzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWx0ZXIocmVzdWx0ID0+ICEhcmVzdWx0LmRhdGEpLFxuICAgICAgICAgICAgdGFrZVdoaWxlKHJlc3VsdCA9PiByZXN1bHQubmV0d29ya1N0YXR1cyAhPT0gTmV0d29ya1N0YXR1cy5yZWFkeSwgdHJ1ZSksXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IChyZXN1bHQuZGF0YSBhcyBMaXRlcmFsKVt0aGlzLm5hbWVdKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBjb2xsZWN0aW9uIG9mIG9iamVjdHNcbiAgICAgKlxuICAgICAqIEl0IHdpbGwgKiphbHdheXMqKiBmZXRjaCBmcm9tIG5ldHdvcmsgYW5kIHRoZW4gdGhlIG9ic2VydmFibGUgd2lsbCBiZSBjb21wbGV0ZWQuXG4gICAgICogTm8gY2FjaGUgaXMgZXZlciB1c2VkLCBzbyBpdCdzIHNsb3cgYnV0IGNvcnJlY3QuXG4gICAgICovXG4gICAgcHVibGljIGdldEFsbChxdWVyeVZhcmlhYmxlc01hbmFnZXI6IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8VmFsbD4pOiBPYnNlcnZhYmxlPFRhbGw+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5hbGxRdWVyeSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKHBhcnRpYWxWYXJpYWJsZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuYWxsUXVlcnkpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ29weSBtYW5hZ2VyIHRvIHByZXZlbnQgdG8gYXBwbHkgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGV4dGVybmFsIFF1ZXJ5VmFyaWFibGVzTWFuYWdlclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPihxdWVyeVZhcmlhYmxlc01hbmFnZXIpO1xuICAgICAgICAgICAgICAgIG1hbmFnZXIubWVyZ2UoJ3BhcnRpYWwtdmFyaWFibGVzJywgcGFydGlhbFZhcmlhYmxlcyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG8ucXVlcnk8dW5rbm93biwgVmFsbD4oe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5hbGxRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiBtYW5hZ2VyLnZhcmlhYmxlcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLm1hcEFsbCgpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0c1xuICAgICAqXG4gICAgICogRXZlcnkgdGltZSB0aGUgb2JzZXJ2YWJsZSB2YXJpYWJsZXMgY2hhbmdlLCBhbmQgdGhleSBhcmUgbm90IHVuZGVmaW5lZCxcbiAgICAgKiBpdCB3aWxsIHJldHVybiByZXN1bHQgZnJvbSBjYWNoZSwgdGhlbiBpdCB3aWxsICoqYWx3YXlzKiogZmV0Y2ggZnJvbSBuZXR3b3JrLlxuICAgICAqXG4gICAgICogWW91IG11c3Qgc3Vic2NyaWJlIHRvIHN0YXJ0IGdldHRpbmcgcmVzdWx0cyAoYW5kIGZldGNoIGZyb20gbmV0d29yaykuXG4gICAgICpcbiAgICAgKiBUaGUgb2JzZXJ2YWJsZSByZXN1bHQgd2lsbCBvbmx5IGNvbXBsZXRlIHdoZW4gdW5zdWJzY3JpYmluZy4gVGhhdCBtZWFucyB5b3UgKiptdXN0KiogdW5zdWJzY3JpYmUuXG4gICAgICovXG4gICAgcHVibGljIHdhdGNoQWxsKFxuICAgICAgICBxdWVyeVZhcmlhYmxlc01hbmFnZXI6IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8VmFsbD4sXG4gICAgICAgIGZldGNoUG9saWN5OiBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3kgPSAnY2FjaGUtYW5kLW5ldHdvcmsnLFxuICAgICk6IE9ic2VydmFibGU8VGFsbD4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmFsbFF1ZXJ5KTtcblxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICB2YXJpYWJsZXM6IHF1ZXJ5VmFyaWFibGVzTWFuYWdlci52YXJpYWJsZXMucGlwZShcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdmVyeSBmYXN0IHZhcmlhYmxlIGNoYW5nZXNcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjApLFxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHZhcmlhYmxlcyB0byBiZSBkZWZpbmVkIHRvIHByZXZlbnQgZHVwbGljYXRlIHF1ZXJ5OiB3aXRoIGFuZCB3aXRob3V0IHZhcmlhYmxlc1xuICAgICAgICAgICAgICAgIC8vIE51bGwgaXMgYWNjZXB0ZWQgdmFsdWUgZm9yIFwibm8gdmFyaWFibGVzXCJcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFyaWFibGVzID0+IHR5cGVvZiB2YXJpYWJsZXMgIT09ICd1bmRlZmluZWQnKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBwYXJ0aWFsVmFyaWFibGVzOiB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JBbGwoKSxcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEFwcGx5IHBhcnRpYWwgdmFyaWFibGVzIGZyb20gc2VydmljZVxuICAgICAgICAgICAgICAgIC8vIENvcHkgbWFuYWdlciB0byBwcmV2ZW50IHRvIGFwcGx5IGludGVybmFsIHZhcmlhYmxlcyB0byBleHRlcm5hbCBRdWVyeVZhcmlhYmxlc01hbmFnZXJcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8VmFsbD4ocXVlcnlWYXJpYWJsZXNNYW5hZ2VyKTtcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLm1lcmdlKCdwYXJ0aWFsLXZhcmlhYmxlcycsIHJlc3VsdC5wYXJ0aWFsVmFyaWFibGVzKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuYWxsUXVlcnkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAgICAgICAgIC53YXRjaFF1ZXJ5PHVua25vd24sIFZhbGw+KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLmFsbFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiBtYW5hZ2VyLnZhcmlhYmxlcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiBmZXRjaFBvbGljeSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBFTVBUWSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIociA9PiAhIXIuZGF0YSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEFsbCgpLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbnMgYWxsb3cgdG8gcXVpY2tseSBjcmVhdGUgb3IgdXBkYXRlIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBNYW5hZ2VzIGEgXCJjcmVhdGlvbiBpcyBwZW5kaW5nXCIgc3RhdHVzLCBhbmQgdXBkYXRlIHdoZW4gY3JlYXRpb24gaXMgcmVhZHkuXG4gICAgICogVXNlcyByZWd1bGFyIHVwZGF0ZS91cGRhdGVOb3cgYW5kIGNyZWF0ZSBtZXRob2RzLlxuICAgICAqIFVzZWQgbWFpbmx5IHdoZW4gZWRpdGluZyBtdWx0aXBsZSBvYmplY3RzIGluIHNhbWUgY29udHJvbGxlciAobGlrZSBpbiBlZGl0YWJsZSBhcnJheXMpXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZU9yVXBkYXRlKFxuICAgICAgICBvYmplY3Q6IFZjcmVhdGVbJ2lucHV0J10gfCBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4sXG4gICAgICAgIG5vdyA9IGZhbHNlLFxuICAgICk6IE9ic2VydmFibGU8VGNyZWF0ZSB8IFR1cGRhdGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3QpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmNyZWF0ZU11dGF0aW9uKTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy51cGRhdGVNdXRhdGlvbik7XG5cbiAgICAgICAgLy8gSWYgY3JlYXRpb24gaXMgcGVuZGluZywgbGlzdGVuIHRvIGNyZWF0aW9uIG9ic2VydmFibGUgYW5kIHdoZW4gcmVhZHksIGZpcmUgdXBkYXRlXG4gICAgICAgIGNvbnN0IHBlbmRpbmdDcmVhdGlvbiA9IHRoaXMuY3JlYXRpbmdDYWNoZS5nZXQob2JqZWN0KTtcbiAgICAgICAgaWYgKHBlbmRpbmdDcmVhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHBlbmRpbmdDcmVhdGlvbi5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShvYmplY3QgYXMgV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBvYmplY3QgaGFzIElkLCBqdXN0IHNhdmUgaXRcbiAgICAgICAgaWYgKCdpZCcgaW4gb2JqZWN0ICYmIG9iamVjdC5pZCkge1xuICAgICAgICAgICAgaWYgKG5vdykge1xuICAgICAgICAgICAgICAgIC8vIHVzZWQgbWFpbmx5IGZvciB0ZXN0cywgYmVjYXVzZSBsb2Rhc2ggZGVib3VuY2VkIHVzZWQgaW4gdXBkYXRlKCkgZG9lcyBub3Qgd29yayBmaW5lIHdpdGggZmFrZUFzeW5jIGFuZCB0aWNrKClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVOb3cob2JqZWN0IGFzIFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShvYmplY3QgYXMgV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIG9iamVjdCB3YXMgbm90IHNhdmluZywgYW5kIGhhcyBubyBJRCwgY3JlYXRlIGl0XG4gICAgICAgIGNvbnN0IGNyZWF0aW9uID0gdGhpcy5jcmVhdGUob2JqZWN0KS5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0aW5nQ2FjaGUuZGVsZXRlKG9iamVjdCk7IC8vIHJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBzdG9yZXMgY3JlYXRpbmcgb2JzZXJ2YWJsZSBpbiBhIGNhY2hlIHJlcGxheWFibGUgdmVyc2lvbiBvZiB0aGUgb2JzZXJ2YWJsZSxcbiAgICAgICAgLy8gc28gc2V2ZXJhbCB1cGRhdGUoKSBjYW4gc3Vic2NyaWJlIHRvIHRoZSBzYW1lIGNyZWF0aW9uXG4gICAgICAgIHRoaXMuY3JlYXRpbmdDYWNoZS5zZXQob2JqZWN0LCBjcmVhdGlvbi5waXBlKHNoYXJlUmVwbGF5KCkpKTtcblxuICAgICAgICByZXR1cm4gY3JlYXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIG9iamVjdCBpbiBEQiBhbmQgdGhlbiByZWZldGNoIHRoZSBsaXN0IG9mIG9iamVjdHNcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlKG9iamVjdDogVmNyZWF0ZVsnaW5wdXQnXSk6IE9ic2VydmFibGU8VGNyZWF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuY3JlYXRlTXV0YXRpb24pO1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7aW5wdXQ6IHRoaXMuZ2V0SW5wdXQob2JqZWN0KX0sXG4gICAgICAgICAgICB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JDcmVhdGlvbihvYmplY3QpLFxuICAgICAgICApIGFzIFZjcmVhdGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAubXV0YXRlPFRjcmVhdGUsIFZjcmVhdGU+KHtcbiAgICAgICAgICAgICAgICBtdXRhdGlvbjogdGhpcy5jcmVhdGVNdXRhdGlvbixcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlcyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcG9sbG8uY2xpZW50LnJlRmV0Y2hPYnNlcnZhYmxlUXVlcmllcygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPYmplY3QgPSB0aGlzLm1hcENyZWF0aW9uKHJlc3VsdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld09iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aChvYmplY3QsIG5ld09iamVjdCwgbWVyZ2VPdmVycmlkZUFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFuIG9iamVjdCwgYWZ0ZXIgYSBzaG9ydCBkZWJvdW5jZVxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUob2JqZWN0OiBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pOiBPYnNlcnZhYmxlPFR1cGRhdGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3QpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLnVwZGF0ZU11dGF0aW9uKTtcblxuICAgICAgICAvLyBLZWVwIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBkZWJvdW5jZWQgdXBkYXRlIGZ1bmN0aW9uXG4gICAgICAgIGNvbnN0IGlkID0gb2JqZWN0LmlkO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWxEZWJvdW5jZVNlcnZpY2UuZGVib3VuY2UodGhpcywgaWQsIHRoaXMudXBkYXRlTm93KG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhbiBvYmplY3QgaW1tZWRpYXRlbHkgd2hlbiBzdWJzY3JpYmluZ1xuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVOb3cob2JqZWN0OiBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pOiBPYnNlcnZhYmxlPFR1cGRhdGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3QpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLnVwZGF0ZU11dGF0aW9uKTtcblxuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBtZXJnZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogb2JqZWN0LmlkLFxuICAgICAgICAgICAgICAgIGlucHV0OiB0aGlzLmdldElucHV0KG9iamVjdCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5nZXRQYXJ0aWFsVmFyaWFibGVzRm9yVXBkYXRlKG9iamVjdCksXG4gICAgICAgICkgYXMgVnVwZGF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8VHVwZGF0ZSwgVnVwZGF0ZT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB0aGlzLnVwZGF0ZU11dGF0aW9uLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFJlc3VsdCA9IHRoaXMubWFwVXBkYXRlKHJlc3VsdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aChvYmplY3QsIG1hcHBlZFJlc3VsdCwgbWVyZ2VPdmVycmlkZUFycmF5KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFuIG9iamVjdCBidXQgd2l0aG91dCBhdXRvbWF0aWNhbGx5IGluamVjdGluZyB2YWx1ZXMgY29taW5nXG4gICAgICogZnJvbSBgZ2V0RGVmYXVsdEZvclNlcnZlcigpYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlUGFydGlhbGx5KG9iamVjdDogV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTogT2JzZXJ2YWJsZTxUdXBkYXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0KTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy51cGRhdGVNdXRhdGlvbik7XG5cbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0ge1xuICAgICAgICAgICAgaWQ6IG9iamVjdC5pZCxcbiAgICAgICAgICAgIGlucHV0OiBvbWl0KHJlbGF0aW9uc1RvSWRzKG9iamVjdCksICdpZCcpLFxuICAgICAgICB9IGFzIFZ1cGRhdGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAubXV0YXRlPFR1cGRhdGUsIFZ1cGRhdGU+KHtcbiAgICAgICAgICAgICAgICBtdXRhdGlvbjogdGhpcy51cGRhdGVNdXRhdGlvbixcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlcyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcG9sbG8uY2xpZW50LnJlRmV0Y2hPYnNlcnZhYmxlUXVlcmllcygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBVcGRhdGUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlIG9iamVjdHMgYW5kIHRoZW4gcmVmZXRjaCB0aGUgbGlzdCBvZiBvYmplY3RzXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZShvYmplY3RzOiB7aWQ6IHN0cmluZ31bXSk6IE9ic2VydmFibGU8VGRlbGV0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdHMpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmRlbGV0ZU11dGF0aW9uKTtcblxuICAgICAgICBjb25zdCBpZHMgPSBvYmplY3RzLm1hcChvID0+IHtcbiAgICAgICAgICAgIC8vIENhbmNlbCBwZW5kaW5nIHVwZGF0ZVxuICAgICAgICAgICAgdGhpcy5uYXR1cmFsRGVib3VuY2VTZXJ2aWNlLmNhbmNlbCh0aGlzLCBvLmlkKTtcblxuICAgICAgICAgICAgcmV0dXJuIG8uaWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBtZXJnZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHM6IGlkcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JEZWxldGUob2JqZWN0cyksXG4gICAgICAgICkgYXMgVmRlbGV0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8VGRlbGV0ZSwgVmRlbGV0ZT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB0aGlzLmRlbGV0ZU11dGF0aW9uLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwRGVsZXRlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgbW9kZWwgYW5kIGl0ZW1zIHJlbGF0ZWQgdG8gdGhlIG1vZGVsLCBpZiB0aGUgaWQgaXMgcHJvdmlkZWQsIGluIG9yZGVyIHRvIHNob3cgYSBmb3JtXG4gICAgICovXG4gICAgcHVibGljIHJlc29sdmUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UmVzb2x2ZTxUb25lPj4ge1xuICAgICAgICAvLyBMb2FkIG1vZGVsIGlmIGlkIGlzIGdpdmVuXG4gICAgICAgIGxldCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFRvbmU+O1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIG9ic2VydmFibGUgPSB0aGlzLmdldE9uZShpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlID0gb2YodGhpcy5nZXRDb25zb2xpZGF0ZWRGb3JDbGllbnQoKSBhcyBUb25lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge21vZGVsOiByZXN1bHR9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIG9iamVjdCB0aGF0IG1hdGNoIHRoZSBHcmFwaFFMIGlucHV0IHR5cGUuXG4gICAgICogSXQgY3JlYXRlcyBhbiBvYmplY3Qgd2l0aCBtYW51YWxseSBmaWxsZWQgZGF0YSBhbmQgYWRkIHVuY29tcGxldGVkIGRhdGEgKGxpa2UgcmVxdWlyZWQgYXR0cmlidXRlcyB0aGF0IGNhbiBiZSBlbXB0eSBzdHJpbmdzKVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJbnB1dChvYmplY3Q6IExpdGVyYWwpOiBWY3JlYXRlWydpbnB1dCddIHwgVnVwZGF0ZVsnaW5wdXQnXSB7XG4gICAgICAgIC8vIENvbnZlcnQgcmVsYXRpb25zIHRvIHRoZWlyIElEcyBmb3IgbXV0YXRpb25cbiAgICAgICAgb2JqZWN0ID0gcmVsYXRpb25zVG9JZHMob2JqZWN0KTtcblxuICAgICAgICAvLyBQaWNrIG9ubHkgYXR0cmlidXRlcyB0aGF0IHdlIGNhbiBmaW5kIGluIHRoZSBlbXB0eSBvYmplY3RcbiAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIHByZXZlbnQgdG8gc2VsZWN0IGRhdGEgdGhhdCBoYXMgdW53YW50ZWQgYXR0cmlidXRlc1xuICAgICAgICBjb25zdCBlbXB0eU9iamVjdCA9IHRoaXMuZ2V0RGVmYXVsdEZvclNlcnZlcigpO1xuICAgICAgICBsZXQgaW5wdXQgPSBwaWNrKG9iamVjdCwgT2JqZWN0LmtleXMoZW1wdHlPYmplY3QpKTtcblxuICAgICAgICAvLyBDb21wbGV0ZSBhIHBvdGVudGlhbGx5IHVuY29tcGxldGVkIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gICAgICAgIGlucHV0ID0gZGVmYXVsdHMoaW5wdXQsIGVtcHR5T2JqZWN0KTtcblxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBtYXRjaGluZyB0aGUgcXVlcnkuIEl0IG1heSBuZXZlciBjb21wbGV0ZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZCBmb3IgdGhlIHVuaXF1ZSB2YWxpZGF0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgY291bnQocXVlcnlWYXJpYWJsZXNNYW5hZ2VyOiBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgcGx1cmFsID0gbWFrZVBsdXJhbCh0aGlzLm5hbWUpO1xuICAgICAgICBjb25zdCBxdWVyeU5hbWUgPSAnQ291bnQnICsgdXBwZXJDYXNlRmlyc3RMZXR0ZXIocGx1cmFsKTtcbiAgICAgICAgY29uc3QgZmlsdGVyVHlwZSA9IHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRoaXMubmFtZSkgKyAnRmlsdGVyJztcblxuICAgICAgICBjb25zdCBxdWVyeSA9IGdxbGBcbiAgICAgICAgICAgIHF1ZXJ5ICR7cXVlcnlOYW1lfSAoJGZpbHRlcjogJHtmaWx0ZXJUeXBlfSkge1xuICAgICAgICAgICAgY291bnQ6ICR7cGx1cmFsfSAoZmlsdGVyOiAkZmlsdGVyLCBwYWdpbmF0aW9uOiB7cGFnZVNpemU6IDAsIHBhZ2VJbmRleDogMH0pIHtcbiAgICAgICAgICAgIGxlbmd0aFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocGFydGlhbFZhcmlhYmxlcyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ29weSBtYW5hZ2VyIHRvIHByZXZlbnQgdG8gYXBwbHkgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGV4dGVybmFsIFF1ZXJ5VmFyaWFibGVzTWFuYWdlclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPihxdWVyeVZhcmlhYmxlc01hbmFnZXIpO1xuICAgICAgICAgICAgICAgIG1hbmFnZXIubWVyZ2UoJ3BhcnRpYWwtdmFyaWFibGVzJywgcGFydGlhbFZhcmlhYmxlcyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG8ucXVlcnk8e2NvdW50OiB7bGVuZ3RoOiBudW1iZXJ9fSwgVmFsbD4oe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogbWFuYWdlci52YXJpYWJsZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHQuZGF0YS5jb3VudC5sZW5ndGgpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBlbXB0eSBvYmplY3Qgd2l0aCBzb21lIGRlZmF1bHQgdmFsdWVzIGZyb20gc2VydmVyIHBlcnNwZWN0aXZlXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VmdWwgd2hlbiBzaG93aW5nIGEgZm9ybSBmb3IgY3JlYXRpb25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEZvclNlcnZlcigpOiBWY3JlYXRlWydpbnB1dCddIHwgVnVwZGF0ZVsnaW5wdXQnXSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gZW1wdHkgb2JqZWN0IHdpdGggc29tZSBkZWZhdWx0IHZhbHVlcyBmcm9tIGZyb250ZW5kIHBlcnNwZWN0aXZlXG4gICAgICpcbiAgICAgKiBXaGVyZSBlbXB0eSBvYmplY3QgbXVzdCByZXNwZWN0IGdyYXBocWwgWFhYSW5wdXQgdHlwZSwgbWF5IG5lZWQgc29tZSBkZWZhdWx0IHZhbHVlcyBmb3Igb3RoZXIgZmllbGRzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRGb3JDbGllbnQoKTogTGl0ZXJhbCB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZXh0cmFjdCBvbmx5IHRoZSBhcnJheSBvZiBmZXRjaGVkIG9iamVjdHMgb3V0IG9mIHRoZSBlbnRpcmUgZmV0Y2hlZCBkYXRhXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcEFsbCgpOiBPcGVyYXRvckZ1bmN0aW9uPEZldGNoUmVzdWx0PHVua25vd24+LCBUYWxsPiB7XG4gICAgICAgIGNvbnN0IHBsdXJhbCA9IG1ha2VQbHVyYWwodGhpcy5uYW1lKTtcbiAgICAgICAgcmV0dXJuIG1hcChyZXN1bHQgPT4gKHJlc3VsdC5kYXRhIGFzIGFueSlbcGx1cmFsXSk7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9hcG9sbG8tY2xpZW50L2lzc3Vlcy81NjYyXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3Qgb25seSB0aGUgY3JlYXRlZCBvYmplY3Qgb3V0IG9mIHRoZSBlbnRpcmUgZmV0Y2hlZCBkYXRhXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcENyZWF0aW9uKHJlc3VsdDogTXV0YXRpb25SZXN1bHQ8dW5rbm93bj4pOiBUY3JlYXRlIHtcbiAgICAgICAgY29uc3QgbmFtZSA9ICdjcmVhdGUnICsgdXBwZXJDYXNlRmlyc3RMZXR0ZXIodGhpcy5uYW1lKTtcbiAgICAgICAgcmV0dXJuIChyZXN1bHQuZGF0YSBhcyBhbnkpW25hbWVdOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvYXBvbGxvLWNsaWVudC9pc3N1ZXMvNTY2MlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBleHRyYWN0IG9ubHkgdGhlIHVwZGF0ZWQgb2JqZWN0IG91dCBvZiB0aGUgZW50aXJlIGZldGNoZWQgZGF0YVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtYXBVcGRhdGUocmVzdWx0OiBNdXRhdGlvblJlc3VsdDx1bmtub3duPik6IFR1cGRhdGUge1xuICAgICAgICBjb25zdCBuYW1lID0gJ3VwZGF0ZScgKyB1cHBlckNhc2VGaXJzdExldHRlcih0aGlzLm5hbWUpO1xuICAgICAgICByZXR1cm4gKHJlc3VsdC5kYXRhIGFzIGFueSlbbmFtZV07IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9hcG9sbG8tY2xpZW50L2lzc3Vlcy81NjYyXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3Qgb25seSBmbGFnIHdoZW4gZGVsZXRpbmcgYW4gb2JqZWN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcERlbGV0ZShyZXN1bHQ6IE11dGF0aW9uUmVzdWx0PHVua25vd24+KTogVGRlbGV0ZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAnZGVsZXRlJyArIG1ha2VQbHVyYWwodXBwZXJDYXNlRmlyc3RMZXR0ZXIodGhpcy5uYW1lKSk7XG4gICAgICAgIHJldHVybiAocmVzdWx0LmRhdGEgYXMgYW55KVtuYW1lXTsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9sbG9ncmFwaHFsL2Fwb2xsby1jbGllbnQvaXNzdWVzLzU2NjJcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQgd2hlbiBnZXR0aW5nIGEgc2luZ2xlIG9iamVjdFxuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElELCBhbmQgaXMgbmVlZGVkIHRvIGdldCBhcHByb3ByaWF0ZSBhY2Nlc3MgcmlnaHRzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JPbmUoKTogT2JzZXJ2YWJsZTxQYXJ0aWFsPFZvbmU+PiB7XG4gICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gZ2V0dGluZyBtdWx0aXBsZSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSBhIHNpdGUgb3Igc3RhdGUgSUQsIGJ1dCBpdCBjb3VsZCBiZSBzb21ldGhpbmcgZWxzZSB0byBmdXJ0aGVyIGZpbHRlciB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpOiBPYnNlcnZhYmxlPFBhcnRpYWw8VmFsbD4+IHtcbiAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdHlwaWNhbGx5IGEgc2l0ZSBvciBzdGF0ZSBJRFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckNyZWF0aW9uKG9iamVjdDogTGl0ZXJhbCk6IFBhcnRpYWw8VmNyZWF0ZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gdXBkYXRpbmcgYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSBhIHNpdGUgb3Igc3RhdGUgSURcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHJvdGVjdGVkIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JVcGRhdGUob2JqZWN0OiBMaXRlcmFsKTogUGFydGlhbDxWdXBkYXRlPiB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gYmUgdXNlZCB3aGVuIGRlbGV0aW5nIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElEXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByb3RlY3RlZCBnZXRQYXJ0aWFsVmFyaWFibGVzRm9yRGVsZXRlKG9iamVjdHM6IExpdGVyYWxbXSk6IFBhcnRpYWw8VmRlbGV0ZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhyb3cgZXhjZXB0aW9uIHRvIHByZXZlbnQgZXhlY3V0aW5nIHF1ZXJpZXMgd2l0aCBpbnZhbGlkIHZhcmlhYmxlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB0aHJvd0lmT2JzZXJ2YWJsZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0Nhbm5vdCB1c2UgT2JzZXJ2YWJsZSBhcyB2YXJpYWJsZXMuIEluc3RlYWQgeW91IHNob3VsZCB1c2UgLnN1YnNjcmliZSgpIHRvIGNhbGwgdGhlIG1ldGhvZCB3aXRoIGEgcmVhbCB2YWx1ZScsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2UgZ2l2ZW4gSUQgd2l0aCBhZGRpdGlvbmFsIHBhcnRpYWwgdmFyaWFibGVzIGlmIHRoZXJlIGlzIGFueVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0VmFyaWFibGVzRm9yT25lKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFZvbmU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0Zvck9uZSgpLnBpcGUoXG4gICAgICAgICAgICBtYXAocGFydGlhbFZhcmlhYmxlcyA9PiBtZXJnZSh7fSwge2lkOiBpZH0gYXMgVm9uZSwgcGFydGlhbFZhcmlhYmxlcykpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRocm93IGV4Y2VwdGlvbiB0byBwcmV2ZW50IGV4ZWN1dGluZyBudWxsIHF1ZXJpZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHRocm93SWZOb3RRdWVyeShxdWVyeTogRG9jdW1lbnROb2RlIHwgbnVsbCk6IGFzc2VydHMgcXVlcnkge1xuICAgICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyYXBoUUwgcXVlcnkgZm9yIHRoaXMgbWV0aG9kIHdhcyBub3QgY29uZmlndXJlZCBpbiB0aGlzIHNlcnZpY2UgY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
491
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUyxHQUFHLEVBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFjLGFBQWEsRUFBd0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGdCQUFnQixFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEgsT0FBTyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBbUIsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvRixPQUFPLEVBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBMEJ4RyxNQUFNLE9BQWdCLDJCQUEyQjtJQWlCN0MsWUFDdUIsTUFBYyxFQUNkLHNCQUE4QyxFQUM5QyxJQUFZLEVBQ1osUUFBNkIsRUFDN0IsUUFBNkIsRUFDN0IsY0FBbUMsRUFDbkMsY0FBbUMsRUFDbkMsY0FBbUM7UUFQbkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLDJCQUFzQixHQUF0Qixz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a0JBQWtCLENBQUMsRUFBVTtRQUNqQyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLElBQUksQ0FDeEMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFFLEVBQUUsRUFBUyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FDekUsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWUsQ0FBQyxLQUEwQjtRQUM5QyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1NBQ25HO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcG9sbG8sIGdxbCwgTXV0YXRpb25SZXN1bHR9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7RmV0Y2hSZXN1bHQsIE5ldHdvcmtTdGF0dXMsIFdhdGNoUXVlcnlGZXRjaFBvbGljeX0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JGbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtEb2N1bWVudE5vZGV9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHtkZWZhdWx0cywgbWVyZ2UsIG1lcmdlV2l0aCwgb21pdCwgcGlja30gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgY29tYmluZUxhdGVzdCwgRU1QVFksIGZpcnN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgT3BlcmF0b3JGdW5jdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRha2VXaGlsZSwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIsIFF1ZXJ5VmFyaWFibGVzfSBmcm9tICcuLi9jbGFzc2VzL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge21ha2VQbHVyYWwsIG1lcmdlT3ZlcnJpZGVBcnJheSwgcmVsYXRpb25zVG9JZHMsIHVwcGVyQ2FzZUZpcnN0TGV0dGVyfSBmcm9tICcuLi9jbGFzc2VzL3V0aWxpdHknO1xuaW1wb3J0IHtQYWdpbmF0ZWREYXRhfSBmcm9tICcuLi9jbGFzc2VzL2RhdGEtc291cmNlJztcbmltcG9ydCB7TmF0dXJhbERlYm91bmNlU2VydmljZX0gZnJvbSAnLi9kZWJvdW5jZS5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtVmFsaWRhdG9ycyB7XG4gICAgW2tleTogc3RyaW5nXTogVmFsaWRhdG9yRm5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtQXN5bmNWYWxpZGF0b3JzIHtcbiAgICBba2V5OiBzdHJpbmddOiBBc3luY1ZhbGlkYXRvckZuW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVzV2l0aElucHV0IHtcbiAgICBpbnB1dDogTGl0ZXJhbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtQ29udHJvbHMge1xuICAgIFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbDtcbn1cblxuaW50ZXJmYWNlIFJlc29sdmU8VE9uZT4ge1xuICAgIG1vZGVsOiBUT25lO1xufVxuXG5leHBvcnQgdHlwZSBXaXRoSWQ8VD4gPSB7aWQ6IHN0cmluZ30gJiBUO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlPFxuICAgIFRvbmUsXG4gICAgVm9uZSBleHRlbmRzIHtpZDogc3RyaW5nfSxcbiAgICBUYWxsIGV4dGVuZHMgUGFnaW5hdGVkRGF0YTxMaXRlcmFsPixcbiAgICBWYWxsIGV4dGVuZHMgUXVlcnlWYXJpYWJsZXMsXG4gICAgVGNyZWF0ZSxcbiAgICBWY3JlYXRlIGV4dGVuZHMgVmFyaWFibGVzV2l0aElucHV0LFxuICAgIFR1cGRhdGUsXG4gICAgVnVwZGF0ZSBleHRlbmRzIHtpZDogc3RyaW5nOyBpbnB1dDogTGl0ZXJhbH0sXG4gICAgVGRlbGV0ZSxcbiAgICBWZGVsZXRlIGV4dGVuZHMge2lkczogc3RyaW5nW119LFxuPiB7XG4gICAgLyoqXG4gICAgICogU3RvcmUgdGhlIGNyZWF0aW9uIG11dGF0aW9ucyB0aGF0IGFyZSBwZW5kaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcmVhdGluZ0NhY2hlID0gbmV3IE1hcDxWY3JlYXRlWydpbnB1dCddIHwgV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+LCBPYnNlcnZhYmxlPFRjcmVhdGU+PigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBvbGxvOiBBcG9sbG8sXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBuYXR1cmFsRGVib3VuY2VTZXJ2aWNlOiBOYXR1cmFsRGVib3VuY2VTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb25lUXVlcnk6IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBhbGxRdWVyeTogRG9jdW1lbnROb2RlIHwgbnVsbCxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNyZWF0ZU11dGF0aW9uOiBEb2N1bWVudE5vZGUgfCBudWxsLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdXBkYXRlTXV0YXRpb246IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBkZWxldGVNdXRhdGlvbjogRG9jdW1lbnROb2RlIHwgbnVsbCxcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgZ2V0Q29uc29saWRhdGVkRm9yQ2xpZW50KCk6IExpdGVyYWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0aGlzLmdldERlZmF1bHRGb3JTZXJ2ZXIoKSwgdGhpcy5nZXREZWZhdWx0Rm9yQ2xpZW50KCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgaW5kaXZpZHVhbCBmaWVsZHMgdmFsaWRhdG9yc1xuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgZ2V0Rm9ybVZhbGlkYXRvcnMobW9kZWw/OiBMaXRlcmFsKTogRm9ybVZhbGlkYXRvcnMge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBpbmRpdmlkdWFsIGFzeW5jIGZpZWxkcyB2YWxpZGF0b3JzXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBnZXRGb3JtQXN5bmNWYWxpZGF0b3JzKG1vZGVsPzogTGl0ZXJhbCk6IEZvcm1Bc3luY1ZhbGlkYXRvcnMge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBncm91cGVkIGZpZWxkcyB2YWxpZGF0b3JzIChsaWtlIHBhc3N3b3JkICsgY29uZmlybSBwYXNzd29yZClcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldEZvcm1Hcm91cFZhbGlkYXRvcnMobW9kZWw/OiBMaXRlcmFsKTogVmFsaWRhdG9yRm5bXSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGFzeW5jIGdyb3VwIGZpZWxkcyB2YWxpZGF0b3JzIChsaWtlIHVuaXF1ZSBjb25zdHJhaW50IG9uIG11bHRpcGxlIGNvbHVtbnMpXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBnZXRGb3JtR3JvdXBBc3luY1ZhbGlkYXRvcnMobW9kZWw/OiBMaXRlcmFsKTogQXN5bmNWYWxpZGF0b3JGbltdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtQ29uZmlnKG1vZGVsOiBMaXRlcmFsKTogRm9ybUNvbnRyb2xzIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRDb25zb2xpZGF0ZWRGb3JDbGllbnQoKTtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuZ2V0Rm9ybVZhbGlkYXRvcnMobW9kZWwpO1xuICAgICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSB0aGlzLmdldEZvcm1Bc3luY1ZhbGlkYXRvcnMobW9kZWwpO1xuICAgICAgICBjb25zdCBjb250cm9sczogRm9ybUNvbnRyb2xzID0ge307XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gbW9kZWwucGVybWlzc2lvbnMgPyAhbW9kZWwucGVybWlzc2lvbnMudXBkYXRlIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKG1vZGVsLmlkKSB7XG4gICAgICAgICAgICBjb250cm9sc1snaWQnXSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woe3ZhbHVlOiBtb2RlbC5pZCwgZGlzYWJsZWQ6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbmZpZ3VyZSBmb3JtIGZvciBlYWNoIGZpZWxkIG9mIG1vZGVsXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kZWxba2V5XSAhPT0gdW5kZWZpbmVkID8gbW9kZWxba2V5XSA6IHZhbHVlc1trZXldO1xuICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdHlwZW9mIHZhbGlkYXRvcnNba2V5XSAhPT0gJ3VuZGVmaW5lZCcgPyB2YWxpZGF0b3JzW2tleV0gOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgYXN5bmNWYWxpZGF0b3IgPSB0eXBlb2YgYXN5bmNWYWxpZGF0b3JzW2tleV0gIT09ICd1bmRlZmluZWQnID8gYXN5bmNWYWxpZGF0b3JzW2tleV0gOiBudWxsO1xuXG4gICAgICAgICAgICBjb250cm9sc1trZXldID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChmb3JtU3RhdGUsIHZhbGlkYXRvciwgYXN5bmNWYWxpZGF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uZmlndXJlIGZvcm0gZm9yIGV4dHJhIHZhbGlkYXRvcnMgdGhhdCBhcmUgbm90IG9uIGEgc3BlY2lmaWMgZmllbGRcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsaWRhdG9ycykpIHtcbiAgICAgICAgICAgIGlmICghY29udHJvbHNba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1TdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1vZGVsW2tleV0gPyBtb2RlbFtrZXldIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb250cm9sc1trZXldID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChmb3JtU3RhdGUsIHZhbGlkYXRvcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhc3luY1ZhbGlkYXRvcnMpKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbHNba2V5XSAmJiBhc3luY1ZhbGlkYXRvcnNba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xzW2tleV0uc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9yc1trZXldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbW9kZWxba2V5XSA/IG1vZGVsW2tleV0gOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgbnVsbCwgYXN5bmNWYWxpZGF0b3JzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSB0aGUgZmluYWwgRm9ybUdyb3VwIGZvciB0aGUgb2JqZWN0LCBpbmNsdWRpbmcgYWxsIHZhbGlkYXRvcnNcbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCAqKm5vdCoqIGJlIG92ZXJyaWRkZW4sIGJ1dCBpbnN0ZWFkIGBnZXRGb3JtQ29uZmlnYCxcbiAgICAgKiBgZ2V0Rm9ybUdyb3VwVmFsaWRhdG9yc2AsIGBnZXRGb3JtR3JvdXBBc3luY1ZhbGlkYXRvcnNgIG1pZ2h0IGJlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGb3JtR3JvdXAobW9kZWw6IExpdGVyYWwpOiBVbnR5cGVkRm9ybUdyb3VwIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbmZpZyA9IHRoaXMuZ2V0Rm9ybUNvbmZpZyhtb2RlbCk7XG4gICAgICAgIHJldHVybiBuZXcgVW50eXBlZEZvcm1Hcm91cChmb3JtQ29uZmlnLCB7XG4gICAgICAgICAgICB2YWxpZGF0b3JzOiB0aGlzLmdldEZvcm1Hcm91cFZhbGlkYXRvcnMobW9kZWwpLFxuICAgICAgICAgICAgYXN5bmNWYWxpZGF0b3JzOiB0aGlzLmdldEZvcm1Hcm91cEFzeW5jVmFsaWRhdG9ycyhtb2RlbCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIHNpbmdsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIElmIGF2YWlsYWJsZSBpdCB3aWxsIGVtaXQgb2JqZWN0IGZyb20gY2FjaGUgaW1tZWRpYXRlbHksIHRoZW4gaXRcbiAgICAgKiB3aWxsICoqYWx3YXlzKiogZmV0Y2ggZnJvbSBuZXR3b3JrIGFuZCB0aGVuIHRoZSBvYnNlcnZhYmxlIHdpbGwgYmUgY29tcGxldGVkXG4gICAgICovXG4gICAgcHVibGljIGdldE9uZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxUb25lPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUoaWQpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLm9uZVF1ZXJ5KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZXNGb3JPbmUoaWQpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAodmFyaWFibGVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLm9uZVF1ZXJ5KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwb2xsby53YXRjaFF1ZXJ5PHVua25vd24sIFZvbmU+KHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMub25lUXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogJ2NhY2hlLWFuZC1uZXR3b3JrJyxcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZldGNoUG9saWN5OiAnY2FjaGUtb25seScsXG4gICAgICAgICAgICAgICAgfSkudmFsdWVDaGFuZ2VzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWx0ZXIocmVzdWx0ID0+ICEhcmVzdWx0LmRhdGEpLFxuICAgICAgICAgICAgdGFrZVdoaWxlKHJlc3VsdCA9PiByZXN1bHQubmV0d29ya1N0YXR1cyAhPT0gTmV0d29ya1N0YXR1cy5yZWFkeSwgdHJ1ZSksXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IChyZXN1bHQuZGF0YSBhcyBMaXRlcmFsKVt0aGlzLm5hbWVdKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBjb2xsZWN0aW9uIG9mIG9iamVjdHNcbiAgICAgKlxuICAgICAqIEl0IHdpbGwgKiphbHdheXMqKiBmZXRjaCBmcm9tIG5ldHdvcmsgYW5kIHRoZW4gdGhlIG9ic2VydmFibGUgd2lsbCBiZSBjb21wbGV0ZWQuXG4gICAgICogTm8gY2FjaGUgaXMgZXZlciB1c2VkLCBzbyBpdCdzIHNsb3cgYnV0IGNvcnJlY3QuXG4gICAgICovXG4gICAgcHVibGljIGdldEFsbChxdWVyeVZhcmlhYmxlc01hbmFnZXI6IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8VmFsbD4pOiBPYnNlcnZhYmxlPFRhbGw+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5hbGxRdWVyeSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKHBhcnRpYWxWYXJpYWJsZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuYWxsUXVlcnkpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ29weSBtYW5hZ2VyIHRvIHByZXZlbnQgdG8gYXBwbHkgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGV4dGVybmFsIFF1ZXJ5VmFyaWFibGVzTWFuYWdlclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPihxdWVyeVZhcmlhYmxlc01hbmFnZXIpO1xuICAgICAgICAgICAgICAgIG1hbmFnZXIubWVyZ2UoJ3BhcnRpYWwtdmFyaWFibGVzJywgcGFydGlhbFZhcmlhYmxlcyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG8ucXVlcnk8dW5rbm93biwgVmFsbD4oe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5hbGxRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiBtYW5hZ2VyLnZhcmlhYmxlcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLm1hcEFsbCgpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0c1xuICAgICAqXG4gICAgICogRXZlcnkgdGltZSB0aGUgb2JzZXJ2YWJsZSB2YXJpYWJsZXMgY2hhbmdlLCBhbmQgdGhleSBhcmUgbm90IHVuZGVmaW5lZCxcbiAgICAgKiBpdCB3aWxsIHJldHVybiByZXN1bHQgZnJvbSBjYWNoZSwgdGhlbiBpdCB3aWxsICoqYWx3YXlzKiogZmV0Y2ggZnJvbSBuZXR3b3JrLlxuICAgICAqXG4gICAgICogWW91IG11c3Qgc3Vic2NyaWJlIHRvIHN0YXJ0IGdldHRpbmcgcmVzdWx0cyAoYW5kIGZldGNoIGZyb20gbmV0d29yaykuXG4gICAgICpcbiAgICAgKiBUaGUgb2JzZXJ2YWJsZSByZXN1bHQgd2lsbCBvbmx5IGNvbXBsZXRlIHdoZW4gdW5zdWJzY3JpYmluZy4gVGhhdCBtZWFucyB5b3UgKiptdXN0KiogdW5zdWJzY3JpYmUuXG4gICAgICovXG4gICAgcHVibGljIHdhdGNoQWxsKFxuICAgICAgICBxdWVyeVZhcmlhYmxlc01hbmFnZXI6IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8VmFsbD4sXG4gICAgICAgIGZldGNoUG9saWN5OiBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3kgPSAnY2FjaGUtYW5kLW5ldHdvcmsnLFxuICAgICk6IE9ic2VydmFibGU8VGFsbD4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmFsbFF1ZXJ5KTtcblxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICB2YXJpYWJsZXM6IHF1ZXJ5VmFyaWFibGVzTWFuYWdlci52YXJpYWJsZXMucGlwZShcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdmVyeSBmYXN0IHZhcmlhYmxlIGNoYW5nZXNcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjApLFxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHZhcmlhYmxlcyB0byBiZSBkZWZpbmVkIHRvIHByZXZlbnQgZHVwbGljYXRlIHF1ZXJ5OiB3aXRoIGFuZCB3aXRob3V0IHZhcmlhYmxlc1xuICAgICAgICAgICAgICAgIC8vIE51bGwgaXMgYWNjZXB0ZWQgdmFsdWUgZm9yIFwibm8gdmFyaWFibGVzXCJcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFyaWFibGVzID0+IHR5cGVvZiB2YXJpYWJsZXMgIT09ICd1bmRlZmluZWQnKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBwYXJ0aWFsVmFyaWFibGVzOiB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JBbGwoKSxcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEFwcGx5IHBhcnRpYWwgdmFyaWFibGVzIGZyb20gc2VydmljZVxuICAgICAgICAgICAgICAgIC8vIENvcHkgbWFuYWdlciB0byBwcmV2ZW50IHRvIGFwcGx5IGludGVybmFsIHZhcmlhYmxlcyB0byBleHRlcm5hbCBRdWVyeVZhcmlhYmxlc01hbmFnZXJcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8VmFsbD4ocXVlcnlWYXJpYWJsZXNNYW5hZ2VyKTtcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLm1lcmdlKCdwYXJ0aWFsLXZhcmlhYmxlcycsIHJlc3VsdC5wYXJ0aWFsVmFyaWFibGVzKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuYWxsUXVlcnkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAgICAgICAgIC53YXRjaFF1ZXJ5PHVua25vd24sIFZhbGw+KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLmFsbFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiBtYW5hZ2VyLnZhcmlhYmxlcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiBmZXRjaFBvbGljeSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBFTVBUWSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIociA9PiAhIXIuZGF0YSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEFsbCgpLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbnMgYWxsb3cgdG8gcXVpY2tseSBjcmVhdGUgb3IgdXBkYXRlIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBNYW5hZ2VzIGEgXCJjcmVhdGlvbiBpcyBwZW5kaW5nXCIgc3RhdHVzLCBhbmQgdXBkYXRlIHdoZW4gY3JlYXRpb24gaXMgcmVhZHkuXG4gICAgICogVXNlcyByZWd1bGFyIHVwZGF0ZS91cGRhdGVOb3cgYW5kIGNyZWF0ZSBtZXRob2RzLlxuICAgICAqIFVzZWQgbWFpbmx5IHdoZW4gZWRpdGluZyBtdWx0aXBsZSBvYmplY3RzIGluIHNhbWUgY29udHJvbGxlciAobGlrZSBpbiBlZGl0YWJsZSBhcnJheXMpXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZU9yVXBkYXRlKFxuICAgICAgICBvYmplY3Q6IFZjcmVhdGVbJ2lucHV0J10gfCBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4sXG4gICAgICAgIG5vdyA9IGZhbHNlLFxuICAgICk6IE9ic2VydmFibGU8VGNyZWF0ZSB8IFR1cGRhdGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3QpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmNyZWF0ZU11dGF0aW9uKTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy51cGRhdGVNdXRhdGlvbik7XG5cbiAgICAgICAgLy8gSWYgY3JlYXRpb24gaXMgcGVuZGluZywgbGlzdGVuIHRvIGNyZWF0aW9uIG9ic2VydmFibGUgYW5kIHdoZW4gcmVhZHksIGZpcmUgdXBkYXRlXG4gICAgICAgIGNvbnN0IHBlbmRpbmdDcmVhdGlvbiA9IHRoaXMuY3JlYXRpbmdDYWNoZS5nZXQob2JqZWN0KTtcbiAgICAgICAgaWYgKHBlbmRpbmdDcmVhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHBlbmRpbmdDcmVhdGlvbi5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShvYmplY3QgYXMgV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBvYmplY3QgaGFzIElkLCBqdXN0IHNhdmUgaXRcbiAgICAgICAgaWYgKCdpZCcgaW4gb2JqZWN0ICYmIG9iamVjdC5pZCkge1xuICAgICAgICAgICAgaWYgKG5vdykge1xuICAgICAgICAgICAgICAgIC8vIHVzZWQgbWFpbmx5IGZvciB0ZXN0cywgYmVjYXVzZSBsb2Rhc2ggZGVib3VuY2VkIHVzZWQgaW4gdXBkYXRlKCkgZG9lcyBub3Qgd29yayBmaW5lIHdpdGggZmFrZUFzeW5jIGFuZCB0aWNrKClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVOb3cob2JqZWN0IGFzIFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShvYmplY3QgYXMgV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIG9iamVjdCB3YXMgbm90IHNhdmluZywgYW5kIGhhcyBubyBJRCwgY3JlYXRlIGl0XG4gICAgICAgIGNvbnN0IGNyZWF0aW9uID0gdGhpcy5jcmVhdGUob2JqZWN0KS5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0aW5nQ2FjaGUuZGVsZXRlKG9iamVjdCk7IC8vIHJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBzdG9yZXMgY3JlYXRpbmcgb2JzZXJ2YWJsZSBpbiBhIGNhY2hlIHJlcGxheWFibGUgdmVyc2lvbiBvZiB0aGUgb2JzZXJ2YWJsZSxcbiAgICAgICAgLy8gc28gc2V2ZXJhbCB1cGRhdGUoKSBjYW4gc3Vic2NyaWJlIHRvIHRoZSBzYW1lIGNyZWF0aW9uXG4gICAgICAgIHRoaXMuY3JlYXRpbmdDYWNoZS5zZXQob2JqZWN0LCBjcmVhdGlvbi5waXBlKHNoYXJlUmVwbGF5KCkpKTtcblxuICAgICAgICByZXR1cm4gY3JlYXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIG9iamVjdCBpbiBEQiBhbmQgdGhlbiByZWZldGNoIHRoZSBsaXN0IG9mIG9iamVjdHNcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlKG9iamVjdDogVmNyZWF0ZVsnaW5wdXQnXSk6IE9ic2VydmFibGU8VGNyZWF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuY3JlYXRlTXV0YXRpb24pO1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7aW5wdXQ6IHRoaXMuZ2V0SW5wdXQob2JqZWN0KX0sXG4gICAgICAgICAgICB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JDcmVhdGlvbihvYmplY3QpLFxuICAgICAgICApIGFzIFZjcmVhdGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAubXV0YXRlPFRjcmVhdGUsIFZjcmVhdGU+KHtcbiAgICAgICAgICAgICAgICBtdXRhdGlvbjogdGhpcy5jcmVhdGVNdXRhdGlvbixcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlcyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcG9sbG8uY2xpZW50LnJlRmV0Y2hPYnNlcnZhYmxlUXVlcmllcygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPYmplY3QgPSB0aGlzLm1hcENyZWF0aW9uKHJlc3VsdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld09iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aChvYmplY3QsIG5ld09iamVjdCwgbWVyZ2VPdmVycmlkZUFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFuIG9iamVjdCwgYWZ0ZXIgYSBzaG9ydCBkZWJvdW5jZVxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUob2JqZWN0OiBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pOiBPYnNlcnZhYmxlPFR1cGRhdGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3QpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLnVwZGF0ZU11dGF0aW9uKTtcblxuICAgICAgICAvLyBLZWVwIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBkZWJvdW5jZWQgdXBkYXRlIGZ1bmN0aW9uXG4gICAgICAgIGNvbnN0IGlkID0gb2JqZWN0LmlkO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWxEZWJvdW5jZVNlcnZpY2UuZGVib3VuY2UodGhpcywgaWQsIHRoaXMudXBkYXRlTm93KG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhbiBvYmplY3QgaW1tZWRpYXRlbHkgd2hlbiBzdWJzY3JpYmluZ1xuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVOb3cob2JqZWN0OiBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pOiBPYnNlcnZhYmxlPFR1cGRhdGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3QpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLnVwZGF0ZU11dGF0aW9uKTtcblxuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBtZXJnZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogb2JqZWN0LmlkLFxuICAgICAgICAgICAgICAgIGlucHV0OiB0aGlzLmdldElucHV0KG9iamVjdCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5nZXRQYXJ0aWFsVmFyaWFibGVzRm9yVXBkYXRlKG9iamVjdCksXG4gICAgICAgICkgYXMgVnVwZGF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8VHVwZGF0ZSwgVnVwZGF0ZT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB0aGlzLnVwZGF0ZU11dGF0aW9uLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFJlc3VsdCA9IHRoaXMubWFwVXBkYXRlKHJlc3VsdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aChvYmplY3QsIG1hcHBlZFJlc3VsdCwgbWVyZ2VPdmVycmlkZUFycmF5KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFuIG9iamVjdCBidXQgd2l0aG91dCBhdXRvbWF0aWNhbGx5IGluamVjdGluZyB2YWx1ZXMgY29taW5nXG4gICAgICogZnJvbSBgZ2V0RGVmYXVsdEZvclNlcnZlcigpYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlUGFydGlhbGx5KG9iamVjdDogV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTogT2JzZXJ2YWJsZTxUdXBkYXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0KTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy51cGRhdGVNdXRhdGlvbik7XG5cbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0ge1xuICAgICAgICAgICAgaWQ6IG9iamVjdC5pZCxcbiAgICAgICAgICAgIGlucHV0OiBvbWl0KHJlbGF0aW9uc1RvSWRzKG9iamVjdCksICdpZCcpLFxuICAgICAgICB9IGFzIFZ1cGRhdGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAubXV0YXRlPFR1cGRhdGUsIFZ1cGRhdGU+KHtcbiAgICAgICAgICAgICAgICBtdXRhdGlvbjogdGhpcy51cGRhdGVNdXRhdGlvbixcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlcyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcG9sbG8uY2xpZW50LnJlRmV0Y2hPYnNlcnZhYmxlUXVlcmllcygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBVcGRhdGUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlIG9iamVjdHMgYW5kIHRoZW4gcmVmZXRjaCB0aGUgbGlzdCBvZiBvYmplY3RzXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZShvYmplY3RzOiB7aWQ6IHN0cmluZ31bXSk6IE9ic2VydmFibGU8VGRlbGV0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdHMpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmRlbGV0ZU11dGF0aW9uKTtcblxuICAgICAgICBjb25zdCBpZHMgPSBvYmplY3RzLm1hcChvID0+IHtcbiAgICAgICAgICAgIC8vIENhbmNlbCBwZW5kaW5nIHVwZGF0ZVxuICAgICAgICAgICAgdGhpcy5uYXR1cmFsRGVib3VuY2VTZXJ2aWNlLmNhbmNlbCh0aGlzLCBvLmlkKTtcblxuICAgICAgICAgICAgcmV0dXJuIG8uaWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBtZXJnZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHM6IGlkcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JEZWxldGUob2JqZWN0cyksXG4gICAgICAgICkgYXMgVmRlbGV0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8VGRlbGV0ZSwgVmRlbGV0ZT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB0aGlzLmRlbGV0ZU11dGF0aW9uLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIERlbGF5IHRoZSBvYnNlcnZhYmxlIHVudGlsIEFwb2xsbyByZWZldGNoIGlzIGNvbXBsZXRlZFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRSZXN1bHQgPSB0aGlzLm1hcERlbGV0ZShyZXN1bHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmcm9tKHRoaXMuYXBvbGxvLmNsaWVudC5yZUZldGNoT2JzZXJ2YWJsZVF1ZXJpZXMoKSkucGlwZShtYXAoKCkgPT4gbWFwcGVkUmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgbW9kZWwgYW5kIGl0ZW1zIHJlbGF0ZWQgdG8gdGhlIG1vZGVsLCBpZiB0aGUgaWQgaXMgcHJvdmlkZWQsIGluIG9yZGVyIHRvIHNob3cgYSBmb3JtXG4gICAgICovXG4gICAgcHVibGljIHJlc29sdmUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UmVzb2x2ZTxUb25lPj4ge1xuICAgICAgICAvLyBMb2FkIG1vZGVsIGlmIGlkIGlzIGdpdmVuXG4gICAgICAgIGxldCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFRvbmU+O1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIG9ic2VydmFibGUgPSB0aGlzLmdldE9uZShpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlID0gb2YodGhpcy5nZXRDb25zb2xpZGF0ZWRGb3JDbGllbnQoKSBhcyBUb25lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge21vZGVsOiByZXN1bHR9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIG9iamVjdCB0aGF0IG1hdGNoIHRoZSBHcmFwaFFMIGlucHV0IHR5cGUuXG4gICAgICogSXQgY3JlYXRlcyBhbiBvYmplY3Qgd2l0aCBtYW51YWxseSBmaWxsZWQgZGF0YSBhbmQgYWRkIHVuY29tcGxldGVkIGRhdGEgKGxpa2UgcmVxdWlyZWQgYXR0cmlidXRlcyB0aGF0IGNhbiBiZSBlbXB0eSBzdHJpbmdzKVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJbnB1dChvYmplY3Q6IExpdGVyYWwpOiBWY3JlYXRlWydpbnB1dCddIHwgVnVwZGF0ZVsnaW5wdXQnXSB7XG4gICAgICAgIC8vIENvbnZlcnQgcmVsYXRpb25zIHRvIHRoZWlyIElEcyBmb3IgbXV0YXRpb25cbiAgICAgICAgb2JqZWN0ID0gcmVsYXRpb25zVG9JZHMob2JqZWN0KTtcblxuICAgICAgICAvLyBQaWNrIG9ubHkgYXR0cmlidXRlcyB0aGF0IHdlIGNhbiBmaW5kIGluIHRoZSBlbXB0eSBvYmplY3RcbiAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIHByZXZlbnQgdG8gc2VsZWN0IGRhdGEgdGhhdCBoYXMgdW53YW50ZWQgYXR0cmlidXRlc1xuICAgICAgICBjb25zdCBlbXB0eU9iamVjdCA9IHRoaXMuZ2V0RGVmYXVsdEZvclNlcnZlcigpO1xuICAgICAgICBsZXQgaW5wdXQgPSBwaWNrKG9iamVjdCwgT2JqZWN0LmtleXMoZW1wdHlPYmplY3QpKTtcblxuICAgICAgICAvLyBDb21wbGV0ZSBhIHBvdGVudGlhbGx5IHVuY29tcGxldGVkIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gICAgICAgIGlucHV0ID0gZGVmYXVsdHMoaW5wdXQsIGVtcHR5T2JqZWN0KTtcblxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBtYXRjaGluZyB0aGUgcXVlcnkuIEl0IG1heSBuZXZlciBjb21wbGV0ZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZCBmb3IgdGhlIHVuaXF1ZSB2YWxpZGF0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgY291bnQocXVlcnlWYXJpYWJsZXNNYW5hZ2VyOiBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgcGx1cmFsID0gbWFrZVBsdXJhbCh0aGlzLm5hbWUpO1xuICAgICAgICBjb25zdCBxdWVyeU5hbWUgPSAnQ291bnQnICsgdXBwZXJDYXNlRmlyc3RMZXR0ZXIocGx1cmFsKTtcbiAgICAgICAgY29uc3QgZmlsdGVyVHlwZSA9IHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRoaXMubmFtZSkgKyAnRmlsdGVyJztcblxuICAgICAgICBjb25zdCBxdWVyeSA9IGdxbGBcbiAgICAgICAgICAgIHF1ZXJ5ICR7cXVlcnlOYW1lfSAoJGZpbHRlcjogJHtmaWx0ZXJUeXBlfSkge1xuICAgICAgICAgICAgY291bnQ6ICR7cGx1cmFsfSAoZmlsdGVyOiAkZmlsdGVyLCBwYWdpbmF0aW9uOiB7cGFnZVNpemU6IDAsIHBhZ2VJbmRleDogMH0pIHtcbiAgICAgICAgICAgIGxlbmd0aFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocGFydGlhbFZhcmlhYmxlcyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ29weSBtYW5hZ2VyIHRvIHByZXZlbnQgdG8gYXBwbHkgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGV4dGVybmFsIFF1ZXJ5VmFyaWFibGVzTWFuYWdlclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPihxdWVyeVZhcmlhYmxlc01hbmFnZXIpO1xuICAgICAgICAgICAgICAgIG1hbmFnZXIubWVyZ2UoJ3BhcnRpYWwtdmFyaWFibGVzJywgcGFydGlhbFZhcmlhYmxlcyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG8ucXVlcnk8e2NvdW50OiB7bGVuZ3RoOiBudW1iZXJ9fSwgVmFsbD4oe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogbWFuYWdlci52YXJpYWJsZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHQuZGF0YS5jb3VudC5sZW5ndGgpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBlbXB0eSBvYmplY3Qgd2l0aCBzb21lIGRlZmF1bHQgdmFsdWVzIGZyb20gc2VydmVyIHBlcnNwZWN0aXZlXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VmdWwgd2hlbiBzaG93aW5nIGEgZm9ybSBmb3IgY3JlYXRpb25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEZvclNlcnZlcigpOiBWY3JlYXRlWydpbnB1dCddIHwgVnVwZGF0ZVsnaW5wdXQnXSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gZW1wdHkgb2JqZWN0IHdpdGggc29tZSBkZWZhdWx0IHZhbHVlcyBmcm9tIGZyb250ZW5kIHBlcnNwZWN0aXZlXG4gICAgICpcbiAgICAgKiBXaGVyZSBlbXB0eSBvYmplY3QgbXVzdCByZXNwZWN0IGdyYXBocWwgWFhYSW5wdXQgdHlwZSwgbWF5IG5lZWQgc29tZSBkZWZhdWx0IHZhbHVlcyBmb3Igb3RoZXIgZmllbGRzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRGb3JDbGllbnQoKTogTGl0ZXJhbCB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZXh0cmFjdCBvbmx5IHRoZSBhcnJheSBvZiBmZXRjaGVkIG9iamVjdHMgb3V0IG9mIHRoZSBlbnRpcmUgZmV0Y2hlZCBkYXRhXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcEFsbCgpOiBPcGVyYXRvckZ1bmN0aW9uPEZldGNoUmVzdWx0PHVua25vd24+LCBUYWxsPiB7XG4gICAgICAgIGNvbnN0IHBsdXJhbCA9IG1ha2VQbHVyYWwodGhpcy5uYW1lKTtcbiAgICAgICAgcmV0dXJuIG1hcChyZXN1bHQgPT4gKHJlc3VsdC5kYXRhIGFzIGFueSlbcGx1cmFsXSk7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9hcG9sbG8tY2xpZW50L2lzc3Vlcy81NjYyXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3Qgb25seSB0aGUgY3JlYXRlZCBvYmplY3Qgb3V0IG9mIHRoZSBlbnRpcmUgZmV0Y2hlZCBkYXRhXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcENyZWF0aW9uKHJlc3VsdDogTXV0YXRpb25SZXN1bHQ8dW5rbm93bj4pOiBUY3JlYXRlIHtcbiAgICAgICAgY29uc3QgbmFtZSA9ICdjcmVhdGUnICsgdXBwZXJDYXNlRmlyc3RMZXR0ZXIodGhpcy5uYW1lKTtcbiAgICAgICAgcmV0dXJuIChyZXN1bHQuZGF0YSBhcyBhbnkpW25hbWVdOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvYXBvbGxvLWNsaWVudC9pc3N1ZXMvNTY2MlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBleHRyYWN0IG9ubHkgdGhlIHVwZGF0ZWQgb2JqZWN0IG91dCBvZiB0aGUgZW50aXJlIGZldGNoZWQgZGF0YVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtYXBVcGRhdGUocmVzdWx0OiBNdXRhdGlvblJlc3VsdDx1bmtub3duPik6IFR1cGRhdGUge1xuICAgICAgICBjb25zdCBuYW1lID0gJ3VwZGF0ZScgKyB1cHBlckNhc2VGaXJzdExldHRlcih0aGlzLm5hbWUpO1xuICAgICAgICByZXR1cm4gKHJlc3VsdC5kYXRhIGFzIGFueSlbbmFtZV07IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9hcG9sbG8tY2xpZW50L2lzc3Vlcy81NjYyXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3Qgb25seSBmbGFnIHdoZW4gZGVsZXRpbmcgYW4gb2JqZWN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcERlbGV0ZShyZXN1bHQ6IE11dGF0aW9uUmVzdWx0PHVua25vd24+KTogVGRlbGV0ZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAnZGVsZXRlJyArIG1ha2VQbHVyYWwodXBwZXJDYXNlRmlyc3RMZXR0ZXIodGhpcy5uYW1lKSk7XG4gICAgICAgIHJldHVybiAocmVzdWx0LmRhdGEgYXMgYW55KVtuYW1lXTsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9sbG9ncmFwaHFsL2Fwb2xsby1jbGllbnQvaXNzdWVzLzU2NjJcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQgd2hlbiBnZXR0aW5nIGEgc2luZ2xlIG9iamVjdFxuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElELCBhbmQgaXMgbmVlZGVkIHRvIGdldCBhcHByb3ByaWF0ZSBhY2Nlc3MgcmlnaHRzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JPbmUoKTogT2JzZXJ2YWJsZTxQYXJ0aWFsPFZvbmU+PiB7XG4gICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gZ2V0dGluZyBtdWx0aXBsZSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSBhIHNpdGUgb3Igc3RhdGUgSUQsIGJ1dCBpdCBjb3VsZCBiZSBzb21ldGhpbmcgZWxzZSB0byBmdXJ0aGVyIGZpbHRlciB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpOiBPYnNlcnZhYmxlPFBhcnRpYWw8VmFsbD4+IHtcbiAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdHlwaWNhbGx5IGEgc2l0ZSBvciBzdGF0ZSBJRFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckNyZWF0aW9uKG9iamVjdDogTGl0ZXJhbCk6IFBhcnRpYWw8VmNyZWF0ZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gdXBkYXRpbmcgYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSBhIHNpdGUgb3Igc3RhdGUgSURcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHJvdGVjdGVkIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JVcGRhdGUob2JqZWN0OiBMaXRlcmFsKTogUGFydGlhbDxWdXBkYXRlPiB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gYmUgdXNlZCB3aGVuIGRlbGV0aW5nIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElEXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByb3RlY3RlZCBnZXRQYXJ0aWFsVmFyaWFibGVzRm9yRGVsZXRlKG9iamVjdHM6IExpdGVyYWxbXSk6IFBhcnRpYWw8VmRlbGV0ZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhyb3cgZXhjZXB0aW9uIHRvIHByZXZlbnQgZXhlY3V0aW5nIHF1ZXJpZXMgd2l0aCBpbnZhbGlkIHZhcmlhYmxlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB0aHJvd0lmT2JzZXJ2YWJsZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0Nhbm5vdCB1c2UgT2JzZXJ2YWJsZSBhcyB2YXJpYWJsZXMuIEluc3RlYWQgeW91IHNob3VsZCB1c2UgLnN1YnNjcmliZSgpIHRvIGNhbGwgdGhlIG1ldGhvZCB3aXRoIGEgcmVhbCB2YWx1ZScsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2UgZ2l2ZW4gSUQgd2l0aCBhZGRpdGlvbmFsIHBhcnRpYWwgdmFyaWFibGVzIGlmIHRoZXJlIGlzIGFueVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0VmFyaWFibGVzRm9yT25lKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFZvbmU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0Zvck9uZSgpLnBpcGUoXG4gICAgICAgICAgICBtYXAocGFydGlhbFZhcmlhYmxlcyA9PiBtZXJnZSh7fSwge2lkOiBpZH0gYXMgVm9uZSwgcGFydGlhbFZhcmlhYmxlcykpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRocm93IGV4Y2VwdGlvbiB0byBwcmV2ZW50IGV4ZWN1dGluZyBudWxsIHF1ZXJpZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHRocm93SWZOb3RRdWVyeShxdWVyeTogRG9jdW1lbnROb2RlIHwgbnVsbCk6IGFzc2VydHMgcXVlcnkge1xuICAgICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyYXBoUUwgcXVlcnkgZm9yIHRoaXMgbWV0aG9kIHdhcyBub3QgY29uZmlndXJlZCBpbiB0aGlzIHNlcnZpY2UgY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '@angular/localize/init';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { Directive, Component, Inject, Injectable, HostBinding, HostListener, InjectionToken, TemplateRef, ViewEncapsulation, ViewChild, Injector, Optional, Input, NgModule, Host, Self, EventEmitter, Output, Pipe, ContentChild, createEnvironmentInjector, createComponent, PLATFORM_ID, ErrorHandler } from '@angular/core';
|
|
4
|
-
import { Subject, BehaviorSubject, of, timer, switchMap as switchMap$1, endWith, last, EMPTY, merge as merge$1, Observable, first as first$1, combineLatest, catchError, ReplaySubject, debounceTime as debounceTime$1, raceWith, take as take$1, mergeMap, shareReplay as shareReplay$1, forkJoin, map as map$1, tap as tap$1, asyncScheduler, takeUntil as takeUntil$1 } from 'rxjs';
|
|
4
|
+
import { Subject, BehaviorSubject, of, timer, switchMap as switchMap$1, endWith, last, EMPTY, merge as merge$1, Observable, first as first$1, combineLatest, catchError, from, ReplaySubject, debounceTime as debounceTime$1, raceWith, take as take$1, mergeMap, shareReplay as shareReplay$1, forkJoin, map as map$1, tap as tap$1, asyncScheduler, takeUntil as takeUntil$1 } from 'rxjs';
|
|
5
5
|
import * as i3 from '@angular/forms';
|
|
6
6
|
import { FormGroup, FormArray, Validators, UntypedFormGroup, UntypedFormArray, FormControl, UntypedFormControl, FormsModule, FormControlDirective, FormControlName, ReactiveFormsModule } from '@angular/forms';
|
|
7
7
|
import * as i2$2 from '@angular/router';
|
|
@@ -4500,9 +4500,11 @@ class NaturalAbstractModelService {
|
|
|
4500
4500
|
mutation: this.deleteMutation,
|
|
4501
4501
|
variables: variables,
|
|
4502
4502
|
})
|
|
4503
|
-
.pipe(
|
|
4504
|
-
|
|
4505
|
-
|
|
4503
|
+
.pipe(
|
|
4504
|
+
// Delay the observable until Apollo refetch is completed
|
|
4505
|
+
switchMap(result => {
|
|
4506
|
+
const mappedResult = this.mapDelete(result);
|
|
4507
|
+
return from(this.apollo.client.reFetchObservableQueries()).pipe(map(() => mappedResult));
|
|
4506
4508
|
}));
|
|
4507
4509
|
}
|
|
4508
4510
|
/**
|
|
@@ -10624,6 +10626,7 @@ class NaturalTableButtonComponent {
|
|
|
10624
10626
|
this.queryParamsHandling = '';
|
|
10625
10627
|
this.navigate = [];
|
|
10626
10628
|
this.preserveFragment = false;
|
|
10629
|
+
this.disabled = false;
|
|
10627
10630
|
this.raised = false;
|
|
10628
10631
|
this.buttonClick = new EventEmitter();
|
|
10629
10632
|
this.type = 'none';
|
|
@@ -10645,10 +10648,10 @@ class NaturalTableButtonComponent {
|
|
|
10645
10648
|
}
|
|
10646
10649
|
}
|
|
10647
10650
|
NaturalTableButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NaturalTableButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10648
|
-
NaturalTableButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: NaturalTableButtonComponent, selector: "natural-table-button", inputs: { queryParams: "queryParams", queryParamsHandling: "queryParamsHandling", label: "label", icon: "icon", href: "href", navigate: "navigate", fragment: "fragment", preserveFragment: "preserveFragment", raised: "raised", color: "color" }, outputs: { buttonClick: "buttonClick" }, usesOnChanges: true, ngImport: i0, template: "<!-- Because directives can't be applied conditionally (routerLink, mat-button and mat-icon-button), we have to use different elements -->\n\n<!-- Edge case of a button without any kind of link at all -->\n<span *ngIf=\"type === 'none'\">\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span *ngIf=\"label\">{{ label }}</span>\n</span>\n\n<ng-container *ngIf=\"!raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n mat-icon-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- Click with label... -->\n <a
|
|
10651
|
+
NaturalTableButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: NaturalTableButtonComponent, selector: "natural-table-button", inputs: { queryParams: "queryParams", queryParamsHandling: "queryParamsHandling", label: "label", icon: "icon", href: "href", navigate: "navigate", fragment: "fragment", preserveFragment: "preserveFragment", disabled: "disabled", raised: "raised", color: "color" }, outputs: { buttonClick: "buttonClick" }, usesOnChanges: true, ngImport: i0, template: "<!-- Because directives can't be applied conditionally (routerLink, mat-button and mat-icon-button), we have to use different elements -->\n\n<!-- Edge case of a button without any kind of link at all -->\n<span *ngIf=\"type === 'none'\">\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span *ngIf=\"label\">{{ label }}</span>\n</span>\n\n<ng-container *ngIf=\"!raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n (click)=\"buttonClick.emit($event)\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a *ngIf=\"type === 'click' && !label\" (click)=\"buttonClick.emit($event)\" [disabled]=\"disabled\" mat-icon-button>\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n\n<ng-container *ngIf=\"raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'click' && !label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-raised-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n", styles: ["natural-table-button{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}natural-table-button mat-icon:not(:last-child){margin-right:5px}natural-table-button a.mat-mdc-button{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:flex-start}natural-table-button a.mat-mdc-button .mdc-button__label{display:flex;flex-direction:row;align-items:center}natural-table-button>span{padding:0 8px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIconAnchor, selector: "a[mat-icon-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "component", type: i1$5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
10649
10652
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NaturalTableButtonComponent, decorators: [{
|
|
10650
10653
|
type: Component,
|
|
10651
|
-
args: [{ selector: 'natural-table-button', encapsulation: ViewEncapsulation.None, template: "<!-- Because directives can't be applied conditionally (routerLink, mat-button and mat-icon-button), we have to use different elements -->\n\n<!-- Edge case of a button without any kind of link at all -->\n<span *ngIf=\"type === 'none'\">\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span *ngIf=\"label\">{{ label }}</span>\n</span>\n\n<ng-container *ngIf=\"!raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n mat-icon-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- Click with label... -->\n <a
|
|
10654
|
+
args: [{ selector: 'natural-table-button', encapsulation: ViewEncapsulation.None, template: "<!-- Because directives can't be applied conditionally (routerLink, mat-button and mat-icon-button), we have to use different elements -->\n\n<!-- Edge case of a button without any kind of link at all -->\n<span *ngIf=\"type === 'none'\">\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span *ngIf=\"label\">{{ label }}</span>\n</span>\n\n<ng-container *ngIf=\"!raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n (click)=\"buttonClick.emit($event)\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a *ngIf=\"type === 'click' && !label\" (click)=\"buttonClick.emit($event)\" [disabled]=\"disabled\" mat-icon-button>\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n\n<ng-container *ngIf=\"raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'click' && !label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-raised-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n", styles: ["natural-table-button{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}natural-table-button mat-icon:not(:last-child){margin-right:5px}natural-table-button a.mat-mdc-button{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:flex-start}natural-table-button a.mat-mdc-button .mdc-button__label{display:flex;flex-direction:row;align-items:center}natural-table-button>span{padding:0 8px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}\n"] }]
|
|
10652
10655
|
}], propDecorators: { queryParams: [{
|
|
10653
10656
|
type: Input
|
|
10654
10657
|
}], queryParamsHandling: [{
|
|
@@ -10665,6 +10668,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImpor
|
|
|
10665
10668
|
type: Input
|
|
10666
10669
|
}], preserveFragment: [{
|
|
10667
10670
|
type: Input
|
|
10671
|
+
}], disabled: [{
|
|
10672
|
+
type: Input
|
|
10668
10673
|
}], raised: [{
|
|
10669
10674
|
type: Input
|
|
10670
10675
|
}], color: [{
|