mmhglobal-dynamicform 2.8.0 → 2.9.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.
@@ -8,15 +8,14 @@ import * as i0 from "@angular/core";
8
8
  import * as i1 from "@progress/kendo-angular-dialog";
9
9
  import * as i2 from "@ionic/angular";
10
10
  import * as i3 from "mmhglobal-zcore";
11
- import * as i4 from "../services/component-error-handler.service";
12
- import * as i5 from "@fortawesome/angular-fontawesome";
13
- import * as i6 from "../uiactionbutton/uiactionbutton.component";
14
- import * as i7 from "../zform/zform.component";
15
- import * as i8 from "@angular/common";
16
- import * as i9 from "../directives/scrollbar.theme.directive";
17
- import * as i10 from "@angular/flex-layout/extended";
11
+ import * as i4 from "@fortawesome/angular-fontawesome";
12
+ import * as i5 from "../uiactionbutton/uiactionbutton.component";
13
+ import * as i6 from "../zform/zform.component";
14
+ import * as i7 from "@angular/common";
15
+ import * as i8 from "../directives/scrollbar.theme.directive";
16
+ import * as i9 from "@angular/flex-layout/extended";
18
17
  export class ZmodalComponent extends DialogContentBase {
19
- constructor(dialog, modalCtrl, zcoreService, webApiService, resourceApiService, componentErrorHandler, // Use in mmhglobal-zmodal.helper
18
+ constructor(dialog, modalCtrl, zcoreService, webApiService, resourceApiService, componentErrorHandlerService, // Use in mmhglobal-zmodal.helper
20
19
  fieldService, platform, alertService) {
21
20
  super(dialog);
22
21
  this.dialog = dialog;
@@ -24,7 +23,7 @@ export class ZmodalComponent extends DialogContentBase {
24
23
  this.zcoreService = zcoreService;
25
24
  this.webApiService = webApiService;
26
25
  this.resourceApiService = resourceApiService;
27
- this.componentErrorHandler = componentErrorHandler;
26
+ this.componentErrorHandlerService = componentErrorHandlerService;
28
27
  this.fieldService = fieldService;
29
28
  this.platform = platform;
30
29
  this.alertService = alertService;
@@ -118,12 +117,12 @@ export class ZmodalComponent extends DialogContentBase {
118
117
  return v;
119
118
  }
120
119
  }
121
- ZmodalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZmodalComponent, deps: [{ token: i1.DialogRef }, { token: i2.ModalController }, { token: i3.ZCoreService }, { token: i3.WebApiService }, { token: i3.ResourceApiService }, { token: i4.ComponentErrorHandlerService }, { token: i3.FieldService }, { token: i2.Platform }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component });
122
- ZmodalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZmodalComponent, selector: "app-zmodal", inputs: { modalParams: "modalParams" }, usesInheritance: true, ngImport: i0, template: "<ion-header *ngIf=\"isMobileScreen()\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"onCancel()\">\r\n <!-- <ion-icon name=\"close\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times'\" size=\"lg\"></fa-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n {{ modalParams.formHeader }}\r\n </ion-title>\r\n <ion-buttons slot=\"primary\" *ngIf=\"!group.isLoading\">\r\n <app-uiactionbutton [group]=\"group\"></app-uiactionbutton>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content appScrollbarTheme [ngStyle]=\"getGridStyle()\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"group.isLoading\" class=\"ion-text-center\">\r\n <ion-col class=\"ion-margin ion-padding\">\r\n <ion-spinner></ion-spinner>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"!group.isLoading\">\r\n <ion-col>\r\n <app-zform [group]=\"group\"></app-zform>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"isSITEnvironment() && !group.isLoading\">\r\n <ion-col>\r\n <pre style=\"font-size: x-small;\">{{group.zModel | json}}</pre>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</ion-content>\r\n\r\n", styles: [""], components: [{ type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i6.UiactionbuttonComponent, selector: "app-uiactionbutton" }, { type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i2.IonRow, selector: "ion-row" }, { type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { type: i7.ZformComponent, selector: "app-zform", inputs: ["group", "fieldName"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.ScrollbarThemeDirective, selector: "[appScrollbarTheme]" }, { type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i10.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }], pipes: { "json": i8.JsonPipe } });
120
+ ZmodalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZmodalComponent, deps: [{ token: i1.DialogRef }, { token: i2.ModalController }, { token: i3.ZCoreService }, { token: i3.WebApiService }, { token: i3.ResourceApiService }, { token: i3.ComponentErrorHandlerService }, { token: i3.FieldService }, { token: i2.Platform }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component });
121
+ ZmodalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZmodalComponent, selector: "app-zmodal", inputs: { modalParams: "modalParams" }, usesInheritance: true, ngImport: i0, template: "<ion-header *ngIf=\"isMobileScreen()\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"onCancel()\">\r\n <!-- <ion-icon name=\"close\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times'\" size=\"lg\"></fa-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n {{ modalParams.formHeader }}\r\n </ion-title>\r\n <ion-buttons slot=\"primary\" *ngIf=\"!group.isLoading\">\r\n <app-uiactionbutton [group]=\"group\"></app-uiactionbutton>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content appScrollbarTheme [ngStyle]=\"getGridStyle()\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"group.isLoading\" class=\"ion-text-center\">\r\n <ion-col class=\"ion-margin ion-padding\">\r\n <ion-spinner></ion-spinner>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"!group.isLoading\">\r\n <ion-col>\r\n <app-zform [group]=\"group\"></app-zform>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"isSITEnvironment() && !group.isLoading\">\r\n <ion-col>\r\n <pre style=\"font-size: x-small;\">{{group.zModel | json}}</pre>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</ion-content>\r\n\r\n", styles: [""], components: [{ type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i5.UiactionbuttonComponent, selector: "app-uiactionbutton" }, { type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i2.IonRow, selector: "ion-row" }, { type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { type: i6.ZformComponent, selector: "app-zform", inputs: ["group", "fieldName"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.ScrollbarThemeDirective, selector: "[appScrollbarTheme]" }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }], pipes: { "json": i7.JsonPipe } });
123
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZmodalComponent, decorators: [{
124
123
  type: Component,
125
124
  args: [{ selector: 'app-zmodal', template: "<ion-header *ngIf=\"isMobileScreen()\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"onCancel()\">\r\n <!-- <ion-icon name=\"close\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times'\" size=\"lg\"></fa-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n {{ modalParams.formHeader }}\r\n </ion-title>\r\n <ion-buttons slot=\"primary\" *ngIf=\"!group.isLoading\">\r\n <app-uiactionbutton [group]=\"group\"></app-uiactionbutton>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content appScrollbarTheme [ngStyle]=\"getGridStyle()\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"group.isLoading\" class=\"ion-text-center\">\r\n <ion-col class=\"ion-margin ion-padding\">\r\n <ion-spinner></ion-spinner>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"!group.isLoading\">\r\n <ion-col>\r\n <app-zform [group]=\"group\"></app-zform>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"isSITEnvironment() && !group.isLoading\">\r\n <ion-col>\r\n <pre style=\"font-size: x-small;\">{{group.zModel | json}}</pre>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</ion-content>\r\n\r\n", styles: [""] }]
126
- }], ctorParameters: function () { return [{ type: i1.DialogRef }, { type: i2.ModalController }, { type: i3.ZCoreService }, { type: i3.WebApiService }, { type: i3.ResourceApiService }, { type: i4.ComponentErrorHandlerService }, { type: i3.FieldService }, { type: i2.Platform }, { type: i3.AlertService }]; }, propDecorators: { modalParams: [{
125
+ }], ctorParameters: function () { return [{ type: i1.DialogRef }, { type: i2.ModalController }, { type: i3.ZCoreService }, { type: i3.WebApiService }, { type: i3.ResourceApiService }, { type: i3.ComponentErrorHandlerService }, { type: i3.FieldService }, { type: i2.Platform }, { type: i3.AlertService }]; }, propDecorators: { modalParams: [{
127
126
  type: Input
128
127
  }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3ptb2RhbC96bW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem1vZGFsL3ptb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdDQUFnQyxDQUFDO0FBRTlFLDJDQUEyQztBQUMzQyxPQUFPLEVBQ0wsTUFBTSxFQUVOLGdCQUFnQixFQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxZQUFZLEVBQWlCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7OztBQVUvRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxpQkFBaUI7SUFPcEQsWUFDUyxNQUFpQixFQUNoQixTQUEwQixFQUMxQixZQUEwQixFQUMxQixhQUE0QixFQUM1QixrQkFBc0MsRUFDdEMscUJBQW1ELEVBQUUsaUNBQWlDO0lBQ3RGLFlBQTBCLEVBQzFCLFFBQWtCLEVBQ2xCLFlBQTBCO1FBR2xDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQVhQLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QywwQkFBcUIsR0FBckIscUJBQXFCLENBQThCO1FBQ25ELGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGFBQVEsR0FBUixR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LHFDQUFxQyxFQUNyQyxRQUFRLEVBQ1IsV0FBVyxFQUNYLEtBQUssQ0FDTixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVUsRUFBRSxFQUFVO1FBQzlCLE1BQU0sS0FBSyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxZQUFZO1FBQ1YsWUFBWTtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLE9BQU87Z0JBQ0wsV0FBVyxFQUFFLEdBQUc7Z0JBQ2hCLFVBQVUsRUFBRSxHQUFHO2FBQ2hCLENBQUM7U0FDSDtRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sQ0FBQyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7NEdBN0hVLGVBQWU7Z0dBQWYsZUFBZSxpSEMzQjVCLHF1Q0FxQ0E7MkZEVmEsZUFBZTtrQkFOM0IsU0FBUzsrQkFDRSxZQUFZOzhVQU1iLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBQbGF0Zm9ybSB9IGZyb20gXCJAaW9uaWMvYW5ndWxhclwiO1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IERpYWxvZ0NvbnRlbnRCYXNlLCBEaWFsb2dSZWYgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kaWFsb2cnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIFpHcm91cCwgTW9kYWxQYWdlUGFyYW1zLFxyXG4gIFdlYkFwaVNlcnZpY2UsIEFsZXJ0U2VydmljZSwgWkNvcmVTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsIFJlc291cmNlQXBpU2VydmljZSxcclxuICBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnRcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IFptb2RhbEhlbHBlciwgTW9kYWxSZXNwb25zZSB9IGZyb20gJ21taGdsb2JhbC16bW9kYWwnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2NvbXBvbmVudC1lcnJvci1oYW5kbGVyLnNlcnZpY2VcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC16bW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96bW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ptb2RhbC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFptb2RhbENvbXBvbmVudCBleHRlbmRzIERpYWxvZ0NvbnRlbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIG1vZGFsUGFyYW1zOiBNb2RhbFBhZ2VQYXJhbXM7XHJcblxyXG4gIGdyb3VwOiBaR3JvdXAgPSBuZXcgWkdyb3VwKHRydWUpO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGJhY2tCdXR0b25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBEaWFsb2dSZWYsXHJcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxyXG4gICAgcHJpdmF0ZSB6Y29yZVNlcnZpY2U6IFpDb3JlU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbXBvbmVudEVycm9ySGFuZGxlcjogQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSwgLy8gVXNlIGluIG1taGdsb2JhbC16bW9kYWwuaGVscGVyXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXHJcblxyXG4gICkge1xyXG4gICAgc3VwZXIoZGlhbG9nKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBtb2RhbEdyb3VwKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuZ3JvdXA7XHJcbiAgLy8gfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFptb2RhbEhlbHBlci5vbkluaXRfTW9kYWxGb3JtKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBabW9kYWxIZWxwZXIub25EZXN0cm95X01vZGFsRm9ybSh0aGlzKTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKGV2ZW50PzogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBabW9kYWxIZWxwZXIub25DYW5jZWwodGhpcywgZXZlbnQpO1xyXG4gICAgLy8gdGhpcy5kaWFsb2cuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG9uQ29uZmlybShldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBabW9kYWxIZWxwZXIub25Db25maXJtKHRoaXMsIGV2ZW50KTtcclxuICAgIC8vIGNvbnN0IGZnID0gdGhpcy5ncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIC8vIGlmICghdGhpcy5ncm91cC5mb3JtKSB7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAoIWZnLmRpcnR5KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUud2FybignRm9ybSBpcyBub3QgZGlydHkgaGVuY2UgbW9kYWxmb3JtIHJlY29yZCBpcyBub3Qgc2F2ZWQuJyk7XHJcbiAgICAvLyAgIHRoaXMub25DYW5jZWwoKTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICghZmcudmFsaWQpIHtcclxuICAgIC8vICAgY29uc3QgZXJyb3JzID0gWkNvbXBvbmVudEhlbHBlci5nZXRGb3JtR3JvdXBFcnJvcnMoZmcsIHRoaXMuYWxlcnRTZXJ2aWNlKTtcclxuICAgIC8vICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5ncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgIC8vIHRoaXMubW9kYWxDdHJsLmRpc21pc3ModGhpcy5ncm91cC56TW9kZWwsIFwiY29uZmlybVwiKTtcclxuICAgIC8vIGlmIChaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgIC8vICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyhldmVudC5kYXRhLCBcImNvbmZpcm1cIik7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gdGhpcy5kaWFsb2cuY2xvc2UoZXZlbnQuZGF0YSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBvbkluaXRDbG9zZShldmVudD86IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgWm1vZGFsSGVscGVyLm9uSW5pdENsb3NlKHRoaXMsZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaXNTSVRFbnZpcm9ubWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnpjb3JlU2VydmljZS5pc0RlYnVnU2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIHRvIHNlcnZlIGFjdGlvbkJ1dHRvbiBhdCBmb3JtSGVhZGVyXHJcbiAgc3ViamVjdEV2ZW50KGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCAhZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAnKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcIj4+IFN1YmplY3RFdmVudFwiLCBldmVudCk7XHJcbiAgICAvLyBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQucmVwbGFjZSgnbW9kYWxHcm91cC4nLCAnZ3JvdXAuJyk7XHJcbiAgICBjb25zdCBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBldmVudC50YXJnZXQsIGdyb3VwKTtcclxuICAgIC8vIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBmZyA9IHRoaXMuZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5ncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgICAgZXZlbnQuZGF0YSA9IHRoaXMuZ3JvdXAuek1vZGVsO1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAubW9kYWxBbnN3ZXInKSB8fCBldmVudC50YXJnZXQuc3RhcnRzV2l0aCgnbW9kYWxHcm91cC5tb2RhbENsb3NlJykgfHwgZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAubW9kYWxDYW5jZWwnKSkge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIG5ld0Z1bmMoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKGdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgbmV3RnVuYyhldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBcIkZ1bmN0aW9uIG5vdCBkZWZpbmVkIGluIGdyb3VwIGZvcjogXCIsXHJcbiAgICAgICAgY2FsbEZ1bmMsXHJcbiAgICAgICAgXCIsIEV2ZW50OiBcIixcclxuICAgICAgICBldmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwkKGdyb3VwOiBhbnksIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVjSWQgPSBpZCB8fCBncm91cC5yZWZlcmVuY2VJZDtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIHJlY0lkLCBudWxsKTtcclxuICB9XHJcblxyXG4gIGdldEdyaWRTdHlsZSgpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgaWYgKCF0aGlzLmlzTW9iaWxlU2NyZWVuKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgXCJoZWlnaHQucHhcIjogNTAwLFxyXG4gICAgICAgIFwid2lkdGgucHhcIjogNzAwXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpc01vYmlsZVNjcmVlbigpIHtcclxuICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCk7XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcbn1cclxuIiwiPGlvbi1oZWFkZXIgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpXCI+XHJcbiAgPGlvbi10b29sYmFyPlxyXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxyXG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwoKVwiPlxyXG4gICAgICAgIDwhLS0gPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiPjwvaW9uLWljb24+IC0tPlxyXG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cIid0aW1lcydcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgIDwvaW9uLWJ1dHRvbnM+XHJcbiAgICA8aW9uLXRpdGxlPlxyXG4gICAgICB7eyBtb2RhbFBhcmFtcy5mb3JtSGVhZGVyIH19XHJcbiAgICA8L2lvbi10aXRsZT5cclxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwicHJpbWFyeVwiICpuZ0lmPVwiIWdyb3VwLmlzTG9hZGluZ1wiPlxyXG4gICAgICA8YXBwLXVpYWN0aW9uYnV0dG9uIFtncm91cF09XCJncm91cFwiPjwvYXBwLXVpYWN0aW9uYnV0dG9uPlxyXG4gICAgPC9pb24tYnV0dG9ucz5cclxuICA8L2lvbi10b29sYmFyPlxyXG48L2lvbi1oZWFkZXI+XHJcblxyXG48aW9uLWNvbnRlbnQgYXBwU2Nyb2xsYmFyVGhlbWUgW25nU3R5bGVdPVwiZ2V0R3JpZFN0eWxlKClcIj5cclxuICA8aW9uLWdyaWQ+XHJcbiAgICA8aW9uLXJvdyAqbmdJZj1cImdyb3VwLmlzTG9hZGluZ1wiIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW1hcmdpbiBpb24tcGFkZGluZ1wiPlxyXG4gICAgICAgIDxpb24tc3Bpbm5lcj48L2lvbi1zcGlubmVyPlxyXG4gICAgICA8L2lvbi1jb2w+XHJcbiAgICA8L2lvbi1yb3c+XHJcbiAgICA8aW9uLXJvdyAqbmdJZj1cIiFncm91cC5pc0xvYWRpbmdcIj5cclxuICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgPGFwcC16Zm9ybSBbZ3JvdXBdPVwiZ3JvdXBcIj48L2FwcC16Zm9ybT5cclxuICAgICAgPC9pb24tY29sPlxyXG4gICAgPC9pb24tcm93PlxyXG4gICAgPGlvbi1yb3cgKm5nSWY9XCJpc1NJVEVudmlyb25tZW50KCkgJiYgIWdyb3VwLmlzTG9hZGluZ1wiPlxyXG4gICAgICA8aW9uLWNvbD5cclxuICAgICAgICA8cHJlIHN0eWxlPVwiZm9udC1zaXplOiB4LXNtYWxsO1wiPnt7Z3JvdXAuek1vZGVsIHwganNvbn19PC9wcmU+XHJcbiAgICAgIDwvaW9uLWNvbD5cclxuICAgIDwvaW9uLXJvdz5cclxuICA8L2lvbi1ncmlkPlxyXG48L2lvbi1jb250ZW50PlxyXG5cclxuIl19
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3ptb2RhbC96bW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem1vZGFsL3ptb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdDQUFnQyxDQUFDO0FBRTlFLDJDQUEyQztBQUMzQyxPQUFPLEVBQ0wsTUFBTSxFQUVOLGdCQUFnQixFQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxZQUFZLEVBQWlCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7O0FBUy9ELE1BQU0sT0FBTyxlQUFnQixTQUFRLGlCQUFpQjtJQU9wRCxZQUNTLE1BQWlCLEVBQ2hCLFNBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLGtCQUFzQyxFQUN0Qyw0QkFBMEQsRUFBRSxpQ0FBaUM7SUFDN0YsWUFBMEIsRUFDMUIsUUFBa0IsRUFDbEIsWUFBMEI7UUFHbEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBWFAsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBOEI7UUFDMUQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFB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cUNBQXFDLEVBQ3JDLFFBQVEsRUFDUixXQUFXLEVBQ1gsS0FBSyxDQUNOLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVSxFQUFFLEVBQVU7UUFDOUIsTUFBTSxLQUFLLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELFlBQVk7UUFDVixZQUFZO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsT0FBTztnQkFDTCxXQUFXLEVBQUUsR0FBRztnQkFDaEIsVUFBVSxFQUFFLEdBQUc7YUFDaEIsQ0FBQztTQUNIO1FBQ0QsT0FBTztJQUNULENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUMsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDOzs0R0E3SFUsZUFBZTtnR0FBZixlQUFlLGlIQzFCNUIscXVDQXFDQTsyRkRYYSxlQUFlO2tCQU4zQixTQUFTOytCQUNFLFlBQVk7OFVBTWIsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIFBsYXRmb3JtIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyXCI7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRGlhbG9nQ29udGVudEJhc2UsIERpYWxvZ1JlZiB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRpYWxvZyc7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkdyb3VwLCBNb2RhbFBhZ2VQYXJhbXMsXHJcbiAgV2ViQXBpU2VydmljZSwgQWxlcnRTZXJ2aWNlLCBaQ29yZVNlcnZpY2UsIEZpZWxkU2VydmljZSwgUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZVxyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgWm1vZGFsSGVscGVyLCBNb2RhbFJlc3BvbnNlIH0gZnJvbSAnbW1oZ2xvYmFsLXptb2RhbCc7IFxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXptb2RhbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ptb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vem1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWm1vZGFsQ29tcG9uZW50IGV4dGVuZHMgRGlhbG9nQ29udGVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgbW9kYWxQYXJhbXM6IE1vZGFsUGFnZVBhcmFtcztcclxuXHJcbiAgZ3JvdXA6IFpHcm91cCA9IG5ldyBaR3JvdXAodHJ1ZSk7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgYmFja0J1dHRvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2c6IERpYWxvZ1JlZixcclxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZTogQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSwgLy8gVXNlIGluIG1taGdsb2JhbC16bW9kYWwuaGVscGVyXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXHJcblxyXG4gICkge1xyXG4gICAgc3VwZXIoZGlhbG9nKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBtb2RhbEdyb3VwKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuZ3JvdXA7XHJcbiAgLy8gfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFptb2RhbEhlbHBlci5vbkluaXRfTW9kYWxGb3JtKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBabW9kYWxIZWxwZXIub25EZXN0cm95X01vZGFsRm9ybSh0aGlzKTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKGV2ZW50PzogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBabW9kYWxIZWxwZXIub25DYW5jZWwodGhpcywgZXZlbnQpO1xyXG4gICAgLy8gdGhpcy5kaWFsb2cuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG9uQ29uZmlybShldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBabW9kYWxIZWxwZXIub25Db25maXJtKHRoaXMsIGV2ZW50KTtcclxuICAgIC8vIGNvbnN0IGZnID0gdGhpcy5ncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIC8vIGlmICghdGhpcy5ncm91cC5mb3JtKSB7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAoIWZnLmRpcnR5KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUud2FybignRm9ybSBpcyBub3QgZGlydHkgaGVuY2UgbW9kYWxmb3JtIHJlY29yZCBpcyBub3Qgc2F2ZWQuJyk7XHJcbiAgICAvLyAgIHRoaXMub25DYW5jZWwoKTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICghZmcudmFsaWQpIHtcclxuICAgIC8vICAgY29uc3QgZXJyb3JzID0gWkNvbXBvbmVudEhlbHBlci5nZXRGb3JtR3JvdXBFcnJvcnMoZmcsIHRoaXMuYWxlcnRTZXJ2aWNlKTtcclxuICAgIC8vICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5ncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgIC8vIHRoaXMubW9kYWxDdHJsLmRpc21pc3ModGhpcy5ncm91cC56TW9kZWwsIFwiY29uZmlybVwiKTtcclxuICAgIC8vIGlmIChaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgIC8vICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyhldmVudC5kYXRhLCBcImNvbmZpcm1cIik7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gdGhpcy5kaWFsb2cuY2xvc2UoZXZlbnQuZGF0YSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBvbkluaXRDbG9zZShldmVudD86IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgWm1vZGFsSGVscGVyLm9uSW5pdENsb3NlKHRoaXMsZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaXNTSVRFbnZpcm9ubWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnpjb3JlU2VydmljZS5pc0RlYnVnU2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIHRvIHNlcnZlIGFjdGlvbkJ1dHRvbiBhdCBmb3JtSGVhZGVyXHJcbiAgc3ViamVjdEV2ZW50KGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCAhZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAnKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcIj4+IFN1YmplY3RFdmVudFwiLCBldmVudCk7XHJcbiAgICAvLyBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQucmVwbGFjZSgnbW9kYWxHcm91cC4nLCAnZ3JvdXAuJyk7XHJcbiAgICBjb25zdCBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBldmVudC50YXJnZXQsIGdyb3VwKTtcclxuICAgIC8vIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBmZyA9IHRoaXMuZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5ncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgICAgZXZlbnQuZGF0YSA9IHRoaXMuZ3JvdXAuek1vZGVsO1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAubW9kYWxBbnN3ZXInKSB8fCBldmVudC50YXJnZXQuc3RhcnRzV2l0aCgnbW9kYWxHcm91cC5tb2RhbENsb3NlJykgfHwgZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAubW9kYWxDYW5jZWwnKSkge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIG5ld0Z1bmMoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKGdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgbmV3RnVuYyhldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBcIkZ1bmN0aW9uIG5vdCBkZWZpbmVkIGluIGdyb3VwIGZvcjogXCIsXHJcbiAgICAgICAgY2FsbEZ1bmMsXHJcbiAgICAgICAgXCIsIEV2ZW50OiBcIixcclxuICAgICAgICBldmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwkKGdyb3VwOiBhbnksIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVjSWQgPSBpZCB8fCBncm91cC5yZWZlcmVuY2VJZDtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIHJlY0lkLCBudWxsKTtcclxuICB9XHJcblxyXG4gIGdldEdyaWRTdHlsZSgpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgaWYgKCF0aGlzLmlzTW9iaWxlU2NyZWVuKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgXCJoZWlnaHQucHhcIjogNTAwLFxyXG4gICAgICAgIFwid2lkdGgucHhcIjogNzAwXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpc01vYmlsZVNjcmVlbigpIHtcclxuICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCk7XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcbn1cclxuIiwiPGlvbi1oZWFkZXIgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpXCI+XHJcbiAgPGlvbi10b29sYmFyPlxyXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxyXG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwoKVwiPlxyXG4gICAgICAgIDwhLS0gPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiPjwvaW9uLWljb24+IC0tPlxyXG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cIid0aW1lcydcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgIDwvaW9uLWJ1dHRvbnM+XHJcbiAgICA8aW9uLXRpdGxlPlxyXG4gICAgICB7eyBtb2RhbFBhcmFtcy5mb3JtSGVhZGVyIH19XHJcbiAgICA8L2lvbi10aXRsZT5cclxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwicHJpbWFyeVwiICpuZ0lmPVwiIWdyb3VwLmlzTG9hZGluZ1wiPlxyXG4gICAgICA8YXBwLXVpYWN0aW9uYnV0dG9uIFtncm91cF09XCJncm91cFwiPjwvYXBwLXVpYWN0aW9uYnV0dG9uPlxyXG4gICAgPC9pb24tYnV0dG9ucz5cclxuICA8L2lvbi10b29sYmFyPlxyXG48L2lvbi1oZWFkZXI+XHJcblxyXG48aW9uLWNvbnRlbnQgYXBwU2Nyb2xsYmFyVGhlbWUgW25nU3R5bGVdPVwiZ2V0R3JpZFN0eWxlKClcIj5cclxuICA8aW9uLWdyaWQ+XHJcbiAgICA8aW9uLXJvdyAqbmdJZj1cImdyb3VwLmlzTG9hZGluZ1wiIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW1hcmdpbiBpb24tcGFkZGluZ1wiPlxyXG4gICAgICAgIDxpb24tc3Bpbm5lcj48L2lvbi1zcGlubmVyPlxyXG4gICAgICA8L2lvbi1jb2w+XHJcbiAgICA8L2lvbi1yb3c+XHJcbiAgICA8aW9uLXJvdyAqbmdJZj1cIiFncm91cC5pc0xvYWRpbmdcIj5cclxuICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgPGFwcC16Zm9ybSBbZ3JvdXBdPVwiZ3JvdXBcIj48L2FwcC16Zm9ybT5cclxuICAgICAgPC9pb24tY29sPlxyXG4gICAgPC9pb24tcm93PlxyXG4gICAgPGlvbi1yb3cgKm5nSWY9XCJpc1NJVEVudmlyb25tZW50KCkgJiYgIWdyb3VwLmlzTG9hZGluZ1wiPlxyXG4gICAgICA8aW9uLWNvbD5cclxuICAgICAgICA8cHJlIHN0eWxlPVwiZm9udC1zaXplOiB4LXNtYWxsO1wiPnt7Z3JvdXAuek1vZGVsIHwganNvbn19PC9wcmU+XHJcbiAgICAgIDwvaW9uLWNvbD5cclxuICAgIDwvaW9uLXJvdz5cclxuICA8L2lvbi1ncmlkPlxyXG48L2lvbi1jb250ZW50PlxyXG5cclxuIl19