@c8y/ngx-components 1017.0.4 → 1017.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,6 +31,7 @@ export declare class BootstrapComponent implements OnDestroy, OnInit {
31
31
  private getRemotes;
32
32
  private loadRemotes;
33
33
  private subscribeToLoadRemotes;
34
+ private ensureWeMarkPluginsAsLoaded;
34
35
  static ɵfac: i0.ɵɵFactoryDeclaration<BootstrapComponent, never>;
35
36
  static ɵcmp: i0.ɵɵComponentDeclaration<BootstrapComponent, "c8y-bootstrap", never, {}, {}, never, ["#c8y-legacy-view"], false>;
36
37
  }
@@ -18,6 +18,7 @@ export declare class DynamicComponentService extends StateService implements Ext
18
18
  */
19
19
  factories: ExtensionFactory<DynamicComponentDefinition>[];
20
20
  injectors: Injector[];
21
+ private remotePluginsLoaded$;
21
22
  constructor(rootInjector: Injector, router: Router, waitTimeout: number, dynamicResolver: DynamicResolverService);
22
23
  refresh(): void;
23
24
  get state(): Set<DynamicComponentDefinition>;
@@ -38,6 +39,7 @@ export declare class DynamicComponentService extends StateService implements Ext
38
39
  }>): Promise<{
39
40
  [key: string]: Partial<any> | Partial<any>[];
40
41
  }[]>;
42
+ markPluginsAsLoaded(): void;
41
43
  static ɵfac: i0.ɵɵFactoryDeclaration<DynamicComponentService, [null, null, { optional: true; }, null]>;
42
44
  static ɵprov: i0.ɵɵInjectableDeclaration<DynamicComponentService>;
43
45
  }
@@ -55,6 +55,7 @@ export declare class PluginsResolveService {
55
55
  * refresh such hooks, that possible has a remote plugin assigned.
56
56
  */
57
57
  refreshHooks(allHooks?: boolean): void;
58
+ markPluginsAsLoaded(): void;
58
59
  /**
59
60
  * Loads a list of remotes so that a particular application can use them.
60
61
  * The request is made to the following address: /apps/<contextPath>/remoteEntry.js
@@ -88,6 +88,7 @@ export class BootstrapComponent {
88
88
  }
89
89
  async loadRemotes(remotes) {
90
90
  if (!remotes) {
91
+ this.ensureWeMarkPluginsAsLoaded();
91
92
  return;
92
93
  }
93
94
  const remoteModules = await this.pluginsResolve.loadRemotes(remotes);
@@ -99,12 +100,17 @@ export class BootstrapComponent {
99
100
  }
100
101
  subscribeToLoadRemotes() {
101
102
  if (this.options.get('noPlugins', false)) {
103
+ this.ensureWeMarkPluginsAsLoaded();
102
104
  return;
103
105
  }
104
106
  this.ui.currentApplicationConfig
105
107
  .pipe(takeUntil(this.destroy$))
106
108
  .subscribe((config) => this.loadRemotes(this.getRemotes(config)));
107
109
  }
110
+ ensureWeMarkPluginsAsLoaded() {
111
+ // ensure we call markPluginsAsLoaded on the DynamicComponentService
112
+ this.pluginsResolve.markPluginsAsLoaded();
113
+ }
108
114
  }
109
115
  BootstrapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: BootstrapComponent, deps: [{ token: i1.TabsService }, { token: i2.AppStateService }, { token: i3.NavigatorService }, { token: i4.ActionBarService }, { token: i5.HeaderService }, { token: i6.OptionsService }, { token: i7.PluginsResolveService }, { token: i8.SetupService }], target: i0.ɵɵFactoryTarget.Component });
110
116
  BootstrapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: BootstrapComponent, selector: "c8y-bootstrap", ngImport: i0, template: "<c8y-login *ngIf=\"!noLogin && !(ui.currentUser | async)\"></c8y-login>\n\n<div\n *ngIf=\"noLogin || ((ui.currentUser | async) && !(setupService.isSetupNeeded$ | async))\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar #header></c8y-header-bar>\n <c8y-navigator-outlet\n [nodes]=\"navigator.items$ | async\"\n [open]=\"headerService.navigatorOpen$ | async\"\n role=\"region\"\n title=\"{{ 'Navigator menu' | translate }}\"\n >\n <header class=\"title navigator-slot-top\">\n <div class=\"tenant-brand\"></div>\n <c8y-app-icon\n [name]=\"(ui.state$ | async).app.name\"\n [contextPath]=\"(ui.state$ | async).app.contextPath\"\n ></c8y-app-icon>\n <span>{{ (ui.state$ | async).app | humanizeAppName | async }}</span>\n </header>\n <div class=\"powered-by navigator-slot-bottom\" *ngIf=\"showPoweredBy\">\n <p translate>powered by Cumulocity</p>\n </div>\n </c8y-navigator-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n class=\"mcontainer\"\n [ngClass]=\"{\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"(ui.currentUser | async) && (setupService.isSetupNeeded$ | async)\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n", dependencies: [{ kind: "directive", type: i9.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.HeaderBarComponent, selector: "c8y-header-bar", inputs: ["simple"] }, { kind: "component", type: i12.AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "component", type: i13.LoginComponent, selector: "c8y-login", inputs: ["name"] }, { kind: "directive", type: i14.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i15.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen"] }, { kind: "component", type: i16.ActionBarComponent, selector: "c8y-action-bar", inputs: ["navigatorOpen", "hasTabs", "isTabsHorizontal", "items$"] }, { kind: "component", type: i17.AlertOutletComponent, selector: "c8y-alert-outlet" }, { kind: "component", type: i18.NavigatorOutletComponent, selector: "c8y-navigator-outlet, c8y-ui-navigator", inputs: ["nodes", "open"] }, { kind: "component", type: i19.SetupComponent, selector: "c8y-setup" }, { kind: "component", type: i20.CookieBannerComponent, selector: "c8y-cookie-banner" }, { kind: "pipe", type: i21.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "pipe", type: i22.HumanizeAppNamePipe, name: "humanizeAppName" }] });
@@ -112,4 +118,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
112
118
  type: Component,
113
119
  args: [{ selector: 'c8y-bootstrap', template: "<c8y-login *ngIf=\"!noLogin && !(ui.currentUser | async)\"></c8y-login>\n\n<div\n *ngIf=\"noLogin || ((ui.currentUser | async) && !(setupService.isSetupNeeded$ | async))\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar #header></c8y-header-bar>\n <c8y-navigator-outlet\n [nodes]=\"navigator.items$ | async\"\n [open]=\"headerService.navigatorOpen$ | async\"\n role=\"region\"\n title=\"{{ 'Navigator menu' | translate }}\"\n >\n <header class=\"title navigator-slot-top\">\n <div class=\"tenant-brand\"></div>\n <c8y-app-icon\n [name]=\"(ui.state$ | async).app.name\"\n [contextPath]=\"(ui.state$ | async).app.contextPath\"\n ></c8y-app-icon>\n <span>{{ (ui.state$ | async).app | humanizeAppName | async }}</span>\n </header>\n <div class=\"powered-by navigator-slot-bottom\" *ngIf=\"showPoweredBy\">\n <p translate>powered by Cumulocity</p>\n </div>\n </c8y-navigator-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n class=\"mcontainer\"\n [ngClass]=\"{\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"(ui.currentUser | async) && (setupService.isSetupNeeded$ | async)\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n" }]
114
120
  }], ctorParameters: function () { return [{ type: i1.TabsService }, { type: i2.AppStateService }, { type: i3.NavigatorService }, { type: i4.ActionBarService }, { type: i5.HeaderService }, { type: i6.OptionsService }, { type: i7.PluginsResolveService }, { type: i8.SetupService }]; } });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9ib290c3RyYXAudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1wQyxNQUFNLE9BQU8sa0JBQWtCO0lBUzdCLFlBQ1MsSUFBaUIsRUFDakIsRUFBbUIsRUFDbkIsU0FBMkIsRUFDM0IsU0FBMkIsRUFDM0IsYUFBNEIsRUFDM0IsT0FBdUIsRUFDdkIsY0FBcUMsRUFDdEMsWUFBMEI7UUFQMUIsU0FBSSxHQUFKLElBQUksQ0FB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QUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckUsd0JBQXdCO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQ3pDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUMxRCxDQUFDO1FBRUYsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCO2FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLE1BQXFCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQzs7K0dBckZVLGtCQUFrQjttR0FBbEIsa0JBQWtCLHFEQ25CL0IsNjlFQTBFQTsyRkR2RGEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWN0aW9uQmFyU2VydmljZSB9IGZyb20gJy4uL2FjdGlvbi1iYXIvYWN0aW9uLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBIZWFkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaGVhZGVyL2hlYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICcuLi9uYXZpZ2F0b3IvbmF2aWdhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGx1Z2luc1Jlc29sdmVTZXJ2aWNlIH0gZnJvbSAnLi4vcGx1Z2lucy9wbHVnaW5zLXJlc29sdmUuc2VydmljZSc7XG5pbXBvcnQgeyBQbHVnaW5zQ29uZmlnIH0gZnJvbSAnLi4vcGx1Z2lucy9wbHVnaW5zLm1vZGVsJztcbmltcG9ydCB7IFNldHVwU2VydmljZSB9IGZyb20gJy4uL3NldHVwL3NldHVwLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFic1NlcnZpY2UgfSBmcm9tICcuLi90YWJzL3RhYnMuc2VydmljZSc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJvb3RzdHJhcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ib290c3RyYXAudGVtcGxhdGUuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQm9vdHN0cmFwQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBuYXZpZ2F0b3JPcGVuJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgbm9BcHBzTWFyZ2luJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdGFic09yaWVudGF0aW9uOiBzdHJpbmc7XG4gIHNob3dQb3dlcmVkQnk6IGJvb2xlYW4gPSB0cnVlO1xuICBub0xvZ2luOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIGxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhYnM6IFRhYnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHVibGljIGFjdGlvbkJhcjogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwdWJsaWMgaGVhZGVyU2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1Jlc29sdmU6IFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgICBwdWJsaWMgc2V0dXBTZXJ2aWNlOiBTZXR1cFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5ub0FwcHNNYXJnaW4kID0gdGhpcy5oZWFkZXJTZXJ2aWNlLm1hcCgoeyBuYXYgfSkgPT4gIW5hdi5vcGVuICYmIG5hdi5oaWRkZW5PblN0YXJ0dXApO1xuICAgIHRoaXMudGFic09yaWVudGF0aW9uID0gdGhpcy5vcHRpb25zLnRhYnNIb3Jpem9udGFsID8gJ2hvcml6b250YWwnIDogJ3ZlcnRpY2FsJztcbiAgICB0aGlzLnVpXG4gICAgICAubWFwKCh7IGxhbmcgfSkgPT4gbGFuZylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmFjdGlvbkJhci5yZWZyZXNoKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLnNob3dQb3dlcmVkQnkgPSAhdGhpcy5vcHRpb25zLmdldCgnaGlkZVBvd2VyZWQnKTtcbiAgICB0aGlzLm5vTG9naW4gPSB0aGlzLm9wdGlvbnMuZ2V0KCdub0xvZ2luJywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0xvYWRSZW1vdGVzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlbW90ZXMoY29uZmlnOiBQbHVnaW5zQ29uZmlnKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICBsZXQgcmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zO1xuICAgIGlmICghIWNvbmZpZz8ucmVtb3Rlcykge1xuICAgICAgLy8gTWVyZ2UgcGx1Z2lucyBjb25maWcgcmVtb3RlcyBhbmQgcmVtb3RlcyBwYXNzZWQgaW4gdGhlIFVSTC5cbiAgICAgIC8vIFJlbW90ZXMgaW4gdGhlIFVSTCBhcmUgdXNlZCBpbiB0aGUgZGV2ZWxvcG1lbnQgcHJvY2Vzcy5cbiAgICAgIHJlbW90ZXMgPSB0aGlzLnBsdWdpbnNSZXNvbHZlLm1lcmdlTUZSZW1vdGVzKFtcbiAgICAgICAgY29uZmlnLnJlbW90ZXMsXG4gICAgICAgIHRoaXMucGx1Z2luc1Jlc29sdmUubG9hZFVybFJlbW90ZXMoKVxuICAgICAgXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW90ZXMgPSB0aGlzLm9wdGlvbnM/LnJlbW90ZXM7XG4gICAgfVxuXG4gICAgLy8gQmxvY2sgdGhlIHBvc3NpYmlsaXR5IG9mIGxvYWRpbmcgcGx1Z2lucyBtdWx0aXBsZSB0aW1lcy5cbiAgICBPYmplY3Qua2V5cyhyZW1vdGVzIHx8IHt9KS5mb3JFYWNoKGNvbnRleHRQYXRoID0+IHtcbiAgICAgIGlmICh0aGlzLmxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlLmdldChjb250ZXh0UGF0aCkpIHtcbiAgICAgICAgZGVsZXRlIHJlbW90ZXNbY29udGV4dFBhdGhdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc0VtcHR5KHJlbW90ZXMpID8gdW5kZWZpbmVkIDogcmVtb3RlcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZXMocmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zKSB7XG4gICAgaWYgKCFyZW1vdGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbW90ZU1vZHVsZXMgPSBhd2FpdCB0aGlzLnBsdWdpbnNSZXNvbHZlLmxvYWRSZW1vdGVzKHJlbW90ZXMpO1xuXG4gICAgLy8gQ2FjaGUgbG9hZGVkIHJlbW90ZXMuXG4gICAgT2JqZWN0LmtleXMocmVtb3RlcykuZm9yRWFjaChjb250ZXh0UGF0aCA9PlxuICAgICAgdGhpcy5sb2FkZWRSZW1vdGVzQ29udGV4dFBhdGhDYWNoZS5zZXQoY29udGV4dFBhdGgsIHRydWUpXG4gICAgKTtcblxuICAgIGlmIChyZW1vdGVNb2R1bGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5yZXNvbHZlUmVtb3RlUGx1Z2lucyhyZW1vdGVNb2R1bGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvTG9hZFJlbW90ZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ25vUGx1Z2lucycsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnVpLmN1cnJlbnRBcHBsaWNhdGlvbkNvbmZpZ1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoY29uZmlnOiBQbHVnaW5zQ29uZmlnKSA9PiB0aGlzLmxvYWRSZW1vdGVzKHRoaXMuZ2V0UmVtb3Rlcyhjb25maWcpKSk7XG4gIH1cbn1cbiIsIjxjOHktbG9naW4gKm5nSWY9XCIhbm9Mb2dpbiAmJiAhKHVpLmN1cnJlbnRVc2VyIHwgYXN5bmMpXCI+PC9jOHktbG9naW4+XG5cbjxkaXZcbiAgKm5nSWY9XCJub0xvZ2luIHx8ICgodWkuY3VycmVudFVzZXIgfCBhc3luYykgJiYgIShzZXR1cFNlcnZpY2UuaXNTZXR1cE5lZWRlZCQgfCBhc3luYykpXCJcbiAgW2NsYXNzLmhlYWQtb3Blbl09XCJoZWFkZXJTZXJ2aWNlLmhlYWRlck9wZW5cIlxuPlxuICA8Yzh5LWhlYWRlci1iYXIgI2hlYWRlcj48L2M4eS1oZWFkZXItYmFyPlxuICA8Yzh5LW5hdmlnYXRvci1vdXRsZXRcbiAgICBbbm9kZXNdPVwibmF2aWdhdG9yLml0ZW1zJCB8IGFzeW5jXCJcbiAgICBbb3Blbl09XCJoZWFkZXJTZXJ2aWNlLm5hdmlnYXRvck9wZW4kIHwgYXN5bmNcIlxuICAgIHJvbGU9XCJyZWdpb25cIlxuICAgIHRpdGxlPVwie3sgJ05hdmlnYXRvciBtZW51JyB8IHRyYW5zbGF0ZSB9fVwiXG4gID5cbiAgICA8aGVhZGVyIGNsYXNzPVwidGl0bGUgbmF2aWdhdG9yLXNsb3QtdG9wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGVuYW50LWJyYW5kXCI+PC9kaXY+XG4gICAgICA8Yzh5LWFwcC1pY29uXG4gICAgICAgIFtuYW1lXT1cIih1aS5zdGF0ZSQgfCBhc3luYykuYXBwLm5hbWVcIlxuICAgICAgICBbY29udGV4dFBhdGhdPVwiKHVpLnN0YXRlJCB8IGFzeW5jKS5hcHAuY29udGV4dFBhdGhcIlxuICAgICAgPjwvYzh5LWFwcC1pY29uPlxuICAgICAgPHNwYW4+e3sgKHVpLnN0YXRlJCB8IGFzeW5jKS5hcHAgfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICA8L2hlYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwicG93ZXJlZC1ieSBuYXZpZ2F0b3Itc2xvdC1ib3R0b21cIiAqbmdJZj1cInNob3dQb3dlcmVkQnlcIj5cbiAgICAgIDxwIHRyYW5zbGF0ZT5wb3dlcmVkIGJ5IEN1bXVsb2NpdHk8L3A+XG4gICAgPC9kaXY+XG4gIDwvYzh5LW5hdmlnYXRvci1vdXRsZXQ+XG5cbiAgPGRpdiBjbGFzcz1cImFsZXJ0c1wiPlxuICAgIDxjOHktYWxlcnQtb3V0bGV0PjwvYzh5LWFsZXJ0LW91dGxldD5cbiAgPC9kaXY+XG4gIDxjOHktdGFicy1vdXRsZXRcbiAgICAjdGFic0NvbXBvbmVudFxuICAgIFt0YWJzXT1cInRhYnMuaXRlbXMkIHwgYXN5bmNcIlxuICAgIFtuYXZpZ2F0b3JPcGVuXT1cImhlYWRlclNlcnZpY2UubmF2aWdhdG9yT3BlbiQgfCBhc3luY1wiXG4gICAgW29yaWVudGF0aW9uXT1cInRhYnMub3JpZW50YXRpb24kIHwgYXN5bmNcIlxuICAgIHJvbGU9XCJuYXZpZ2F0aW9uXCJcbiAgPjwvYzh5LXRhYnMtb3V0bGV0PlxuICA8Yzh5LWFjdGlvbi1iYXJcbiAgICAjYWN0aW9uQmFyQ29tcG9uZW50XG4gICAgW25hdmlnYXRvck9wZW5dPVwiaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jXCJcbiAgICBbaGFzVGFic109XCJ0YWJzQ29tcG9uZW50Lmhhc1RhYnNcIlxuICAgIFtpc1RhYnNIb3Jpem9udGFsXT1cInRhYnNDb21wb25lbnQ/LmlzSG9yaXpvbnRhbFwiXG4gICAgW2l0ZW1zJF09XCJhY3Rpb25CYXIuaXRlbXMkXCJcbiAgICByb2xlPVwiZ3JvdXBcIlxuICA+PC9jOHktYWN0aW9uLWJhcj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICBvcGVuOiBoZWFkZXJTZXJ2aWNlLm5hdmlnYXRvck9wZW4kIHwgYXN5bmMsXG4gICAgICAnbm8tYXBwcy1tYXJnaW4nOiBub0FwcHNNYXJnaW4kIHwgYXN5bmMsXG4gICAgICAnaG9yaXpvbnRhbC10YWJzJzogdGFic0NvbXBvbmVudC5pc0hvcml6b250YWwsXG4gICAgICAndmVydGljYWwtdGFicyc6ICF0YWJzQ29tcG9uZW50LmlzSG9yaXpvbnRhbCxcbiAgICAgICdoYXMtdGFicyc6IHRhYnNDb21wb25lbnQuaGFzVGFicyxcbiAgICAgICdoYXMtYWN0aW9uLWJhcic6ICFhY3Rpb25CYXJDb21wb25lbnQ/LmhpZGRlblxuICAgIH1cIlxuICA+XG4gICAgPG1haW4gaWQ9XCJtYWluLWNvbnRlbnRcIiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIiNjOHktbGVnYWN5LXZpZXdcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8IS0tIGxlZ2FjeSBuZy12aWV3LCB3aWxsIG5vdCBiZSBtaWdyYXRlZCBhdG0gLS0+XG4gICAgPC9tYWluPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiKHVpLmN1cnJlbnRVc2VyIHwgYXN5bmMpICYmIChzZXR1cFNlcnZpY2UuaXNTZXR1cE5lZWRlZCQgfCBhc3luYylcIj5cbiAgPGM4eS1oZWFkZXItYmFyIFtzaW1wbGVdPVwidHJ1ZVwiPjwvYzh5LWhlYWRlci1iYXI+XG4gIDxkaXYgY2xhc3M9XCJtY29udGFpbmVyXCIgcm9sZT1cIm1haW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICA8Yzh5LXNldHVwPjwvYzh5LXNldHVwPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48Yzh5LWNvb2tpZS1iYW5uZXI+PC9jOHktY29va2llLWJhbm5lcj5cbiJdfQ==
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9ib290c3RyYXAudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1wQyxNQUFNLE9BQU8sa0JBQWtCO0lBUzdCLFlBQ1MsSUFBaUIsRUFDakIsRUFBbUIsRUFDbkIsU0FBMkIsRUFDM0IsU0FBMkIsRUFDM0IsYUFBNEIsRUFDM0IsT0FBdUIsRUFDdkIsY0FBcUMsRUFDdEMsWUFBMEI7UUFQMUIsU0FBSSxHQUFKLElBQUksQ0FB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O1lBQ25DLE9BQU87U0FDUjtRQUNELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckUsd0JBQXdCO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQ3pDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUMxRCxDQUFDO1FBRUYsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ25DLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCO2FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLE1BQXFCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzVDLENBQUM7OytHQTVGVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixxRENuQi9CLDY5RUEwRUE7MkZEdkRhLGtCQUFrQjtrQkFKOUIsU0FBUzsrQkFDRSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGlvbkJhclNlcnZpY2UgfSBmcm9tICcuLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vbmF2aWdhdG9yL25hdmlnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGx1Z2luc0NvbmZpZyB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy5tb2RlbCc7XG5pbXBvcnQgeyBTZXR1cFNlcnZpY2UgfSBmcm9tICcuLi9zZXR1cC9zZXR1cC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYnNTZXJ2aWNlIH0gZnJvbSAnLi4vdGFicy90YWJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1ib290c3RyYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vYm9vdHN0cmFwLnRlbXBsYXRlLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEJvb3RzdHJhcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgbmF2aWdhdG9yT3BlbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIG5vQXBwc01hcmdpbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHRhYnNPcmllbnRhdGlvbjogc3RyaW5nO1xuICBzaG93UG93ZXJlZEJ5OiBib29sZWFuID0gdHJ1ZTtcbiAgbm9Mb2dpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBsb2FkZWRSZW1vdGVzQ29udGV4dFBhdGhDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwdWJsaWMgdWk6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwdWJsaWMgbmF2aWdhdG9yOiBOYXZpZ2F0b3JTZXJ2aWNlLFxuICAgIHB1YmxpYyBhY3Rpb25CYXI6IEFjdGlvbkJhclNlcnZpY2UsXG4gICAgcHVibGljIGhlYWRlclNlcnZpY2U6IEhlYWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpbnNSZXNvbHZlOiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UsXG4gICAgcHVibGljIHNldHVwU2VydmljZTogU2V0dXBTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubm9BcHBzTWFyZ2luJCA9IHRoaXMuaGVhZGVyU2VydmljZS5tYXAoKHsgbmF2IH0pID0+ICFuYXYub3BlbiAmJiBuYXYuaGlkZGVuT25TdGFydHVwKTtcbiAgICB0aGlzLnRhYnNPcmllbnRhdGlvbiA9IHRoaXMub3B0aW9ucy50YWJzSG9yaXpvbnRhbCA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCc7XG4gICAgdGhpcy51aVxuICAgICAgLm1hcCgoeyBsYW5nIH0pID0+IGxhbmcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hY3Rpb25CYXIucmVmcmVzaCgpO1xuICAgICAgfSk7XG4gICAgdGhpcy5zaG93UG93ZXJlZEJ5ID0gIXRoaXMub3B0aW9ucy5nZXQoJ2hpZGVQb3dlcmVkJyk7XG4gICAgdGhpcy5ub0xvZ2luID0gdGhpcy5vcHRpb25zLmdldCgnbm9Mb2dpbicsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9Mb2FkUmVtb3RlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW1vdGVzKGNvbmZpZzogUGx1Z2luc0NvbmZpZyk6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB7XG4gICAgbGV0IHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucztcbiAgICBpZiAoISFjb25maWc/LnJlbW90ZXMpIHtcbiAgICAgIC8vIE1lcmdlIHBsdWdpbnMgY29uZmlnIHJlbW90ZXMgYW5kIHJlbW90ZXMgcGFzc2VkIGluIHRoZSBVUkwuXG4gICAgICAvLyBSZW1vdGVzIGluIHRoZSBVUkwgYXJlIHVzZWQgaW4gdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuXG4gICAgICByZW1vdGVzID0gdGhpcy5wbHVnaW5zUmVzb2x2ZS5tZXJnZU1GUmVtb3RlcyhbXG4gICAgICAgIGNvbmZpZy5yZW1vdGVzLFxuICAgICAgICB0aGlzLnBsdWdpbnNSZXNvbHZlLmxvYWRVcmxSZW1vdGVzKClcbiAgICAgIF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdGVzID0gdGhpcy5vcHRpb25zPy5yZW1vdGVzO1xuICAgIH1cblxuICAgIC8vIEJsb2NrIHRoZSBwb3NzaWJpbGl0eSBvZiBsb2FkaW5nIHBsdWdpbnMgbXVsdGlwbGUgdGltZXMuXG4gICAgT2JqZWN0LmtleXMocmVtb3RlcyB8fCB7fSkuZm9yRWFjaChjb250ZXh0UGF0aCA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkZWRSZW1vdGVzQ29udGV4dFBhdGhDYWNoZS5nZXQoY29udGV4dFBhdGgpKSB7XG4gICAgICAgIGRlbGV0ZSByZW1vdGVzW2NvbnRleHRQYXRoXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNFbXB0eShyZW1vdGVzKSA/IHVuZGVmaW5lZCA6IHJlbW90ZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRSZW1vdGVzKHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucykge1xuICAgIGlmICghcmVtb3Rlcykge1xuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3RlTW9kdWxlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1Jlc29sdmUubG9hZFJlbW90ZXMocmVtb3Rlcyk7XG5cbiAgICAvLyBDYWNoZSBsb2FkZWQgcmVtb3Rlcy5cbiAgICBPYmplY3Qua2V5cyhyZW1vdGVzKS5mb3JFYWNoKGNvbnRleHRQYXRoID0+XG4gICAgICB0aGlzLmxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlLnNldChjb250ZXh0UGF0aCwgdHJ1ZSlcbiAgICApO1xuXG4gICAgaWYgKHJlbW90ZU1vZHVsZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBsdWdpbnNSZXNvbHZlLnJlc29sdmVSZW1vdGVQbHVnaW5zKHJlbW90ZU1vZHVsZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Mb2FkUmVtb3RlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmdldCgnbm9QbHVnaW5zJywgZmFsc2UpKSB7XG4gICAgICB0aGlzLmVuc3VyZVdlTWFya1BsdWdpbnNBc0xvYWRlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnVpLmN1cnJlbnRBcHBsaWNhdGlvbkNvbmZpZ1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoY29uZmlnOiBQbHVnaW5zQ29uZmlnKSA9PiB0aGlzLmxvYWRSZW1vdGVzKHRoaXMuZ2V0UmVtb3Rlcyhjb25maWcpKSk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVdlTWFya1BsdWdpbnNBc0xvYWRlZCgpOiB2b2lkIHtcbiAgICAvLyBlbnN1cmUgd2UgY2FsbCBtYXJrUGx1Z2luc0FzTG9hZGVkIG9uIHRoZSBEeW5hbWljQ29tcG9uZW50U2VydmljZVxuICAgIHRoaXMucGx1Z2luc1Jlc29sdmUubWFya1BsdWdpbnNBc0xvYWRlZCgpO1xuICB9XG59XG4iLCI8Yzh5LWxvZ2luICpuZ0lmPVwiIW5vTG9naW4gJiYgISh1aS5jdXJyZW50VXNlciB8IGFzeW5jKVwiPjwvYzh5LWxvZ2luPlxuXG48ZGl2XG4gICpuZ0lmPVwibm9Mb2dpbiB8fCAoKHVpLmN1cnJlbnRVc2VyIHwgYXN5bmMpICYmICEoc2V0dXBTZXJ2aWNlLmlzU2V0dXBOZWVkZWQkIHwgYXN5bmMpKVwiXG4gIFtjbGFzcy5oZWFkLW9wZW5dPVwiaGVhZGVyU2VydmljZS5oZWFkZXJPcGVuXCJcbj5cbiAgPGM4eS1oZWFkZXItYmFyICNoZWFkZXI+PC9jOHktaGVhZGVyLWJhcj5cbiAgPGM4eS1uYXZpZ2F0b3Itb3V0bGV0XG4gICAgW25vZGVzXT1cIm5hdmlnYXRvci5pdGVtcyQgfCBhc3luY1wiXG4gICAgW29wZW5dPVwiaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jXCJcbiAgICByb2xlPVwicmVnaW9uXCJcbiAgICB0aXRsZT1cInt7ICdOYXZpZ2F0b3IgbWVudScgfCB0cmFuc2xhdGUgfX1cIlxuICA+XG4gICAgPGhlYWRlciBjbGFzcz1cInRpdGxlIG5hdmlnYXRvci1zbG90LXRvcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRlbmFudC1icmFuZFwiPjwvZGl2PlxuICAgICAgPGM4eS1hcHAtaWNvblxuICAgICAgICBbbmFtZV09XCIodWkuc3RhdGUkIHwgYXN5bmMpLmFwcC5uYW1lXCJcbiAgICAgICAgW2NvbnRleHRQYXRoXT1cIih1aS5zdGF0ZSQgfCBhc3luYykuYXBwLmNvbnRleHRQYXRoXCJcbiAgICAgID48L2M4eS1hcHAtaWNvbj5cbiAgICAgIDxzcGFuPnt7ICh1aS5zdGF0ZSQgfCBhc3luYykuYXBwIHwgaHVtYW5pemVBcHBOYW1lIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgPC9oZWFkZXI+XG4gICAgPGRpdiBjbGFzcz1cInBvd2VyZWQtYnkgbmF2aWdhdG9yLXNsb3QtYm90dG9tXCIgKm5nSWY9XCJzaG93UG93ZXJlZEJ5XCI+XG4gICAgICA8cCB0cmFuc2xhdGU+cG93ZXJlZCBieSBDdW11bG9jaXR5PC9wPlxuICAgIDwvZGl2PlxuICA8L2M4eS1uYXZpZ2F0b3Itb3V0bGV0PlxuXG4gIDxkaXYgY2xhc3M9XCJhbGVydHNcIj5cbiAgICA8Yzh5LWFsZXJ0LW91dGxldD48L2M4eS1hbGVydC1vdXRsZXQ+XG4gIDwvZGl2PlxuICA8Yzh5LXRhYnMtb3V0bGV0XG4gICAgI3RhYnNDb21wb25lbnRcbiAgICBbdGFic109XCJ0YWJzLml0ZW1zJCB8IGFzeW5jXCJcbiAgICBbbmF2aWdhdG9yT3Blbl09XCJoZWFkZXJTZXJ2aWNlLm5hdmlnYXRvck9wZW4kIHwgYXN5bmNcIlxuICAgIFtvcmllbnRhdGlvbl09XCJ0YWJzLm9yaWVudGF0aW9uJCB8IGFzeW5jXCJcbiAgICByb2xlPVwibmF2aWdhdGlvblwiXG4gID48L2M4eS10YWJzLW91dGxldD5cbiAgPGM4eS1hY3Rpb24tYmFyXG4gICAgI2FjdGlvbkJhckNvbXBvbmVudFxuICAgIFtuYXZpZ2F0b3JPcGVuXT1cImhlYWRlclNlcnZpY2UubmF2aWdhdG9yT3BlbiQgfCBhc3luY1wiXG4gICAgW2hhc1RhYnNdPVwidGFic0NvbXBvbmVudC5oYXNUYWJzXCJcbiAgICBbaXNUYWJzSG9yaXpvbnRhbF09XCJ0YWJzQ29tcG9uZW50Py5pc0hvcml6b250YWxcIlxuICAgIFtpdGVtcyRdPVwiYWN0aW9uQmFyLml0ZW1zJFwiXG4gICAgcm9sZT1cImdyb3VwXCJcbiAgPjwvYzh5LWFjdGlvbi1iYXI+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWNvbnRhaW5lclwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgb3BlbjogaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jLFxuICAgICAgJ25vLWFwcHMtbWFyZ2luJzogbm9BcHBzTWFyZ2luJCB8IGFzeW5jLFxuICAgICAgJ2hvcml6b250YWwtdGFicyc6IHRhYnNDb21wb25lbnQuaXNIb3Jpem9udGFsLFxuICAgICAgJ3ZlcnRpY2FsLXRhYnMnOiAhdGFic0NvbXBvbmVudC5pc0hvcml6b250YWwsXG4gICAgICAnaGFzLXRhYnMnOiB0YWJzQ29tcG9uZW50Lmhhc1RhYnMsXG4gICAgICAnaGFzLWFjdGlvbi1iYXInOiAhYWN0aW9uQmFyQ29tcG9uZW50Py5oaWRkZW5cbiAgICB9XCJcbiAgPlxuICAgIDxtYWluIGlkPVwibWFpbi1jb250ZW50XCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIjYzh5LWxlZ2FjeS12aWV3XCI+PC9uZy1jb250ZW50PlxuICAgICAgPCEtLSBsZWdhY3kgbmctdmlldywgd2lsbCBub3QgYmUgbWlncmF0ZWQgYXRtIC0tPlxuICAgIDwvbWFpbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cIih1aS5jdXJyZW50VXNlciB8IGFzeW5jKSAmJiAoc2V0dXBTZXJ2aWNlLmlzU2V0dXBOZWVkZWQkIHwgYXN5bmMpXCI+XG4gIDxjOHktaGVhZGVyLWJhciBbc2ltcGxlXT1cInRydWVcIj48L2M4eS1oZWFkZXItYmFyPlxuICA8ZGl2IGNsYXNzPVwibWNvbnRhaW5lclwiIHJvbGU9XCJtYWluXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgICAgPGM4eS1zZXR1cD48L2M4eS1zZXR1cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGM4eS1jb29raWUtYmFubmVyPjwvYzh5LWNvb2tpZS1iYW5uZXI+XG4iXX0=
@@ -46,7 +46,7 @@ export class AppStateService extends StateService {
46
46
  this.currentUser = new BehaviorSubject(null);
47
47
  this.currentTenant = new BehaviorSubject(null);
48
48
  this.currentApplication = new BehaviorSubject(null);
49
- this.currentApplicationConfig = this.currentApplication.pipe(map(app => app?.config || null));
49
+ this.currentApplicationConfig = this.currentApplication.pipe(filter(app => !!app), map(app => app?.config || null));
50
50
  this.apiService.calls
51
51
  .pipe(filter(({ url }) => !/notification\/realtime/.test(url)), map(({ phase }) => (phase === 'start' ? 1 : -1)), scan((count, item) => count + item, 0), map(count => count > 0), distinctUntilChanged())
52
52
  .subscribe(isLoading => (this.state.isLoading = isLoading));
@@ -90,6 +90,7 @@ export class AppStateService extends StateService {
90
90
  await this.loadDefaultOptions();
91
91
  }
92
92
  catch (ex) {
93
+ this.currentApplication.next({});
93
94
  throw ex;
94
95
  }
95
96
  }
@@ -180,4 +181,4 @@ __decorate([
180
181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppStateService, decorators: [{
181
182
  type: Injectable
182
183
  }], ctorParameters: function () { return [{ type: i1.ApplicationService }, { type: i2.ApiService }, { type: i3.OptionsService }, { type: i1.FetchClient }, { type: i1.TenantLoginOptionsService }]; }, propDecorators: { refreshLoginOptions: [] } });
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFDTCxXQUFXLEVBRVgseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUduQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7OztBQUduQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxZQUFZO0lBOEIvQyxZQUNVLGtCQUFzQyxFQUN2QyxVQUFzQixFQUNyQixPQUF1QixFQUN2QixXQUF3QixFQUN4Qix5QkFBb0Q7UUFFNUQsS0FBSyxFQUFFLENBQUM7UUFOQSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3ZDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsOEJBQXlCLEdBQXpCLHlCQUF5QixD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QUNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sNkJBQTZCO1FBQ25DLE1BQU0sU0FBUyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDckQsTUFBTSxjQUFjLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBRTNELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssY0FBYyxRQUFRLGNBQWMsRUFBRSxDQUFDLEVBQUU7WUFDdEUsTUFBTSxZQUFZLEdBQUcsMkJBQTJCLFNBQVMsMEJBQTBCLGNBQWMsY0FBYyxDQUFDO1lBQ2hILE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFlBQVksRUFBRSxpREFBaUQsQ0FBQyxDQUFDO1NBQ3RGO0lBQ0gsQ0FBQzs7NEdBdkxVLGVBQWU7Z0hBQWYsZUFBZTtBQXdIMUI7SUFEQyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDOzs7OzBEQUlsQzsyRkEzSFUsZUFBZTtrQkFEM0IsVUFBVTtpT0F5SEgsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGZXRjaENsaWVudCxcbiAgSUFwcGxpY2F0aW9uLFxuICBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLFxuICBBcHBsaWNhdGlvblNlcnZpY2UsXG4gIElDdXJyZW50VGVuYW50LFxuICBJVXNlclxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBrZXlzLCBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNjYW4gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4vb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFN0YXRlU2VydmljZSB9IGZyb20gJy4vc3RhdGUtc2VydmljZS5hYnN0cmFjdCc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgQXBwbGljYXRpb25PcHRpb25zIH0gZnJvbSAnLi9BcHBsaWNhdGlvbk9wdGlvbnMnO1xuaW1wb3J0IHsgdGhyb3R0bGUgfSBmcm9tICcuL3Rocm90dGxlLmRlY29yYXRvcic7XG5pbXBvcnQgeyBzYXRpc2ZpZXMgfSBmcm9tICdzZW12ZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBwU3RhdGVTZXJ2aWNlIGV4dGVuZHMgU3RhdGVTZXJ2aWNlIHtcbiAgc3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7XG4gICAgYXBwOiB7XG4gICAgICBuYW1lOiB0aGlzLm9wdGlvbnMubmFtZSxcbiAgICAgIGNvbnRleHRQYXRoOiB0aGlzLmdldEN1cnJlbnRDb250ZXh0UGF0aCgpIHx8IHRoaXMub3B0aW9ucy5jb250ZXh0UGF0aFxuICAgIH0sXG4gICAgc3VwcG9ydFVybDogdGhpcy5vcHRpb25zLnN1cHBvcnRVcmwsXG4gICAgbGFuZzogdGhpcy5vcHRpb25zLmdldCgnZGVmYXVsdExhbmd1YWdlJywgJ2VuJyksXG4gICAgbGFuZ3M6IHRoaXMuZ2V0TGFuZ3MoKSxcbiAgICBsYW5nc0RldGFpbDogdGhpcy5vcHRpb25zLmxhbmd1YWdlcyxcbiAgICBsb2dpbk9wdGlvbnM6IHRoaXMub3B0aW9ucy5sb2dpbk9wdGlvbnMsXG4gICAgYWN0aXZhdGVTdXBwb3J0VXNlckF2YWlsYWJsZTogdW5kZWZpbmVkLFxuICAgIHZlcnNpb25zOiB7XG4gICAgICBiYWNrZW5kOiB1bmRlZmluZWQsXG4gICAgICB1aTogdGhpcy5vcHRpb25zLnZlcnNpb25zIHx8IHsgbmd4OiB1bmRlZmluZWQgfVxuICAgIH0sXG4gICAgaGlkZVBvd2VyZWQ6IHRoaXMub3B0aW9ucy5oaWRlUG93ZXJlZCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHNob3dSaWdodERyYXdlcjogdGhpcy5vcHRpb25zLnJpZ2h0RHJhd2VyLFxuICAgIGxvZ2luRXh0cmFMaW5rOiB0aGlzLm9wdGlvbnMuZ2V0KCdsb2dpbl9leHRyYV9saW5rJyksXG4gICAgbmV3c2xldHRlcjogdGhpcy5vcHRpb25zLm5ld3NsZXR0ZXJcbiAgfSk7XG4gIGN1cnJlbnRTdXBwb3J0VXNlck5hbWU6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIGN1cnJlbnRVc2VyOiBCZWhhdmlvclN1YmplY3Q8SVVzZXIgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIGN1cnJlbnRUZW5hbnQ6IEJlaGF2aW9yU3ViamVjdDxJQ3VycmVudFRlbmFudCB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgY3VycmVudEFwcGxpY2F0aW9uOiBCZWhhdmlvclN1YmplY3Q8SUFwcGxpY2F0aW9uIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBjdXJyZW50QXBwbGljYXRpb25Db25maWc6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuY3VycmVudEFwcGxpY2F0aW9uLnBpcGUoXG4gICAgbWFwKGFwcCA9PiBhcHA/LmNvbmZpZyB8fCBudWxsKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHVibGljIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGZldGNoQ2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIHRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2U6IFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwaVNlcnZpY2UuY2FsbHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHsgdXJsIH0pID0+ICEvbm90aWZpY2F0aW9uXFwvcmVhbHRpbWUvLnRlc3QodXJsKSksXG4gICAgICAgIG1hcCgoeyBwaGFzZSB9KSA9PiAocGhhc2UgPT09ICdzdGFydCcgPyAxIDogLTEpKSxcbiAgICAgICAgc2NhbigoY291bnQsIGl0ZW0pID0+IGNvdW50ICsgaXRlbSwgMCksXG4gICAgICAgIG1hcChjb3VudCA9PiBjb3VudCA+IDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGlzTG9hZGluZyA9PiAodGhpcy5zdGF0ZS5pc0xvYWRpbmcgPSBpc0xvYWRpbmcpKTtcblxuICAgIHRoaXMuYXNzaWduQXBwbGljYXRpb25LZXlUb0RlZmF1bHRIZWFkZXJzKCk7XG4gIH1cblxuICBhc3NpZ25BcHBsaWNhdGlvbktleVRvRGVmYXVsdEhlYWRlcnMoKSB7XG4gICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgdGhpcy5mZXRjaENsaWVudC5kZWZhdWx0SGVhZGVycyA9IHtcbiAgICAgICAgLi4uKHRoaXMuZmV0Y2hDbGllbnQuZGVmYXVsdEhlYWRlcnMgfHwge30pLFxuICAgICAgICAnWC1DdW11bG9jaXR5LUFwcGxpY2F0aW9uLUtleSc6IHRoaXMub3B0aW9ucy5rZXlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUuXG4gICAqL1xuICBnZXQgc3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUkLnZhbHVlO1xuICB9XG5cbiAgZ2V0TGFuZ3MoKSB7XG4gICAgY29uc3QgeyBsYW5ndWFnZXMgfSA9IHRoaXMub3B0aW9ucztcbiAgICByZXR1cm4gbGFuZ3VhZ2VzID8ga2V5cyhsYW5ndWFnZXMpLmZpbHRlcihrID0+IGxhbmd1YWdlc1trXSkgOiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3JyZWN0IFVJIHZlcnNpb24uIEluIGh5YnJpZCBtb2RlIGZvciBhbmd1bGFyIGFuZCBuZ3guXG4gICAqL1xuICBnZXQgdWlWZXJzaW9uKCkge1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLnN0YXRlLnZlcnNpb25zLnVpO1xuICAgIHJldHVybiB2ZXJzaW9uLm5neCB8fCB2ZXJzaW9uLm5nMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgYXBwIG1hbmlmZXN0LiBJZiBubyBhY2Nlc3MgLT4gdGhyb3cgYW4gZXJyb3IgdG8gdmVyaWZ5IGFwcCBhY2Nlc3MuXG4gICAqL1xuICBhc3luYyBsb2FkTWFuaWZlc3QoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YTogYXBwbGljYXRpb24gfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldE1hbmlmZXN0T2ZDb250ZXh0UGF0aChcbiAgICAgICAgdGhpcy5zdGF0ZS5hcHAuY29udGV4dFBhdGhcbiAgICAgICk7XG4gICAgICB0aGlzLnN0YXRlLmFwcC5tYW5pZmVzdCA9IGFwcGxpY2F0aW9uO1xuICAgICAgdGhpcy5zdGF0ZS5hcHAuaWQgPSBhcHBsaWNhdGlvbi5pZDtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGV0YWlsKGFwcGxpY2F0aW9uLmlkKTtcbiAgICAgIHRoaXMuY3VycmVudEFwcGxpY2F0aW9uLm5leHQoZGF0YSk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWREZWZhdWx0T3B0aW9ucygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aHJvdyBleDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHluYW1pYyBvcHRpb25zIGFyZSBzdG9yZWQgb24gdGhlIEFQSSBpbiBhIHNwZWNpZmljIGNvbmZpZzoge30gb2JqZWN0LiBUaGV5IGNhblxuICAgKiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYXBwIGR5bmFtaWNhbGx5LlxuICAgKlxuICAgKiBOb3RlOiBUbyBhdm9pZHMgY29uZmxpY3RzIHdpdGggdGhlIGRlZmF1bHQgQ29uZmlnLCBpdCBpcyByZWNvbW1lbmRlZFxuICAgKiB0byB1c2UgYSBjZXJ0YWluIG5hbWVzcGFjZS5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUN1cnJlbnRBcHBsaWNhdGlvbkNvbmZpZzxUID0gQXBwbGljYXRpb25PcHRpb25zPihjb25maWc6IFQpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBhcHBXaXRoVXBkYXRlZENvbmZpZyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnVwZGF0ZUFwcGxpY2F0aW9uQ29uZmlnKFxuICAgICAgdGhpcy5zdGF0ZS5hcHAuaWQsXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIHRoaXMuY3VycmVudEFwcGxpY2F0aW9uLm5leHQoYXBwV2l0aFVwZGF0ZWRDb25maWcpO1xuICAgIHJldHVybiBhcHBXaXRoVXBkYXRlZENvbmZpZy5jb25maWc7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgaXQgcmVmcmVzaGVzIHRoZSB2YWx1ZXMgb2YgbG9naW5PcHRpb25zIHN0b3JlZCB3aXRoaW4gdWkgc3RhdGUgb2JqZWN0LlxuICAgKiBGdW5jdGlvbiBpcyB0aHJvdHRsZWQgdG8gZXhlY3V0ZSB0aGUgcmVmcmVzaCBvbmNlIGluIGEgdGltZSBzcGVjaWZpZWQgYnkgcGFyYW1zIG9mIEB0aHJvdHRsZWQgZGVjb3JhdG9yLFxuICAgKiBpdCBzaG91bGQgYmUgY2FsbGVkIG9uIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICovXG4gIEB0aHJvdHRsZSg2MDAsIHsgdHJhaWxpbmc6IGZhbHNlIH0pXG4gIGFzeW5jIHJlZnJlc2hMb2dpbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yQ3VycmVudFRlbmFudCgpKS5kYXRhO1xuICAgIHRoaXMuc3RhdGUkLm5leHQoeyAuLi50aGlzLnN0YXRlLCBsb2dpbk9wdGlvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGN1cnJlbnQgdXNlcnMgYXBwbGljYXRpb24gbGlzdCBhbmQgbWF0Y2hlcyBpdCBhZ2FpbnN0IGdpdmVuIGFwcGxpY2F0aW9uIG5hbWUuXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhcHBsaWNhdGlvbiBpcyBpbiB0aGUgbGlzdC5cbiAgICogQHBhcmFtIG5hbWUgYXBwbGljYXRpb24gbmFtZVxuICAgKi9cbiAgYXN5bmMgaXNBcHBsaWNhdGlvbkF2YWlsYWJsZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeVVzZXIodW5kZWZpbmVkLCB7IHBhZ2VTaXplOiAxMDAgfSk7XG4gICAgcmV0dXJuIGRhdGEuc29tZShhcHAgPT4gYXBwLm5hbWUgPT09IG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgY3VycmVudCB1c2VyIChpbmNsdWRpbmcgc3VwcG9ydCB1c2VyKS5cbiAgICogQHBhcmFtIHVzZXJJbmZvIEluZm8gYWJvdXQgY3VycmVudCB1c2VyIGFuZCBzdXBwb3J0IHVzZXIgdG8gYmUgc2V0LlxuICAgKi9cbiAgc2V0VXNlcih1c2VySW5mbzogeyB1c2VyOiBJVXNlcjsgc3VwcG9ydFVzZXJOYW1lOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuY3VycmVudFN1cHBvcnRVc2VyTmFtZS5uZXh0KHVzZXJJbmZvLnN1cHBvcnRVc2VyTmFtZSB8fCBudWxsKTtcbiAgICB0aGlzLmN1cnJlbnRVc2VyLm5leHQodXNlckluZm8udXNlcik7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gaXMgb3duZWQgYnkgdGhlIGN1cnJlbnQgdGVuYW50LlxuICAgKiBAcGFyYW0gYXBwIFRoZSBhcHBsaWNhdGlvbiB0byB2ZXJpZnkuXG4gICAqIEByZXR1cm5zIHRydWUgaWYgaXQgYmVsb25ncyB0byB0aGUgY3VycmVudCB0ZW5hbnQuXG4gICAqL1xuICBpc093bmVyT2ZBcHBsaWNhdGlvbihhcHA/OiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgYXBwID0gdGhpcy5jdXJyZW50QXBwbGljYXRpb24udmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50ID0gdGhpcy5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIGNvbnN0IGFwcE93bmVyID0gZ2V0KGFwcCwgJ293bmVyLnRlbmFudC5pZCcpO1xuICAgIHJldHVybiBjdXJyZW50VGVuYW50Lm5hbWUgPT09IGFwcE93bmVyO1xuICB9XG5cbiAgZ2V0Q3VycmVudENvbnRleHRQYXRoKCkge1xuICAgIGNvbnN0IG1hdGNoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLm1hdGNoKC9cXC9hcHBzXFwvKHB1YmxpY1xcLyl7MCwxfSguKz8pKFxcL3xcXD98I3wkKS8pO1xuICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaFsyXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZERlZmF1bHRPcHRpb25zKCkge1xuICAgIHRoaXMuc3RhdGUuc3VwcG9ydFVybCA9IGF3YWl0IHRoaXMub3B0aW9ucy5nZXRTdXBwb3J0VXJsKCk7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmF0ZVN1cHBvcnRVc2VyQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5vcHRpb25zLmdldEFjdGl2YXRlU3VwcG9ydFVzZXIoKTtcbiAgICB0aGlzLnN0YXRlLnZlcnNpb25zLmJhY2tlbmQgPSBhd2FpdCB0aGlzLm9wdGlvbnMuZ2V0U3lzdGVtT3B0aW9uKCdzeXN0ZW0nLCAndmVyc2lvbicpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNob3dJbmNvbXBhdGlibGVWZXJzaW9uc0Vycm9yKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGlnbm9yZSB0aGlzXG4gICAgfVxuICAgIHRoaXMuZW1pdE5ld1N0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dJbmNvbXBhdGlibGVWZXJzaW9uc0Vycm9yKCkge1xuICAgIGNvbnN0IHVpVmVyc2lvbjogc3RyaW5nID0gdGhpcy5zdGF0ZS52ZXJzaW9ucy51aS5uZ3g7XG4gICAgY29uc3QgYmFja2VuZFZlcnNpb246IHN0cmluZyA9IHRoaXMuc3RhdGUudmVyc2lvbnMuYmFja2VuZDtcblxuICAgIGlmICghc2F0aXNmaWVzKHVpVmVyc2lvbiwgYDw9JHtiYWNrZW5kVmVyc2lvbn0gfHwgfiR7YmFja2VuZFZlcnNpb259YCkpIHtcbiAgICAgIGNvbnN0IGVycm9yQ29udGVudCA9IGBZb3UgYXJlIHJ1bm5pbmcgdmVyc2lvbiAke3VpVmVyc2lvbn0gb2YgdGhlIFVJIGFuZCB2ZXJzaW9uICR7YmFja2VuZFZlcnNpb259IG9mIGJhY2tlbmQhYDtcbiAgICAgIGNvbnNvbGUubG9nKCclYyAnICsgZXJyb3JDb250ZW50LCAnZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMzBweDsgY29sb3I6IHJlZDsnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFDTCxXQUFXLEVBRVgseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUduQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7OztBQUduQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxZQUFZO0lBK0IvQyxZQUNVLGtCQUFzQyxFQUN2QyxVQUFzQixFQUNyQixPQUF1QixFQUN2QixXQUF3QixFQUN4Qix5QkFBb0Q7UUFFNUQsS0FBSyxFQUFFLENBQUM7UUFOQSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3ZDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsOEJBQXlCLEdBQXpCLHlCQUF5QixD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QUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdEYsSUFBSTtZQUNGLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1NBQ3RDO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxjQUFjO1NBQ2Y7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLDZCQUE2QjtRQUNuQyxNQUFNLFNBQVMsR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ3JELE1BQU0sY0FBYyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUUzRCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLGNBQWMsUUFBUSxjQUFjLEVBQUUsQ0FBQyxFQUFFO1lBQ3RFLE1BQU0sWUFBWSxHQUFHLDJCQUEyQixTQUFTLDBCQUEwQixjQUFjLGNBQWMsQ0FBQztZQUNoSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxZQUFZLEVBQUUsaURBQWlELENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7OzRHQXpMVSxlQUFlO2dIQUFmLGVBQWU7QUEwSDFCO0lBREMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQzs7OzswREFJbEM7MkZBN0hVLGVBQWU7a0JBRDNCLFVBQVU7aU9BMkhILG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRmV0Y2hDbGllbnQsXG4gIElBcHBsaWNhdGlvbixcbiAgVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgQXBwbGljYXRpb25TZXJ2aWNlLFxuICBJQ3VycmVudFRlbmFudCxcbiAgSVVzZXJcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsga2V5cywgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzY2FuIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3N0YXRlLXNlcnZpY2UuYWJzdHJhY3QnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXBpJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uT3B0aW9ucyB9IGZyb20gJy4vQXBwbGljYXRpb25PcHRpb25zJztcbmltcG9ydCB7IHRocm90dGxlIH0gZnJvbSAnLi90aHJvdHRsZS5kZWNvcmF0b3InO1xuaW1wb3J0IHsgc2F0aXNmaWVzIH0gZnJvbSAnc2VtdmVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcFN0YXRlU2VydmljZSBleHRlbmRzIFN0YXRlU2VydmljZSB7XG4gIHN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe1xuICAgIGFwcDoge1xuICAgICAgbmFtZTogdGhpcy5vcHRpb25zLm5hbWUsXG4gICAgICBjb250ZXh0UGF0aDogdGhpcy5nZXRDdXJyZW50Q29udGV4dFBhdGgoKSB8fCB0aGlzLm9wdGlvbnMuY29udGV4dFBhdGhcbiAgICB9LFxuICAgIHN1cHBvcnRVcmw6IHRoaXMub3B0aW9ucy5zdXBwb3J0VXJsLFxuICAgIGxhbmc6IHRoaXMub3B0aW9ucy5nZXQoJ2RlZmF1bHRMYW5ndWFnZScsICdlbicpLFxuICAgIGxhbmdzOiB0aGlzLmdldExhbmdzKCksXG4gICAgbGFuZ3NEZXRhaWw6IHRoaXMub3B0aW9ucy5sYW5ndWFnZXMsXG4gICAgbG9naW5PcHRpb25zOiB0aGlzLm9wdGlvbnMubG9naW5PcHRpb25zLFxuICAgIGFjdGl2YXRlU3VwcG9ydFVzZXJBdmFpbGFibGU6IHVuZGVmaW5lZCxcbiAgICB2ZXJzaW9uczoge1xuICAgICAgYmFja2VuZDogdW5kZWZpbmVkLFxuICAgICAgdWk6IHRoaXMub3B0aW9ucy52ZXJzaW9ucyB8fCB7IG5neDogdW5kZWZpbmVkIH1cbiAgICB9LFxuICAgIGhpZGVQb3dlcmVkOiB0aGlzLm9wdGlvbnMuaGlkZVBvd2VyZWQsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzaG93UmlnaHREcmF3ZXI6IHRoaXMub3B0aW9ucy5yaWdodERyYXdlcixcbiAgICBsb2dpbkV4dHJhTGluazogdGhpcy5vcHRpb25zLmdldCgnbG9naW5fZXh0cmFfbGluaycpLFxuICAgIG5ld3NsZXR0ZXI6IHRoaXMub3B0aW9ucy5uZXdzbGV0dGVyXG4gIH0pO1xuICBjdXJyZW50U3VwcG9ydFVzZXJOYW1lOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBjdXJyZW50VXNlcjogQmVoYXZpb3JTdWJqZWN0PElVc2VyIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBjdXJyZW50VGVuYW50OiBCZWhhdmlvclN1YmplY3Q8SUN1cnJlbnRUZW5hbnQgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIGN1cnJlbnRBcHBsaWNhdGlvbjogQmVoYXZpb3JTdWJqZWN0PElBcHBsaWNhdGlvbiB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgY3VycmVudEFwcGxpY2F0aW9uQ29uZmlnOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvbi5waXBlKFxuICAgIGZpbHRlcihhcHAgPT4gISFhcHApLFxuICAgIG1hcChhcHAgPT4gYXBwPy5jb25maWcgfHwgbnVsbClcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHB1YmxpYyBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uczogT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmZXRjaENsaWVudDogRmV0Y2hDbGllbnQsXG4gICAgcHJpdmF0ZSB0ZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlOiBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcGlTZXJ2aWNlLmNhbGxzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCh7IHVybCB9KSA9PiAhL25vdGlmaWNhdGlvblxcL3JlYWx0aW1lLy50ZXN0KHVybCkpLFxuICAgICAgICBtYXAoKHsgcGhhc2UgfSkgPT4gKHBoYXNlID09PSAnc3RhcnQnID8gMSA6IC0xKSksXG4gICAgICAgIHNjYW4oKGNvdW50LCBpdGVtKSA9PiBjb3VudCArIGl0ZW0sIDApLFxuICAgICAgICBtYXAoY291bnQgPT4gY291bnQgPiAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShpc0xvYWRpbmcgPT4gKHRoaXMuc3RhdGUuaXNMb2FkaW5nID0gaXNMb2FkaW5nKSk7XG5cbiAgICB0aGlzLmFzc2lnbkFwcGxpY2F0aW9uS2V5VG9EZWZhdWx0SGVhZGVycygpO1xuICB9XG5cbiAgYXNzaWduQXBwbGljYXRpb25LZXlUb0RlZmF1bHRIZWFkZXJzKCkge1xuICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgIHRoaXMuZmV0Y2hDbGllbnQuZGVmYXVsdEhlYWRlcnMgPSB7XG4gICAgICAgIC4uLih0aGlzLmZldGNoQ2xpZW50LmRlZmF1bHRIZWFkZXJzIHx8IHt9KSxcbiAgICAgICAgJ1gtQ3VtdWxvY2l0eS1BcHBsaWNhdGlvbi1LZXknOiB0aGlzLm9wdGlvbnMua2V5XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgKi9cbiAgZ2V0IHN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC52YWx1ZTtcbiAgfVxuXG4gIGdldExhbmdzKCkge1xuICAgIGNvbnN0IHsgbGFuZ3VhZ2VzIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgcmV0dXJuIGxhbmd1YWdlcyA/IGtleXMobGFuZ3VhZ2VzKS5maWx0ZXIoayA9PiBsYW5ndWFnZXNba10pIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29ycmVjdCBVSSB2ZXJzaW9uLiBJbiBoeWJyaWQgbW9kZSBmb3IgYW5ndWxhciBhbmQgbmd4LlxuICAgKi9cbiAgZ2V0IHVpVmVyc2lvbigpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5zdGF0ZS52ZXJzaW9ucy51aTtcbiAgICByZXR1cm4gdmVyc2lvbi5uZ3ggfHwgdmVyc2lvbi5uZzE7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGFwcCBtYW5pZmVzdC4gSWYgbm8gYWNjZXNzIC0+IHRocm93IGFuIGVycm9yIHRvIHZlcmlmeSBhcHAgYWNjZXNzLlxuICAgKi9cbiAgYXN5bmMgbG9hZE1hbmlmZXN0KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGE6IGFwcGxpY2F0aW9uIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRNYW5pZmVzdE9mQ29udGV4dFBhdGgoXG4gICAgICAgIHRoaXMuc3RhdGUuYXBwLmNvbnRleHRQYXRoXG4gICAgICApO1xuICAgICAgdGhpcy5zdGF0ZS5hcHAubWFuaWZlc3QgPSBhcHBsaWNhdGlvbjtcbiAgICAgIHRoaXMuc3RhdGUuYXBwLmlkID0gYXBwbGljYXRpb24uaWQ7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRldGFpbChhcHBsaWNhdGlvbi5pZCk7XG4gICAgICB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvbi5uZXh0KGRhdGEpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkRGVmYXVsdE9wdGlvbnMoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5jdXJyZW50QXBwbGljYXRpb24ubmV4dCh7fSk7XG4gICAgICB0aHJvdyBleDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHluYW1pYyBvcHRpb25zIGFyZSBzdG9yZWQgb24gdGhlIEFQSSBpbiBhIHNwZWNpZmljIGNvbmZpZzoge30gb2JqZWN0LiBUaGV5IGNhblxuICAgKiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYXBwIGR5bmFtaWNhbGx5LlxuICAgKlxuICAgKiBOb3RlOiBUbyBhdm9pZHMgY29uZmxpY3RzIHdpdGggdGhlIGRlZmF1bHQgQ29uZmlnLCBpdCBpcyByZWNvbW1lbmRlZFxuICAgKiB0byB1c2UgYSBjZXJ0YWluIG5hbWVzcGFjZS5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUN1cnJlbnRBcHBsaWNhdGlvbkNvbmZpZzxUID0gQXBwbGljYXRpb25PcHRpb25zPihjb25maWc6IFQpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBhcHBXaXRoVXBkYXRlZENvbmZpZyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnVwZGF0ZUFwcGxpY2F0aW9uQ29uZmlnKFxuICAgICAgdGhpcy5zdGF0ZS5hcHAuaWQsXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIHRoaXMuY3VycmVudEFwcGxpY2F0aW9uLm5leHQoYXBwV2l0aFVwZGF0ZWRDb25maWcpO1xuICAgIHJldHVybiBhcHBXaXRoVXBkYXRlZENvbmZpZy5jb25maWc7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgaXQgcmVmcmVzaGVzIHRoZSB2YWx1ZXMgb2YgbG9naW5PcHRpb25zIHN0b3JlZCB3aXRoaW4gdWkgc3RhdGUgb2JqZWN0LlxuICAgKiBGdW5jdGlvbiBpcyB0aHJvdHRsZWQgdG8gZXhlY3V0ZSB0aGUgcmVmcmVzaCBvbmNlIGluIGEgdGltZSBzcGVjaWZpZWQgYnkgcGFyYW1zIG9mIEB0aHJvdHRsZWQgZGVjb3JhdG9yLFxuICAgKiBpdCBzaG91bGQgYmUgY2FsbGVkIG9uIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICovXG4gIEB0aHJvdHRsZSg2MDAsIHsgdHJhaWxpbmc6IGZhbHNlIH0pXG4gIGFzeW5jIHJlZnJlc2hMb2dpbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yQ3VycmVudFRlbmFudCgpKS5kYXRhO1xuICAgIHRoaXMuc3RhdGUkLm5leHQoeyAuLi50aGlzLnN0YXRlLCBsb2dpbk9wdGlvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGN1cnJlbnQgdXNlcnMgYXBwbGljYXRpb24gbGlzdCBhbmQgbWF0Y2hlcyBpdCBhZ2FpbnN0IGdpdmVuIGFwcGxpY2F0aW9uIG5hbWUuXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhcHBsaWNhdGlvbiBpcyBpbiB0aGUgbGlzdC5cbiAgICogQHBhcmFtIG5hbWUgYXBwbGljYXRpb24gbmFtZVxuICAgKi9cbiAgYXN5bmMgaXNBcHBsaWNhdGlvbkF2YWlsYWJsZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeVVzZXIodW5kZWZpbmVkLCB7IHBhZ2VTaXplOiAxMDAgfSk7XG4gICAgcmV0dXJuIGRhdGEuc29tZShhcHAgPT4gYXBwLm5hbWUgPT09IG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgY3VycmVudCB1c2VyIChpbmNsdWRpbmcgc3VwcG9ydCB1c2VyKS5cbiAgICogQHBhcmFtIHVzZXJJbmZvIEluZm8gYWJvdXQgY3VycmVudCB1c2VyIGFuZCBzdXBwb3J0IHVzZXIgdG8gYmUgc2V0LlxuICAgKi9cbiAgc2V0VXNlcih1c2VySW5mbzogeyB1c2VyOiBJVXNlcjsgc3VwcG9ydFVzZXJOYW1lOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuY3VycmVudFN1cHBvcnRVc2VyTmFtZS5uZXh0KHVzZXJJbmZvLnN1cHBvcnRVc2VyTmFtZSB8fCBudWxsKTtcbiAgICB0aGlzLmN1cnJlbnRVc2VyLm5leHQodXNlckluZm8udXNlcik7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gaXMgb3duZWQgYnkgdGhlIGN1cnJlbnQgdGVuYW50LlxuICAgKiBAcGFyYW0gYXBwIFRoZSBhcHBsaWNhdGlvbiB0byB2ZXJpZnkuXG4gICAqIEByZXR1cm5zIHRydWUgaWYgaXQgYmVsb25ncyB0byB0aGUgY3VycmVudCB0ZW5hbnQuXG4gICAqL1xuICBpc093bmVyT2ZBcHBsaWNhdGlvbihhcHA/OiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgYXBwID0gdGhpcy5jdXJyZW50QXBwbGljYXRpb24udmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50ID0gdGhpcy5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIGNvbnN0IGFwcE93bmVyID0gZ2V0KGFwcCwgJ293bmVyLnRlbmFudC5pZCcpO1xuICAgIHJldHVybiBjdXJyZW50VGVuYW50Lm5hbWUgPT09IGFwcE93bmVyO1xuICB9XG5cbiAgZ2V0Q3VycmVudENvbnRleHRQYXRoKCkge1xuICAgIGNvbnN0IG1hdGNoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLm1hdGNoKC9cXC9hcHBzXFwvKHB1YmxpY1xcLyl7MCwxfSguKz8pKFxcL3xcXD98I3wkKS8pO1xuICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaFsyXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZERlZmF1bHRPcHRpb25zKCkge1xuICAgIHRoaXMuc3RhdGUuc3VwcG9ydFVybCA9IGF3YWl0IHRoaXMub3B0aW9ucy5nZXRTdXBwb3J0VXJsKCk7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmF0ZVN1cHBvcnRVc2VyQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5vcHRpb25zLmdldEFjdGl2YXRlU3VwcG9ydFVzZXIoKTtcbiAgICB0aGlzLnN0YXRlLnZlcnNpb25zLmJhY2tlbmQgPSBhd2FpdCB0aGlzLm9wdGlvbnMuZ2V0U3lzdGVtT3B0aW9uKCdzeXN0ZW0nLCAndmVyc2lvbicpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNob3dJbmNvbXBhdGlibGVWZXJzaW9uc0Vycm9yKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGlnbm9yZSB0aGlzXG4gICAgfVxuICAgIHRoaXMuZW1pdE5ld1N0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dJbmNvbXBhdGlibGVWZXJzaW9uc0Vycm9yKCkge1xuICAgIGNvbnN0IHVpVmVyc2lvbjogc3RyaW5nID0gdGhpcy5zdGF0ZS52ZXJzaW9ucy51aS5uZ3g7XG4gICAgY29uc3QgYmFja2VuZFZlcnNpb246IHN0cmluZyA9IHRoaXMuc3RhdGUudmVyc2lvbnMuYmFja2VuZDtcblxuICAgIGlmICghc2F0aXNmaWVzKHVpVmVyc2lvbiwgYDw9JHtiYWNrZW5kVmVyc2lvbn0gfHwgfiR7YmFja2VuZFZlcnNpb259YCkpIHtcbiAgICAgIGNvbnN0IGVycm9yQ29udGVudCA9IGBZb3UgYXJlIHJ1bm5pbmcgdmVyc2lvbiAke3VpVmVyc2lvbn0gb2YgdGhlIFVJIGFuZCB2ZXJzaW9uICR7YmFja2VuZFZlcnNpb259IG9mIGJhY2tlbmQhYDtcbiAgICAgIGNvbnNvbGUubG9nKCclYyAnICsgZXJyb3JDb250ZW50LCAnZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMzBweDsgY29sb3I6IHJlZDsnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Inject, Injectable, Injector, Optional } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
- import { BehaviorSubject, Subject, timer } from 'rxjs';
3
+ import { BehaviorSubject, combineLatest, Subject, timer } from 'rxjs';
4
4
  import { distinctUntilChanged, filter, mergeMap, shareReplay, take, takeUntil } from 'rxjs/operators';
5
5
  import { fromTriggerOnce, getInjectedHooks, stateToFactory } from '../common/extension-hooks';
6
6
  import { StateService } from '../common/state-service.abstract';
@@ -22,11 +22,13 @@ export class DynamicComponentService extends StateService {
22
22
  */
23
23
  this.factories = [];
24
24
  this.injectors = [this.rootInjector];
25
+ this.remotePluginsLoaded$ = new BehaviorSubject(false);
26
+ const remotesLoaded$ = this.remotePluginsLoaded$.pipe(filter(loaded => !!loaded), take(1));
25
27
  this.items$ = fromTriggerOnce(router, this.refreshTrigger, [
26
28
  getInjectedHooks(HOOK_COMPONENTS, this.injectors),
27
29
  () => this.factories,
28
30
  stateToFactory(this.state$)
29
- ]).pipe(distinctUntilChanged(), takeUntil(timer(waitTimeout || this.DEFAULT_WAIT_TIMEOUT)), shareReplay(1));
31
+ ]).pipe(distinctUntilChanged(), takeUntil(combineLatest([timer(waitTimeout || this.DEFAULT_WAIT_TIMEOUT), remotesLoaded$])), shareReplay(1));
30
32
  }
31
33
  refresh() {
32
34
  this.refreshTrigger.next(1);
@@ -63,6 +65,9 @@ export class DynamicComponentService extends StateService {
63
65
  const dynamicDef = await Promise.all(componentIdAndConfig.map(({ componentId }) => this.getById(componentId)));
64
66
  return this.dynamicResolver.serialize(componentIdAndConfig, dynamicDef);
65
67
  }
68
+ markPluginsAsLoaded() {
69
+ this.remotePluginsLoaded$.next(true);
70
+ }
66
71
  }
67
72
  DynamicComponentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DynamicComponentService, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: RESOLVING_COMPONENT_WAIT_TIME, optional: true }, { token: i2.DynamicResolverService }], target: i0.ɵɵFactoryTarget.Injectable });
68
73
  DynamicComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DynamicComponentService, providedIn: 'root' });
@@ -77,4 +82,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
77
82
  type: Inject,
78
83
  args: [RESOLVING_COMPONENT_WAIT_TIME]
79
84
  }] }, { type: i2.DynamicResolverService }]; } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLFdBQVcsRUFDWCxJQUFJLEVBQ0osU0FBUyxFQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFFTCxlQUFlLEVBQ2YsNkJBQTZCLEVBQzlCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFLcEUsTUFBTSxPQUFPLHVCQUNYLFNBQVEsWUFBWTtJQWlCcEIsWUFDVSxZQUFzQixFQUM5QixNQUFjLEVBQ3FDLFdBQW1CLEVBQzlELGVBQXVDO1FBRS9DLEtBQUssRUFBRSxDQUFDO1FBTEEsaUJBQVksR0FBWixZQUFZLENBQVU7UUFHdEIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBbEJ6Qyx5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFFM0IsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQy9CLFdBQU0sR0FBRyxJQUFJLGVB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LFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBc0JJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBtZXJnZU1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHRha2UsXG4gIHRha2VVbnRpbFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBFeHRlbnNpb25GYWN0b3J5LFxuICBFeHRlbnNpb25Qb2ludCxcbiAgZnJvbVRyaWdnZXJPbmNlLFxuICBnZXRJbmplY3RlZEhvb2tzLFxuICBzdGF0ZVRvRmFjdG9yeVxufSBmcm9tICcuLi9jb21tb24vZXh0ZW5zaW9uLWhvb2tzJztcbmltcG9ydCB7IFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9zdGF0ZS1zZXJ2aWNlLmFic3RyYWN0JztcbmltcG9ydCB7XG4gIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLFxuICBIT09LX0NPTVBPTkVOVFMsXG4gIFJFU09MVklOR19DT01QT05FTlRfV0FJVF9USU1FXG59IGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgRHluYW1pY1Jlc29sdmVyU2VydmljZSB9IGZyb20gJy4vZHluYW1pYy1yZXNvbHZlci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0NvbXBvbmVudFNlcnZpY2VcbiAgZXh0ZW5kcyBTdGF0ZVNlcnZpY2VcbiAgaW1wbGVtZW50cyBFeHRlbnNpb25Qb2ludDxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj5cbntcbiAgcHJpdmF0ZSBERUZBVUxUX1dBSVRfVElNRU9VVCA9IDUwMDA7XG4gIGl0ZW1zJDogT2JzZXJ2YWJsZTxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbltdPjtcbiAgcmVhZG9ubHkgcmVmcmVzaFRyaWdnZXIgPSBuZXcgU3ViamVjdCgpO1xuICByZWFkb25seSBzdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNldDxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj4+KFxuICAgIG5ldyBTZXQ8RHluYW1pY0NvbXBvbmVudERlZmluaXRpb24+KClcbiAgKTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBmYWN0b3JpZXMgdGhhdCBjYW4gYmUgYWRkZWQgYnkgcGx1Z2lucy5cbiAgICovXG4gIGZhY3RvcmllczogRXh0ZW5zaW9uRmFjdG9yeTxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj5bXSA9IFtdO1xuXG4gIGluamVjdG9ycyA9IFt0aGlzLnJvb3RJbmplY3Rvcl07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb290SW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHJvdXRlcjogUm91dGVyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVTT0xWSU5HX0NPTVBPTkVOVF9XQUlUX1RJTUUpIHdhaXRUaW1lb3V0OiBudW1iZXIsXG4gICAgcHJpdmF0ZSBkeW5hbWljUmVzb2x2ZXI6IER5bmFtaWNSZXNvbHZlclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLml0ZW1zJCA9IGZyb21UcmlnZ2VyT25jZTxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj4ocm91dGVyLCB0aGlzLnJlZnJlc2hUcmlnZ2VyLCBbXG4gICAgICBnZXRJbmplY3RlZEhvb2tzPER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPihIT09LX0NPTVBPTkVOVFMsIHRoaXMuaW5qZWN0b3JzKSxcbiAgICAgICgpID0+IHRoaXMuZmFjdG9yaWVzLFxuICAgICAgc3RhdGVUb0ZhY3RvcnkodGhpcy5zdGF0ZSQpXG4gICAgXSkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICB0YWtlVW50aWwodGltZXIod2FpdFRpbWVvdXQgfHwgdGhpcy5ERUZBVUxUX1dBSVRfVElNRU9VVCkpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyLm5leHQoMSk7XG4gIH1cblxuICBnZXQgc3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUkLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb21wb25lbnQgYnkgaXQncyBpZCBhcyBhbiBvYnNlcnZhYmxlLlxuICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBnZXRCeUlkKGlkKTogUHJvbWlzZTxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj4ge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMkXG4gICAgICAucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKGNtcHM6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uW10pID0+IGNtcHMpLFxuICAgICAgICBmaWx0ZXIoKGNtcDogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24pID0+IGNtcC5pZCA9PT0gaWQpLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhZGQoY29tcG9uZW50OiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbikge1xuICAgIHRoaXMuc3RhdGUuYWRkKGNvbXBvbmVudCk7XG4gICAgdGhpcy5lbWl0TmV3U3RhdGUoKTtcbiAgfVxuXG4gIHJlbW92ZShjb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgdGhpcy5zdGF0ZS5kZWxldGUoY29tcG9uZW50KTtcbiAgICB0aGlzLmVtaXROZXdTdGF0ZSgpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZVJlc29sdmVycyhjb21wb25lbnRJZEFuZENvbmZpZzogQXJyYXk8eyBjb21wb25lbnRJZDogc3RyaW5nOyBjb25maWc6IGFueSB9Pikge1xuICAgIGNvbnN0IGR5bmFtaWNEZWYgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNvbXBvbmVudElkQW5kQ29uZmlnLm1hcCgoeyBjb21wb25lbnRJZCB9KSA9PiB0aGlzLmdldEJ5SWQoY29tcG9uZW50SWQpKVxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5keW5hbWljUmVzb2x2ZXIuZXhlY3V0ZVJlc29sdmVycyhjb21wb25lbnRJZEFuZENvbmZpZywgZHluYW1pY0RlZik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIHNlcmlhbGl6ZUNvbmZpZ3MoY29tcG9uZW50SWRBbmRDb25maWc6IEFycmF5PHsgY29tcG9uZW50SWQ6IHN0cmluZzsgY29uZmlnOiBhbnkgfT4pIHtcbiAgICBjb25zdCBkeW5hbWljRGVmID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjb21wb25lbnRJZEFuZENvbmZpZy5tYXAoKHsgY29tcG9uZW50SWQgfSkgPT4gdGhpcy5nZXRCeUlkKGNvbXBvbmVudElkKSlcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNSZXNvbHZlci5zZXJpYWxpemUoY29tcG9uZW50SWRBbmRDb25maWcsIGR5bmFtaWNEZWYpO1xuICB9XG59XG4iXX0=
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xGLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLFFBQVEsRUFDUixXQUFXLEVBQ1gsSUFBSSxFQUNKLFNBQVMsRUFDVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFHTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEVBRUwsZUFBZSxFQUNmLDZCQUE2QixFQUM5QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBS3BFLE1BQU0sT0FBTyx1QkFDWCxTQUFRLFlBQVk7SUFtQnBCLFlBQ1UsWUFBc0IsRUFDOUIsTUFBYyxFQUNxQyxXQUFtQixFQUM5RCxlQUF1QztRQUUvQyxLQUFLLEVBQUUsQ0FBQztRQUxBLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBR3RCLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQXBCekMseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBRTNCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdB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RSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQ3pFLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDOztvSEFoR1UsdUJBQXVCLGdFQXVCWiw2QkFBNkI7d0hBdkJ4Qyx1QkFBdUIsY0FGdEIsTUFBTTsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkF3QkksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1lcmdlTWFwLFxuICBzaGFyZVJlcGxheSxcbiAgdGFrZSxcbiAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEV4dGVuc2lvbkZhY3RvcnksXG4gIEV4dGVuc2lvblBvaW50LFxuICBmcm9tVHJpZ2dlck9uY2UsXG4gIGdldEluamVjdGVkSG9va3MsXG4gIHN0YXRlVG9GYWN0b3J5XG59IGZyb20gJy4uL2NvbW1vbi9leHRlbnNpb24taG9va3MnO1xuaW1wb3J0IHsgU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3N0YXRlLXNlcnZpY2UuYWJzdHJhY3QnO1xuaW1wb3J0IHtcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sXG4gIEhPT0tfQ09NUE9ORU5UUyxcbiAgUkVTT0xWSU5HX0NPTVBPTkVOVF9XQUlUX1RJTUVcbn0gZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBEeW5hbWljUmVzb2x2ZXJTZXJ2aWNlIH0gZnJvbSAnLi9keW5hbWljLXJlc29sdmVyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljQ29tcG9uZW50U2VydmljZVxuICBleHRlbmRzIFN0YXRlU2VydmljZVxuICBpbXBsZW1lbnRzIEV4dGVuc2lvblBvaW50PER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPlxue1xuICBwcml2YXRlIERFRkFVTFRfV0FJVF9USU1FT1VUID0gNTAwMDtcbiAgaXRlbXMkOiBPYnNlcnZhYmxlPER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uW10+O1xuICByZWFkb25seSByZWZyZXNoVHJpZ2dlciA9IG5ldyBTdWJqZWN0KCk7XG4gIHJlYWRvbmx5IHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2V0PER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPj4oXG4gICAgbmV3IFNldDxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj4oKVxuICApO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGZhY3RvcmllcyB0aGF0IGNhbiBiZSBhZGRlZCBieSBwbHVnaW5zLlxuICAgKi9cbiAgZmFjdG9yaWVzOiBFeHRlbnNpb25GYWN0b3J5PER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPltdID0gW107XG5cbiAgaW5qZWN0b3JzID0gW3RoaXMucm9vdEluamVjdG9yXTtcblxuICBwcml2YXRlIHJlbW90ZVBsdWdpbnNMb2FkZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb290SW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHJvdXRlcjogUm91dGVyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVTT0xWSU5HX0NPTVBPTkVOVF9XQUlUX1RJTUUpIHdhaXRUaW1lb3V0OiBudW1iZXIsXG4gICAgcHJpdmF0ZSBkeW5hbWljUmVzb2x2ZXI6IER5bmFtaWNSZXNvbHZlclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IHJlbW90ZXNMb2FkZWQkID0gdGhpcy5yZW1vdGVQbHVnaW5zTG9hZGVkJC5waXBlKFxuICAgICAgZmlsdGVyKGxvYWRlZCA9PiAhIWxvYWRlZCksXG4gICAgICB0YWtlKDEpXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbXMkID0gZnJvbVRyaWdnZXJPbmNlPER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPihyb3V0ZXIsIHRoaXMucmVmcmVzaFRyaWdnZXIsIFtcbiAgICAgIGdldEluamVjdGVkSG9va3M8RHluYW1pY0NvbXBvbmVudERlZmluaXRpb24+KEhPT0tfQ09NUE9ORU5UUywgdGhpcy5pbmplY3RvcnMpLFxuICAgICAgKCkgPT4gdGhpcy5mYWN0b3JpZXMsXG4gICAgICBzdGF0ZVRvRmFjdG9yeSh0aGlzLnN0YXRlJClcbiAgICBdKS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRha2VVbnRpbChjb21iaW5lTGF0ZXN0KFt0aW1lcih3YWl0VGltZW91dCB8fCB0aGlzLkRFRkFVTFRfV0FJVF9USU1FT1VUKSwgcmVtb3Rlc0xvYWRlZCRdKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMucmVmcmVzaFRyaWdnZXIubmV4dCgxKTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBvbmVudCBieSBpdCdzIGlkIGFzIGFuIG9ic2VydmFibGUuXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGdldEJ5SWQoaWQpOiBQcm9taXNlPER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPiB7XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pdGVtcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBtZXJnZU1hcCgoY21wczogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb25bXSkgPT4gY21wcyksXG4gICAgICAgIGZpbHRlcigoY21wOiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbikgPT4gY21wLmlkID09PSBpZCksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFkZChjb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgdGhpcy5zdGF0ZS5hZGQoY29tcG9uZW50KTtcbiAgICB0aGlzLmVtaXROZXdTdGF0ZSgpO1xuICB9XG5cbiAgcmVtb3ZlKGNvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24pIHtcbiAgICB0aGlzLnN0YXRlLmRlbGV0ZShjb21wb25lbnQpO1xuICAgIHRoaXMuZW1pdE5ld1N0YXRlKCk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlUmVzb2x2ZXJzKGNvbXBvbmVudElkQW5kQ29uZmlnOiBBcnJheTx7IGNvbXBvbmVudElkOiBzdHJpbmc7IGNvbmZpZzogYW55IH0+KSB7XG4gICAgY29uc3QgZHluYW1pY0RlZiA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY29tcG9uZW50SWRBbmRDb25maWcubWFwKCh7IGNvbXBvbmVudElkIH0pID0+IHRoaXMuZ2V0QnlJZChjb21wb25lbnRJZCkpXG4gICAgKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmR5bmFtaWNSZXNvbHZlci5leGVjdXRlUmVzb2x2ZXJzKGNvbXBvbmVudElkQW5kQ29uZmlnLCBkeW5hbWljRGVmKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgc2VyaWFsaXplQ29uZmlncyhjb21wb25lbnRJZEFuZENvbmZpZzogQXJyYXk8eyBjb21wb25lbnRJZDogc3RyaW5nOyBjb25maWc6IGFueSB9Pikge1xuICAgIGNvbnN0IGR5bmFtaWNEZWYgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNvbXBvbmVudElkQW5kQ29uZmlnLm1hcCgoeyBjb21wb25lbnRJZCB9KSA9PiB0aGlzLmdldEJ5SWQoY29tcG9uZW50SWQpKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZHluYW1pY1Jlc29sdmVyLnNlcmlhbGl6ZShjb21wb25lbnRJZEFuZENvbmZpZywgZHluYW1pY0RlZik7XG4gIH1cblxuICBtYXJrUGx1Z2luc0FzTG9hZGVkKCkge1xuICAgIHRoaXMucmVtb3RlUGx1Z2luc0xvYWRlZCQubmV4dCh0cnVlKTtcbiAgfVxufVxuIl19
@@ -77,6 +77,7 @@ export class PluginsResolveService {
77
77
  .map(({ name, factory }) => factory[name]);
78
78
  this.loadModulesDynamically(remoteNgModules);
79
79
  this.refreshHooks();
80
+ this.markPluginsAsLoaded();
80
81
  }
81
82
  /**
82
83
  * Loads modules and handles hooking correctly.
@@ -113,6 +114,9 @@ export class PluginsResolveService {
113
114
  }
114
115
  });
115
116
  }
117
+ markPluginsAsLoaded() {
118
+ this.dynamicComponent.markPluginsAsLoaded();
119
+ }
116
120
  /**
117
121
  * Loads a list of remotes so that a particular application can use them.
118
122
  * The request is made to the following address: /apps/<contextPath>/remoteEntry.js
@@ -129,15 +133,20 @@ export class PluginsResolveService {
129
133
  if (remotes.hasOwnProperty(pluginId)) {
130
134
  const moduleNames = remotes[pluginId];
131
135
  const url = `/apps/${pluginId}/remoteEntry.js?nocache=${date.getTime()}`;
136
+ let atLeastOneModuleLoadedSuccessfully = false;
132
137
  for (const moduleName of moduleNames) {
133
138
  try {
134
139
  remoteModules.push(await this.loadRemoteModule(url, pluginId, moduleName));
140
+ atLeastOneModuleLoadedSuccessfully = true;
135
141
  }
136
142
  catch (ex) {
137
143
  console.warn(`Could not load remote module '${moduleName}' from url:`, url);
138
144
  }
139
145
  }
140
- await this.loadRemoteTranslations(pluginId);
146
+ // no need to load translations if we were unable to load a single module..
147
+ if (atLeastOneModuleLoadedSuccessfully) {
148
+ await this.loadRemoteTranslations(pluginId);
149
+ }
141
150
  }
142
151
  }
143
152
  return remoteModules;
@@ -275,4 +284,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
275
284
  providedIn: 'root'
276
285
  }]
277
286
  }], ctorParameters: function () { return [{ type: i1.TabsService }, { type: i2.NavigatorService }, { type: i3.ActionService }, { type: i4.ActionBarService }, { type: i5.BreadcrumbService }, { type: i6.DynamicComponentService }, { type: i7.SearchService }, { type: i8.RouterService }, { type: i9.DocsService }, { type: i10.WizardService }, { type: i11.StepperService }, { type: i12.TranslateService }, { type: i13.FetchClient }, { type: i14.AppStateService }, { type: i0.EnvironmentInjector }]; } });
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEUsT0FBTyxFQUNMLFVBQVUsRUFFVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsbUJBQW1CLEVBRXBCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FB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YUFBcUI7UUFDekUseUdBQXlHO1FBQ3pHLElBQUk7WUFDRixNQUFNLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzNDO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUNYLFVBQVUsYUFBYSw2RUFBNkUsRUFDcEcsRUFBRSxDQUNILENBQUM7U0FDSDtRQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQWMsQ0FBQztRQUVsRCwwREFBMEQ7UUFDMUQsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJO1lBQ0YsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sR0FBRyxDQUFDLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDbEQ7UUFBQyxPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxhQUFhLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDMUMsQ0FBQzs7a0hBelFVLHFCQUFxQjtzSEFBckIscUJBQXFCLGNBRnBCLE1BQU07MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucywgRmV0Y2hDbGllbnQgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgTmdNb2R1bGVSZWYsXG4gIGNyZWF0ZU5nTW9kdWxlUmVmLFxuICBJbmplY3RGbGFncyxcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgaW1wb3J0UHJvdmlkZXJzRnJvbSxcbiAgVHlwZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbkJhclNlcnZpY2UsIEhPT0tfQUNUSU9OX0JBUiB9IGZyb20gJy4uL2FjdGlvbi1iYXIvYWN0aW9uLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGlvblNlcnZpY2UsIEhPT0tfQUNUSU9OIH0gZnJvbSAnLi4vYWN0aW9uL2FjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEJyZWFkY3J1bWJTZXJ2aWNlLCBIT09LX0JSRUFEQ1JVTUIgfSBmcm9tICcuLi9icmVhZGNydW1iL2JyZWFkY3J1bWIuc2VydmljZSc7XG5pbXBvcnQgeyBFeHRlbnNpb25Qb2ludCB9IGZyb20gJy4uL2NvbW1vbi9leHRlbnNpb24taG9va3MnO1xuaW1wb3J0IHsgSE9PS19ET0NTIH0gZnJvbSAnLi4vZG9jcy9kb2NzLm1vZGVscyc7XG5pbXBvcnQgeyBEb2NzU2VydmljZSB9IGZyb20gJy4uL2RvY3MvZG9jcy5zZXJ2aWNlJztcbmltcG9ydCB7IEhPT0tfQ09NUE9ORU5UUyB9IGZyb20gJy4uL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBIT09LX05BVklHQVRPUl9OT0RFUywgTmF2aWdhdG9yU2VydmljZSB9IGZyb20gJy4uL25hdmlnYXRvci9uYXZpZ2F0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBIT09LX1JPVVRFLCBSb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vcm91dGVyL3JvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEhPT0tfU0VBUkNILCBTZWFyY2hTZXJ2aWNlIH0gZnJvbSAnLi4vc2VhcmNoL3NlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IEhPT0tfVEFCUywgVGFic1NlcnZpY2UgfSBmcm9tICcuLi90YWJzL3RhYnMuc2VydmljZSc7XG5pbXBvcnQgeyBXaXphcmRTZXJ2aWNlIH0gZnJvbSAnLi4vd2l6YXJkL3dpemFyZC5zZXJ2aWNlJztcbmltcG9ydCB7IEhPT0tfV0laQVJEIH0gZnJvbSAnLi4vd2l6YXJkL3dpemFyZC5tb2RlbCc7XG5pbXBvcnQgeyByZWR1Y2UsIGZvckVhY2gsIGdldCwgdW5pb24sIGNhbWVsQ2FzZSwgZmxhdHRlbiB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBIT09LX1NURVBQRVIsIFN0ZXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc3RlcHBlci9zdGVwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IFJPVVRFUyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbnR5cGUgU2NvcGUgPSB1bmtub3duO1xudHlwZSBGYWN0b3J5ID0gKCkgPT4gYW55O1xuXG5kZWNsYXJlIGNvbnN0IF9fd2VicGFja19pbml0X3NoYXJpbmdfXzogKHNoYXJlU2NvcGU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbmRlY2xhcmUgY29uc3QgX193ZWJwYWNrX3NoYXJlX3Njb3Blc19fOiB7IGRlZmF1bHQ6IFNjb3BlIH07XG5cbmludGVyZmFjZSBDb250YWluZXIge1xuICBpbml0KHNoYXJlU2NvcGU6IFNjb3BlKTogdm9pZDtcbiAgZ2V0KG1vZHVsZTogc3RyaW5nKTogRmFjdG9yeTtcbn1cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsdWdpbnNSZXNvbHZlU2VydmljZSB7XG4gIHByaXZhdGUgdXJsUmVtb3Rlc0NhY2hlOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBudWxsO1xuICBwcml2YXRlIHJlbW90ZVNjcmlwdFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIGFsbEhvb2tzOiBBcnJheTx7XG4gICAgdG9rZW46IEluamVjdGlvblRva2VuPGFueT47XG4gICAgc2VydmljZTogRXh0ZW5zaW9uUG9pbnQ8YW55PjtcbiAgfT4gPSBbXG4gICAgeyB0b2tlbjogSE9PS19BQ1RJT04sIHNlcnZpY2U6IHRoaXMuYWN0aW9uIH0sXG4gICAgeyB0b2tlbjogSE9PS19BQ1RJT05fQkFSLCBzZXJ2aWNlOiB0aGlzLmFjdGlvbkJhciB9LFxuICAgIHsgdG9rZW46IEhPT0tfTkFWSUdBVE9SX05PREVTLCBzZXJ2aWNlOiB0aGlzLm5hdmlnYXRvciB9LFxuICAgIHsgdG9rZW46IEhPT0tfQlJFQURDUlVNQiwgc2VydmljZTogdGhpcy5icmVhZGNydW1iIH0sXG4gICAgeyB0b2tlbjogSE9PS19DT01QT05FTlRTLCBzZXJ2aWNlOiB0aGlzLmR5bmFtaWNDb21wb25lbnQgfSxcbiAgICB7IHRva2VuOiBIT09LX1JPVVRFLCBzZXJ2aWNlOiB0aGlzLmM4eVJvdXRlciB9LFxuICAgIHsgdG9rZW46IEhPT0tfU0VBUkNILCBzZXJ2aWNlOiB0aGlzLnNlYXJjaCB9LFxuICAgIHsgdG9rZW46IEhPT0tfVEFCUywgc2VydmljZTogdGhpcy50YWJzIH0sXG4gICAgeyB0b2tlbjogSE9PS19ET0NTLCBzZXJ2aWNlOiB0aGlzLmRvY3MgfSxcbiAgICB7IHRva2VuOiBIT09LX1dJWkFSRCwgc2VydmljZTogdGhpcy53aXphcmQgfSxcbiAgICB7IHRva2VuOiBIT09LX1NURVBQRVIsIHNlcnZpY2U6IHRoaXMuc3RlcHBlciB9XG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIG5hdmlnYXRvcjogTmF2aWdhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGlvbjogQWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGlvbkJhcjogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwcml2YXRlIGJyZWFkY3J1bWI6IEJyZWFkY3J1bWJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWFyY2g6IFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjOHlSb3V0ZXI6IFJvdXRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb2NzOiBEb2NzU2VydmljZSxcbiAgICBwcml2YXRlIHdpemFyZDogV2l6YXJkU2VydmljZSxcbiAgICBwcml2YXRlIHN0ZXBwZXI6IFN0ZXBwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGZldGNoQ2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvclxuICApIHt9XG5cbiAgLyoqXG4gICAqIExvYWRzIHBsdWdpbnMgYnkgcmVzb2x2aW5nIHRoZSByZW1vdGUgTmdNb2R1bGVzIGFuZCBpbmplY3RpbmcgaXQuIEFsc28gYXR0YWNoaW5nXG4gICAqIHRoZSBob29rcyBvbnRvIHRoZSByb290IGluamVjdG9yLlxuICAgKiBAcGFyYW0gcmVtb3RlTW9kdWxlcyBUaGUgcmVtb3RlIHBsdWdpbnMgdG8gbG9hZCBhcyBmYWN0b3J5IG5hbWUgbWFwcGluZyBhcnJheS5cbiAgICovXG4gIHJlc29sdmVSZW1vdGVQbHVnaW5zKHJlbW90ZU1vZHVsZXM6IEFycmF5PHsgZmFjdG9yeTsgbmFtZSB9Pikge1xuICAgIGNvbnN0IHJlbW90ZU5nTW9kdWxlcyA9IHJlbW90ZU1vZHVsZXNcbiAgICAgIC5maWx0ZXIoKHsgZmFjdG9yeSB9KSA9PiBmYWN0b3J5KVxuICAgICAgLm1hcCgoeyBuYW1lLCBmYWN0b3J5IH0pID0+IGZhY3RvcnlbbmFtZV0pO1xuXG4gICAgdGhpcy5sb2FkTW9kdWxlc0R5bmFtaWNhbGx5KHJlbW90ZU5nTW9kdWxlcyk7XG4gICAgdGhpcy5yZWZyZXNoSG9va3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBtb2R1bGVzIGFuZCBoYW5kbGVzIGhvb2tpbmcgY29ycmVjdGx5LlxuICAgKiBAcGFyYW0gcmVtb3RlTmdNb2R1bGVzIFRoZSBtb2R1bGVzIHRvIGxvYWQuXG4gICAqL1xuICBsb2FkTW9kdWxlc0R5bmFtaWNhbGx5KHJlbW90ZU5nTW9kdWxlczogTmdNb2R1bGVSZWY8dW5rbm93bj5bXSB8IFR5cGU8dW5rbm93bj5bXSkge1xuICAgIGZvciAoY29uc3QgcmVtb3RlTmdNb2R1bGUgb2YgcmVtb3RlTmdNb2R1bGVzKSB7XG4gICAgICB0aGlzLmxvYWRNb2R1bGUocmVtb3RlTmdNb2R1bGUpO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRNb2R1bGUocmVtb3RlTmdNb2R1bGU6IE5nTW9kdWxlUmVmPHVua25vd24+IHwgVHlwZTx1bmtub3duPikge1xuICAgIGxldCBtb2R1bGVSZWY6IE5nTW9kdWxlUmVmPHVua25vd24+O1xuICAgIGlmIChyZW1vdGVOZ01vZHVsZSBpbnN0YW5jZW9mIE5nTW9kdWxlUmVmKSB7XG4gICAgICAvLyBBT1RcbiAgICAgIG1vZHVsZVJlZiA9IHJlbW90ZU5nTW9kdWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBKSVRcbiAgICAgIG1vZHVsZVJlZiA9IGNyZWF0ZU5nTW9kdWxlUmVmKHJlbW90ZU5nTW9kdWxlLCB0aGlzLmluamVjdG9yKTtcbiAgICB9XG4gICAgdGhpcy5yZXNvbHZlUm91dGVyRm9yQ2hpbGRSb3V0ZXMobW9kdWxlUmVmLCByZW1vdGVOZ01vZHVsZSk7XG4gICAgdGhpcy5hZGRJbmplY3RvclRvQWxsSG9va3MobW9kdWxlUmVmKTtcbiAgICByZXR1cm4gbW9kdWxlUmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpbGwgcmVmcmVzaCBhbGwgY3VycmVudCByZWdpc3RlcmVkIGhvb2tzXG4gICAqIEBwYXJhbSBhbGxIb29rcyBJZiBzZXQgdG8gdHJ1ZSwgYWxsIGhvb2tzIHdpbGwgYmUgcmVmcmVzaGVkLiBEZWZhdWx0cyB0byBmYWxzZSwgd2hpY2ggd2lsbCBvbmx5XG4gICAqIHJlZnJlc2ggc3VjaCBob29rcywgdGhhdCBwb3NzaWJsZSBoYXMgYSByZW1vdGUgcGx1Z2luIGFzc2lnbmVkLlxuICAgKi9cbiAgcmVmcmVzaEhvb2tzKGFsbEhvb2tzID0gZmFsc2UpIHtcbiAgICB0aGlzLmFsbEhvb2tzLmZvckVhY2goaG9vayA9PiB7XG4gICAgICBpZiAoYWxsSG9va3MgfHwgaG9vay5zZXJ2aWNlLmluamVjdG9ycy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGhvb2suc2VydmljZS5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYSBsaXN0IG9mIHJlbW90ZXMgc28gdGhhdCBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24gY2FuIHVzZSB0aGVtLlxuICAgKiBUaGUgcmVxdWVzdCBpcyBtYWRlIHRvIHRoZSBmb2xsb3dpbmcgYWRkcmVzczogL2FwcHMvPGNvbnRleHRQYXRoPi9yZW1vdGVFbnRyeS5qc1xuICAgKiBAcGFyYW0gcmVtb3RlcyBMaXN0IG9mIHJlbW90ZXMgdG8gYmUgbG9hZGVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBsaXN0IG9mIGxvYWRlZCBtb2R1bGVzIGZyb20gcmVtb3Rlcy5cbiAgICovXG4gIGFzeW5jIGxvYWRSZW1vdGVzKHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucykge1xuICAgIGlmICghcmVtb3Rlcykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCByZW1vdGVNb2R1bGVzID0gW107XG4gICAgZm9yIChjb25zdCBwbHVnaW5JZCBpbiByZW1vdGVzKSB7XG4gICAgICBpZiAocmVtb3Rlcy5oYXNPd25Qcm9wZXJ0eShwbHVnaW5JZCkpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlTmFtZXMgPSByZW1vdGVzW3BsdWdpbklkXTtcbiAgICAgICAgY29uc3QgdXJsID0gYC9hcHBzLyR7cGx1Z2luSWR9L3JlbW90ZUVudHJ5LmpzP25vY2FjaGU9JHtkYXRlLmdldFRpbWUoKX1gO1xuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZU5hbWUgb2YgbW9kdWxlTmFtZXMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVtb3RlTW9kdWxlcy5wdXNoKGF3YWl0IHRoaXMubG9hZFJlbW90ZU1vZHVsZSh1cmwsIHBsdWdpbklkLCBtb2R1bGVOYW1lKSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ291bGQgbm90IGxvYWQgcmVtb3RlIG1vZHVsZSAnJHttb2R1bGVOYW1lfScgZnJvbSB1cmw6YCwgdXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmxvYWRSZW1vdGVUcmFuc2xhdGlvbnMocGx1Z2luSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVtb3RlTW9kdWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhIGxpc3Qgb2YgcmVtb3RlcyBhbmQgdHVybnMgaXQgaW50byBhbiBvYmplY3QgY29udGFpbmluZyB1bmlvbiBvZiBjb3JyZXNwb25kaW5nIHJlbW90ZXMuXG4gICAqIEBwYXJhbSBtZlJlbW90ZXMgTGlzdCBvZiB0aGUgcmVtb3Rlcy5cbiAgICogQHJldHVybnMgUmV0dXJucyBvYmplY3Qgd2l0aCBtZXJnZWQgcmVtb3Rlcy5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZW1vdGVzQTpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJywgJ21vZHVsZUInXSB9O1xuICAgKiBjb25zdCByZW1vdGVzQjpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJ10sIGNvbnRleHRQYXRoQjogWydtb2R1bGVaJ10gfTtcbiAgICogY29uc3QgbWVyZ2VkUmVtb3RlczpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBtZXJnZU1GUmVtb3RlcyhbcmVtb3Rlc0EsIHJlbW90ZXNCXSk7XG4gICAqIC8vIFJlc3VsdFxuICAgKiB7XG4gICAqICBjb250ZXh0UGF0aEE6IFsnbW9kdWxlQScsICdtb2R1bGVCJ10sXG4gICAqICBjb250ZXh0UGF0aEI6IFsnbW9kdWxlWiddXG4gICAqIH1cbiAgICpcbiAgICogYGBgXG4gICAqL1xuICBtZXJnZU1GUmVtb3RlcyhtZlJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1tdKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgbWZSZW1vdGVzLFxuICAgICAgKGFsbFJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucywgbWZSZW1vdGU6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucykgPT4ge1xuICAgICAgICBmb3JFYWNoKG1mUmVtb3RlLCAocmVtb3RlTW9kdWxlczogc3RyaW5nW10sIHJlbW90ZUNvbnRleHRQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UmVtb3RlcyA9IGdldChhbGxSZW1vdGVzLCByZW1vdGVDb250ZXh0UGF0aCwgW10pO1xuICAgICAgICAgIGFsbFJlbW90ZXNbcmVtb3RlQ29udGV4dFBhdGhdID0gdW5pb24oY3VycmVudFJlbW90ZXMsIHJlbW90ZU1vZHVsZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYWxsUmVtb3RlcztcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIFVSTCByZW1vdGVzIGNhY2hlLlxuICAgKi9cbiAgY2xlYXJVUkxSZW1vdGVzQ2FjaGUoKSB7XG4gICAgdGhpcy51cmxSZW1vdGVzQ2FjaGUgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVtb3RlcyBsaXN0IGZyb20gdGhlIFVSTC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgbGlzdCBvZiByZW1vdGVzLlxuICAgKi9cbiAgbG9hZFVybFJlbW90ZXMoKSB7XG4gICAgaWYgKCF0aGlzLnVybFJlbW90ZXNDYWNoZSkge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgIGNvbnN0IHJlbW90ZXMgPSBwYXJhbXMuZ2V0KCdyZW1vdGVzJyk7XG4gICAgICBpZiAocmVtb3Rlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMudXJsUmVtb3Rlc0NhY2hlID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQocmVtb3RlcykpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIHBhcnNlIHJlbW90ZXM6ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsUmVtb3Rlc0NhY2hlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUmVtb3RlVHJhbnNsYXRpb25zKHBsdWdpbklkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBsYW5nIH0gPSB0aGlzLmFwcFN0YXRlLnN0YXRlO1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmV0Y2hDbGllbnQuZmV0Y2goYC9hcHBzLyR7cGx1Z2luSWR9LyR7bGFuZ30uanNvbmApO1xuICAgICAgaWYgKHJlc3Auc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3AuanNvbigpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0VHJhbnNsYXRpb24obGFuZywgcmVzdWx0W2xhbmddLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9hZCB0cmFuc2xhdGlvbnMgZm9yICR7cGx1Z2luSWR9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRJbmplY3RvclRvQWxsSG9va3MobW9kdWxlUmVmOiBOZ01vZHVsZVJlZjx1bmtub3duPikge1xuICAgIHRoaXMuYWxsSG9va3MuZm9yRWFjaChob29rID0+IHtcbiAgICAgIGhvb2suc2VydmljZS5pbmplY3RvcnMucHVzaChtb2R1bGVSZWYuaW5qZWN0b3IpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUm91dGVyRm9yQ2hpbGRSb3V0ZXMobW9kdWxlUmVmOiBOZ01vZHVsZVJlZjx1bmtub3duPiwgcmVtb3RlTmdNb2R1bGU6IGFueSkge1xuICAgIC8vIE5PVEU6IHN0b2xlbiBmcm9tIGxhenkgbG9hZGVkIHJvdXRlcyBmcm9tIEFuZ3VsYXIgaXRzZWxmLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9kYTU4ODAxZjk1YzY2YzIwMWUzMzIxODlhZjI1NzAyYmRkNzIyZjNmL3BhY2thZ2VzL3JvdXRlci9zcmMvcm91dGVyX2NvbmZpZ19sb2FkZXIudHMjTDEwMy1MMTA4XG4gICAgY29uc3QgcmF3Um91dGVzID0gZmxhdHRlbihcbiAgICAgIG1vZHVsZVJlZi5pbmplY3Rvci5nZXQoUk9VVEVTLCBbXSwgSW5qZWN0RmxhZ3MuU2VsZiB8IEluamVjdEZsYWdzLk9wdGlvbmFsKVxuICAgICk7XG5cbiAgICBpZiAocmF3Um91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJvdXRlV2l0aEluamVjdG9yID0gcmF3Um91dGVzLm1hcChyb3V0ZSA9PiB7XG4gICAgICAgIHJvdXRlLnByb3ZpZGVycyA9IFtpbXBvcnRQcm92aWRlcnNGcm9tKHJlbW90ZU5nTW9kdWxlKV07XG4gICAgICAgIHJldHVybiByb3V0ZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jOHlSb3V0ZXIuYWRkUm91dGUocm91dGVXaXRoSW5qZWN0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZU1vZHVsZShcbiAgICByZW1vdGVFbnRyeVVybDogc3RyaW5nLFxuICAgIHJlbW90ZUNvbnRleHRQYXRoOiBzdHJpbmcsXG4gICAgZXhwb3NlZE1vZHVsZTogc3RyaW5nXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0aGlzLnJlbW90ZVNjcmlwdFNldC5oYXMocmVtb3RlRW50cnlVcmwpKSB7XG4gICAgICB0aGlzLnJlbW90ZVNjcmlwdFNldC5hZGQocmVtb3RlRW50cnlVcmwpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkUmVtb3RlRW50cnkocmVtb3RlRW50cnlVcmwpO1xuICAgIH1cbiAgICBsZXQgY29udGV4dFBhdGg6IHN0cmluZyA9IHJlbW90ZUNvbnRleHRQYXRoO1xuICAgIGlmIChjb250ZXh0UGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IHJlbW90ZUNvbnRleHRQYXRoLnNwbGl0KCdAJylbMF07XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmxvb2t1cEV4cG9zZWRNb2R1bGUoY2FtZWxDYXNlKGNvbnRleHRQYXRoKSwgZXhwb3NlZE1vZHVsZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRSZW1vdGVFbnRyeShyZW1vdGVFbnRyeVVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0LnNyYyA9IHJlbW90ZUVudHJ5VXJsO1xuXG4gICAgICBzY3JpcHQub25lcnJvciA9IHJlamVjdDtcblxuICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpOyAvLyB3aW5kb3cgaXMgdGhlIGdsb2JhbCBuYW1lc3BhY2VcbiAgICAgIH07XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHNjcmlwdCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvb2t1cEV4cG9zZWRNb2R1bGUocmVtb3RlTmFtZTogc3RyaW5nLCBleHBvc2VkTW9kdWxlOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIEluaXRpYWxpemVzIHRoZSBzaGFyZSBzY29wZS4gVGhpcyBmaWxscyBpdCB3aXRoIGtub3duIHByb3ZpZGVkIG1vZHVsZXMgZnJvbSB0aGlzIGJ1aWxkIGFuZCBhbGwgcmVtb3Rlc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBfX3dlYnBhY2tfaW5pdF9zaGFyaW5nX18oJ2RlZmF1bHQnKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYE1vZHVsZSAke2V4cG9zZWRNb2R1bGV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuIE1vZHVsZSBGZWRlcmF0aW9uIGlzIG5vdCBlbmFibGVkIGluIHRoaXMgYXBwbGljYXRpb24uYCxcbiAgICAgICAgZXhcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHdpbmRvd1tyZW1vdGVOYW1lXSBhcyBDb250YWluZXI7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBjb250YWluZXIsIGl0IG1heSBwcm92aWRlIHNoYXJlZCBtb2R1bGVzXG4gICAgbGV0IGZhY3Rvcnk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbnRhaW5lci5pbml0KF9fd2VicGFja19zaGFyZV9zY29wZXNfXy5kZWZhdWx0KTtcbiAgICAgIGZhY3RvcnkgPSAoYXdhaXQgY29udGFpbmVyLmdldChleHBvc2VkTW9kdWxlKSkoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS5lcnJvcihgTW9kdWxlICR7ZXhwb3NlZE1vZHVsZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBleCk7XG4gICAgfVxuICAgIHJldHVybiB7IG5hbWU6IGV4cG9zZWRNb2R1bGUsIGZhY3RvcnkgfTtcbiAgfVxufVxuIl19
287
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEUsT0FBTyxFQUNMLFVBQVUsRUFFVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsbUJBQW1CLEVBRXBCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FB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ZXRjaENsaWVudCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEluamVjdGFibGUsXG4gIEluamVjdGlvblRva2VuLFxuICBOZ01vZHVsZVJlZixcbiAgY3JlYXRlTmdNb2R1bGVSZWYsXG4gIEluamVjdEZsYWdzLFxuICBFbnZpcm9ubWVudEluamVjdG9yLFxuICBpbXBvcnRQcm92aWRlcnNGcm9tLFxuICBUeXBlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uQmFyU2VydmljZSwgSE9PS19BQ1RJT05fQkFSIH0gZnJvbSAnLi4vYWN0aW9uLWJhci9hY3Rpb24tYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aW9uU2VydmljZSwgSE9PS19BQ1RJT04gfSBmcm9tICcuLi9hY3Rpb24vYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlNlcnZpY2UsIEhPT0tfQlJFQURDUlVNQiB9IGZyb20gJy4uL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5zZXJ2aWNlJztcbmltcG9ydCB7IEV4dGVuc2lvblBvaW50IH0gZnJvbSAnLi4vY29tbW9uL2V4dGVuc2lvbi1ob29rcyc7XG5pbXBvcnQgeyBIT09LX0RPQ1MgfSBmcm9tICcuLi9kb2NzL2RvY3MubW9kZWxzJztcbmltcG9ydCB7IERvY3NTZXJ2aWNlIH0gZnJvbSAnLi4vZG9jcy9kb2NzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSE9PS19DT01QT05FTlRTIH0gZnJvbSAnLi4vZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi9keW5hbWljLWNvbXBvbmVudC9keW5hbWljLWNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEhPT0tfTkFWSUdBVE9SX05PREVTLCBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vbmF2aWdhdG9yL25hdmlnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEhPT0tfUk9VVEUsIFJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi9yb3V0ZXIvcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSE9PS19TRUFSQ0gsIFNlYXJjaFNlcnZpY2UgfSBmcm9tICcuLi9zZWFyY2gvc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgSE9PS19UQUJTLCBUYWJzU2VydmljZSB9IGZyb20gJy4uL3RhYnMvdGFicy5zZXJ2aWNlJztcbmltcG9ydCB7IFdpemFyZFNlcnZpY2UgfSBmcm9tICcuLi93aXphcmQvd2l6YXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSE9PS19XSVpBUkQgfSBmcm9tICcuLi93aXphcmQvd2l6YXJkLm1vZGVsJztcbmltcG9ydCB7IHJlZHVjZSwgZm9yRWFjaCwgZ2V0LCB1bmlvbiwgY2FtZWxDYXNlLCBmbGF0dGVuIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEhPT0tfU1RFUFBFUiwgU3RlcHBlclNlcnZpY2UgfSBmcm9tICcuLi9zdGVwcGVyL3N0ZXBwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgUk9VVEVTIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxudHlwZSBTY29wZSA9IHVua25vd247XG50eXBlIEZhY3RvcnkgPSAoKSA9PiBhbnk7XG5cbmRlY2xhcmUgY29uc3QgX193ZWJwYWNrX2luaXRfc2hhcmluZ19fOiAoc2hhcmVTY29wZTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuZGVjbGFyZSBjb25zdCBfX3dlYnBhY2tfc2hhcmVfc2NvcGVzX186IHsgZGVmYXVsdDogU2NvcGUgfTtcblxuaW50ZXJmYWNlIENvbnRhaW5lciB7XG4gIGluaXQoc2hhcmVTY29wZTogU2NvcGUpOiB2b2lkO1xuICBnZXQobW9kdWxlOiBzdHJpbmcpOiBGYWN0b3J5O1xufVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGx1Z2luc1Jlc29sdmVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSB1cmxSZW1vdGVzQ2FjaGU6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IG51bGw7XG4gIHByaXZhdGUgcmVtb3RlU2NyaXB0U2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgYWxsSG9va3M6IEFycmF5PHtcbiAgICB0b2tlbjogSW5qZWN0aW9uVG9rZW48YW55PjtcbiAgICBzZXJ2aWNlOiBFeHRlbnNpb25Qb2ludDxhbnk+O1xuICB9PiA9IFtcbiAgICB7IHRva2VuOiBIT09LX0FDVElPTiwgc2VydmljZTogdGhpcy5hY3Rpb24gfSxcbiAgICB7IHRva2VuOiBIT09LX0FDVElPTl9CQVIsIHNlcnZpY2U6IHRoaXMuYWN0aW9uQmFyIH0sXG4gICAgeyB0b2tlbjogSE9PS19OQVZJR0FUT1JfTk9ERVMsIHNlcnZpY2U6IHRoaXMubmF2aWdhdG9yIH0sXG4gICAgeyB0b2tlbjogSE9PS19CUkVBRENSVU1CLCBzZXJ2aWNlOiB0aGlzLmJyZWFkY3J1bWIgfSxcbiAgICB7IHRva2VuOiBIT09LX0NPTVBPTkVOVFMsIHNlcnZpY2U6IHRoaXMuZHluYW1pY0NvbXBvbmVudCB9LFxuICAgIHsgdG9rZW46IEhPT0tfUk9VVEUsIHNlcnZpY2U6IHRoaXMuYzh5Um91dGVyIH0sXG4gICAgeyB0b2tlbjogSE9PS19TRUFSQ0gsIHNlcnZpY2U6IHRoaXMuc2VhcmNoIH0sXG4gICAgeyB0b2tlbjogSE9PS19UQUJTLCBzZXJ2aWNlOiB0aGlzLnRhYnMgfSxcbiAgICB7IHRva2VuOiBIT09LX0RPQ1MsIHNlcnZpY2U6IHRoaXMuZG9jcyB9LFxuICAgIHsgdG9rZW46IEhPT0tfV0laQVJELCBzZXJ2aWNlOiB0aGlzLndpemFyZCB9LFxuICAgIHsgdG9rZW46IEhPT0tfU1RFUFBFUiwgc2VydmljZTogdGhpcy5zdGVwcGVyIH1cbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRhYnM6IFRhYnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmF2aWdhdG9yOiBOYXZpZ2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uOiBBY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uQmFyOiBBY3Rpb25CYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJlYWRjcnVtYjogQnJlYWRjcnVtYlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50OiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICBwcml2YXRlIHNlYXJjaDogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIGM4eVJvdXRlcjogUm91dGVyU2VydmljZSxcbiAgICBwcml2YXRlIGRvY3M6IERvY3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgd2l6YXJkOiBXaXphcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RlcHBlcjogU3RlcHBlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmV0Y2hDbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yXG4gICkge31cblxuICAvKipcbiAgICogTG9hZHMgcGx1Z2lucyBieSByZXNvbHZpbmcgdGhlIHJlbW90ZSBOZ01vZHVsZXMgYW5kIGluamVjdGluZyBpdC4gQWxzbyBhdHRhY2hpbmdcbiAgICogdGhlIGhvb2tzIG9udG8gdGhlIHJvb3QgaW5qZWN0b3IuXG4gICAqIEBwYXJhbSByZW1vdGVNb2R1bGVzIFRoZSByZW1vdGUgcGx1Z2lucyB0byBsb2FkIGFzIGZhY3RvcnkgbmFtZSBtYXBwaW5nIGFycmF5LlxuICAgKi9cbiAgcmVzb2x2ZVJlbW90ZVBsdWdpbnMocmVtb3RlTW9kdWxlczogQXJyYXk8eyBmYWN0b3J5OyBuYW1lIH0+KSB7XG4gICAgY29uc3QgcmVtb3RlTmdNb2R1bGVzID0gcmVtb3RlTW9kdWxlc1xuICAgICAgLmZpbHRlcigoeyBmYWN0b3J5IH0pID0+IGZhY3RvcnkpXG4gICAgICAubWFwKCh7IG5hbWUsIGZhY3RvcnkgfSkgPT4gZmFjdG9yeVtuYW1lXSk7XG5cbiAgICB0aGlzLmxvYWRNb2R1bGVzRHluYW1pY2FsbHkocmVtb3RlTmdNb2R1bGVzKTtcbiAgICB0aGlzLnJlZnJlc2hIb29rcygpO1xuICAgIHRoaXMubWFya1BsdWdpbnNBc0xvYWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIG1vZHVsZXMgYW5kIGhhbmRsZXMgaG9va2luZyBjb3JyZWN0bHkuXG4gICAqIEBwYXJhbSByZW1vdGVOZ01vZHVsZXMgVGhlIG1vZHVsZXMgdG8gbG9hZC5cbiAgICovXG4gIGxvYWRNb2R1bGVzRHluYW1pY2FsbHkocmVtb3RlTmdNb2R1bGVzOiBOZ01vZHVsZVJlZjx1bmtub3duPltdIHwgVHlwZTx1bmtub3duPltdKSB7XG4gICAgZm9yIChjb25zdCByZW1vdGVOZ01vZHVsZSBvZiByZW1vdGVOZ01vZHVsZXMpIHtcbiAgICAgIHRoaXMubG9hZE1vZHVsZShyZW1vdGVOZ01vZHVsZSk7XG4gICAgfVxuICB9XG5cbiAgbG9hZE1vZHVsZShyZW1vdGVOZ01vZHVsZTogTmdNb2R1bGVSZWY8dW5rbm93bj4gfCBUeXBlPHVua25vd24+KSB7XG4gICAgbGV0IG1vZHVsZVJlZjogTmdNb2R1bGVSZWY8dW5rbm93bj47XG4gICAgaWYgKHJlbW90ZU5nTW9kdWxlIGluc3RhbmNlb2YgTmdNb2R1bGVSZWYpIHtcbiAgICAgIC8vIEFPVFxuICAgICAgbW9kdWxlUmVmID0gcmVtb3RlTmdNb2R1bGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEpJVFxuICAgICAgbW9kdWxlUmVmID0gY3JlYXRlTmdNb2R1bGVSZWYocmVtb3RlTmdNb2R1bGUsIHRoaXMuaW5qZWN0b3IpO1xuICAgIH1cbiAgICB0aGlzLnJlc29sdmVSb3V0ZXJGb3JDaGlsZFJvdXRlcyhtb2R1bGVSZWYsIHJlbW90ZU5nTW9kdWxlKTtcbiAgICB0aGlzLmFkZEluamVjdG9yVG9BbGxIb29rcyhtb2R1bGVSZWYpO1xuICAgIHJldHVybiBtb2R1bGVSZWY7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCByZWZyZXNoIGFsbCBjdXJyZW50IHJlZ2lzdGVyZWQgaG9va3NcbiAgICogQHBhcmFtIGFsbEhvb2tzIElmIHNldCB0byB0cnVlLCBhbGwgaG9va3Mgd2lsbCBiZSByZWZyZXNoZWQuIERlZmF1bHRzIHRvIGZhbHNlLCB3aGljaCB3aWxsIG9ubHlcbiAgICogcmVmcmVzaCBzdWNoIGhvb2tzLCB0aGF0IHBvc3NpYmxlIGhhcyBhIHJlbW90ZSBwbHVnaW4gYXNzaWduZWQuXG4gICAqL1xuICByZWZyZXNoSG9va3MoYWxsSG9va3MgPSBmYWxzZSkge1xuICAgIHRoaXMuYWxsSG9va3MuZm9yRWFjaChob29rID0+IHtcbiAgICAgIGlmIChhbGxIb29rcyB8fCBob29rLnNlcnZpY2UuaW5qZWN0b3JzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaG9vay5zZXJ2aWNlLnJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG1hcmtQbHVnaW5zQXNMb2FkZWQoKSB7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50Lm1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIGxpc3Qgb2YgcmVtb3RlcyBzbyB0aGF0IGEgcGFydGljdWxhciBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoZW0uXG4gICAqIFRoZSByZXF1ZXN0IGlzIG1hZGUgdG8gdGhlIGZvbGxvd2luZyBhZGRyZXNzOiAvYXBwcy88Y29udGV4dFBhdGg+L3JlbW90ZUVudHJ5LmpzXG4gICAqIEBwYXJhbSByZW1vdGVzIExpc3Qgb2YgcmVtb3RlcyB0byBiZSBsb2FkZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxpc3Qgb2YgbG9hZGVkIG1vZHVsZXMgZnJvbSByZW1vdGVzLlxuICAgKi9cbiAgYXN5bmMgbG9hZFJlbW90ZXMocmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zKSB7XG4gICAgaWYgKCFyZW1vdGVzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHJlbW90ZU1vZHVsZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBsdWdpbklkIGluIHJlbW90ZXMpIHtcbiAgICAgIGlmIChyZW1vdGVzLmhhc093blByb3BlcnR5KHBsdWdpbklkKSkge1xuICAgICAgICBjb25zdCBtb2R1bGVOYW1lcyA9IHJlbW90ZXNbcGx1Z2luSWRdO1xuICAgICAgICBjb25zdCB1cmwgPSBgL2FwcHMvJHtwbHVnaW5JZH0vcmVtb3RlRW50cnkuanM/bm9jYWNoZT0ke2RhdGUuZ2V0VGltZSgpfWA7XG4gICAgICAgIGxldCBhdExlYXN0T25lTW9kdWxlTG9hZGVkU3VjY2Vzc2Z1bGx5ID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlTmFtZSBvZiBtb2R1bGVOYW1lcykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZW1vdGVNb2R1bGVzLnB1c2goYXdhaXQgdGhpcy5sb2FkUmVtb3RlTW9kdWxlKHVybCwgcGx1Z2luSWQsIG1vZHVsZU5hbWUpKTtcbiAgICAgICAgICAgIGF0TGVhc3RPbmVNb2R1bGVMb2FkZWRTdWNjZXNzZnVsbHkgPSB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYENvdWxkIG5vdCBsb2FkIHJlbW90ZSBtb2R1bGUgJyR7bW9kdWxlTmFtZX0nIGZyb20gdXJsOmAsIHVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gbmVlZCB0byBsb2FkIHRyYW5zbGF0aW9ucyBpZiB3ZSB3ZXJlIHVuYWJsZSB0byBsb2FkIGEgc2luZ2xlIG1vZHVsZS4uXG4gICAgICAgIGlmIChhdExlYXN0T25lTW9kdWxlTG9hZGVkU3VjY2Vzc2Z1bGx5KSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUmVtb3RlVHJhbnNsYXRpb25zKHBsdWdpbklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVtb3RlTW9kdWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhIGxpc3Qgb2YgcmVtb3RlcyBhbmQgdHVybnMgaXQgaW50byBhbiBvYmplY3QgY29udGFpbmluZyB1bmlvbiBvZiBjb3JyZXNwb25kaW5nIHJlbW90ZXMuXG4gICAqIEBwYXJhbSBtZlJlbW90ZXMgTGlzdCBvZiB0aGUgcmVtb3Rlcy5cbiAgICogQHJldHVybnMgUmV0dXJucyBvYmplY3Qgd2l0aCBtZXJnZWQgcmVtb3Rlcy5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZW1vdGVzQTpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJywgJ21vZHVsZUInXSB9O1xuICAgKiBjb25zdCByZW1vdGVzQjpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJ10sIGNvbnRleHRQYXRoQjogWydtb2R1bGVaJ10gfTtcbiAgICogY29uc3QgbWVyZ2VkUmVtb3RlczpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBtZXJnZU1GUmVtb3RlcyhbcmVtb3Rlc0EsIHJlbW90ZXNCXSk7XG4gICAqIC8vIFJlc3VsdFxuICAgKiB7XG4gICAqICBjb250ZXh0UGF0aEE6IFsnbW9kdWxlQScsICdtb2R1bGVCJ10sXG4gICAqICBjb250ZXh0UGF0aEI6IFsnbW9kdWxlWiddXG4gICAqIH1cbiAgICpcbiAgICogYGBgXG4gICAqL1xuICBtZXJnZU1GUmVtb3RlcyhtZlJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1tdKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgbWZSZW1vdGVzLFxuICAgICAgKGFsbFJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucywgbWZSZW1vdGU6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucykgPT4ge1xuICAgICAgICBmb3JFYWNoKG1mUmVtb3RlLCAocmVtb3RlTW9kdWxlczogc3RyaW5nW10sIHJlbW90ZUNvbnRleHRQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UmVtb3RlcyA9IGdldChhbGxSZW1vdGVzLCByZW1vdGVDb250ZXh0UGF0aCwgW10pO1xuICAgICAgICAgIGFsbFJlbW90ZXNbcmVtb3RlQ29udGV4dFBhdGhdID0gdW5pb24oY3VycmVudFJlbW90ZXMsIHJlbW90ZU1vZHVsZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYWxsUmVtb3RlcztcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIFVSTCByZW1vdGVzIGNhY2hlLlxuICAgKi9cbiAgY2xlYXJVUkxSZW1vdGVzQ2FjaGUoKSB7XG4gICAgdGhpcy51cmxSZW1vdGVzQ2FjaGUgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVtb3RlcyBsaXN0IGZyb20gdGhlIFVSTC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgbGlzdCBvZiByZW1vdGVzLlxuICAgKi9cbiAgbG9hZFVybFJlbW90ZXMoKSB7XG4gICAgaWYgKCF0aGlzLnVybFJlbW90ZXNDYWNoZSkge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgIGNvbnN0IHJlbW90ZXMgPSBwYXJhbXMuZ2V0KCdyZW1vdGVzJyk7XG4gICAgICBpZiAocmVtb3Rlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMudXJsUmVtb3Rlc0NhY2hlID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQocmVtb3RlcykpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIHBhcnNlIHJlbW90ZXM6ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsUmVtb3Rlc0NhY2hlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUmVtb3RlVHJhbnNsYXRpb25zKHBsdWdpbklkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBsYW5nIH0gPSB0aGlzLmFwcFN0YXRlLnN0YXRlO1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmV0Y2hDbGllbnQuZmV0Y2goYC9hcHBzLyR7cGx1Z2luSWR9LyR7bGFuZ30uanNvbmApO1xuICAgICAgaWYgKHJlc3Auc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3AuanNvbigpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0VHJhbnNsYXRpb24obGFuZywgcmVzdWx0W2xhbmddLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9hZCB0cmFuc2xhdGlvbnMgZm9yICR7cGx1Z2luSWR9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRJbmplY3RvclRvQWxsSG9va3MobW9kdWxlUmVmOiBOZ01vZHVsZVJlZjx1bmtub3duPikge1xuICAgIHRoaXMuYWxsSG9va3MuZm9yRWFjaChob29rID0+IHtcbiAgICAgIGhvb2suc2VydmljZS5pbmplY3RvcnMucHVzaChtb2R1bGVSZWYuaW5qZWN0b3IpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUm91dGVyRm9yQ2hpbGRSb3V0ZXMobW9kdWxlUmVmOiBOZ01vZHVsZVJlZjx1bmtub3duPiwgcmVtb3RlTmdNb2R1bGU6IGFueSkge1xuICAgIC8vIE5PVEU6IHN0b2xlbiBmcm9tIGxhenkgbG9hZGVkIHJvdXRlcyBmcm9tIEFuZ3VsYXIgaXRzZWxmLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9kYTU4ODAxZjk1YzY2YzIwMWUzMzIxODlhZjI1NzAyYmRkNzIyZjNmL3BhY2thZ2VzL3JvdXRlci9zcmMvcm91dGVyX2NvbmZpZ19sb2FkZXIudHMjTDEwMy1MMTA4XG4gICAgY29uc3QgcmF3Um91dGVzID0gZmxhdHRlbihcbiAgICAgIG1vZHVsZVJlZi5pbmplY3Rvci5nZXQoUk9VVEVTLCBbXSwgSW5qZWN0RmxhZ3MuU2VsZiB8IEluamVjdEZsYWdzLk9wdGlvbmFsKVxuICAgICk7XG5cbiAgICBpZiAocmF3Um91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJvdXRlV2l0aEluamVjdG9yID0gcmF3Um91dGVzLm1hcChyb3V0ZSA9PiB7XG4gICAgICAgIHJvdXRlLnByb3ZpZGVycyA9IFtpbXBvcnRQcm92aWRlcnNGcm9tKHJlbW90ZU5nTW9kdWxlKV07XG4gICAgICAgIHJldHVybiByb3V0ZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jOHlSb3V0ZXIuYWRkUm91dGUocm91dGVXaXRoSW5qZWN0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZU1vZHVsZShcbiAgICByZW1vdGVFbnRyeVVybDogc3RyaW5nLFxuICAgIHJlbW90ZUNvbnRleHRQYXRoOiBzdHJpbmcsXG4gICAgZXhwb3NlZE1vZHVsZTogc3RyaW5nXG4gICk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGZhY3Rvcnk6IEZhY3RvcnkgfT4ge1xuICAgIGlmICghdGhpcy5yZW1vdGVTY3JpcHRTZXQuaGFzKHJlbW90ZUVudHJ5VXJsKSkge1xuICAgICAgdGhpcy5yZW1vdGVTY3JpcHRTZXQuYWRkKHJlbW90ZUVudHJ5VXJsKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFJlbW90ZUVudHJ5KHJlbW90ZUVudHJ5VXJsKTtcbiAgICB9XG4gICAgbGV0IGNvbnRleHRQYXRoOiBzdHJpbmcgPSByZW1vdGVDb250ZXh0UGF0aDtcbiAgICBpZiAoY29udGV4dFBhdGguaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgY29udGV4dFBhdGggPSByZW1vdGVDb250ZXh0UGF0aC5zcGxpdCgnQCcpWzBdO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5sb29rdXBFeHBvc2VkTW9kdWxlKGNhbWVsQ2FzZShjb250ZXh0UGF0aCksIGV4cG9zZWRNb2R1bGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUmVtb3RlRW50cnkocmVtb3RlRW50cnlVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdC5zcmMgPSByZW1vdGVFbnRyeVVybDtcblxuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSByZWplY3Q7XG5cbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTsgLy8gd2luZG93IGlzIHRoZSBnbG9iYWwgbmFtZXNwYWNlXG4gICAgICB9O1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChzY3JpcHQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb29rdXBFeHBvc2VkTW9kdWxlKFxuICAgIHJlbW90ZU5hbWU6IHN0cmluZyxcbiAgICBleHBvc2VkTW9kdWxlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgZmFjdG9yeTogRmFjdG9yeSB9PiB7XG4gICAgLy8gSW5pdGlhbGl6ZXMgdGhlIHNoYXJlIHNjb3BlLiBUaGlzIGZpbGxzIGl0IHdpdGgga25vd24gcHJvdmlkZWQgbW9kdWxlcyBmcm9tIHRoaXMgYnVpbGQgYW5kIGFsbCByZW1vdGVzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IF9fd2VicGFja19pbml0X3NoYXJpbmdfXygnZGVmYXVsdCcpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgTW9kdWxlICR7ZXhwb3NlZE1vZHVsZX0gY291bGQgbm90IGJlIGxvYWRlZC4gTW9kdWxlIEZlZGVyYXRpb24gaXMgbm90IGVuYWJsZWQgaW4gdGhpcyBhcHBsaWNhdGlvbi5gLFxuICAgICAgICBleFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyID0gd2luZG93W3JlbW90ZU5hbWVdIGFzIENvbnRhaW5lcjtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbnRhaW5lciwgaXQgbWF5IHByb3ZpZGUgc2hhcmVkIG1vZHVsZXNcbiAgICBsZXQgZmFjdG9yeTogRmFjdG9yeTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29udGFpbmVyLmluaXQoX193ZWJwYWNrX3NoYXJlX3Njb3Blc19fLmRlZmF1bHQpO1xuICAgICAgZmFjdG9yeSA9IChhd2FpdCBjb250YWluZXIuZ2V0KGV4cG9zZWRNb2R1bGUpKSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNb2R1bGUgJHtleHBvc2VkTW9kdWxlfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbmFtZTogZXhwb3NlZE1vZHVsZSwgZmFjdG9yeSB9O1xuICB9XG59XG4iXX0=
@@ -655,7 +655,7 @@ class AppStateService extends StateService {
655
655
  this.currentUser = new BehaviorSubject(null);
656
656
  this.currentTenant = new BehaviorSubject(null);
657
657
  this.currentApplication = new BehaviorSubject(null);
658
- this.currentApplicationConfig = this.currentApplication.pipe(map(app => (app === null || app === void 0 ? void 0 : app.config) || null));
658
+ this.currentApplicationConfig = this.currentApplication.pipe(filter(app => !!app), map(app => (app === null || app === void 0 ? void 0 : app.config) || null));
659
659
  this.apiService.calls
660
660
  .pipe(filter(({ url }) => !/notification\/realtime/.test(url)), map(({ phase }) => (phase === 'start' ? 1 : -1)), scan((count, item) => count + item, 0), map(count => count > 0), distinctUntilChanged())
661
661
  .subscribe(isLoading => (this.state.isLoading = isLoading));
@@ -697,6 +697,7 @@ class AppStateService extends StateService {
697
697
  yield this.loadDefaultOptions();
698
698
  }
699
699
  catch (ex) {
700
+ this.currentApplication.next({});
700
701
  throw ex;
701
702
  }
702
703
  });
@@ -9830,11 +9831,13 @@ class DynamicComponentService extends StateService {
9830
9831
  */
9831
9832
  this.factories = [];
9832
9833
  this.injectors = [this.rootInjector];
9834
+ this.remotePluginsLoaded$ = new BehaviorSubject(false);
9835
+ const remotesLoaded$ = this.remotePluginsLoaded$.pipe(filter(loaded => !!loaded), take(1));
9833
9836
  this.items$ = fromTriggerOnce(router, this.refreshTrigger, [
9834
9837
  getInjectedHooks(HOOK_COMPONENTS, this.injectors),
9835
9838
  () => this.factories,
9836
9839
  stateToFactory(this.state$)
9837
- ]).pipe(distinctUntilChanged(), takeUntil(timer(waitTimeout || this.DEFAULT_WAIT_TIMEOUT)), shareReplay(1));
9840
+ ]).pipe(distinctUntilChanged(), takeUntil(combineLatest([timer(waitTimeout || this.DEFAULT_WAIT_TIMEOUT), remotesLoaded$])), shareReplay(1));
9838
9841
  }
9839
9842
  refresh() {
9840
9843
  this.refreshTrigger.next(1);
@@ -9875,6 +9878,9 @@ class DynamicComponentService extends StateService {
9875
9878
  return this.dynamicResolver.serialize(componentIdAndConfig, dynamicDef);
9876
9879
  });
9877
9880
  }
9881
+ markPluginsAsLoaded() {
9882
+ this.remotePluginsLoaded$.next(true);
9883
+ }
9878
9884
  }
9879
9885
  DynamicComponentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DynamicComponentService, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: RESOLVING_COMPONENT_WAIT_TIME, optional: true }, { token: DynamicResolverService }], target: i0.ɵɵFactoryTarget.Injectable });
9880
9886
  DynamicComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DynamicComponentService, providedIn: 'root' });
@@ -10178,6 +10184,7 @@ class PluginsResolveService {
10178
10184
  .map(({ name, factory }) => factory[name]);
10179
10185
  this.loadModulesDynamically(remoteNgModules);
10180
10186
  this.refreshHooks();
10187
+ this.markPluginsAsLoaded();
10181
10188
  }
10182
10189
  /**
10183
10190
  * Loads modules and handles hooking correctly.
@@ -10214,6 +10221,9 @@ class PluginsResolveService {
10214
10221
  }
10215
10222
  });
10216
10223
  }
10224
+ markPluginsAsLoaded() {
10225
+ this.dynamicComponent.markPluginsAsLoaded();
10226
+ }
10217
10227
  /**
10218
10228
  * Loads a list of remotes so that a particular application can use them.
10219
10229
  * The request is made to the following address: /apps/<contextPath>/remoteEntry.js
@@ -10231,15 +10241,20 @@ class PluginsResolveService {
10231
10241
  if (remotes.hasOwnProperty(pluginId)) {
10232
10242
  const moduleNames = remotes[pluginId];
10233
10243
  const url = `/apps/${pluginId}/remoteEntry.js?nocache=${date.getTime()}`;
10244
+ let atLeastOneModuleLoadedSuccessfully = false;
10234
10245
  for (const moduleName of moduleNames) {
10235
10246
  try {
10236
10247
  remoteModules.push(yield this.loadRemoteModule(url, pluginId, moduleName));
10248
+ atLeastOneModuleLoadedSuccessfully = true;
10237
10249
  }
10238
10250
  catch (ex) {
10239
10251
  console.warn(`Could not load remote module '${moduleName}' from url:`, url);
10240
10252
  }
10241
10253
  }
10242
- yield this.loadRemoteTranslations(pluginId);
10254
+ // no need to load translations if we were unable to load a single module..
10255
+ if (atLeastOneModuleLoadedSuccessfully) {
10256
+ yield this.loadRemoteTranslations(pluginId);
10257
+ }
10243
10258
  }
10244
10259
  }
10245
10260
  return remoteModules;
@@ -16535,6 +16550,7 @@ class BootstrapComponent {
16535
16550
  loadRemotes(remotes) {
16536
16551
  return __awaiter(this, void 0, void 0, function* () {
16537
16552
  if (!remotes) {
16553
+ this.ensureWeMarkPluginsAsLoaded();
16538
16554
  return;
16539
16555
  }
16540
16556
  const remoteModules = yield this.pluginsResolve.loadRemotes(remotes);
@@ -16547,12 +16563,17 @@ class BootstrapComponent {
16547
16563
  }
16548
16564
  subscribeToLoadRemotes() {
16549
16565
  if (this.options.get('noPlugins', false)) {
16566
+ this.ensureWeMarkPluginsAsLoaded();
16550
16567
  return;
16551
16568
  }
16552
16569
  this.ui.currentApplicationConfig
16553
16570
  .pipe(takeUntil(this.destroy$))
16554
16571
  .subscribe((config) => this.loadRemotes(this.getRemotes(config)));
16555
16572
  }
16573
+ ensureWeMarkPluginsAsLoaded() {
16574
+ // ensure we call markPluginsAsLoaded on the DynamicComponentService
16575
+ this.pluginsResolve.markPluginsAsLoaded();
16576
+ }
16556
16577
  }
16557
16578
  BootstrapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: BootstrapComponent, deps: [{ token: TabsService }, { token: AppStateService }, { token: NavigatorService }, { token: ActionBarService }, { token: HeaderService }, { token: OptionsService }, { token: PluginsResolveService }, { token: SetupService }], target: i0.ɵɵFactoryTarget.Component });
16558
16579
  BootstrapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: BootstrapComponent, selector: "c8y-bootstrap", ngImport: i0, template: "<c8y-login *ngIf=\"!noLogin && !(ui.currentUser | async)\"></c8y-login>\n\n<div\n *ngIf=\"noLogin || ((ui.currentUser | async) && !(setupService.isSetupNeeded$ | async))\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar #header></c8y-header-bar>\n <c8y-navigator-outlet\n [nodes]=\"navigator.items$ | async\"\n [open]=\"headerService.navigatorOpen$ | async\"\n role=\"region\"\n title=\"{{ 'Navigator menu' | translate }}\"\n >\n <header class=\"title navigator-slot-top\">\n <div class=\"tenant-brand\"></div>\n <c8y-app-icon\n [name]=\"(ui.state$ | async).app.name\"\n [contextPath]=\"(ui.state$ | async).app.contextPath\"\n ></c8y-app-icon>\n <span>{{ (ui.state$ | async).app | humanizeAppName | async }}</span>\n </header>\n <div class=\"powered-by navigator-slot-bottom\" *ngIf=\"showPoweredBy\">\n <p translate>powered by Cumulocity</p>\n </div>\n </c8y-navigator-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n class=\"mcontainer\"\n [ngClass]=\"{\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"(ui.currentUser | async) && (setupService.isSetupNeeded$ | async)\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n", dependencies: [{ kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i1$5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: HeaderBarComponent, selector: "c8y-header-bar", inputs: ["simple"] }, { kind: "component", type: AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "component", type: LoginComponent, selector: "c8y-login", inputs: ["name"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen"] }, { kind: "component", type: ActionBarComponent, selector: "c8y-action-bar", inputs: ["navigatorOpen", "hasTabs", "isTabsHorizontal", "items$"] }, { kind: "component", type: AlertOutletComponent, selector: "c8y-alert-outlet" }, { kind: "component", type: NavigatorOutletComponent, selector: "c8y-navigator-outlet, c8y-ui-navigator", inputs: ["nodes", "open"] }, { kind: "component", type: SetupComponent, selector: "c8y-setup" }, { kind: "component", type: CookieBannerComponent, selector: "c8y-cookie-banner" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i1$5.AsyncPipe, name: "async" }, { kind: "pipe", type: HumanizeAppNamePipe, name: "humanizeAppName" }] });