@c8y/ngx-components 1018.0.215 → 1018.0.222

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.
Files changed (40) hide show
  1. package/assets-navigator/asset-node.service.d.ts +5 -2
  2. package/ecosystem/application-plugins/plugin-list.component.d.ts +1 -0
  3. package/esm2020/assets-navigator/asset-node.mjs +7 -2
  4. package/esm2020/assets-navigator/asset-node.service.mjs +14 -5
  5. package/esm2020/core/header/title/title-outlet.component.mjs +3 -3
  6. package/esm2020/device-grid/columns/registration-date.device-grid-column.mjs +4 -10
  7. package/esm2020/ecosystem/application-plugins/application-plugins.component.mjs +34 -13
  8. package/esm2020/ecosystem/application-plugins/plugin-list.component.mjs +27 -13
  9. package/esm2020/ecosystem/packages/deploy-application/deploy-application.component.mjs +14 -3
  10. package/esm2020/repository/shared/repository.service.mjs +4 -4
  11. package/esm2020/services/services-device-tab/columns/last-updated-date.device-grid-column.mjs +4 -10
  12. package/fesm2015/c8y-ngx-components-assets-navigator.mjs +24 -12
  13. package/fesm2015/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  14. package/fesm2015/c8y-ngx-components-device-grid.mjs +3 -9
  15. package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
  16. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +44 -25
  17. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  18. package/fesm2015/c8y-ngx-components-ecosystem.mjs +55 -32
  19. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  20. package/fesm2015/c8y-ngx-components-repository-shared.mjs +3 -3
  21. package/fesm2015/c8y-ngx-components-repository-shared.mjs.map +1 -1
  22. package/fesm2015/c8y-ngx-components-services.mjs +3 -9
  23. package/fesm2015/c8y-ngx-components-services.mjs.map +1 -1
  24. package/fesm2015/c8y-ngx-components.mjs +2 -2
  25. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  26. package/fesm2020/c8y-ngx-components-assets-navigator.mjs +24 -12
  27. package/fesm2020/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  28. package/fesm2020/c8y-ngx-components-device-grid.mjs +3 -9
  29. package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
  30. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +58 -25
  31. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  32. package/fesm2020/c8y-ngx-components-ecosystem.mjs +70 -27
  33. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  34. package/fesm2020/c8y-ngx-components-repository-shared.mjs +3 -3
  35. package/fesm2020/c8y-ngx-components-repository-shared.mjs.map +1 -1
  36. package/fesm2020/c8y-ngx-components-services.mjs +3 -9
  37. package/fesm2020/c8y-ngx-components-services.mjs.map +1 -1
  38. package/fesm2020/c8y-ngx-components.mjs +2 -2
  39. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  40. package/package.json +1 -1
@@ -5,6 +5,7 @@ import { AssetNode } from './asset-node';
5
5
  import { AssetNavigatorConfig } from './asset-node-config.model';
6
6
  import { DynamicGroupNode } from './dynamic-group-node';
7
7
  import { DeviceGroupService } from './group.service';
8
+ import { TranslateService } from '@ngx-translate/core';
8
9
  import * as i0 from "@angular/core";
9
10
  export interface AssetNodeMo {
10
11
  id: string;
@@ -21,12 +22,14 @@ export declare class AssetNodeService {
21
22
  protected optionsService: OptionsService;
22
23
  moduleConfig: AssetNavigatorConfig;
23
24
  protected deviceGroupService: DeviceGroupService;
25
+ protected translateService: TranslateService;
24
26
  rootNode: AssetNode;
25
27
  firstUrl: boolean;
26
28
  draggedData: AssetNode;
27
29
  queriesUtil: QueriesUtil;
28
30
  protected PAGE_SIZE: number;
29
- constructor(inventory: InventoryService, apiService: ApiService, modal: ModalService, alert: AlertService, breadcrumbService: BreadcrumbService, user: UserService, appState: AppStateService, optionsService: OptionsService, moduleConfig: AssetNavigatorConfig, deviceGroupService: DeviceGroupService);
31
+ constructor(inventory: InventoryService, apiService: ApiService, modal: ModalService, alert: AlertService, breadcrumbService: BreadcrumbService, user: UserService, appState: AppStateService, optionsService: OptionsService, moduleConfig: AssetNavigatorConfig, deviceGroupService: DeviceGroupService, translateService: TranslateService);
32
+ label(mo: IManagedObject): string;
30
33
  icon(mo: IManagedObject, open?: boolean): Promise<string>;
31
34
  isGroup(mo: IManagedObject): boolean;
32
35
  isDynamicGroup(mo: IManagedObject): boolean;
@@ -95,6 +98,6 @@ export declare class AssetNodeService {
95
98
  preferBreadcrumb(parents: NavigatorNode[]): void;
96
99
  protected createFilter(extraParams?: any): any;
97
100
  private buildCombinedQuery;
98
- static ɵfac: i0.ɵɵFactoryDeclaration<AssetNodeService, [null, null, null, null, null, null, null, null, { optional: true; }, null]>;
101
+ static ɵfac: i0.ɵɵFactoryDeclaration<AssetNodeService, [null, null, null, null, null, null, null, null, { optional: true; }, null, null]>;
99
102
  static ɵprov: i0.ɵɵInjectableDeclaration<AssetNodeService>;
100
103
  }
@@ -35,6 +35,7 @@ export declare class PluginListComponent {
35
35
  installPlugin(plugin: ApplicationPlugin): Promise<void>;
36
36
  uninstallPlugin(plugin: ApplicationPlugin): Promise<void>;
37
37
  private updateAppRemotes;
38
+ private onUpdateEventHandleGS;
38
39
  private getAppsForUpdate;
39
40
  private isPluginInstalledInApp;
40
41
  private getPluginContextPathWithoutVersion;
@@ -88,7 +88,12 @@ export class AssetNode extends NavigatorNode {
88
88
  }
89
89
  }
90
90
  setLabel() {
91
- this.label = this.config.label || (this.root && gettext('Groups')) || this.mo.name || '--';
91
+ if (this.config.label || this.root) {
92
+ this.label = this.config.label || gettext('Groups');
93
+ }
94
+ else {
95
+ this.label = this.service.label(this.mo);
96
+ }
92
97
  }
93
98
  click(options = {}) {
94
99
  if (this.isDeviceOrProbablyChildDevice && !this.showChildDevices) {
@@ -331,4 +336,4 @@ export class AssetNode extends NavigatorNode {
331
336
  }
332
337
  }
333
338
  AssetNode.NAME = 'AssetNode';
334
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2Fzc2V0cy1uYXZpZ2F0b3IvYXNzZXQtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxhQUFhLEVBQ2IsYUFBYSxFQUVkLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE1BQU0sT0FBTyxTQUFVLFNBQVEsYUFBYTtJQXdDMUMsWUFBc0IsT0FBeUIsRUFBWSxTQUE0QixFQUFFO1FBQ3ZGLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQURNLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVksV0FBTSxHQUFOLE1BQU0sQ0FBd0I7UUFwQ3pGLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0MscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpCOztXQUVHO1FBQ0gsYUFBUSxHQUFnQixFQUFFLENBQUM7UUF3QjNCLGlCQUFZLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFRekMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1FB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akQsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBc0IsRUFBRTtZQUN0RCxJQUFJLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLGdCQUFnQixFQUFFO2dCQUNsRSxNQUFNLENBQUMsd0NBQXdDO2FBQ2hEO1lBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDNUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7b0JBQ2xDLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3BCLElBQUksRUFBRSxhQUFhLENBQUMsWUFBWTtpQkFDakMsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtnQkFDaEIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMxRTtZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7UUFDakMsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQy9DLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQzs7QUEzWE0sY0FBSSxHQUFHLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElJZGVudGlmaWVkLCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBDbGlja09wdGlvbnMsXG4gIERldmljZVN0YXR1c0NvbXBvbmVudCxcbiAgZ2V0dGV4dCxcbiAgR3JvdXBGcmFnbWVudCxcbiAgTmF2aWdhdG9yTm9kZSxcbiAgTmF2aWdhdG9yTm9kZURhdGFcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBkZWJvdW5jZSwgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuL2FjdGlvbi5lbnVtJztcbmltcG9ydCB7IEFzc2V0Tm9kZU1vLCBBc3NldE5vZGVTZXJ2aWNlIH0gZnJvbSAnLi9hc3NldC1ub2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9hZE1vcmVOb2RlIH0gZnJvbSAnLi9sb2FkLW1vcmUtbm9kZSc7XG5cbmV4cG9ydCBjbGFzcyBBc3NldE5vZGUgZXh0ZW5kcyBOYXZpZ2F0b3JOb2RlIHtcbiAgc3RhdGljIE5BTUUgPSAnQXNzZXROb2RlJztcbiAgcm9vdDogYm9vbGVhbjtcbiAgbW86IGFueTtcbiAgaGlkZURldmljZXMgPSBmYWxzZTtcbiAgZmlsdGVyUXVlcnkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgc2hvd0NoaWxkRGV2aWNlcyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBc3NldCBub2RlIGNoaWxkcmVuIChzdWJlbnRyaWVzKS5cbiAgICovXG4gIGNoaWxkcmVuOiBBc3NldE5vZGVbXSA9IFtdO1xuXG4gIGdldCBoYXNDaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdGhpcy5yb290IHx8IHRoaXMuc2VydmljZS5pc0dyb3VwKHRoaXMubW8pO1xuICB9XG5cbiAgZ2V0IGlzRGV2aWNlKCkge1xuICAgIHJldHVybiAhIXRoaXMubW8uYzh5X0lzRGV2aWNlO1xuICB9XG5cbiAgZ2V0IGlzRGV2aWNlT3JQcm9iYWJseUNoaWxkRGV2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGV2aWNlIHx8IHRoaXMuaXNOZWl0aGVyRGV2aWNlT3JHcm91cDtcbiAgfVxuXG4gIGdldCBpc05laXRoZXJEZXZpY2VPckdyb3VwKCkge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5zZXJ2aWNlLmlzR3JvdXAodGhpcy5tbykgJiZcbiAgICAgICF0aGlzLnNlcnZpY2UuaXNEeW5hbWljR3JvdXAodGhpcy5tbykgJiZcbiAgICAgICF0aGlzLmlzRGV2aWNlICYmXG4gICAgICAhdGhpcy5yb290XG4gICAgKTtcbiAgfVxuXG4gIGV2ZW50czogU3ViamVjdDxBY3Rpb24+O1xuICBub2Rlc0ZldGNoZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByb3RlY3RlZCBwYWdpbmc6IFBhZ2luZzxBc3NldE5vZGVNbz47XG4gIHByb3RlY3RlZCBsb2FkTW9yZU5vZGU6IExvYWRNb3JlTm9kZTtcbiAgcHJpdmF0ZSBvblVwZGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzZXJ2aWNlOiBBc3NldE5vZGVTZXJ2aWNlLCBwcm90ZWN0ZWQgY29uZmlnOiBOYXZpZ2F0b3JOb2RlRGF0YSA9IHt9KSB7XG4gICAgc3VwZXIoY29uZmlnKTtcblxuICAgIHRoaXMucm9vdCA9IHRoaXMucm9vdCB8fCBmYWxzZTtcbiAgICB0aGlzLmhpZGVEZXZpY2VzID0gY29uZmlnLmhpZGVEZXZpY2VzID8/IHRoaXMuaGlkZURldmljZXM7XG4gICAgdGhpcy5tbyA9IHRoaXMubW8gfHwge307XG4gICAgdGhpcy5wYXRoID0gdGhpcy5nZXRQYXRoKCk7XG4gICAgdGhpcy5kcmFnZ2FibGUgPSAhdGhpcy5zZXJ2aWNlPy5tb2R1bGVDb25maWc/LmRpc2FibGVEcmFnQW5kRHJvcCAmJiAhdGhpcy5yb290O1xuICAgIHRoaXMuZHJvcHBhYmxlID1cbiAgICAgICF0aGlzLnNlcnZpY2U/Lm1vZHVsZUNvbmZpZz8uZGlzYWJsZURyYWdBbmREcm9wICYmICF0aGlzLmlzRGV2aWNlT3JQcm9iYWJseUNoaWxkRGV2aWNlO1xuICAgIHRoaXMucm91dGVyTGlua0V4YWN0ID0gdGhpcy5yb290O1xuICAgIHRoaXMudXBkYXRlSWNvbihmYWxzZSk7XG4gICAgdGhpcy5vblVwZGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZVxuICAgICAgLm9uVXBkYXRlKHRoaXMpXG4gICAgICAuc3Vic2NyaWJlKCh7IGRhdGEsIG1ldGhvZCB9KSA9PiB0aGlzLnJlZnJlc2goZGF0YSwgbWV0aG9kKSk7XG4gICAgdGhpcy5zZXRMYWJlbCgpO1xuICAgIHRoaXMuaWNvbkNvbXBvbmVudCA9IHRoaXMuaXNEZXZpY2VPclByb2JhYmx5Q2hpbGREZXZpY2UgPyBEZXZpY2VTdGF0dXNDb21wb25lbnQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQYXRoKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5wYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcucGF0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yb290XG4gICAgICA/ICdncm91cCdcbiAgICAgIDogdGhpcy5pc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZVxuICAgICAgPyBgZGV2aWNlLyR7dGhpcy5tby5pZH1gXG4gICAgICA6IGBncm91cC8ke3RoaXMubW8uaWR9YDtcbiAgfVxuXG4gIG9wZW5PblN0YXJ0KHVybCkge1xuICAgIGNvbnN0IHVybFJlZ2V4ID0gL15cXC9ncm91cFxcLy87XG4gICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgaWYgKHRoaXMuc2VydmljZS5tb2R1bGVDb25maWcub3Blbk9uU3RhcnQgfHwgdXJsUmVnZXgudGVzdCh1cmwpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKC9cXC8oZ3JvdXApXFwvKFxcZCspLyk7XG4gICAgbGV0IGlzTWF0Y2ggPSBmYWxzZTtcbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgY29uc3QgaWQgPSBtYXRjaGVzWzJdO1xuICAgICAgaXNNYXRjaCA9IFtdXG4gICAgICAgIC5jb25jYXQoZ2V0KHRoaXMubW8sICdjaGlsZEFzc2V0cy5yZWZlcmVuY2VzJywgW10pKVxuICAgICAgICAuc29tZSgoeyBtYW5hZ2VkT2JqZWN0IH0pID0+IG1hbmFnZWRPYmplY3QuaWQgPT09IGlkKTtcbiAgICAgIHJldHVybiBpc01hdGNoO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZWZyZXNoKG1vOiBhbnkgPSB7fSwgbWV0aG9kID0gJ0dFVCcpIHtcbiAgICBpZiAobW8/LmlkID09PSB0aGlzLm1vLmlkKSB7XG4gICAgICB0aGlzLm1vID0gbW87XG4gICAgICB0aGlzLnNldExhYmVsKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdERUxFVEUnKSB7XG4gICAgICB0aGlzLnBhcmVudHMuZm9yRWFjaCgobm9kZTogQXNzZXROb2RlKSA9PiBub2RlLnJlZnJlc2goKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmV2ZW50cykge1xuICAgICAgdGhpcy5ldmVudHMubmV4dChBY3Rpb24uUkVGUkVTSCk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGFiZWwoKSB7XG4gICAgdGhpcy5sYWJlbCA9IHRoaXMuY29uZmlnLmxhYmVsIHx8ICh0aGlzLnJvb3QgJiYgZ2V0dGV4dCgnR3JvdXBzJykpIHx8IHRoaXMubW8ubmFtZSB8fCAnLS0nO1xuICB9XG5cbiAgY2xpY2sob3B0aW9uczogQ2xpY2tPcHRpb25zID0ge30pIHtcbiAgICBpZiAodGhpcy5pc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZSAmJiAhdGhpcy5zaG93Q2hpbGREZXZpY2VzKSB7XG4gICAgICB0aGlzLnNlcnZpY2UucHJlZmVyQnJlYWRjcnVtYih0aGlzLnBhcmVudHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhvb2tFdmVudHMoKTtcbiAgICB0aGlzLnVwZGF0ZUljb24ob3B0aW9ucy5vcGVuKTtcbiAgICBpZiAob3B0aW9ucy5vcGVuKSB7XG4gICAgICB0aGlzLmV2ZW50cy5uZXh0KEFjdGlvbi5GRVRDSCk7XG4gICAgfVxuICB9XG5cbiAgc29ydCgpIHtcbiAgICB0aGlzLmNoaWxkcmVuLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChhLnByaW9yaXR5ID4gYi5wcmlvcml0eSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGEucHJpb3JpdHkgPCBiLnByaW9yaXR5KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhZGRNYW5hZ2VkT2JqZWN0KG1vKSB7XG4gICAgY29uc3QgeyBjaGlsZEFkZGl0aW9ucyB9ID0gdGhpcy5tbztcbiAgICBpZiAoIXRoaXMuaXNDaGlsZEFkZGl0aW9uKGNoaWxkQWRkaXRpb25zLCBtbykpIHtcbiAgICAgIHRoaXMuYWRkKHRoaXMuc2VydmljZS5jcmVhdGVDaGlsZE5vZGUobW8sIHsgaGlkZURldmljZXM6IHRoaXMuaGlkZURldmljZXMgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGlzQ2hpbGRBZGRpdGlvbihjaGlsZEFkZGl0aW9ucywgbW8pIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2hpbGRBZGRpdGlvbnMgJiYgY2hpbGRBZGRpdGlvbnMucmVmZXJlbmNlcy5zb21lKCh7IG1hbmFnZWRPYmplY3Q6IHsgaWQgfSB9KSA9PiBpZCA9PT0gbW8uaWQpXG4gICAgKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5vblVwZGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ2V0IGNhbkRyb3AoKSB7XG4gICAgY29uc3Qgbm9kZVRvTW92ZSA9IHRoaXMuc2VydmljZS5kcmFnZ2VkRGF0YTtcbiAgICBpZiAobm9kZVRvTW92ZSkge1xuICAgICAgY29uc3Qgc2hvdWxkR2V0Q2hpbGRPZkl0c093biA9ICEhbm9kZVRvTW92ZS5maW5kKGNoaWxkID0+IGNoaWxkID09PSB0aGlzKTtcbiAgICAgIGNvbnN0IGlzQWxyZWFkeUNoaWxkID0gKHRoaXMuY2hpbGRyZW4gYXMgQXNzZXROb2RlW10pLnNvbWUoXG4gICAgICAgIGNoaWxkID0+IGNoaWxkLm1vICYmIGNoaWxkLm1vLmlkID09PSBub2RlVG9Nb3ZlLm1vLmlkXG4gICAgICApO1xuICAgICAgY29uc3QgcHJldmVudE1vdmUgPSB0aGlzID09PSBub2RlVG9Nb3ZlIHx8IHNob3VsZEdldENoaWxkT2ZJdHNPd24gfHwgaXNBbHJlYWR5Q2hpbGQ7XG4gICAgICByZXR1cm4gdGhpcy5kcm9wcGFibGUgJiYgIXByZXZlbnRNb3ZlICYmIHRoaXMuc2VydmljZS5jYW5Ecm9wTm9kZSh0aGlzLnJvb3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kcm9wcGFibGU7XG4gIH1cblxuICBkcmFnU3RhcnQoJGV2ZW50KSB7XG4gICAgc3VwZXIuZHJhZ1N0YXJ0KCRldmVudCk7XG4gICAgdGhpcy5zZXJ2aWNlLmRyYWdnZWREYXRhID0gdGhpcztcbiAgICB0aGlzLnNlcnZpY2Uucm9vdE5vZGUuZHJvcHBhYmxlID0gIXRoaXMuaXNEZXZpY2VPclByb2JhYmx5Q2hpbGREZXZpY2U7XG4gIH1cblxuICBkcmFnRW5kKCRldmVudCkge1xuICAgIHN1cGVyLmRyYWdFbmQoJGV2ZW50KTtcbiAgfVxuXG4gIGFzeW5jIGRyb3AoJGV2ZW50KSB7XG4gICAgY29uc3Qgbm9kZVRvTW92ZSA9IHRoaXMuc2VydmljZS5kcmFnZ2VkRGF0YTtcblxuICAgIC8vIFRPRE8gcmVtb3ZlIHdoZW4gYXNzZXQgdHlwZSBub2RlIGNhbiBiZSB1c2VkIG9uIHRoZSByb290IGxldmVsLlxuICAgIGlmICh0aGlzLnJvb3QgJiYgdGhpcy5pc0Fzc2V0KG5vZGVUb01vdmUpKSB7XG4gICAgICB0aGlzLnNlcnZpY2UuYWxlcnQuaW5mbyhnZXR0ZXh0KCdBc3NldCB0eXBlIG5vZGUgY2Fubm90IGJlY29tZSByb290IG5vZGUuJykpO1xuICAgICAgdGhpcy5kcmFnZ2VkSG92ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VydmljZS5kcmFnZ2VkRGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5kcm9wKCRldmVudCk7XG4gICAgaWYgKHRoaXMuY2FuRHJvcCkge1xuICAgICAgYXdhaXQgdGhpcy5tb3ZlTm9kZShub2RlVG9Nb3ZlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmFnZ2VkSG92ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VydmljZS5kcmFnZ2VkRGF0YSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBob29rRXZlbnRzKCkge1xuICAgIGlmICghdGhpcy5ldmVudHMpIHtcbiAgICAgIHRoaXMuZXZlbnRzID0gbmV3IFN1YmplY3QoKTtcbiAgICAgIHRoaXMuZXZlbnRzLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMubG9hZGluZykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXZlbnQoZXZ0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEFzc2V0Tm9kZS5OQU1FO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBub2RlIGhhcyBjaGlsZCBkZXZpY2VzLlxuICAgKi9cbiAgaGFzQ2hpbGREZXZpY2VzKCkge1xuICAgIHJldHVybiB0aGlzLm1vICYmIHRoaXMubW8uYzh5X0lzRGV2aWNlICYmIHRoaXMubW8uY2hpbGREZXZpY2VzLnJlZmVyZW5jZXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBmZXRjaCgpIHtcbiAgICByZXR1cm4gdGhpcy5yb290XG4gICAgICA/IHRoaXMuc2VydmljZS5nZXRSb290Tm9kZXMoKVxuICAgICAgOiB0aGlzLnNlcnZpY2UuZ2V0R3JvdXBJdGVtcyhcbiAgICAgICAgICB0aGlzLm1vLmlkLFxuICAgICAgICAgIHRoaXMuaGlkZURldmljZXNcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHF1ZXJ5OiBgJGZpbHRlcj0oaGFzKCR7R3JvdXBGcmFnbWVudC5ncm91cEZyYWdtZW50VHlwZX0pKSRvcmRlcmJ5PW5hbWVgXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge31cbiAgICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb3VudENoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVFdmVudChldnQ6IEFjdGlvbikge1xuICAgIGlmICghdGhpcy5jb3VudENoaWxkcmVuKCkgJiYgZXZ0ID09PSBBY3Rpb24uRkVUQ0gpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmFkZE5vZGVzKGF3YWl0IHRoaXMuZmV0Y2goKSk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGV2dCA9PT0gQWN0aW9uLk5FWFQpIHtcbiAgICAgIHRoaXMubG9hZE1vcmVOb2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hZGROb2Rlcyhhd2FpdCB0aGlzLnBhZ2luZy5uZXh0KCkpO1xuICAgICAgdGhpcy5sb2FkTW9yZU5vZGUubG9hZGluZyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoZXZ0ID09PSBBY3Rpb24uUkVGUkVTSCkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnBhZ2luZyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubG9hZE1vcmVOb2RlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5lbXB0eSgpO1xuICAgICAgdGhpcy5ldmVudHMubmV4dChBY3Rpb24uRkVUQ0gpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhZGROb2RlcyhyZXMpIHtcbiAgICBpZiAocmVzLnBhZ2luZykge1xuICAgICAgY29uc3QgeyBjdXJyZW50UGFnZSwgbmV4dFBhZ2UsIHBhZ2VTaXplIH0gPSAodGhpcy5wYWdpbmcgPSByZXMucGFnaW5nKTtcbiAgICAgIGlmIChjdXJyZW50UGFnZSA9PT0gMSkge1xuICAgICAgICB0aGlzLmVtcHR5KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtc0NvdW50ID0gcmVzLmRhdGEubGVuZ3RoO1xuICAgICAgY29uc3QgbW9yZUl0ZW1zQXZhaWxhYmxlID0gISFuZXh0UGFnZSAmJiBpdGVtc0NvdW50ID09PSBwYWdlU2l6ZTtcbiAgICAgIHRoaXMudG9nZ2xlTG9hZE1vcmUobW9yZUl0ZW1zQXZhaWxhYmxlKTtcbiAgICB9XG4gICAgKHJlcy5kYXRhIHx8IHJlcykubWFwKG1vID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmFkZE1hbmFnZWRPYmplY3QobW8pO1xuICAgIH0pO1xuICAgIHRoaXMuZXZlbnRzLm5leHQoQWN0aW9uLkxPQURJTkdfRE9ORSk7XG4gICAgdGhpcy5ub2Rlc0ZldGNoZWQubmV4dCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZUxvYWRNb3JlKHNob3c6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMubG9hZE1vcmVOb2RlICYmIHNob3cpIHtcbiAgICAgIHRoaXMubG9hZE1vcmVOb2RlID0gbmV3IExvYWRNb3JlTm9kZSgpO1xuICAgICAgdGhpcy5hZGQodGhpcy5sb2FkTW9yZU5vZGUpO1xuICAgICAgdGhpcy5sb2FkTW9yZU5vZGUuY2xpY2sgPSBkZWJvdW5jZSgoKSA9PiB0aGlzLmV2ZW50cy5uZXh0KEFjdGlvbi5ORVhUKSwgMzAwLCB7XG4gICAgICAgIGxlYWRpbmc6IHRydWUsXG4gICAgICAgIHRyYWlsaW5nOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9hZE1vcmVOb2RlKSB7XG4gICAgICB0aGlzLmxvYWRNb3JlTm9kZS5oaWRkZW4gPSAhc2hvdztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG1vdmVOb2RlKG5vZGVUb01vdmU6IEFzc2V0Tm9kZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpc0NvcHkgPSBhd2FpdCB0aGlzLnNob3dEcm9wQ29uZmlybShub2RlVG9Nb3ZlKTtcbiAgICAgIGF3YWl0IHRoaXMudmVyaWZ5Tm9kZUFjY2Vzcyhub2RlVG9Nb3ZlKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRkTW92ZWROb2RlKG5vZGVUb01vdmUpO1xuICAgICAgaWYgKCFpc0NvcHkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVNb3ZlZE5vZGUobm9kZVRvTW92ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmV4cGFuZCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRyYWdnZWRIb3ZlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXJ2aWNlLmRyYWdnZWREYXRhID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd0Ryb3BDb25maXJtKG5vZGVUb01vdmU6IEFzc2V0Tm9kZSkge1xuICAgIHRoaXMuY29uZmlybS50aXRsZSA9IGdldHRleHQoJ01vdmUnKTtcbiAgICB0aGlzLmNvbmZpcm0ubWVzc2FnZSA9IGdldHRleHQoJ0RvIHlvdSB3YW50IHRvIG1vdmUgdGhlIGdyb3VwPycpO1xuICAgIGNvbnN0IGJ1dHRvbnM6IGFueSA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0NhbmNlbCcpLFxuICAgICAgICBhY3Rpb246ICgpID0+IFByb21pc2UucmVqZWN0KClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdNb3ZlJyksXG4gICAgICAgIHN0YXR1czogJ2RlZmF1bHQnLFxuICAgICAgICBhY3Rpb246ICgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSlcbiAgICAgIH1cbiAgICBdO1xuICAgIGlmIChub2RlVG9Nb3ZlLmlzRGV2aWNlT3JQcm9iYWJseUNoaWxkRGV2aWNlKSB7XG4gICAgICB0aGlzLmNvbmZpcm0udGl0bGUgPSBnZXR0ZXh0KCdNb3ZlIG9yIGFkZCcpO1xuICAgICAgdGhpcy5jb25maXJtLm1lc3NhZ2UgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBtb3ZlIG9yIGFkZCB0aGUgZGV2aWNlPycpO1xuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0FkZCcpLFxuICAgICAgICBzdGF0dXM6ICdwcmltYXJ5JyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBQcm9taXNlLnJlc29sdmUodHJ1ZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maXJtLnNob3coYnV0dG9ucyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZlcmlmeU5vZGVBY2Nlc3Mobm9kZVRvTW92ZTogQXNzZXROb2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5pbnZlbnRvcnkudXBkYXRlKHsgaWQ6IG5vZGVUb01vdmUubW8uaWQgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZE1vdmVkTm9kZShub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICBsZXQgbW86IElJZGVudGlmaWVkO1xuXG4gICAgaWYgKHRoaXMucm9vdCAmJiAhdGhpcy5pc0Fzc2V0KG5vZGVUb01vdmUpKSB7XG4gICAgICBtbyA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmludmVudG9yeS51cGRhdGUoe1xuICAgICAgICAgIGlkOiBub2RlVG9Nb3ZlLm1vLmlkLFxuICAgICAgICAgIHR5cGU6IEdyb3VwRnJhZ21lbnQuZ3JvdXBUeXBlXG4gICAgICAgIH0pXG4gICAgICApLmRhdGE7XG5cbiAgICAgIHRoaXMuYWRkTWFuYWdlZE9iamVjdChtbyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbW8gPSAoYXdhaXQgdGhpcy5zZXJ2aWNlLmludmVudG9yeS5jaGlsZEFzc2V0c0FkZChub2RlVG9Nb3ZlLm1vLCB0aGlzLm1vKSkuZGF0YTtcbiAgICB0aGlzLmFkZE1hbmFnZWRPYmplY3QobW8pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Fzc2V0KG5vZGVUb01vdmU6IEFzc2V0Tm9kZSkge1xuICAgIC8vIFRPRE8gdXNlIGlzQXNzZXQgY2hlY2sgd2hlbiBodHRwczovL2dpdGh1Yi5zb2Z0d2FyZWFnLmNvbS9JT1RBL2N1bXVsb2NpdHktdWkvcHVsbC82OTAgaXMgbWVyZ2VkLlxuICAgIC8vIERvIG5vdCBvdmVycmlkZSBhc3NldCB0eXBlIVxuICAgIHJldHVybiBub2RlVG9Nb3ZlLm1vPy5jOHlfSXNBc3NldDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlTW92ZWROb2RlKG5vZGVUb01vdmU6IEFzc2V0Tm9kZSkge1xuICAgIGZvciAoY29uc3QgcGFyZW50IG9mIG5vZGVUb01vdmUucGFyZW50cyBhcyBBc3NldE5vZGVbXSkge1xuICAgICAgaWYgKHBhcmVudC5tbyAmJiBwYXJlbnQubW8udHlwZSA9PT0gR3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBUeXBlKSB7XG4gICAgICAgIGJyZWFrOyAvLyBzbWFydCBncm91cHMgZG9uJ3QgbmVlZCB0byBiZSBjaGFuZ2VkXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnQucm9vdCAmJiAhdGhpcy5pc0Fzc2V0KG5vZGVUb01vdmUpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5pbnZlbnRvcnkudXBkYXRlKHtcbiAgICAgICAgICBpZDogbm9kZVRvTW92ZS5tby5pZCxcbiAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50LnN1Ykdyb3VwVHlwZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwYXJlbnQucm9vdCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuaW52ZW50b3J5LmNoaWxkQXNzZXRzUmVtb3ZlKG5vZGVUb01vdmUubW8sIHBhcmVudC5tbyk7XG4gICAgICB9XG4gICAgICBwYXJlbnQucmVtb3ZlKG5vZGVUb01vdmUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlSWNvbihvcGVuKSB7XG4gICAgdGhpcy5pY29uID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmljb24oXG4gICAgICAvLyBpZiBpdCdzIHJvb3Qgd2UgYXJlIGdvaW5nIHRvIHBhc3MgYSBmYWtlIG1vIHRvIGdldCB0aGUgc2FtZSBpY29uIGFzIGdyb3Vwc1xuICAgICAgdGhpcy5yb290ID8geyBjOHlfSXNEZXZpY2VHcm91cDoge30gfSA6IHRoaXMubW8sXG4gICAgICBvcGVuXG4gICAgKTtcbiAgfVxufVxuIl19
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2Fzc2V0cy1uYXZpZ2F0b3IvYXNzZXQtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxhQUFhLEVBQ2IsYUFBYSxFQUVkLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE1BQU0sT0FBTyxTQUFVLFNBQVEsYUFBYTtJQXdDMUMsWUFBc0IsT0FBeUIsRUFBWSxTQUE0QixFQUFFO1FBQ3ZGLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQURNLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVksV0FBTSxHQUFOLE1BQU0sQ0FBd0I7UUFwQ3pGLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0MscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpCOztXQUVHO1FBQ0gsYUFBUSxHQUFnQixFQUFFLENBQUM7UUF3QjNCLGlCQUFZLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFRekMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1FB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QVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElJZGVudGlmaWVkLCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBDbGlja09wdGlvbnMsXG4gIERldmljZVN0YXR1c0NvbXBvbmVudCxcbiAgZ2V0dGV4dCxcbiAgR3JvdXBGcmFnbWVudCxcbiAgTmF2aWdhdG9yTm9kZSxcbiAgTmF2aWdhdG9yTm9kZURhdGFcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBkZWJvdW5jZSwgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuL2FjdGlvbi5lbnVtJztcbmltcG9ydCB7IEFzc2V0Tm9kZU1vLCBBc3NldE5vZGVTZXJ2aWNlIH0gZnJvbSAnLi9hc3NldC1ub2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9hZE1vcmVOb2RlIH0gZnJvbSAnLi9sb2FkLW1vcmUtbm9kZSc7XG5cbmV4cG9ydCBjbGFzcyBBc3NldE5vZGUgZXh0ZW5kcyBOYXZpZ2F0b3JOb2RlIHtcbiAgc3RhdGljIE5BTUUgPSAnQXNzZXROb2RlJztcbiAgcm9vdDogYm9vbGVhbjtcbiAgbW86IGFueTtcbiAgaGlkZURldmljZXMgPSBmYWxzZTtcbiAgZmlsdGVyUXVlcnkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgc2hvd0NoaWxkRGV2aWNlcyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBc3NldCBub2RlIGNoaWxkcmVuIChzdWJlbnRyaWVzKS5cbiAgICovXG4gIGNoaWxkcmVuOiBBc3NldE5vZGVbXSA9IFtdO1xuXG4gIGdldCBoYXNDaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdGhpcy5yb290IHx8IHRoaXMuc2VydmljZS5pc0dyb3VwKHRoaXMubW8pO1xuICB9XG5cbiAgZ2V0IGlzRGV2aWNlKCkge1xuICAgIHJldHVybiAhIXRoaXMubW8uYzh5X0lzRGV2aWNlO1xuICB9XG5cbiAgZ2V0IGlzRGV2aWNlT3JQcm9iYWJseUNoaWxkRGV2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGV2aWNlIHx8IHRoaXMuaXNOZWl0aGVyRGV2aWNlT3JHcm91cDtcbiAgfVxuXG4gIGdldCBpc05laXRoZXJEZXZpY2VPckdyb3VwKCkge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5zZXJ2aWNlLmlzR3JvdXAodGhpcy5tbykgJiZcbiAgICAgICF0aGlzLnNlcnZpY2UuaXNEeW5hbWljR3JvdXAodGhpcy5tbykgJiZcbiAgICAgICF0aGlzLmlzRGV2aWNlICYmXG4gICAgICAhdGhpcy5yb290XG4gICAgKTtcbiAgfVxuXG4gIGV2ZW50czogU3ViamVjdDxBY3Rpb24+O1xuICBub2Rlc0ZldGNoZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByb3RlY3RlZCBwYWdpbmc6IFBhZ2luZzxBc3NldE5vZGVNbz47XG4gIHByb3RlY3RlZCBsb2FkTW9yZU5vZGU6IExvYWRNb3JlTm9kZTtcbiAgcHJpdmF0ZSBvblVwZGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzZXJ2aWNlOiBBc3NldE5vZGVTZXJ2aWNlLCBwcm90ZWN0ZWQgY29uZmlnOiBOYXZpZ2F0b3JOb2RlRGF0YSA9IHt9KSB7XG4gICAgc3VwZXIoY29uZmlnKTtcblxuICAgIHRoaXMucm9vdCA9IHRoaXMucm9vdCB8fCBmYWxzZTtcbiAgICB0aGlzLmhpZGVEZXZpY2VzID0gY29uZmlnLmhpZGVEZXZpY2VzID8/IHRoaXMuaGlkZURldmljZXM7XG4gICAgdGhpcy5tbyA9IHRoaXMubW8gfHwge307XG4gICAgdGhpcy5wYXRoID0gdGhpcy5nZXRQYXRoKCk7XG4gICAgdGhpcy5kcmFnZ2FibGUgPSAhdGhpcy5zZXJ2aWNlPy5tb2R1bGVDb25maWc/LmRpc2FibGVEcmFnQW5kRHJvcCAmJiAhdGhpcy5yb290O1xuICAgIHRoaXMuZHJvcHBhYmxlID1cbiAgICAgICF0aGlzLnNlcnZpY2U/Lm1vZHVsZUNvbmZpZz8uZGlzYWJsZURyYWdBbmREcm9wICYmICF0aGlzLmlzRGV2aWNlT3JQcm9iYWJseUNoaWxkRGV2aWNlO1xuICAgIHRoaXMucm91dGVyTGlua0V4YWN0ID0gdGhpcy5yb290O1xuICAgIHRoaXMudXBkYXRlSWNvbihmYWxzZSk7XG4gICAgdGhpcy5vblVwZGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZVxuICAgICAgLm9uVXBkYXRlKHRoaXMpXG4gICAgICAuc3Vic2NyaWJlKCh7IGRhdGEsIG1ldGhvZCB9KSA9PiB0aGlzLnJlZnJlc2goZGF0YSwgbWV0aG9kKSk7XG4gICAgdGhpcy5zZXRMYWJlbCgpO1xuICAgIHRoaXMuaWNvbkNvbXBvbmVudCA9IHRoaXMuaXNEZXZpY2VPclByb2JhYmx5Q2hpbGREZXZpY2UgPyBEZXZpY2VTdGF0dXNDb21wb25lbnQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQYXRoKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5wYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcucGF0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yb290XG4gICAgICA/ICdncm91cCdcbiAgICAgIDogdGhpcy5pc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZVxuICAgICAgPyBgZGV2aWNlLyR7dGhpcy5tby5pZH1gXG4gICAgICA6IGBncm91cC8ke3RoaXMubW8uaWR9YDtcbiAgfVxuXG4gIG9wZW5PblN0YXJ0KHVybCkge1xuICAgIGNvbnN0IHVybFJlZ2V4ID0gL15cXC9ncm91cFxcLy87XG4gICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgaWYgKHRoaXMuc2VydmljZS5tb2R1bGVDb25maWcub3Blbk9uU3RhcnQgfHwgdXJsUmVnZXgudGVzdCh1cmwpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKC9cXC8oZ3JvdXApXFwvKFxcZCspLyk7XG4gICAgbGV0IGlzTWF0Y2ggPSBmYWxzZTtcbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgY29uc3QgaWQgPSBtYXRjaGVzWzJdO1xuICAgICAgaXNNYXRjaCA9IFtdXG4gICAgICAgIC5jb25jYXQoZ2V0KHRoaXMubW8sICdjaGlsZEFzc2V0cy5yZWZlcmVuY2VzJywgW10pKVxuICAgICAgICAuc29tZSgoeyBtYW5hZ2VkT2JqZWN0IH0pID0+IG1hbmFnZWRPYmplY3QuaWQgPT09IGlkKTtcbiAgICAgIHJldHVybiBpc01hdGNoO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZWZyZXNoKG1vOiBhbnkgPSB7fSwgbWV0aG9kID0gJ0dFVCcpIHtcbiAgICBpZiAobW8/LmlkID09PSB0aGlzLm1vLmlkKSB7XG4gICAgICB0aGlzLm1vID0gbW87XG4gICAgICB0aGlzLnNldExhYmVsKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdERUxFVEUnKSB7XG4gICAgICB0aGlzLnBhcmVudHMuZm9yRWFjaCgobm9kZTogQXNzZXROb2RlKSA9PiBub2RlLnJlZnJlc2goKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmV2ZW50cykge1xuICAgICAgdGhpcy5ldmVudHMubmV4dChBY3Rpb24uUkVGUkVTSCk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGFiZWwoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmxhYmVsIHx8IHRoaXMucm9vdCkge1xuICAgICAgdGhpcy5sYWJlbCA9IHRoaXMuY29uZmlnLmxhYmVsIHx8IGdldHRleHQoJ0dyb3VwcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhYmVsID0gdGhpcy5zZXJ2aWNlLmxhYmVsKHRoaXMubW8pO1xuICAgIH1cbiAgfVxuXG4gIGNsaWNrKG9wdGlvbnM6IENsaWNrT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuaXNEZXZpY2VPclByb2JhYmx5Q2hpbGREZXZpY2UgJiYgIXRoaXMuc2hvd0NoaWxkRGV2aWNlcykge1xuICAgICAgdGhpcy5zZXJ2aWNlLnByZWZlckJyZWFkY3J1bWIodGhpcy5wYXJlbnRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ob29rRXZlbnRzKCk7XG4gICAgdGhpcy51cGRhdGVJY29uKG9wdGlvbnMub3Blbik7XG4gICAgaWYgKG9wdGlvbnMub3Blbikge1xuICAgICAgdGhpcy5ldmVudHMubmV4dChBY3Rpb24uRkVUQ0gpO1xuICAgIH1cbiAgfVxuXG4gIHNvcnQoKSB7XG4gICAgdGhpcy5jaGlsZHJlbi5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYS5wcmlvcml0eSA+IGIucHJpb3JpdHkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChhLnByaW9yaXR5IDwgYi5wcmlvcml0eSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkTWFuYWdlZE9iamVjdChtbykge1xuICAgIGNvbnN0IHsgY2hpbGRBZGRpdGlvbnMgfSA9IHRoaXMubW87XG4gICAgaWYgKCF0aGlzLmlzQ2hpbGRBZGRpdGlvbihjaGlsZEFkZGl0aW9ucywgbW8pKSB7XG4gICAgICB0aGlzLmFkZCh0aGlzLnNlcnZpY2UuY3JlYXRlQ2hpbGROb2RlKG1vLCB7IGhpZGVEZXZpY2VzOiB0aGlzLmhpZGVEZXZpY2VzIH0pKTtcbiAgICB9XG4gIH1cblxuICBpc0NoaWxkQWRkaXRpb24oY2hpbGRBZGRpdGlvbnMsIG1vKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNoaWxkQWRkaXRpb25zICYmIGNoaWxkQWRkaXRpb25zLnJlZmVyZW5jZXMuc29tZSgoeyBtYW5hZ2VkT2JqZWN0OiB7IGlkIH0gfSkgPT4gaWQgPT09IG1vLmlkKVxuICAgICk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMub25VcGRhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdldCBjYW5Ecm9wKCkge1xuICAgIGNvbnN0IG5vZGVUb01vdmUgPSB0aGlzLnNlcnZpY2UuZHJhZ2dlZERhdGE7XG4gICAgaWYgKG5vZGVUb01vdmUpIHtcbiAgICAgIGNvbnN0IHNob3VsZEdldENoaWxkT2ZJdHNPd24gPSAhIW5vZGVUb01vdmUuZmluZChjaGlsZCA9PiBjaGlsZCA9PT0gdGhpcyk7XG4gICAgICBjb25zdCBpc0FscmVhZHlDaGlsZCA9ICh0aGlzLmNoaWxkcmVuIGFzIEFzc2V0Tm9kZVtdKS5zb21lKFxuICAgICAgICBjaGlsZCA9PiBjaGlsZC5tbyAmJiBjaGlsZC5tby5pZCA9PT0gbm9kZVRvTW92ZS5tby5pZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByZXZlbnRNb3ZlID0gdGhpcyA9PT0gbm9kZVRvTW92ZSB8fCBzaG91bGRHZXRDaGlsZE9mSXRzT3duIHx8IGlzQWxyZWFkeUNoaWxkO1xuICAgICAgcmV0dXJuIHRoaXMuZHJvcHBhYmxlICYmICFwcmV2ZW50TW92ZSAmJiB0aGlzLnNlcnZpY2UuY2FuRHJvcE5vZGUodGhpcy5yb290KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZHJvcHBhYmxlO1xuICB9XG5cbiAgZHJhZ1N0YXJ0KCRldmVudCkge1xuICAgIHN1cGVyLmRyYWdTdGFydCgkZXZlbnQpO1xuICAgIHRoaXMuc2VydmljZS5kcmFnZ2VkRGF0YSA9IHRoaXM7XG4gICAgdGhpcy5zZXJ2aWNlLnJvb3ROb2RlLmRyb3BwYWJsZSA9ICF0aGlzLmlzRGV2aWNlT3JQcm9iYWJseUNoaWxkRGV2aWNlO1xuICB9XG5cbiAgZHJhZ0VuZCgkZXZlbnQpIHtcbiAgICBzdXBlci5kcmFnRW5kKCRldmVudCk7XG4gIH1cblxuICBhc3luYyBkcm9wKCRldmVudCkge1xuICAgIGNvbnN0IG5vZGVUb01vdmUgPSB0aGlzLnNlcnZpY2UuZHJhZ2dlZERhdGE7XG5cbiAgICAvLyBUT0RPIHJlbW92ZSB3aGVuIGFzc2V0IHR5cGUgbm9kZSBjYW4gYmUgdXNlZCBvbiB0aGUgcm9vdCBsZXZlbC5cbiAgICBpZiAodGhpcy5yb290ICYmIHRoaXMuaXNBc3NldChub2RlVG9Nb3ZlKSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmFsZXJ0LmluZm8oZ2V0dGV4dCgnQXNzZXQgdHlwZSBub2RlIGNhbm5vdCBiZWNvbWUgcm9vdCBub2RlLicpKTtcbiAgICAgIHRoaXMuZHJhZ2dlZEhvdmVyID0gZmFsc2U7XG4gICAgICB0aGlzLnNlcnZpY2UuZHJhZ2dlZERhdGEgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIuZHJvcCgkZXZlbnQpO1xuICAgIGlmICh0aGlzLmNhbkRyb3ApIHtcbiAgICAgIGF3YWl0IHRoaXMubW92ZU5vZGUobm9kZVRvTW92ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZHJhZ2dlZEhvdmVyID0gZmFsc2U7XG4gICAgICB0aGlzLnNlcnZpY2UuZHJhZ2dlZERhdGEgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgaG9va0V2ZW50cygpIHtcbiAgICBpZiAoIXRoaXMuZXZlbnRzKSB7XG4gICAgICB0aGlzLmV2ZW50cyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICB0aGlzLmV2ZW50cy5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUV2ZW50KGV2dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBBc3NldE5vZGUuTkFNRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgbm9kZSBoYXMgY2hpbGQgZGV2aWNlcy5cbiAgICovXG4gIGhhc0NoaWxkRGV2aWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5tbyAmJiB0aGlzLm1vLmM4eV9Jc0RldmljZSAmJiB0aGlzLm1vLmNoaWxkRGV2aWNlcy5yZWZlcmVuY2VzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmV0Y2goKSB7XG4gICAgcmV0dXJuIHRoaXMucm9vdFxuICAgICAgPyB0aGlzLnNlcnZpY2UuZ2V0Um9vdE5vZGVzKClcbiAgICAgIDogdGhpcy5zZXJ2aWNlLmdldEdyb3VwSXRlbXMoXG4gICAgICAgICAgdGhpcy5tby5pZCxcbiAgICAgICAgICB0aGlzLmhpZGVEZXZpY2VzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBxdWVyeTogYCRmaWx0ZXI9KGhhcygke0dyb3VwRnJhZ21lbnQuZ3JvdXBGcmFnbWVudFR5cGV9KSkkb3JkZXJieT1uYW1lYFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9XG4gICAgICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY291bnRDaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlRXZlbnQoZXZ0OiBBY3Rpb24pIHtcbiAgICBpZiAoIXRoaXMuY291bnRDaGlsZHJlbigpICYmIGV2dCA9PT0gQWN0aW9uLkZFVENIKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hZGROb2Rlcyhhd2FpdCB0aGlzLmZldGNoKCkpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChldnQgPT09IEFjdGlvbi5ORVhUKSB7XG4gICAgICB0aGlzLmxvYWRNb3JlTm9kZS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWRkTm9kZXMoYXdhaXQgdGhpcy5wYWdpbmcubmV4dCgpKTtcbiAgICAgIHRoaXMubG9hZE1vcmVOb2RlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGV2dCA9PT0gQWN0aW9uLlJFRlJFU0gpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5wYWdpbmcgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmxvYWRNb3JlTm9kZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZW1wdHkoKTtcbiAgICAgIHRoaXMuZXZlbnRzLm5leHQoQWN0aW9uLkZFVENIKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTm9kZXMocmVzKSB7XG4gICAgaWYgKHJlcy5wYWdpbmcpIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFBhZ2UsIG5leHRQYWdlLCBwYWdlU2l6ZSB9ID0gKHRoaXMucGFnaW5nID0gcmVzLnBhZ2luZyk7XG4gICAgICBpZiAoY3VycmVudFBhZ2UgPT09IDEpIHtcbiAgICAgICAgdGhpcy5lbXB0eSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbXNDb3VudCA9IHJlcy5kYXRhLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1vcmVJdGVtc0F2YWlsYWJsZSA9ICEhbmV4dFBhZ2UgJiYgaXRlbXNDb3VudCA9PT0gcGFnZVNpemU7XG4gICAgICB0aGlzLnRvZ2dsZUxvYWRNb3JlKG1vcmVJdGVtc0F2YWlsYWJsZSk7XG4gICAgfVxuICAgIChyZXMuZGF0YSB8fCByZXMpLm1hcChtbyA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRNYW5hZ2VkT2JqZWN0KG1vKTtcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50cy5uZXh0KEFjdGlvbi5MT0FESU5HX0RPTkUpO1xuICAgIHRoaXMubm9kZXNGZXRjaGVkLm5leHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVMb2FkTW9yZShzaG93OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmxvYWRNb3JlTm9kZSAmJiBzaG93KSB7XG4gICAgICB0aGlzLmxvYWRNb3JlTm9kZSA9IG5ldyBMb2FkTW9yZU5vZGUoKTtcbiAgICAgIHRoaXMuYWRkKHRoaXMubG9hZE1vcmVOb2RlKTtcbiAgICAgIHRoaXMubG9hZE1vcmVOb2RlLmNsaWNrID0gZGVib3VuY2UoKCkgPT4gdGhpcy5ldmVudHMubmV4dChBY3Rpb24uTkVYVCksIDMwMCwge1xuICAgICAgICBsZWFkaW5nOiB0cnVlLFxuICAgICAgICB0cmFpbGluZzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvYWRNb3JlTm9kZSkge1xuICAgICAgdGhpcy5sb2FkTW9yZU5vZGUuaGlkZGVuID0gIXNob3c7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtb3ZlTm9kZShub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaXNDb3B5ID0gYXdhaXQgdGhpcy5zaG93RHJvcENvbmZpcm0obm9kZVRvTW92ZSk7XG4gICAgICBhd2FpdCB0aGlzLnZlcmlmeU5vZGVBY2Nlc3Mobm9kZVRvTW92ZSk7XG4gICAgICBhd2FpdCB0aGlzLmFkZE1vdmVkTm9kZShub2RlVG9Nb3ZlKTtcbiAgICAgIGlmICghaXNDb3B5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlTW92ZWROb2RlKG5vZGVUb01vdmUpO1xuICAgICAgfVxuICAgICAgdGhpcy5leHBhbmQoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuc2VydmljZS5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kcmFnZ2VkSG92ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VydmljZS5kcmFnZ2VkRGF0YSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dEcm9wQ29uZmlybShub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICB0aGlzLmNvbmZpcm0udGl0bGUgPSBnZXR0ZXh0KCdNb3ZlJyk7XG4gICAgdGhpcy5jb25maXJtLm1lc3NhZ2UgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBtb3ZlIHRoZSBncm91cD8nKTtcbiAgICBjb25zdCBidXR0b25zOiBhbnkgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDYW5jZWwnKSxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBQcm9taXNlLnJlamVjdCgpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogZ2V0dGV4dCgnTW92ZScpLFxuICAgICAgICBzdGF0dXM6ICdkZWZhdWx0JyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpXG4gICAgICB9XG4gICAgXTtcbiAgICBpZiAobm9kZVRvTW92ZS5pc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZSkge1xuICAgICAgdGhpcy5jb25maXJtLnRpdGxlID0gZ2V0dGV4dCgnTW92ZSBvciBhZGQnKTtcbiAgICAgIHRoaXMuY29uZmlybS5tZXNzYWdlID0gZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gbW92ZSBvciBhZGQgdGhlIGRldmljZT8nKTtcbiAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBZGQnKSxcbiAgICAgICAgc3RhdHVzOiAncHJpbWFyeScsXG4gICAgICAgIGFjdGlvbjogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHRydWUpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlybS5zaG93KGJ1dHRvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2ZXJpZnlOb2RlQWNjZXNzKG5vZGVUb01vdmU6IEFzc2V0Tm9kZSkge1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuaW52ZW50b3J5LnVwZGF0ZSh7IGlkOiBub2RlVG9Nb3ZlLm1vLmlkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRNb3ZlZE5vZGUobm9kZVRvTW92ZTogQXNzZXROb2RlKSB7XG4gICAgbGV0IG1vOiBJSWRlbnRpZmllZDtcblxuICAgIGlmICh0aGlzLnJvb3QgJiYgIXRoaXMuaXNBc3NldChub2RlVG9Nb3ZlKSkge1xuICAgICAgbW8gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5pbnZlbnRvcnkudXBkYXRlKHtcbiAgICAgICAgICBpZDogbm9kZVRvTW92ZS5tby5pZCxcbiAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwVHlwZVxuICAgICAgICB9KVxuICAgICAgKS5kYXRhO1xuXG4gICAgICB0aGlzLmFkZE1hbmFnZWRPYmplY3QobW8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vID0gKGF3YWl0IHRoaXMuc2VydmljZS5pbnZlbnRvcnkuY2hpbGRBc3NldHNBZGQobm9kZVRvTW92ZS5tbywgdGhpcy5tbykpLmRhdGE7XG4gICAgdGhpcy5hZGRNYW5hZ2VkT2JqZWN0KG1vKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBc3NldChub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICAvLyBUT0RPIHVzZSBpc0Fzc2V0IGNoZWNrIHdoZW4gaHR0cHM6Ly9naXRodWIuc29mdHdhcmVhZy5jb20vSU9UQS9jdW11bG9jaXR5LXVpL3B1bGwvNjkwIGlzIG1lcmdlZC5cbiAgICAvLyBEbyBub3Qgb3ZlcnJpZGUgYXNzZXQgdHlwZSFcbiAgICByZXR1cm4gbm9kZVRvTW92ZS5tbz8uYzh5X0lzQXNzZXQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZU1vdmVkTm9kZShub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiBub2RlVG9Nb3ZlLnBhcmVudHMgYXMgQXNzZXROb2RlW10pIHtcbiAgICAgIGlmIChwYXJlbnQubW8gJiYgcGFyZW50Lm1vLnR5cGUgPT09IEdyb3VwRnJhZ21lbnQuZHluYW1pY0dyb3VwVHlwZSkge1xuICAgICAgICBicmVhazsgLy8gc21hcnQgZ3JvdXBzIGRvbid0IG5lZWQgdG8gYmUgY2hhbmdlZFxuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50LnJvb3QgJiYgIXRoaXMuaXNBc3NldChub2RlVG9Nb3ZlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuaW52ZW50b3J5LnVwZGF0ZSh7XG4gICAgICAgICAgaWQ6IG5vZGVUb01vdmUubW8uaWQsXG4gICAgICAgICAgdHlwZTogR3JvdXBGcmFnbWVudC5zdWJHcm91cFR5cGVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyZW50LnJvb3QpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmludmVudG9yeS5jaGlsZEFzc2V0c1JlbW92ZShub2RlVG9Nb3ZlLm1vLCBwYXJlbnQubW8pO1xuICAgICAgfVxuICAgICAgcGFyZW50LnJlbW92ZShub2RlVG9Nb3ZlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUljb24ob3Blbikge1xuICAgIHRoaXMuaWNvbiA9IGF3YWl0IHRoaXMuc2VydmljZS5pY29uKFxuICAgICAgLy8gaWYgaXQncyByb290IHdlIGFyZSBnb2luZyB0byBwYXNzIGEgZmFrZSBtbyB0byBnZXQgdGhlIHNhbWUgaWNvbiBhcyBncm91cHNcbiAgICAgIHRoaXMucm9vdCA/IHsgYzh5X0lzRGV2aWNlR3JvdXA6IHt9IH0gOiB0aGlzLm1vLFxuICAgICAgb3BlblxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Inject, Injectable, Optional } from '@angular/core';
2
2
  import { InventoryService, QueriesUtil, UserService } from '@c8y/client';
3
- import { AlertService, AppStateService, BreadcrumbService, GroupFragment, ModalService, OptionsService, Permissions } from '@c8y/ngx-components';
3
+ import { AlertService, AppStateService, BreadcrumbService, GroupFragment, ModalService, OptionsService, Permissions, gettext } from '@c8y/ngx-components';
4
4
  import { ApiService } from '@c8y/ngx-components/api';
5
5
  import { empty } from 'rxjs';
6
6
  import { filter, mergeMap } from 'rxjs/operators';
@@ -8,13 +8,15 @@ import { AssetNode } from './asset-node';
8
8
  import { ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';
9
9
  import { DynamicGroupNode } from './dynamic-group-node';
10
10
  import { DeviceGroupService } from './group.service';
11
+ import { TranslateService } from '@ngx-translate/core';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "@c8y/client";
13
14
  import * as i2 from "@c8y/ngx-components/api";
14
15
  import * as i3 from "@c8y/ngx-components";
15
16
  import * as i4 from "./group.service";
17
+ import * as i5 from "@ngx-translate/core";
16
18
  export class AssetNodeService {
17
- constructor(inventory, apiService, modal, alert, breadcrumbService, user, appState, optionsService, moduleConfig, deviceGroupService) {
19
+ constructor(inventory, apiService, modal, alert, breadcrumbService, user, appState, optionsService, moduleConfig, deviceGroupService, translateService) {
18
20
  this.inventory = inventory;
19
21
  this.apiService = apiService;
20
22
  this.modal = modal;
@@ -25,6 +27,7 @@ export class AssetNodeService {
25
27
  this.optionsService = optionsService;
26
28
  this.moduleConfig = moduleConfig;
27
29
  this.deviceGroupService = deviceGroupService;
30
+ this.translateService = translateService;
28
31
  this.firstUrl = true;
29
32
  this.PAGE_SIZE = 20;
30
33
  this.moduleConfig = {
@@ -33,6 +36,12 @@ export class AssetNodeService {
33
36
  };
34
37
  this.queriesUtil = new QueriesUtil();
35
38
  }
39
+ label(mo) {
40
+ return (mo.name ||
41
+ (this.isDevice(mo) &&
42
+ this.translateService.instant(gettext('Device {{id}}'), { id: mo.id })) ||
43
+ '--');
44
+ }
36
45
  icon(mo, open) {
37
46
  return this.deviceGroupService.icon(mo, open);
38
47
  }
@@ -272,7 +281,7 @@ export class AssetNodeService {
272
281
  return combinedQuery;
273
282
  }
274
283
  }
275
- AssetNodeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetNodeService, deps: [{ token: i1.InventoryService }, { token: i2.ApiService }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i3.BreadcrumbService }, { token: i1.UserService }, { token: i3.AppStateService }, { token: i3.OptionsService }, { token: ASSET_NAVIGATOR_CONFIG, optional: true }, { token: i4.DeviceGroupService }], target: i0.ɵɵFactoryTarget.Injectable });
284
+ AssetNodeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetNodeService, deps: [{ token: i1.InventoryService }, { token: i2.ApiService }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i3.BreadcrumbService }, { token: i1.UserService }, { token: i3.AppStateService }, { token: i3.OptionsService }, { token: ASSET_NAVIGATOR_CONFIG, optional: true }, { token: i4.DeviceGroupService }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
276
285
  AssetNodeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetNodeService, providedIn: 'root' });
277
286
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetNodeService, decorators: [{
278
287
  type: Injectable,
@@ -284,5 +293,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
284
293
  }, {
285
294
  type: Inject,
286
295
  args: [ASSET_NAVIGATOR_CONFIG]
287
- }] }, { type: i4.DeviceGroupService }]; } });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbm9kZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1ub2RlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQVcsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFlBQVksRUFHWixjQUFjLEVBQ2QsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBd0Isc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBVXJELE1BQU0sT0FBTyxnQkFBZ0I7SUFPM0IsWUFDUyxTQUEyQixFQUMzQixVQUFzQixFQUN0QixLQUFtQixFQUNuQixLQUFtQixFQUNoQixpQkFBb0MsRUFDcEMsSUFBaUIsRUFDakIsUUFBeUIsRUFDekIsY0FBOEIsRUFDVyxZQUFrQyxFQUMzRSxrQkFBc0M7UUFUekMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0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QUNFLHNCQUFzQixFQUFFLE1BQU07aUJBQy9CO2dCQUNEO29CQUNFLHNCQUFzQixFQUFFLE1BQU07aUJBQy9CO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLGFBQWEsR0FBRyxHQUFHLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztTQUNsRDthQUFNO1lBQ0wsYUFBYSxHQUFHLE1BQU0sSUFBSSxNQUFNLElBQUksRUFBRSxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQzs7NkdBM1RVLGdCQUFnQiw2UEFnQkwsc0JBQXNCO2lIQWhCakMsZ0JBQWdCLGNBRmYsTUFBTTsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFpQkksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSwgSVJlc3VsdCwgUXVlcmllc1V0aWwsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEJyZWFkY3J1bWJTZXJ2aWNlLFxuICBHcm91cEZyYWdtZW50LFxuICBNb2RhbFNlcnZpY2UsXG4gIE5hdmlnYXRvck5vZGUsXG4gIE5hdmlnYXRvck5vZGVEYXRhLFxuICBPcHRpb25zU2VydmljZSxcbiAgUGVybWlzc2lvbnNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgZW1wdHkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBc3NldE5vZGUgfSBmcm9tICcuL2Fzc2V0LW5vZGUnO1xuaW1wb3J0IHsgQXNzZXROYXZpZ2F0b3JDb25maWcsIEFTU0VUX05BVklHQVRPUl9DT05GSUcgfSBmcm9tICcuL2Fzc2V0LW5vZGUtY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IER5bmFtaWNHcm91cE5vZGUgfSBmcm9tICcuL2R5bmFtaWMtZ3JvdXAtbm9kZSc7XG5pbXBvcnQgeyBEZXZpY2VHcm91cFNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0Tm9kZU1vIHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBc3NldE5vZGVTZXJ2aWNlIHtcbiAgcm9vdE5vZGU6IEFzc2V0Tm9kZTtcbiAgZmlyc3RVcmwgPSB0cnVlO1xuICBkcmFnZ2VkRGF0YTogQXNzZXROb2RlO1xuICBxdWVyaWVzVXRpbDogUXVlcmllc1V0aWw7XG4gIHByb3RlY3RlZCBQQUdFX1NJWkUgPSAyMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHB1YmxpYyBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlLFxuICAgIHB1YmxpYyBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHB1YmxpYyBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBicmVhZGNydW1iU2VydmljZTogQnJlYWRjcnVtYlNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXI6IFVzZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBU1NFVF9OQVZJR0FUT1JfQ09ORklHKSBwdWJsaWMgbW9kdWxlQ29uZmlnOiBBc3NldE5hdmlnYXRvckNvbmZpZyxcbiAgICBwcm90ZWN0ZWQgZGV2aWNlR3JvdXBTZXJ2aWNlOiBEZXZpY2VHcm91cFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5tb2R1bGVDb25maWcgPSB7XG4gICAgICByb290Tm9kZVByaW9yaXR5OiAyMDAwLFxuICAgICAgLi4uKG1vZHVsZUNvbmZpZyB8fCB7fSlcbiAgICB9O1xuICAgIHRoaXMucXVlcmllc1V0aWwgPSBuZXcgUXVlcmllc1V0aWwoKTtcbiAgfVxuXG4gIGljb24obW86IElNYW5hZ2VkT2JqZWN0LCBvcGVuPzogYm9vbGVhbik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmljb24obW8sIG9wZW4pO1xuICB9XG5cbiAgaXNHcm91cChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNHcm91cChtbyk7XG4gIH1cblxuICBpc0R5bmFtaWNHcm91cChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNEeW5hbWljR3JvdXAobW8pO1xuICB9XG5cbiAgaXNEYXRhQnJva2VyKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0RhdGFCcm9rZXIobW8pO1xuICB9XG5cbiAgaXNEYXRhQnJva2VyQWN0aXZlKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0RhdGFCcm9rZXJBY3RpdmUobW8pO1xuICB9XG5cbiAgaXNBc3NldChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNBc3NldChtbyk7XG4gIH1cblxuICBpc0FueUdyb3VwKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0FueUdyb3VwKG1vKTtcbiAgfVxuXG4gIGlzRGV2aWNlKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0RldmljZShtbyk7XG4gIH1cblxuICBjcmVhdGVSb290Tm9kZShjb25maWc6IE5hdmlnYXRvck5vZGVEYXRhID0ge30pIHtcbiAgICB0aGlzLnJvb3ROb2RlID0gdGhpcy5jcmVhdGVBc3NldE5vZGUoe1xuICAgICAgcm9vdDogdHJ1ZSxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIHByaW9yaXR5OiB0aGlzLm1vZHVsZUNvbmZpZy5yb290Tm9kZVByaW9yaXR5LFxuICAgICAgZmVhdHVyZUlkOiAnZ3JvdXBzJ1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnJvb3ROb2RlO1xuICB9XG5cbiAgY3JlYXRlRHluYW1pY0dyb3VwTm9kZShjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IER5bmFtaWNHcm91cE5vZGUodGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIGNyZWF0ZUFzc2V0Tm9kZShjb25maWc6IFBhcnRpYWw8QXNzZXROb2RlPikge1xuICAgIHJldHVybiBuZXcgQXNzZXROb2RlKHRoaXMsIGNvbmZpZyk7XG4gIH1cblxuICBjcmVhdGVDaGlsZE5vZGUobWFuYWdlZE9iamVjdCwgY29uZmlnOiBQYXJ0aWFsPEFzc2V0Tm9kZT4pIHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IG1hbmFnZWRPYmplY3Q7XG4gICAgY29uZmlnLm1vID0gbWFuYWdlZE9iamVjdDtcbiAgICBpZiAodHlwZSA9PT0gR3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBUeXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVEeW5hbWljR3JvdXBOb2RlKGNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUFzc2V0Tm9kZShjb25maWcpO1xuICB9XG5cbiAgZ2V0Um9vdE5vZGVzKGN1c3RvbUZpbHRlcj86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiB0aGlzLlBBR0VfU0laRSxcbiAgICAgIHdpdGhDaGlsZHJlbjogZmFsc2UsXG4gICAgICBvbmx5Um9vdHM6ICF0aGlzLm9wdGlvbnNTZXJ2aWNlLmRpc2FibGVPbmx5Um9vdHNRdWVyeSxcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkodGhpcy5uYXZSb290UXVlcnlGaWx0ZXIoKSlcbiAgICB9O1xuICAgIGNvbnN0IGdyb3VwRmlsdGVyID0geyAuLi5kZWZhdWx0RmlsdGVyLCAuLi5jdXN0b21GaWx0ZXIgfTtcblxuICAgIC8vIGR1ZSB0byBCRSBwZXJmb3JtYW5jZSBsaW1pdGF0aW9ucyB3ZSBkbyBub3QgYWxsb3cgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIGZvciBhIHVzZXIgd2l0aG91dCBpbnZlbnRvcnkgcm9sZXNcbiAgICBpZiAoXG4gICAgICAhdGhpcy51c2VyLmhhc0FueVJvbGUodGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZSwgW1xuICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9SRUFELFxuICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX1JFQURcbiAgICAgIF0pXG4gICAgKSB7XG4gICAgICBkZWxldGUgZ3JvdXBGaWx0ZXIucXVlcnk7XG4gICAgICBPYmplY3QuYXNzaWduKGdyb3VwRmlsdGVyLCB7XG4gICAgICAgIGZyYWdtZW50VHlwZTogR3JvdXBGcmFnbWVudC5ncm91cEZyYWdtZW50VHlwZSxcbiAgICAgICAgb25seVJvb3RzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3QodGhpcy5jcmVhdGVGaWx0ZXIoZ3JvdXBGaWx0ZXIpKTtcbiAgfVxuXG4gIGdldEFsbEludmVudG9yaWVzKGN1c3RvbUZpbHRlcj86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiB0aGlzLlBBR0VfU0laRSxcbiAgICAgIHdpdGhDaGlsZHJlbjogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IGdyb3VwRmlsdGVyID0geyAuLi5kZWZhdWx0RmlsdGVyLCAuLi5jdXN0b21GaWx0ZXIgfTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh0aGlzLmNyZWF0ZUZpbHRlcihncm91cEZpbHRlcikpO1xuICB9XG5cbiAgZ2V0R3JvdXBJdGVtcyhtb0lkOiBzdHJpbmcsIGV4dHJhRmlsdGVyOiBvYmplY3QgPSB7fSwgd2l0aENoaWxkcmVuID0gZmFsc2UsIGZpbHRlclF1ZXJ5ID0gJycpIHtcbiAgICBjb25zdCBxdWVyeUZpbHRlciA9IHtcbiAgICAgIHdpdGhDaGlsZHJlbixcbiAgICAgIHBhZ2VTaXplOiB0aGlzLlBBR0VfU0laRSxcbiAgICAgIHF1ZXJ5OiB0aGlzLmdyb3VwUXVlcnlGaWx0ZXIobW9JZCwgZmlsdGVyUXVlcnkpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY2hpbGRBc3NldHNMaXN0KG1vSWQsIHsgLi4ucXVlcnlGaWx0ZXIsIC4uLmV4dHJhRmlsdGVyIH0pO1xuICB9XG5cbiAgZ2V0VW5hc3NpZ25lZERldmljZXMod2l0aENoaWxkcmVuID0gZmFsc2UsIGZpbHRlclF1ZXJ5ID0gJycpIHtcbiAgICBjb25zdCBxdWVyeUZpbHRlcjogYW55ID0ge1xuICAgICAgZnJhZ21lbnRUeXBlOiAnYzh5X0lzRGV2aWNlJyxcbiAgICAgIG9ubHlSb290czogdHJ1ZSxcbiAgICAgIHdpdGhDaGlsZHJlbixcbiAgICAgIHBhZ2VTaXplOiB0aGlzLlBBR0VfU0laRSxcbiAgICAgIHE6IHRoaXMuZ2V0VW5hc3NpZ25lZERldmljZXNRdWVyeVN0cihmaWx0ZXJRdWVyeSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHRoaXMuY3JlYXRlRmlsdGVyKHF1ZXJ5RmlsdGVyKSk7XG4gIH1cblxuICBnZXREeW5hbWljR3JvdXBJdGVtcyhncm91cFF1ZXJ5OiBzdHJpbmcsIGZpbHRlck9iajogYW55ID0ge30pIHtcbiAgICBjb25zdCB7IHF1ZXJ5LCAuLi5xdWVyeVBhcmFtcyB9ID0gZmlsdGVyT2JqO1xuICAgIGNvbnN0IG9yZGVyQnlRdWVyeSA9IHF1ZXJ5O1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyID0ge1xuICAgICAgcTogdGhpcy5idWlsZENvbWJpbmVkUXVlcnkoZ3JvdXBRdWVyeSwgb3JkZXJCeVF1ZXJ5KSxcbiAgICAgIC4uLnF1ZXJ5UGFyYW1zXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh0aGlzLmNyZWF0ZUZpbHRlcihxdWVyeUZpbHRlcikpO1xuICB9XG5cbiAgZ2V0RGV2aWNlQ2hpbGRyZW4oXG4gICAgbW9JZDogc3RyaW5nLFxuICAgIGV4dHJhRmlsdGVyOiBvYmplY3QgPSB7fSxcbiAgICBmaWx0ZXJRdWVyeSA9ICcnLFxuICAgIHdpdGhDaGlsZHJlbiA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyID0ge1xuICAgICAgd2l0aENoaWxkcmVuLFxuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgcXVlcnk6IHRoaXMuZ3JvdXBRdWVyeUZpbHRlcihtb0lkLCBmaWx0ZXJRdWVyeSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5jaGlsZERldmljZXNMaXN0KG1vSWQsIHsgLi4ucXVlcnlGaWx0ZXIsIC4uLmV4dHJhRmlsdGVyIH0pO1xuICB9XG5cbiAgZ2V0VW5hc3NpZ25lZERldmljZXNRdWVyeVN0cihmaWx0ZXJRdWVyeSk6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzR3JvdXBJZCA9IGZpbHRlclF1ZXJ5LmluY2x1ZGVzKCdieWdyb3VwaWQnKTtcbiAgICAvLyBGZXRjaCBhbGwgdW5hc3NpZ25lZCBkZXZpY2VzLlxuICAgIGNvbnN0IGRlZmF1bHRRdWVyeVN0ciA9ICckb3JkZXJieT1uYW1lJztcblxuICAgIC8vIGZpbHRlclF1ZXJ5IGlzIGEgY3VzdG9tIHF1ZXJ5IHRvIGZldGNoIHVuYXNzaWduZWQgZGV2aWNlcyBmaWx0ZXJlZCBieSBuYW1lLlxuICAgIHJldHVybiBoYXNHcm91cElkIHx8ICFmaWx0ZXJRdWVyeSA/IGRlZmF1bHRRdWVyeVN0ciA6IGZpbHRlclF1ZXJ5O1xuICB9XG5cbiAgZ3JvdXBRdWVyeUZpbHRlcihtb0lkOiBzdHJpbmcsIGZpbHRlclF1ZXJ5Pzogc3RyaW5nKSB7XG4gICAgaWYgKCFmaWx0ZXJRdWVyeSkge1xuICAgICAgcmV0dXJuIGAkZmlsdGVyPShieWdyb3VwaWQoJHttb0lkfSkpJG9yZGVyYnk9bmFtZWA7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJRdWVyeTtcbiAgfVxuXG4gIG5hdlJvb3RRdWVyeUZpbHRlcigpIHtcbiAgICBjb25zdCBuYXZSb290RmlsdGVyID0gdGhpcy5yb290UXVlcnlGaWx0ZXIoKTtcbiAgICBuYXZSb290RmlsdGVyLl9fb3JkZXJieSA9IFt7IG5hbWU6IDEgfV07XG4gICAgcmV0dXJuIG5hdlJvb3RGaWx0ZXI7XG4gIH1cblxuICByb290UXVlcnlGaWx0ZXIoKSB7XG4gICAgY29uc3QgeyBtb2R1bGVDb25maWcgfSA9IHRoaXM7XG4gICAgY29uc3Qgcm9vdEZpbHRlciA9IHRoaXMub3B0aW9uc1NlcnZpY2UuZGlzYWJsZU9ubHlSb290c1F1ZXJ5XG4gICAgICA/IHtcbiAgICAgICAgICBfX2ZpbHRlcjoge1xuICAgICAgICAgICAgdHlwZTogR3JvdXBGcmFnbWVudC5ncm91cFR5cGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIF9fb3JkZXJieTogW11cbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgICAgIF9faGFzOiBHcm91cEZyYWdtZW50Lmdyb3VwRnJhZ21lbnRUeXBlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBfX29yZGVyYnk6IFtdXG4gICAgICAgIH07XG4gICAgaWYgKG1vZHVsZUNvbmZpZy5zbWFydEdyb3Vwcykge1xuICAgICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB7XG4gICAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgICAgX19hbmQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogR3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBUeXBlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBfX2hhczogR3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBGcmFnbWVudFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgX19ub3Q6IHsgX19oYXM6IGAke0dyb3VwRnJhZ21lbnQuZHluYW1pY0dyb3VwRnJhZ21lbnR9LmludmlzaWJsZWAgfSB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5xdWVyaWVzVXRpbC5hZGRPckZpbHRlcihyb290RmlsdGVyLCBxdWVyeUZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiByb290RmlsdGVyO1xuICB9XG5cbiAgb25VcGRhdGUoeyBtbywgcm9vdCB9KSB7XG4gICAgaWYgKG1vLmlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAgIC5ob29rUmVzcG9uc2UoXG4gICAgICAgICAgKHsgdXJsLCBtZXRob2QgfSkgPT5cbiAgICAgICAgICAgIFsnUFVUJywgJ0RFTEVURScsICdQT1NUJ10uaW5jbHVkZXMobWV0aG9kKSAmJlxuICAgICAgICAgICAgUmVnRXhwKGAoKGludmVudG9yeS9tYW5hZ2VkT2JqZWN0cyl8KHNlcnZpY2Uvc21hcnRncm91cC9zbWFydGdyb3VwcykpLyR7bW8uaWR9YCkudGVzdChcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLmRyYWdnZWREYXRhKSxcbiAgICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZXhjbHVkZVBlcm1pc3Npb25DYWxsKCksXG4gICAgICAgICAgbWVyZ2VNYXAodGhpcy5hcGlTZXJ2aWNlLnJlc29sdmVEYXRhPElNYW5hZ2VkT2JqZWN0PiksXG4gICAgICAgICAgZmlsdGVyKHJlc3BvbnNlID0+ICFyZXNwb25zZT8uZGF0YT8uYzh5X0Rhc2hib2FyZClcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHJvb3QpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgICAgLmhvb2tSZXNwb25zZShcbiAgICAgICAgICAoeyB1cmwsIG1ldGhvZCB9KSA9PlxuICAgICAgICAgICAgUmVnRXhwKCcoKGludmVudG9yeS9tYW5hZ2VkT2JqZWN0cyl8KHNlcnZpY2Uvc21hcnRncm91cC9zbWFydGdyb3VwcykpLz8kJykudGVzdCh1cmwpICYmXG4gICAgICAgICAgICBtZXRob2QgPT09ICdQT1NUJ1xuICAgICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKHRoaXMuYXBpU2VydmljZS5yZXNvbHZlRGF0YTxJTWFuYWdlZE9iamVjdD4pLFxuICAgICAgICAgIGZpbHRlcihyZXNwb25zZSA9PiB0aGlzLmlzTmV3TWFuYWdlZE9iamVjdFJvb3QocmVzcG9uc2UpKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZW1wdHkoKTtcbiAgICB9XG4gIH1cblxuICBpc05ld01hbmFnZWRPYmplY3RSb290KHJlc3BvbnNlOiBQYXJ0aWFsPElSZXN1bHQ8SU1hbmFnZWRPYmplY3Q+PiA9IHt9KSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICBsZXQgaXNSb290QXNzZXQgPSBmYWxzZTtcblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlzUm9vdEFzc2V0ID0gISFkYXRhW0dyb3VwRnJhZ21lbnQuZ3JvdXBGcmFnbWVudFR5cGVdO1xuICAgICAgaWYgKCFpc1Jvb3RBc3NldCAmJiB0aGlzLm1vZHVsZUNvbmZpZy5zbWFydEdyb3Vwcykge1xuICAgICAgICBpc1Jvb3RBc3NldCA9ICEhZGF0YVtHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cEZyYWdtZW50XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlzUm9vdEFzc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGRyb3AgYSBub2RlIGFmdGVyIGRyYWdnaW5nLlxuICAgKiBAcGFyYW0gZHJvcE9uUm9vdCBJcyB0aGUgZHJvcCBwZXJmb3JtZWQgb24gdGhlIHJvb3Qgbm9kZVxuICAgKi9cbiAgY2FuRHJvcE5vZGUoZHJvcE9uUm9vdDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhZHJvcE9uUm9vdCB8fFxuICAgICAgdGhpcy51c2VyLmhhc0FueVJvbGUodGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZSwgW1xuICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9BRE1JTixcbiAgICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTlxuICAgICAgXSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGJyZWFkY3J1bWJzIGZvciBkZXZpY2VzLFxuICAgKiBzbyB3ZSBzZXQgYSBwcmVmZXJyZWQgb25lIG9uIGNsaWNrIG9uIGEgZGV2aWNlLlxuICAgKiBAcGFyYW0gcGFyZW50cyBUaGUgcGFyZW50IG5vZGVzIG9mIHRoZSBkZXZpY2UgdG8gc2VsZWN0IHRoZSBwcmVmZXJlZCBvbmUuXG4gICAqL1xuICBwcmVmZXJCcmVhZGNydW1iKHBhcmVudHM6IE5hdmlnYXRvck5vZGVbXSkge1xuICAgIGlmIChwYXJlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5icmVhZGNydW1iU2VydmljZS5zZWxlY3RQcmVmZXJyZWRCeVBhdGgocGFyZW50c1swXS5wYXRoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlRmlsdGVyKGV4dHJhUGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogMTBcbiAgICB9O1xuICAgIHJldHVybiB7IC4uLnBhcmFtcywgLi4uZXh0cmFQYXJhbXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb21iaW5lZFF1ZXJ5KHF1ZXJ5QSwgcXVlcnlCKSB7XG4gICAgbGV0IGNvbWJpbmVkUXVlcnk7XG4gICAgaWYgKHF1ZXJ5QSAmJiBxdWVyeUIpIHtcbiAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KFtcbiAgICAgICAge1xuICAgICAgICAgIF9fdXNlRmlsdGVyUXVlcnlTdHJpbmc6IHF1ZXJ5QVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgX191c2VGaWx0ZXJRdWVyeVN0cmluZzogcXVlcnlCXG4gICAgICAgIH1cbiAgICAgIF0pO1xuICAgICAgY29uc3Qgb3JiZXJCeVF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5leHRyYWN0QW5kTWVyZ2VPcmRlckJ5cyhbcXVlcnlBLCBxdWVyeUJdKTtcbiAgICAgIGNvbWJpbmVkUXVlcnkgPSBgJHtmaWx0ZXJRdWVyeX0gJHtvcmJlckJ5UXVlcnl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tYmluZWRRdWVyeSA9IHF1ZXJ5QSB8fCBxdWVyeUIgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiBjb21iaW5lZFF1ZXJ5O1xuICB9XG59XG4iXX0=
296
+ }] }, { type: i4.DeviceGroupService }, { type: i5.TranslateService }]; } });
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbm9kZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1ub2RlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQVcsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFlBQVksRUFHWixjQUFjLEVBQ2QsV0FBVyxFQUNYLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQXdCLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFVdkQsTUFBTSxPQUFPLGdCQUFnQjtJQU8zQixZQUNTLFNBQTJCLEVBQzNCLFVBQXNCLEVBQ3RCLEtBQW1CLEVBQ25CLEtBQW1CLEVBQ2hCLGlCQUFvQyxFQUNwQyxJQUFpQixFQUNqQixRQUF5QixFQUN6QixjQUE4QixFQUNXLFlBQWtDLEVBQzNFLGtCQUFzQyxFQUN0QyxnQkFBa0M7UUFWckMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDaEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNXLGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQUMzRSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFoQjlDLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFHTixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBZXZCLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztTQUN4QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsRUFBa0I7UUFDdEIsT0FBTyxDQUNMLEVBQUUsQ0FBQyxJQUFJO1lBQ1AsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLEVBQWtCLEVBQUUsSUFBYztRQUNyQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxPQUFPLENBQUMsRUFBa0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxjQUFjLENBQUMsRUFBa0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxZQUFZLENBQUMsRUFBa0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFrQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQWtCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQTRCLEVBQUU7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ25DLElBQUksRUFBRSxJQUFJO1lBQ1YsR0FBRyxNQUFNO1lBQ1QsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCO1lBQzVDLFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsTUFBTTtRQUMzQixPQUFPLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBMEI7UUFDeEMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWUsQ0FBQyxhQUFhLEVBQUUsTUFBMEI7UUFDdkQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQztRQUMvQixNQUFNLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQztRQUMxQixJQUFJLElBQUksS0FBSyxhQUFhLENBQUMsZ0JBQWdCLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFlBQVksQ0FBQyxZQUFrQjtRQUM3QixNQUFNLGFBQWEsR0FBRztZQUNwQixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDeEIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUI7WUFDckQsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzlELENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFFMUQsNkdBQTZHO1FBQzdHLElBQ0UsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDckQsV0FBVyxDQUFDLG1CQUFtQjtZQUMvQixXQUFXLENBQUMsd0JBQXdCO1NBQ3JDLENBQUMsRUFDRjtZQUNBLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtnQkFDekIsWUFBWSxFQUFFLGFBQWEsQ0FBQyxpQkFBaUI7Z0JBQzdDLFNBQVMsRUFBRSxJQUFJO2FBQ2hCLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGlCQUFpQixDQUFDLFlBQWtCO1FBQ2xDLE1BQU0sYUFBYSxHQUFHO1lBQ3BCLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN4QixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxhQUFhLENBQUMsSUFBWSxFQUFFLGNBQXNCLEVBQUUsRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUFFLFdBQVcsR0FBRyxFQUFFO1FBQzFGLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLFlBQVk7WUFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDO1NBQ2hELENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsb0JBQW9CLENBQUMsWUFBWSxHQUFHLEtBQUssRUFBRSxXQUFXLEdBQUcsRUFBRTtRQUN6RCxNQUFNLFdBQVcsR0FBUTtZQUN2QixZQUFZLEVBQUUsY0FBYztZQUM1QixTQUFTLEVBQUUsSUFBSTtZQUNmLFlBQVk7WUFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDeEIsQ0FBQyxFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLENBQUM7U0FDbEQsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxVQUFrQixFQUFFLFlBQWlCLEVBQUU7UUFDMUQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUM1QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxXQUFXLEdBQUc7WUFDbEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO1lBQ3BELEdBQUcsV0FBVztTQUNmLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsSUFBWSxFQUNaLGNBQXNCLEVBQUUsRUFDeEIsV0FBVyxHQUFHLEVBQUUsRUFDaEIsWUFBWSxHQUFHLEtBQUs7UUFFcEIsTUFBTSxXQUFXLEdBQUc7WUFDbEIsWUFBWTtZQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7U0FDaEQsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELDRCQUE0QixDQUFDLFdBQVc7UUFDdEMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRCxnQ0FBZ0M7UUFDaEMsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBRXhDLDhFQUE4RTtRQUM5RSxPQUFPLFVBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDcEUsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVksRUFBRSxXQUFvQjtRQUNqRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU8sc0JBQXNCLElBQUksaUJBQWlCLENBQUM7U0FDcEQ7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUI7WUFDMUQsQ0FBQyxDQUFDO2dCQUNFLFFBQVEsRUFBRTtvQkFDUixJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVM7aUJBQzlCO2dCQUNELFNBQVMsRUFBRSxFQUFFO2FBQ2Q7WUFDSCxDQUFDLENBQUM7Z0JBQ0UsUUFBUSxFQUFFO29CQUNSLEtBQUssRUFBRSxhQUFhLENBQUMsaUJBQWlCO2lCQUN2QztnQkFDRCxTQUFTLEVBQUUsRUFBRTthQUNkLENBQUM7UUFDTixJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDNUIsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFFBQVEsRUFBRTtvQkFDUixLQUFLLEVBQUU7d0JBQ0w7NEJBQ0UsSUFBSSxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0I7eUJBQ3JDO3dCQUNEOzRCQUNFLEtBQUssRUFBRSxhQUFhLENBQUMsb0JBQW9CO3lCQUMxQzt3QkFDRCxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQyxvQkFBb0IsWUFBWSxFQUFFLEVBQUU7cUJBQ3hFO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFO1FBQ25CLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNULE9BQU8sSUFBSSxDQUFDLFVBQVU7aUJBQ25CLFlBQVksQ0FDWCxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FDbEIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxpRUFBaUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNuRixHQUFHLENBQ0osQ0FDSjtpQkFDQSxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLEVBQ3ZDLFFBQVEsQ0FBQyxDQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBMkIsQ0FBQSxDQUFDLEVBQ3JELE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FDbkQsQ0FBQztTQUNMO2FBQU0sSUFBSSxJQUFJLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQyxVQUFVO2lCQUNuQixZQUFZLENBQ1gsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQ2xCLE1BQU0sQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQ3BGLE1BQU0sS0FBSyxNQUFNLENBQ3BCO2lCQUNBLElBQUksQ0FDSCxRQUFRLENBQUMsQ0FBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQTJCLENBQUEsQ0FBQyxFQUNyRCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDMUQsQ0FBQztTQUNMO2FBQU07WUFDTCxPQUFPLEtBQUssRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQTZDLEVBQUU7UUFDcEUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFeEIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDNUIsV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtnQkFDakQsV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDMUQ7U0FDRjtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsVUFBbUI7UUFDN0IsT0FBTyxDQUNMLENBQUMsVUFBVTtZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtnQkFDcEQsV0FBVyxDQUFDLG9CQUFvQjtnQkFDaEMsV0FBVyxDQUFDLHlCQUF5QjthQUN0QyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsT0FBd0I7UUFDdkMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVTLFlBQVksQ0FBQyxjQUFtQixFQUFFO1FBQzFDLE1BQU0sTUFBTSxHQUFHO1lBQ2IsV0FBVyxFQUFFLENBQUM7WUFDZCxjQUFjLEVBQUUsSUFBSTtZQUNwQixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFDRixPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLE1BQU07UUFDdkMsSUFBSSxhQUFhLENBQUM7UUFDbEIsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFO1lBQ3BCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUM5QztvQkFDRSxzQkFBc0IsRUFBRSxNQUFNO2lCQUMvQjtnQkFDRDtvQkFDRSxzQkFBc0IsRUFBRSxNQUFNO2lCQUMvQjthQUNGLENBQUMsQ0FBQztZQUNILE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoRixhQUFhLEdBQUcsR0FBRyxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7U0FDbEQ7YUFBTTtZQUNMLGFBQWEsR0FBRyxNQUFNLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQztTQUN4QztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7OzZHQXJVVSxnQkFBZ0IsNlBBZ0JMLHNCQUFzQjtpSEFoQmpDLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBaUJJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElSZXN1bHQsIFF1ZXJpZXNVdGlsLCBVc2VyU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCcmVhZGNydW1iU2VydmljZSxcbiAgR3JvdXBGcmFnbWVudCxcbiAgTW9kYWxTZXJ2aWNlLFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JOb2RlRGF0YSxcbiAgT3B0aW9uc1NlcnZpY2UsXG4gIFBlcm1pc3Npb25zLFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXBpJztcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXNzZXROb2RlIH0gZnJvbSAnLi9hc3NldC1ub2RlJztcbmltcG9ydCB7IEFzc2V0TmF2aWdhdG9yQ29uZmlnLCBBU1NFVF9OQVZJR0FUT1JfQ09ORklHIH0gZnJvbSAnLi9hc3NldC1ub2RlLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBEeW5hbWljR3JvdXBOb2RlIH0gZnJvbSAnLi9keW5hbWljLWdyb3VwLW5vZGUnO1xuaW1wb3J0IHsgRGV2aWNlR3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi9ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBc3NldE5vZGVNbyB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXNzZXROb2RlU2VydmljZSB7XG4gIHJvb3ROb2RlOiBBc3NldE5vZGU7XG4gIGZpcnN0VXJsID0gdHJ1ZTtcbiAgZHJhZ2dlZERhdGE6IEFzc2V0Tm9kZTtcbiAgcXVlcmllc1V0aWw6IFF1ZXJpZXNVdGlsO1xuICBwcm90ZWN0ZWQgUEFHRV9TSVpFID0gMjA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwdWJsaWMgYXBpU2VydmljZTogQXBpU2VydmljZSxcbiAgICBwdWJsaWMgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwdWJsaWMgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYnJlYWRjcnVtYlNlcnZpY2U6IEJyZWFkY3J1bWJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB1c2VyOiBVc2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVNTRVRfTkFWSUdBVE9SX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQXNzZXROYXZpZ2F0b3JDb25maWcsXG4gICAgcHJvdGVjdGVkIGRldmljZUdyb3VwU2VydmljZTogRGV2aWNlR3JvdXBTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubW9kdWxlQ29uZmlnID0ge1xuICAgICAgcm9vdE5vZGVQcmlvcml0eTogMjAwMCxcbiAgICAgIC4uLihtb2R1bGVDb25maWcgfHwge30pXG4gICAgfTtcbiAgICB0aGlzLnF1ZXJpZXNVdGlsID0gbmV3IFF1ZXJpZXNVdGlsKCk7XG4gIH1cblxuICBsYWJlbChtbzogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBtby5uYW1lIHx8XG4gICAgICAodGhpcy5pc0RldmljZShtbykgJiZcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnRGV2aWNlIHt7aWR9fScpLCB7IGlkOiBtby5pZCB9KSkgfHxcbiAgICAgICctLSdcbiAgICApO1xuICB9XG5cbiAgaWNvbihtbzogSU1hbmFnZWRPYmplY3QsIG9wZW4/OiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaWNvbihtbywgb3Blbik7XG4gIH1cblxuICBpc0dyb3VwKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0dyb3VwKG1vKTtcbiAgfVxuXG4gIGlzRHluYW1pY0dyb3VwKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0R5bmFtaWNHcm91cChtbyk7XG4gIH1cblxuICBpc0RhdGFCcm9rZXIobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGF0YUJyb2tlcihtbyk7XG4gIH1cblxuICBpc0RhdGFCcm9rZXJBY3RpdmUobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGF0YUJyb2tlckFjdGl2ZShtbyk7XG4gIH1cblxuICBpc0Fzc2V0KG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0Fzc2V0KG1vKTtcbiAgfVxuXG4gIGlzQW55R3JvdXAobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzQW55R3JvdXAobW8pO1xuICB9XG5cbiAgaXNEZXZpY2UobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGV2aWNlKG1vKTtcbiAgfVxuXG4gIGNyZWF0ZVJvb3ROb2RlKGNvbmZpZzogTmF2aWdhdG9yTm9kZURhdGEgPSB7fSkge1xuICAgIHRoaXMucm9vdE5vZGUgPSB0aGlzLmNyZWF0ZUFzc2V0Tm9kZSh7XG4gICAgICByb290OiB0cnVlLFxuICAgICAgLi4uY29uZmlnLFxuICAgICAgcHJpb3JpdHk6IHRoaXMubW9kdWxlQ29uZmlnLnJvb3ROb2RlUHJpb3JpdHksXG4gICAgICBmZWF0dXJlSWQ6ICdncm91cHMnXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucm9vdE5vZGU7XG4gIH1cblxuICBjcmVhdGVEeW5hbWljR3JvdXBOb2RlKGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgRHluYW1pY0dyb3VwTm9kZSh0aGlzLCBjb25maWcpO1xuICB9XG5cbiAgY3JlYXRlQXNzZXROb2RlKGNvbmZpZzogUGFydGlhbDxBc3NldE5vZGU+KSB7XG4gICAgcmV0dXJuIG5ldyBBc3NldE5vZGUodGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIGNyZWF0ZUNoaWxkTm9kZShtYW5hZ2VkT2JqZWN0LCBjb25maWc6IFBhcnRpYWw8QXNzZXROb2RlPikge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gbWFuYWdlZE9iamVjdDtcbiAgICBjb25maWcubW8gPSBtYW5hZ2VkT2JqZWN0O1xuICAgIGlmICh0eXBlID09PSBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cFR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUR5bmFtaWNHcm91cE5vZGUoY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlQXNzZXROb2RlKGNvbmZpZyk7XG4gIH1cblxuICBnZXRSb290Tm9kZXMoY3VzdG9tRmlsdGVyPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0ge1xuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZSxcbiAgICAgIG9ubHlSb290czogIXRoaXMub3B0aW9uc1NlcnZpY2UuZGlzYWJsZU9ubHlSb290c1F1ZXJ5LFxuICAgICAgcXVlcnk6IHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeSh0aGlzLm5hdlJvb3RRdWVyeUZpbHRlcigpKVxuICAgIH07XG4gICAgY29uc3QgZ3JvdXBGaWx0ZXIgPSB7IC4uLmRlZmF1bHRGaWx0ZXIsIC4uLmN1c3RvbUZpbHRlciB9O1xuXG4gICAgLy8gZHVlIHRvIEJFIHBlcmZvcm1hbmNlIGxpbWl0YXRpb25zIHdlIGRvIG5vdCBhbGxvdyBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgZm9yIGEgdXNlciB3aXRob3V0IGludmVudG9yeSByb2xlc1xuICAgIGlmIChcbiAgICAgICF0aGlzLnVzZXIuaGFzQW55Um9sZSh0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlLCBbXG4gICAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX1JFQUQsXG4gICAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfUkVBRFxuICAgICAgXSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBncm91cEZpbHRlci5xdWVyeTtcbiAgICAgIE9iamVjdC5hc3NpZ24oZ3JvdXBGaWx0ZXIsIHtcbiAgICAgICAgZnJhZ21lbnRUeXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwRnJhZ21lbnRUeXBlLFxuICAgICAgICBvbmx5Um9vdHM6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh0aGlzLmNyZWF0ZUZpbHRlcihncm91cEZpbHRlcikpO1xuICB9XG5cbiAgZ2V0QWxsSW52ZW50b3JpZXMoY3VzdG9tRmlsdGVyPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0ge1xuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgZ3JvdXBGaWx0ZXIgPSB7IC4uLmRlZmF1bHRGaWx0ZXIsIC4uLmN1c3RvbUZpbHRlciB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHRoaXMuY3JlYXRlRmlsdGVyKGdyb3VwRmlsdGVyKSk7XG4gIH1cblxuICBnZXRHcm91cEl0ZW1zKG1vSWQ6IHN0cmluZywgZXh0cmFGaWx0ZXI6IG9iamVjdCA9IHt9LCB3aXRoQ2hpbGRyZW4gPSBmYWxzZSwgZmlsdGVyUXVlcnkgPSAnJykge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyID0ge1xuICAgICAgd2l0aENoaWxkcmVuLFxuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgcXVlcnk6IHRoaXMuZ3JvdXBRdWVyeUZpbHRlcihtb0lkLCBmaWx0ZXJRdWVyeSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5jaGlsZEFzc2V0c0xpc3QobW9JZCwgeyAuLi5xdWVyeUZpbHRlciwgLi4uZXh0cmFGaWx0ZXIgfSk7XG4gIH1cblxuICBnZXRVbmFzc2lnbmVkRGV2aWNlcyh3aXRoQ2hpbGRyZW4gPSBmYWxzZSwgZmlsdGVyUXVlcnkgPSAnJykge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyOiBhbnkgPSB7XG4gICAgICBmcmFnbWVudFR5cGU6ICdjOHlfSXNEZXZpY2UnLFxuICAgICAgb25seVJvb3RzOiB0cnVlLFxuICAgICAgd2l0aENoaWxkcmVuLFxuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgcTogdGhpcy5nZXRVbmFzc2lnbmVkRGV2aWNlc1F1ZXJ5U3RyKGZpbHRlclF1ZXJ5KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3QodGhpcy5jcmVhdGVGaWx0ZXIocXVlcnlGaWx0ZXIpKTtcbiAgfVxuXG4gIGdldER5bmFtaWNHcm91cEl0ZW1zKGdyb3VwUXVlcnk6IHN0cmluZywgZmlsdGVyT2JqOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IHsgcXVlcnksIC4uLnF1ZXJ5UGFyYW1zIH0gPSBmaWx0ZXJPYmo7XG4gICAgY29uc3Qgb3JkZXJCeVF1ZXJ5ID0gcXVlcnk7XG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB7XG4gICAgICBxOiB0aGlzLmJ1aWxkQ29tYmluZWRRdWVyeShncm91cFF1ZXJ5LCBvcmRlckJ5UXVlcnkpLFxuICAgICAgLi4ucXVlcnlQYXJhbXNcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHRoaXMuY3JlYXRlRmlsdGVyKHF1ZXJ5RmlsdGVyKSk7XG4gIH1cblxuICBnZXREZXZpY2VDaGlsZHJlbihcbiAgICBtb0lkOiBzdHJpbmcsXG4gICAgZXh0cmFGaWx0ZXI6IG9iamVjdCA9IHt9LFxuICAgIGZpbHRlclF1ZXJ5ID0gJycsXG4gICAgd2l0aENoaWxkcmVuID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB7XG4gICAgICB3aXRoQ2hpbGRyZW4sXG4gICAgICBwYWdlU2l6ZTogdGhpcy5QQUdFX1NJWkUsXG4gICAgICBxdWVyeTogdGhpcy5ncm91cFF1ZXJ5RmlsdGVyKG1vSWQsIGZpbHRlclF1ZXJ5KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5LmNoaWxkRGV2aWNlc0xpc3QobW9JZCwgeyAuLi5xdWVyeUZpbHRlciwgLi4uZXh0cmFGaWx0ZXIgfSk7XG4gIH1cblxuICBnZXRVbmFzc2lnbmVkRGV2aWNlc1F1ZXJ5U3RyKGZpbHRlclF1ZXJ5KTogc3RyaW5nIHtcbiAgICBjb25zdCBoYXNHcm91cElkID0gZmlsdGVyUXVlcnkuaW5jbHVkZXMoJ2J5Z3JvdXBpZCcpO1xuICAgIC8vIEZldGNoIGFsbCB1bmFzc2lnbmVkIGRldmljZXMuXG4gICAgY29uc3QgZGVmYXVsdFF1ZXJ5U3RyID0gJyRvcmRlcmJ5PW5hbWUnO1xuXG4gICAgLy8gZmlsdGVyUXVlcnkgaXMgYSBjdXN0b20gcXVlcnkgdG8gZmV0Y2ggdW5hc3NpZ25lZCBkZXZpY2VzIGZpbHRlcmVkIGJ5IG5hbWUuXG4gICAgcmV0dXJuIGhhc0dyb3VwSWQgfHwgIWZpbHRlclF1ZXJ5ID8gZGVmYXVsdFF1ZXJ5U3RyIDogZmlsdGVyUXVlcnk7XG4gIH1cblxuICBncm91cFF1ZXJ5RmlsdGVyKG1vSWQ6IHN0cmluZywgZmlsdGVyUXVlcnk/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWZpbHRlclF1ZXJ5KSB7XG4gICAgICByZXR1cm4gYCRmaWx0ZXI9KGJ5Z3JvdXBpZCgke21vSWR9KSkkb3JkZXJieT1uYW1lYDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlclF1ZXJ5O1xuICB9XG5cbiAgbmF2Um9vdFF1ZXJ5RmlsdGVyKCkge1xuICAgIGNvbnN0IG5hdlJvb3RGaWx0ZXIgPSB0aGlzLnJvb3RRdWVyeUZpbHRlcigpO1xuICAgIG5hdlJvb3RGaWx0ZXIuX19vcmRlcmJ5ID0gW3sgbmFtZTogMSB9XTtcbiAgICByZXR1cm4gbmF2Um9vdEZpbHRlcjtcbiAgfVxuXG4gIHJvb3RRdWVyeUZpbHRlcigpIHtcbiAgICBjb25zdCB7IG1vZHVsZUNvbmZpZyB9ID0gdGhpcztcbiAgICBjb25zdCByb290RmlsdGVyID0gdGhpcy5vcHRpb25zU2VydmljZS5kaXNhYmxlT25seVJvb3RzUXVlcnlcbiAgICAgID8ge1xuICAgICAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwVHlwZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgX19vcmRlcmJ5OiBbXVxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICBfX2ZpbHRlcjoge1xuICAgICAgICAgICAgX19oYXM6IEdyb3VwRnJhZ21lbnQuZ3JvdXBGcmFnbWVudFR5cGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIF9fb3JkZXJieTogW11cbiAgICAgICAgfTtcbiAgICBpZiAobW9kdWxlQ29uZmlnLnNtYXJ0R3JvdXBzKSB7XG4gICAgICBjb25zdCBxdWVyeUZpbHRlciA9IHtcbiAgICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgICBfX2FuZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cFR5cGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIF9faGFzOiBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cEZyYWdtZW50XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBfX25vdDogeyBfX2hhczogYCR7R3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBGcmFnbWVudH0uaW52aXNpYmxlYCB9IH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXJpZXNVdGlsLmFkZE9yRmlsdGVyKHJvb3RGaWx0ZXIsIHF1ZXJ5RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3RGaWx0ZXI7XG4gIH1cblxuICBvblVwZGF0ZSh7IG1vLCByb290IH0pIHtcbiAgICBpZiAobW8uaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgICAgLmhvb2tSZXNwb25zZShcbiAgICAgICAgICAoeyB1cmwsIG1ldGhvZCB9KSA9PlxuICAgICAgICAgICAgWydQVVQnLCAnREVMRVRFJywgJ1BPU1QnXS5pbmNsdWRlcyhtZXRob2QpICYmXG4gICAgICAgICAgICBSZWdFeHAoYCgoaW52ZW50b3J5L21hbmFnZWRPYmplY3RzKXwoc2VydmljZS9zbWFydGdyb3VwL3NtYXJ0Z3JvdXBzKSkvJHttby5pZH1gKS50ZXN0KFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuZHJhZ2dlZERhdGEpLFxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS5leGNsdWRlUGVybWlzc2lvbkNhbGwoKSxcbiAgICAgICAgICBtZXJnZU1hcCh0aGlzLmFwaVNlcnZpY2UucmVzb2x2ZURhdGE8SU1hbmFnZWRPYmplY3Q+KSxcbiAgICAgICAgICBmaWx0ZXIocmVzcG9uc2UgPT4gIXJlc3BvbnNlPy5kYXRhPy5jOHlfRGFzaGJvYXJkKVxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAocm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgICAuaG9va1Jlc3BvbnNlKFxuICAgICAgICAgICh7IHVybCwgbWV0aG9kIH0pID0+XG4gICAgICAgICAgICBSZWdFeHAoJygoaW52ZW50b3J5L21hbmFnZWRPYmplY3RzKXwoc2VydmljZS9zbWFydGdyb3VwL3NtYXJ0Z3JvdXBzKSkvPyQnKS50ZXN0KHVybCkgJiZcbiAgICAgICAgICAgIG1ldGhvZCA9PT0gJ1BPU1QnXG4gICAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAodGhpcy5hcGlTZXJ2aWNlLnJlc29sdmVEYXRhPElNYW5hZ2VkT2JqZWN0PiksXG4gICAgICAgICAgZmlsdGVyKHJlc3BvbnNlID0+IHRoaXMuaXNOZXdNYW5hZ2VkT2JqZWN0Um9vdChyZXNwb25zZSkpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIGlzTmV3TWFuYWdlZE9iamVjdFJvb3QocmVzcG9uc2U6IFBhcnRpYWw8SVJlc3VsdDxJTWFuYWdlZE9iamVjdD4+ID0ge30pIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgIGxldCBpc1Jvb3RBc3NldCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgaXNSb290QXNzZXQgPSAhIWRhdGFbR3JvdXBGcmFnbWVudC5ncm91cEZyYWdtZW50VHlwZV07XG4gICAgICBpZiAoIWlzUm9vdEFzc2V0ICYmIHRoaXMubW9kdWxlQ29uZmlnLnNtYXJ0R3JvdXBzKSB7XG4gICAgICAgIGlzUm9vdEFzc2V0ID0gISFkYXRhW0dyb3VwRnJhZ21lbnQuZHluYW1pY0dyb3VwRnJhZ21lbnRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNSb290QXNzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgaXQgaXMgcG9zc2libGUgdG8gZHJvcCBhIG5vZGUgYWZ0ZXIgZHJhZ2dpbmcuXG4gICAqIEBwYXJhbSBkcm9wT25Sb290IElzIHRoZSBkcm9wIHBlcmZvcm1lZCBvbiB0aGUgcm9vdCBub2RlXG4gICAqL1xuICBjYW5Ecm9wTm9kZShkcm9wT25Sb290OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICFkcm9wT25Sb290IHx8XG4gICAgICB0aGlzLnVzZXIuaGFzQW55Um9sZSh0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlLCBbXG4gICAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0FETUlOXG4gICAgICBdKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgY291bGQgYmUgbXVsdGlwbGUgYnJlYWRjcnVtYnMgZm9yIGRldmljZXMsXG4gICAqIHNvIHdlIHNldCBhIHByZWZlcnJlZCBvbmUgb24gY2xpY2sgb24gYSBkZXZpY2UuXG4gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBwYXJlbnQgbm9kZXMgb2YgdGhlIGRldmljZSB0byBzZWxlY3QgdGhlIHByZWZlcmVkIG9uZS5cbiAgICovXG4gIHByZWZlckJyZWFkY3J1bWIocGFyZW50czogTmF2aWdhdG9yTm9kZVtdKSB7XG4gICAgaWYgKHBhcmVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmJyZWFkY3J1bWJTZXJ2aWNlLnNlbGVjdFByZWZlcnJlZEJ5UGF0aChwYXJlbnRzWzBdLnBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVGaWx0ZXIoZXh0cmFQYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgY3VycmVudFBhZ2U6IDEsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIHBhZ2VTaXplOiAxMFxuICAgIH07XG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi5leHRyYVBhcmFtcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbWJpbmVkUXVlcnkocXVlcnlBLCBxdWVyeUIpIHtcbiAgICBsZXQgY29tYmluZWRRdWVyeTtcbiAgICBpZiAocXVlcnlBICYmIHF1ZXJ5Qikge1xuICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoW1xuICAgICAgICB7XG4gICAgICAgICAgX191c2VGaWx0ZXJRdWVyeVN0cmluZzogcXVlcnlBXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBfX3VzZUZpbHRlclF1ZXJ5U3RyaW5nOiBxdWVyeUJcbiAgICAgICAgfVxuICAgICAgXSk7XG4gICAgICBjb25zdCBvcmJlckJ5UXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmV4dHJhY3RBbmRNZXJnZU9yZGVyQnlzKFtxdWVyeUEsIHF1ZXJ5Ql0pO1xuICAgICAgY29tYmluZWRRdWVyeSA9IGAke2ZpbHRlclF1ZXJ5fSAke29yYmVyQnlRdWVyeX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21iaW5lZFF1ZXJ5ID0gcXVlcnlBIHx8IHF1ZXJ5QiB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuIGNvbWJpbmVkUXVlcnk7XG4gIH1cbn1cbiJdfQ==
@@ -23,9 +23,9 @@ export class TitleOutletComponent {
23
23
  }
24
24
  }
25
25
  TitleOutletComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: TitleOutletComponent, deps: [{ token: i1.HeaderService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
26
- TitleOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: TitleOutletComponent, selector: "c8y-title-outlet", ngImport: i0, template: "<div class=\"c8y-ui-title\">\n <div class=\"title\" *c8yOutlet=\"title\"></div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.OutletDirective, selector: "[c8yOutlet]", inputs: ["c8yOutlet", "c8yOutletProperties", "c8yOutletInjector"] }] });
26
+ TitleOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: TitleOutletComponent, selector: "c8y-title-outlet", ngImport: i0, template: "<div class=\"c8y-ui-title\" data-cy=\"c8y-title--title-outlet\">\n <div class=\"title\" *c8yOutlet=\"title\"></div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.OutletDirective, selector: "[c8yOutlet]", inputs: ["c8yOutlet", "c8yOutletProperties", "c8yOutletInjector"] }] });
27
27
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: TitleOutletComponent, decorators: [{
28
28
  type: Component,
29
- args: [{ selector: 'c8y-title-outlet', template: "<div class=\"c8y-ui-title\">\n <div class=\"title\" *c8yOutlet=\"title\"></div>\n</div>\n" }]
29
+ args: [{ selector: 'c8y-title-outlet', template: "<div class=\"c8y-ui-title\" data-cy=\"c8y-title--title-outlet\">\n <div class=\"title\" *c8yOutlet=\"title\"></div>\n</div>\n" }]
30
30
  }], ctorParameters: function () { return [{ type: i1.HeaderService }, { type: i0.ElementRef }, { type: i0.NgZone }]; } });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUtb3V0bGV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvaGVhZGVyL3RpdGxlL3RpdGxlLW91dGxldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2hlYWRlci90aXRsZS90aXRsZS1vdXRsZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQU0zRCxNQUFNLE9BQU8sb0JBQW9CO0lBSS9CLFlBQ1UsYUFBNEIsRUFDNUIsT0FBbUIsRUFDbkIsSUFBWTtRQUZaLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQU50QixVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ2xCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBT3JCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVoRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hGLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBRXhGLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtpQkFDdEIsSUFBSSxDQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUN0QyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDekQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUN6QixHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FDaEI7aUJBQ0EsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztpSEE1QlUsb0JBQW9CO3FHQUFwQixvQkFBb0Isd0RDUmpDLDRGQUdBOzJGREthLG9CQUFvQjtrQkFKaEMsU0FBUzsrQkFDRSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2hlYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10aXRsZS1vdXRsZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGl0bGUtb3V0bGV0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUaXRsZU91dGxldENvbXBvbmVudCB7XG4gIHRpdGxlID0gdW5kZWZpbmVkO1xuICBwYWdlVGl0bGVVcGRhdGUgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaGVhZGVyU2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgY29uc3QgdGl0bGUkID0gdGhpcy5oZWFkZXJTZXJ2aWNlLm1hcChzdGF0ZSA9PiBzdGF0ZS50aXRsZSk7XG4gICAgdGl0bGUkLnN1YnNjcmliZSh0aXRsZSA9PiAodGhpcy50aXRsZSA9IHRpdGxlKSk7XG5cbiAgICBjb25zdCBwYWdlVGl0bGVVcGRhdGUkID0gdGhpcy5oZWFkZXJTZXJ2aWNlLm1hcChzdGF0ZSA9PiBzdGF0ZS5wYWdlVGl0bGVVcGRhdGUpO1xuICAgIHBhZ2VUaXRsZVVwZGF0ZSQuc3Vic2NyaWJlKHBhZ2VUaXRsZVVwZGF0ZSA9PiAodGhpcy5wYWdlVGl0bGVVcGRhdGUgPSBwYWdlVGl0bGVVcGRhdGUpKTtcblxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmhlYWRlclNlcnZpY2Uuc3RhdGUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgIGZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5wYWdlVGl0bGVVcGRhdGUpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdoMScpKSxcbiAgICAgICAgICBmaWx0ZXIoZWwgPT4gZWwgIT09IG51bGwpLFxuICAgICAgICAgIG1hcChlbCA9PiBlbC5pbm5lclRleHQpLFxuICAgICAgICAgIGZpbHRlcihCb29sZWFuKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHRpdGxlOiBzdHJpbmcpID0+IGhlYWRlclNlcnZpY2UuY2hhbmdlUGFnZVRpdGxlKHRpdGxlKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktdWktdGl0bGVcIj5cbiAgPGRpdiBjbGFzcz1cInRpdGxlXCIgKmM4eU91dGxldD1cInRpdGxlXCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUtb3V0bGV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvaGVhZGVyL3RpdGxlL3RpdGxlLW91dGxldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2hlYWRlci90aXRsZS90aXRsZS1vdXRsZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQU0zRCxNQUFNLE9BQU8sb0JBQW9CO0lBSS9CLFlBQ1UsYUFBNEIsRUFDNUIsT0FBbUIsRUFDbkIsSUFBWTtRQUZaLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQU50QixVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ2xCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBT3JCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVoRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hGLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBRXhGLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtpQkFDdEIsSUFBSSxDQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUN0QyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDekQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUN6QixHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FDaEI7aUJBQ0EsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztpSEE1QlUsb0JBQW9CO3FHQUFwQixvQkFBb0Isd0RDUmpDLGdJQUdBOzJGREthLG9CQUFvQjtrQkFKaEMsU0FBUzsrQkFDRSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2hlYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10aXRsZS1vdXRsZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGl0bGUtb3V0bGV0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUaXRsZU91dGxldENvbXBvbmVudCB7XG4gIHRpdGxlID0gdW5kZWZpbmVkO1xuICBwYWdlVGl0bGVVcGRhdGUgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaGVhZGVyU2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgY29uc3QgdGl0bGUkID0gdGhpcy5oZWFkZXJTZXJ2aWNlLm1hcChzdGF0ZSA9PiBzdGF0ZS50aXRsZSk7XG4gICAgdGl0bGUkLnN1YnNjcmliZSh0aXRsZSA9PiAodGhpcy50aXRsZSA9IHRpdGxlKSk7XG5cbiAgICBjb25zdCBwYWdlVGl0bGVVcGRhdGUkID0gdGhpcy5oZWFkZXJTZXJ2aWNlLm1hcChzdGF0ZSA9PiBzdGF0ZS5wYWdlVGl0bGVVcGRhdGUpO1xuICAgIHBhZ2VUaXRsZVVwZGF0ZSQuc3Vic2NyaWJlKHBhZ2VUaXRsZVVwZGF0ZSA9PiAodGhpcy5wYWdlVGl0bGVVcGRhdGUgPSBwYWdlVGl0bGVVcGRhdGUpKTtcblxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmhlYWRlclNlcnZpY2Uuc3RhdGUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgIGZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5wYWdlVGl0bGVVcGRhdGUpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdoMScpKSxcbiAgICAgICAgICBmaWx0ZXIoZWwgPT4gZWwgIT09IG51bGwpLFxuICAgICAgICAgIG1hcChlbCA9PiBlbC5pbm5lclRleHQpLFxuICAgICAgICAgIGZpbHRlcihCb29sZWFuKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHRpdGxlOiBzdHJpbmcpID0+IGhlYWRlclNlcnZpY2UuY2hhbmdlUGFnZVRpdGxlKHRpdGxlKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktdWktdGl0bGVcIiBkYXRhLWN5PVwiYzh5LXRpdGxlLS10aXRsZS1vdXRsZXRcIj5cbiAgPGRpdiBjbGFzcz1cInRpdGxlXCIgKmM4eU91dGxldD1cInRpdGxlXCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -50,19 +50,13 @@ export class RegistrationDateDeviceGridColumn extends BaseColumn {
50
50
  if (dates.after) {
51
51
  const after = this.formatDate(dates.after);
52
52
  filter.__and.push({
53
- __or: {
54
- [this.path]: { __gt: after },
55
- [`${this.path}.date`]: { __gt: after }
56
- }
53
+ 'creationTime.date': { __gt: after }
57
54
  });
58
55
  }
59
56
  if (dates.before) {
60
57
  const before = this.formatDate(dates.before);
61
58
  filter.__and.push({
62
- __or: {
63
- [this.path]: { __lt: before },
64
- [`${this.path}.date`]: { __lt: before }
65
- }
59
+ 'creationTime.date': { __lt: before }
66
60
  });
67
61
  }
68
62
  }
@@ -71,11 +65,11 @@ export class RegistrationDateDeviceGridColumn extends BaseColumn {
71
65
  };
72
66
  this.sortable = true;
73
67
  this.sortingConfig = {
74
- pathSortingConfigs: [{ path: `${this.path}.date` }, { path: this.path }]
68
+ pathSortingConfigs: [{ path: 'creationTime.date' }]
75
69
  };
76
70
  }
77
71
  formatDate(dateToFormat) {
78
72
  return new Date(dateToFormat).toISOString();
79
73
  }
80
74
  }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLWRhdGUuZGV2aWNlLWdyaWQtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGV2aWNlLWdyaWQvY29sdW1ucy9yZWdpc3RyYXRpb24tZGF0ZS5kZXZpY2UtZ3JpZC1jb2x1bW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRXBHLE1BQU0sT0FBTyxnQ0FBaUMsU0FBUSxVQUFVO0lBQzlELFlBQVksbUJBQWtDO1FBQzVDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMscUJBQXFCLEdBQUcscUNBQXFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsR0FBRyxFQUFFLGtCQUFrQjtvQkFDdkIsZUFBZSxFQUFFO3dCQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsc0NBQXNDLENBQUM7cUJBQ3ZEO29CQUNELFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxJQUFJLEVBQUUsV0FBVzs0QkFDakIsR0FBRyxFQUFFLE9BQU87NEJBQ1osZUFBZSxFQUFFO2dDQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDOzZCQUM3Qjs0QkFDRCxvQkFBb0IsRUFBRTtnQ0FDcEIseUJBQXlCLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNOzZCQUN6RDt5QkFDRjt3QkFDRDs0QkFDRSxJQUFJLEVBQUUsV0FBVzs0QkFDakIsR0FBRyxFQUFFLFFBQVE7NEJBQ2IsZUFBZSxFQUFFO2dDQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDOzZCQUMzQjs0QkFDRCxvQkFBb0IsRUFBRTtnQ0FDcEIseUJBQXlCLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLOzZCQUN4RDt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1lBQ0QsU0FBUyxFQUFFLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM1QixTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDOUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDMUMsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ2xCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTt3QkFDZixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDM0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLElBQUksRUFBRTtnQ0FDSixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7Z0NBQzVCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7NkJBQ3ZDO3lCQUNGLENBQUMsQ0FBQztxQkFDSjtvQkFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7d0JBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzs0QkFDaEIsSUFBSSxFQUFFO2dDQUNKLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtnQ0FDN0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTs2QkFDeEM7eUJBQ0YsQ0FBQyxDQUFDO3FCQUNKO2lCQUNGO2dCQUNELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixrQkFBa0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3pFLENBQUM7SUFDSixDQUFDO0lBRVMsVUFBVSxDQUFDLFlBQW9CO1FBQ3ZDLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZUNvbHVtbiwgQ29sdW1uQ29uZmlnLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25EYXRlQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9yZWdpc3RyYXRpb24tZGF0ZS5jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjbGFzcyBSZWdpc3RyYXRpb25EYXRlRGV2aWNlR3JpZENvbHVtbiBleHRlbmRzIEJhc2VDb2x1bW4ge1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsQ29sdW1uQ29uZmlnPzogQ29sdW1uQ29uZmlnKSB7XG4gICAgc3VwZXIoaW5pdGlhbENvbHVtbkNvbmZpZyk7XG5cbiAgICB0aGlzLnBhdGggPSAnY3JlYXRpb25UaW1lJztcbiAgICB0aGlzLm5hbWUgPSAncmVnaXN0cmF0aW9uRGF0ZSc7XG4gICAgdGhpcy5oZWFkZXIgPSBnZXR0ZXh0KCdSZWdpc3RyYXRpb24gZGF0ZScpO1xuICAgIHRoaXMuY2VsbFJlbmRlcmVyQ29tcG9uZW50ID0gUmVnaXN0cmF0aW9uRGF0ZUNlbGxSZW5kZXJlckNvbXBvbmVudDtcblxuICAgIHRoaXMuZmlsdGVyYWJsZSA9IHRydWU7XG4gICAgdGhpcy5maWx0ZXJpbmdDb25maWcgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIGtleTogJ3JlZ2lzdHJhdGlvbkRhdGUnLFxuICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ1Nob3cgaXRlbXMgcmVnaXN0ZXJlZGBiZXR3ZWVuIGRhdGVzYCcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWVsZEdyb3VwOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdkYXRlLXRpbWUnLFxuICAgICAgICAgICAgICBrZXk6ICdhZnRlcicsXG4gICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdmcm9tYGRhdGVgJylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvblByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAndGVtcGxhdGVPcHRpb25zLm1heERhdGUnOiAobW9kZWw6IGFueSkgPT4gbW9kZWw/LmJlZm9yZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnZGF0ZS10aW1lJyxcbiAgICAgICAgICAgICAga2V5OiAnYmVmb3JlJyxcbiAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ3RvYGRhdGVgJylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvblByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAndGVtcGxhdGVPcHRpb25zLm1pbkRhdGUnOiAobW9kZWw6IGFueSkgPT4gbW9kZWw/LmFmdGVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBmb3JtR3JvdXA6IG5ldyBGb3JtR3JvdXAoe30pLFxuICAgICAgZ2V0RmlsdGVyOiBtb2RlbCA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcjogYW55ID0ge307XG4gICAgICAgIGNvbnN0IGRhdGVzID0gbW9kZWwgJiYgbW9kZWwucmVnaXN0cmF0aW9uRGF0ZTtcbiAgICAgICAgaWYgKGRhdGVzICYmIChkYXRlcy5hZnRlciB8fCBkYXRlcy5iZWZvcmUpKSB7XG4gICAgICAgICAgZmlsdGVyLl9fYW5kID0gW107XG4gICAgICAgICAgaWYgKGRhdGVzLmFmdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IHRoaXMuZm9ybWF0RGF0ZShkYXRlcy5hZnRlcik7XG4gICAgICAgICAgICBmaWx0ZXIuX19hbmQucHVzaCh7XG4gICAgICAgICAgICAgIF9fb3I6IHtcbiAgICAgICAgICAgICAgICBbdGhpcy5wYXRoXTogeyBfX2d0OiBhZnRlciB9LFxuICAgICAgICAgICAgICAgIFtgJHt0aGlzLnBhdGh9LmRhdGVgXTogeyBfX2d0OiBhZnRlciB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGF0ZXMuYmVmb3JlKSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmUgPSB0aGlzLmZvcm1hdERhdGUoZGF0ZXMuYmVmb3JlKTtcbiAgICAgICAgICAgIGZpbHRlci5fX2FuZC5wdXNoKHtcbiAgICAgICAgICAgICAgX19vcjoge1xuICAgICAgICAgICAgICAgIFt0aGlzLnBhdGhdOiB7IF9fbHQ6IGJlZm9yZSB9LFxuICAgICAgICAgICAgICAgIFtgJHt0aGlzLnBhdGh9LmRhdGVgXTogeyBfX2x0OiBiZWZvcmUgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zb3J0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5zb3J0aW5nQ29uZmlnID0ge1xuICAgICAgcGF0aFNvcnRpbmdDb25maWdzOiBbeyBwYXRoOiBgJHt0aGlzLnBhdGh9LmRhdGVgIH0sIHsgcGF0aDogdGhpcy5wYXRoIH1dXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmb3JtYXREYXRlKGRhdGVUb0Zvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZVRvRm9ybWF0KS50b0lTT1N0cmluZygpO1xuICB9XG59XG4iXX0=
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLWRhdGUuZGV2aWNlLWdyaWQtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGV2aWNlLWdyaWQvY29sdW1ucy9yZWdpc3RyYXRpb24tZGF0ZS5kZXZpY2UtZ3JpZC1jb2x1bW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRXBHLE1BQU0sT0FBTyxnQ0FBaUMsU0FBUSxVQUFVO0lBQzlELFlBQVksbUJBQWtDO1FBQzVDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMscUJBQXFCLEdBQUcscUNBQXFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsR0FBRyxFQUFFLGtCQUFrQjtvQkFDdkIsZUFBZSxFQUFFO3dCQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsc0NBQXNDLENBQUM7cUJBQ3ZEO29CQUNELFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxJQUFJLEVBQUUsV0FBVzs0QkFDakIsR0FBRyxFQUFFLE9BQU87NEJBQ1osZUFBZSxFQUFFO2dDQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDOzZCQUM3Qjs0QkFDRCxvQkFBb0IsRUFBRTtnQ0FDcEIseUJBQXlCLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNOzZCQUN6RDt5QkFDRjt3QkFDRDs0QkFDRSxJQUFJLEVBQUUsV0FBVzs0QkFDakIsR0FBRyxFQUFFLFFBQVE7NEJBQ2IsZUFBZSxFQUFFO2dDQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDOzZCQUMzQjs0QkFDRCxvQkFBb0IsRUFBRTtnQ0FDcEIseUJBQXlCLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLOzZCQUN4RDt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1lBQ0QsU0FBUyxFQUFFLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM1QixTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDOUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDMUMsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ2xCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTt3QkFDZixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDM0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTt5QkFDckMsQ0FBQyxDQUFDO3FCQUNKO29CQUNELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTt3QkFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzdDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUNoQixtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7eUJBQ3RDLENBQUMsQ0FBQztxQkFDSjtpQkFDRjtnQkFDRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxDQUFDO1NBQ3BELENBQUM7SUFDSixDQUFDO0lBRVMsVUFBVSxDQUFDLFlBQW9CO1FBQ3ZDLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZUNvbHVtbiwgQ29sdW1uQ29uZmlnLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25EYXRlQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9yZWdpc3RyYXRpb24tZGF0ZS5jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjbGFzcyBSZWdpc3RyYXRpb25EYXRlRGV2aWNlR3JpZENvbHVtbiBleHRlbmRzIEJhc2VDb2x1bW4ge1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsQ29sdW1uQ29uZmlnPzogQ29sdW1uQ29uZmlnKSB7XG4gICAgc3VwZXIoaW5pdGlhbENvbHVtbkNvbmZpZyk7XG5cbiAgICB0aGlzLnBhdGggPSAnY3JlYXRpb25UaW1lJztcbiAgICB0aGlzLm5hbWUgPSAncmVnaXN0cmF0aW9uRGF0ZSc7XG4gICAgdGhpcy5oZWFkZXIgPSBnZXR0ZXh0KCdSZWdpc3RyYXRpb24gZGF0ZScpO1xuICAgIHRoaXMuY2VsbFJlbmRlcmVyQ29tcG9uZW50ID0gUmVnaXN0cmF0aW9uRGF0ZUNlbGxSZW5kZXJlckNvbXBvbmVudDtcblxuICAgIHRoaXMuZmlsdGVyYWJsZSA9IHRydWU7XG4gICAgdGhpcy5maWx0ZXJpbmdDb25maWcgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIGtleTogJ3JlZ2lzdHJhdGlvbkRhdGUnLFxuICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ1Nob3cgaXRlbXMgcmVnaXN0ZXJlZGBiZXR3ZWVuIGRhdGVzYCcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWVsZEdyb3VwOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdkYXRlLXRpbWUnLFxuICAgICAgICAgICAgICBrZXk6ICdhZnRlcicsXG4gICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdmcm9tYGRhdGVgJylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvblByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAndGVtcGxhdGVPcHRpb25zLm1heERhdGUnOiAobW9kZWw6IGFueSkgPT4gbW9kZWw/LmJlZm9yZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnZGF0ZS10aW1lJyxcbiAgICAgICAgICAgICAga2V5OiAnYmVmb3JlJyxcbiAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ3RvYGRhdGVgJylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvblByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAndGVtcGxhdGVPcHRpb25zLm1pbkRhdGUnOiAobW9kZWw6IGFueSkgPT4gbW9kZWw/LmFmdGVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBmb3JtR3JvdXA6IG5ldyBGb3JtR3JvdXAoe30pLFxuICAgICAgZ2V0RmlsdGVyOiBtb2RlbCA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcjogYW55ID0ge307XG4gICAgICAgIGNvbnN0IGRhdGVzID0gbW9kZWwgJiYgbW9kZWwucmVnaXN0cmF0aW9uRGF0ZTtcbiAgICAgICAgaWYgKGRhdGVzICYmIChkYXRlcy5hZnRlciB8fCBkYXRlcy5iZWZvcmUpKSB7XG4gICAgICAgICAgZmlsdGVyLl9fYW5kID0gW107XG4gICAgICAgICAgaWYgKGRhdGVzLmFmdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IHRoaXMuZm9ybWF0RGF0ZShkYXRlcy5hZnRlcik7XG4gICAgICAgICAgICBmaWx0ZXIuX19hbmQucHVzaCh7XG4gICAgICAgICAgICAgICdjcmVhdGlvblRpbWUuZGF0ZSc6IHsgX19ndDogYWZ0ZXIgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkYXRlcy5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IHRoaXMuZm9ybWF0RGF0ZShkYXRlcy5iZWZvcmUpO1xuICAgICAgICAgICAgZmlsdGVyLl9fYW5kLnB1c2goe1xuICAgICAgICAgICAgICAnY3JlYXRpb25UaW1lLmRhdGUnOiB7IF9fbHQ6IGJlZm9yZSB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zb3J0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5zb3J0aW5nQ29uZmlnID0ge1xuICAgICAgcGF0aFNvcnRpbmdDb25maWdzOiBbeyBwYXRoOiAnY3JlYXRpb25UaW1lLmRhdGUnIH1dXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmb3JtYXREYXRlKGRhdGVUb0Zvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZVRvRm9ybWF0KS50b0lTT1N0cmluZygpO1xuICB9XG59XG4iXX0=