@c8y/ngx-components 1018.503.1 → 1018.503.23

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 (152) hide show
  1. package/core/common/ApplicationOptions.d.ts +4 -2
  2. package/core/common/files.service.d.ts +10 -2
  3. package/core/common/global-config.service.d.ts +1 -1
  4. package/core/common/permissions.service.d.ts +69 -2
  5. package/core/common/tenant-ui.service.d.ts +1 -1
  6. package/core/i18n/pattern-messages.data.d.ts +20 -20
  7. package/esm2020/assets-navigator/asset-node.service.mjs +11 -4
  8. package/esm2020/auth-configuration/auth-configuration.guard.mjs +5 -2
  9. package/esm2020/auth-configuration/factories/navigation.factory.mjs +3 -3
  10. package/esm2020/cockpit-config/cockpit-config.guard.mjs +2 -2
  11. package/esm2020/cockpit-config/cockpit-config.service.mjs +2 -2
  12. package/esm2020/context-dashboard/add-dashboard.factory.mjs +13 -3
  13. package/esm2020/context-dashboard/context-dashboard.component.mjs +2 -2
  14. package/esm2020/context-dashboard/context-dashboard.service.mjs +11 -3
  15. package/esm2020/context-dashboard/dashboard-detail.component.mjs +7 -2
  16. package/esm2020/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +5 -3
  17. package/esm2020/core/bottom-drawer/bottom-drawer.service.mjs +1 -1
  18. package/esm2020/core/common/ApplicationOptions.mjs +1 -1
  19. package/esm2020/core/common/files.service.mjs +20 -4
  20. package/esm2020/core/common/global-config.service.mjs +7 -2
  21. package/esm2020/core/common/permissions.service.mjs +69 -2
  22. package/esm2020/core/common/tenant-ui.service.mjs +3 -2
  23. package/esm2020/core/common/user-preferences/user-preferences.service.mjs +10 -2
  24. package/esm2020/core/docs/support-outlet/support-outlet.component.mjs +3 -2
  25. package/esm2020/core/drop-area/drop-area.component.mjs +3 -1
  26. package/esm2020/core/i18n/pattern-messages.data.mjs +21 -21
  27. package/esm2020/core/setup/setup.service.mjs +2 -2
  28. package/esm2020/core/user/user-edit.component.mjs +1 -1
  29. package/esm2020/ecosystem/application-properties/application-properties.component.mjs +2 -2
  30. package/esm2020/ecosystem/application-properties/subscription-modal/subscription-modal.component.mjs +3 -3
  31. package/esm2020/ecosystem/ecosystem-navigation.factory.mjs +3 -3
  32. package/esm2020/ecosystem/packages/package-list/packages-list.component.mjs +2 -2
  33. package/esm2020/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.mjs +2 -2
  34. package/esm2020/files-repository/files-repository.guard.mjs +6 -3
  35. package/esm2020/location/location.component.mjs +20 -13
  36. package/esm2020/map/cluster-map.component.mjs +19 -11
  37. package/esm2020/map/cluster-map.mjs +8 -3
  38. package/esm2020/map/map-status.component.mjs +19 -5
  39. package/esm2020/map/map.component.mjs +10 -10
  40. package/esm2020/map/map.model.mjs +1 -19
  41. package/esm2020/map/map.service.mjs +24 -1
  42. package/esm2020/protocol-lwm2m/components/bootstrap-parameters/lwm2m-bootstrap-parameters.component.mjs +2 -2
  43. package/esm2020/protocol-lwm2m/components/configuration/typed-forms/form-wrapper-base.component.mjs +2 -2
  44. package/esm2020/register-device/register-device-navigation.factory.mjs +3 -3
  45. package/esm2020/replace-device/replace-device.service.mjs +15 -7
  46. package/esm2020/reports/export-schedules.component.mjs +3 -3
  47. package/esm2020/repository/configuration/device-tab/configuration-preview.component.mjs +14 -6
  48. package/esm2020/sms-gateway/sms-gateway.guard.mjs +2 -2
  49. package/esm2020/sms-gateway/sms-gateway.module.mjs +6 -6
  50. package/esm2020/sub-assets/add-group/add-group.component.mjs +7 -2
  51. package/esm2020/sub-assets/asset-properties-item.component.mjs +6 -6
  52. package/esm2020/sub-assets/groups.component.mjs +5 -2
  53. package/esm2020/sub-assets/sub-assets.component.mjs +7 -2
  54. package/esm2020/sub-assets/sub-assets.service.mjs +22 -10
  55. package/esm2020/tenants/tenant-list/tenant-list.component.mjs +12 -7
  56. package/esm2020/upgrade/ng1/downgraded.services.mjs +3 -2
  57. package/esm2020/upgrade/ng1/index.mjs +4 -3
  58. package/esm2020/widgets/cockpit/index.mjs +1 -1
  59. package/esm2020/widgets/device-management/index.mjs +1 -1
  60. package/fesm2015/c8y-ngx-components-assets-navigator.mjs +10 -3
  61. package/fesm2015/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  62. package/fesm2015/c8y-ngx-components-auth-configuration.mjs +7 -4
  63. package/fesm2015/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  64. package/fesm2015/c8y-ngx-components-cockpit-config.mjs +3 -3
  65. package/fesm2015/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  66. package/fesm2015/c8y-ngx-components-context-dashboard.mjs +35 -10
  67. package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  68. package/fesm2015/c8y-ngx-components-ecosystem.mjs +8 -8
  69. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  70. package/fesm2015/c8y-ngx-components-files-repository.mjs +6 -3
  71. package/fesm2015/c8y-ngx-components-files-repository.mjs.map +1 -1
  72. package/fesm2015/c8y-ngx-components-location.mjs +20 -13
  73. package/fesm2015/c8y-ngx-components-location.mjs.map +1 -1
  74. package/fesm2015/c8y-ngx-components-map.mjs +174 -142
  75. package/fesm2015/c8y-ngx-components-map.mjs.map +1 -1
  76. package/fesm2015/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs +2 -2
  77. package/fesm2015/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs.map +1 -1
  78. package/fesm2015/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +1 -1
  79. package/fesm2015/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
  80. package/fesm2015/c8y-ngx-components-register-device.mjs +3 -3
  81. package/fesm2015/c8y-ngx-components-register-device.mjs.map +1 -1
  82. package/fesm2015/c8y-ngx-components-replace-device.mjs +16 -8
  83. package/fesm2015/c8y-ngx-components-replace-device.mjs.map +1 -1
  84. package/fesm2015/c8y-ngx-components-reports.mjs +2 -2
  85. package/fesm2015/c8y-ngx-components-reports.mjs.map +1 -1
  86. package/fesm2015/c8y-ngx-components-repository-configuration.mjs +13 -5
  87. package/fesm2015/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  88. package/fesm2015/c8y-ngx-components-sms-gateway.mjs +6 -6
  89. package/fesm2015/c8y-ngx-components-sms-gateway.mjs.map +1 -1
  90. package/fesm2015/c8y-ngx-components-sub-assets.mjs +43 -18
  91. package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
  92. package/fesm2015/c8y-ngx-components-tenants.mjs +11 -6
  93. package/fesm2015/c8y-ngx-components-tenants.mjs.map +1 -1
  94. package/fesm2015/c8y-ngx-components-upgrade.mjs +4 -2
  95. package/fesm2015/c8y-ngx-components-upgrade.mjs.map +1 -1
  96. package/fesm2015/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  97. package/fesm2015/c8y-ngx-components-widgets-device-management.mjs.map +1 -1
  98. package/fesm2015/c8y-ngx-components.mjs +126 -29
  99. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  100. package/fesm2020/c8y-ngx-components-assets-navigator.mjs +10 -3
  101. package/fesm2020/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  102. package/fesm2020/c8y-ngx-components-auth-configuration.mjs +7 -4
  103. package/fesm2020/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  104. package/fesm2020/c8y-ngx-components-cockpit-config.mjs +3 -3
  105. package/fesm2020/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  106. package/fesm2020/c8y-ngx-components-context-dashboard.mjs +35 -10
  107. package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  108. package/fesm2020/c8y-ngx-components-ecosystem.mjs +8 -8
  109. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  110. package/fesm2020/c8y-ngx-components-files-repository.mjs +6 -3
  111. package/fesm2020/c8y-ngx-components-files-repository.mjs.map +1 -1
  112. package/fesm2020/c8y-ngx-components-location.mjs +20 -13
  113. package/fesm2020/c8y-ngx-components-location.mjs.map +1 -1
  114. package/fesm2020/c8y-ngx-components-map.mjs +174 -142
  115. package/fesm2020/c8y-ngx-components-map.mjs.map +1 -1
  116. package/fesm2020/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs +2 -2
  117. package/fesm2020/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs.map +1 -1
  118. package/fesm2020/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +1 -1
  119. package/fesm2020/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
  120. package/fesm2020/c8y-ngx-components-register-device.mjs +3 -3
  121. package/fesm2020/c8y-ngx-components-register-device.mjs.map +1 -1
  122. package/fesm2020/c8y-ngx-components-replace-device.mjs +16 -8
  123. package/fesm2020/c8y-ngx-components-replace-device.mjs.map +1 -1
  124. package/fesm2020/c8y-ngx-components-reports.mjs +2 -2
  125. package/fesm2020/c8y-ngx-components-reports.mjs.map +1 -1
  126. package/fesm2020/c8y-ngx-components-repository-configuration.mjs +13 -5
  127. package/fesm2020/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  128. package/fesm2020/c8y-ngx-components-sms-gateway.mjs +6 -6
  129. package/fesm2020/c8y-ngx-components-sms-gateway.mjs.map +1 -1
  130. package/fesm2020/c8y-ngx-components-sub-assets.mjs +43 -18
  131. package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
  132. package/fesm2020/c8y-ngx-components-tenants.mjs +11 -6
  133. package/fesm2020/c8y-ngx-components-tenants.mjs.map +1 -1
  134. package/fesm2020/c8y-ngx-components-upgrade.mjs +4 -2
  135. package/fesm2020/c8y-ngx-components-upgrade.mjs.map +1 -1
  136. package/fesm2020/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  137. package/fesm2020/c8y-ngx-components-widgets-device-management.mjs.map +1 -1
  138. package/fesm2020/c8y-ngx-components.mjs +126 -29
  139. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  140. package/locales/locales.pot +3 -0
  141. package/location/location.component.d.ts +2 -2
  142. package/map/cluster-map.component.d.ts +3 -1
  143. package/map/map-status.component.d.ts +12 -1
  144. package/map/map.component.d.ts +1 -1
  145. package/map/map.model.d.ts +0 -1
  146. package/map/map.service.d.ts +6 -0
  147. package/package.json +1 -1
  148. package/replace-device/replace-device.service.d.ts +3 -1
  149. package/tenants/tenant-list/tenant-list.component.d.ts +4 -2
  150. package/upgrade/ng1/downgraded.services.d.ts +1 -0
  151. package/widgets/cockpit/index.d.ts +2 -1
  152. package/widgets/device-management/index.d.ts +2 -1
@@ -58,7 +58,7 @@ export class ClusterMapComponent extends MapComponent {
58
58
  this.leaflet = await this.mapService.getLeaflet();
59
59
  }
60
60
  combineLatest([this.layers$, this.defaultConfig$])
61
- .pipe(takeUntil(this.destroy$))
61
+ .pipe(takeUntil(this.unsubscribeTrigger$))
62
62
  .subscribe(([layers, defaultConfig]) => {
63
63
  this.initMap(layers, defaultConfig);
64
64
  this.changeRootNode(this.rootNode);
@@ -75,17 +75,17 @@ export class ClusterMapComponent extends MapComponent {
75
75
  cancelReload() {
76
76
  this.reloadTrigger$.next(false);
77
77
  }
78
- listenToClusterChanges() {
78
+ listenToClusterAndIntervalChanges() {
79
79
  const timerStart$ = new Subject();
80
80
  const timerEnd$ = new Subject();
81
- const documentHiddenEvent$ = fromEvent(document, 'visibilitychange').pipe(takeUntil(this.destroy$));
81
+ const documentHiddenEvent$ = fromEvent(document, 'visibilitychange').pipe(takeUntil(this.unsubscribeTrigger$));
82
82
  const interval$ = timerStart$.pipe(map(() => this.config.refreshInterval), switchMap(configInterval => {
83
83
  if (!configInterval) {
84
84
  return NEVER;
85
85
  }
86
86
  return interval(1000).pipe(map(value => value * 1000), tap(value => this.msUntilRefresh$.next(configInterval - value)), filter(value => value >= this.MIN_INTERVAL && value >= configInterval), first(), takeUntil(timerEnd$));
87
- }), switchMap(() => (document.hidden ? documentHiddenEvent$ : of(true))), takeUntil(this.destroy$));
88
- const mapChange$ = merge(fromEvent(this.map, 'move'), fromEvent(this.map, 'moveend')).pipe(debounceTime(this.EVENT_THROTTLE_TIME), tap(event => this.mapChange.emit(event)), takeUntil(this.destroy$));
87
+ }), switchMap(() => (document.hidden ? documentHiddenEvent$ : of(true))), takeUntil(this.unsubscribeTrigger$));
88
+ const mapChange$ = this.getMapChangeObservable();
89
89
  merge(this.reloadTrigger$, mapChange$, interval$)
90
90
  .pipe(tap(() => {
91
91
  timerEnd$.next(true);
@@ -93,7 +93,7 @@ export class ClusterMapComponent extends MapComponent {
93
93
  this.isLoading$.next(true);
94
94
  }), switchMap(value => value === false
95
95
  ? of([])
96
- : from(this.mapService.getClusterSize(this.map.getBounds())).pipe(mergeMap((clusterSize) => this.getClusterRects(clusterSize, this.map.getBounds())), mergeMap(rects => this.createOrUpdateCluster(rects)))), takeUntil(this.destroy$))
96
+ : from(this.mapService.getClusterSize(this.map.getBounds())).pipe(mergeMap((clusterSize) => this.getClusterRects(clusterSize, this.map.getBounds())), mergeMap(rects => this.createOrUpdateCluster(rects)))), takeUntil(this.unsubscribeTrigger$))
97
97
  .subscribe((clusters) => {
98
98
  clusters.forEach(cluster => cluster.render(this.map));
99
99
  this.isLoading$.next(false);
@@ -101,6 +101,9 @@ export class ClusterMapComponent extends MapComponent {
101
101
  this.msUntilRefresh$.next(this.config.refreshInterval);
102
102
  });
103
103
  }
104
+ listenToClusterMapChanges() {
105
+ this.getMapChangeObservable().subscribe();
106
+ }
104
107
  refreshMarkers() {
105
108
  if (this.assets) {
106
109
  super.refreshMarkers();
@@ -119,11 +122,13 @@ export class ClusterMapComponent extends MapComponent {
119
122
  if (isPositionDevice) {
120
123
  this.assets = mo;
121
124
  this.refreshMarkers();
122
- return;
125
+ this.listenToClusterMapChanges();
126
+ }
127
+ else {
128
+ this.assets = null;
129
+ this.listenToClusterAndIntervalChanges();
130
+ this.reload();
123
131
  }
124
- this.assets = null;
125
- this.listenToClusterChanges();
126
- this.reload();
127
132
  }
128
133
  async getClusterRects(levelThreshold = ClusterSize.FOUR, viewBounds, level = 0) {
129
134
  let rects = [];
@@ -212,6 +217,9 @@ export class ClusterMapComponent extends MapComponent {
212
217
  });
213
218
  return Promise.all(updatePromise);
214
219
  }
220
+ getMapChangeObservable() {
221
+ return merge(fromEvent(this.map, 'move'), fromEvent(this.map, 'moveend')).pipe(debounceTime(this.EVENT_THROTTLE_TIME), tap(event => this.mapChange.emit(event)), takeUntil(this.unsubscribeTrigger$));
222
+ }
215
223
  }
216
224
  ClusterMapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ClusterMapComponent, deps: [{ token: i1.ManagedObjectRealtimeService }, { token: i2.MapService }, { token: MAP_TILE_LAYER }, { token: MAP_DEFAULT_CONFIG }, { token: i3.TranslateService }, { token: i0.IterableDiffers }, { token: i1.ColorService }], target: i0.ɵɵFactoryTarget.Component });
217
225
  ClusterMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ClusterMapComponent, selector: "c8y-cluster-map", inputs: { config: "config", rootNode: "rootNode", assets: ["asset", "assets"], showClusterColor: "showClusterColor" }, outputs: { mapChange: "mapChange" }, providers: [ManagedObjectRealtimeService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n" });
@@ -236,4 +244,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
236
244
  }], mapChange: [{
237
245
  type: Output
238
246
  }] } });
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci1tYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbWFwL2NsdXN0ZXItbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL21hcC9jbHVzdGVyLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxZQUFZLEVBQ1osNEJBQTRCLEVBRzdCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUNMLGVBQWUsRUFDZixLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUCxhQUFhLEVBQ2IsSUFBSSxFQUNKLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLEVBQUUsRUFDSCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxHQUFHLEVBQ0gsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVMLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsY0FBYyxFQUVmLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQU8zQyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsWUFBWTtJQXdCbkQsWUFDWSxpQkFBK0MsRUFDL0MsVUFBc0IsRUFDRSxPQUF3QyxFQUVoRSxj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UzsrQkFDRSxpQkFBaUIsYUFFaEIsQ0FBQyw0QkFBNEIsQ0FBQzs7MEJBNkJ0QyxNQUFNOzJCQUFDLGNBQWM7OzBCQUNyQixNQUFNOzJCQUFDLGtCQUFrQjtvSUF2QjVCLE1BQU07c0JBREwsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO3VCQUFDLE9BQU87Z0JBSWQsZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlRGlmZmVycyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2UsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIENvbG9yU2VydmljZSxcbiAgTWFuYWdlZE9iamVjdFJlYWx0aW1lU2VydmljZSxcbiAgTWFwVGlsZUxheWVyLFxuICBNYXBEZWZhdWx0Q29uZmlnXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHR5cGUgKiBhcyBMIGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBORVZFUixcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZnJvbSxcbiAgZnJvbUV2ZW50LFxuICBpbnRlcnZhbCxcbiAgbWVyZ2UsXG4gIG9mXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBmaWx0ZXIsXG4gIGZpcnN0LFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENsdXN0ZXJNYXAgfSBmcm9tICcuL2NsdXN0ZXItbWFwJztcbmltcG9ydCB7IE1hcENvbXBvbmVudCB9IGZyb20gJy4vbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDbHVzdGVyTWFwQ29uZmlnLFxuICBDbHVzdGVyU2l6ZSxcbiAgTUFQX0RFRkFVTFRfQ09ORklHLFxuICBNQVBfVElMRV9MQVlFUixcbiAgUG9zaXRpb25NYW5hZ2VkT2JqZWN0XG59IGZyb20gJy4vbWFwLm1vZGVsJztcbmltcG9ydCB7IE1hcFNlcnZpY2UgfSBmcm9tICcuL21hcC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNsdXN0ZXItbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NsdXN0ZXItbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbTWFuYWdlZE9iamVjdFJlYWx0aW1lU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2x1c3Rlck1hcENvbXBvbmVudCBleHRlbmRzIE1hcENvbXBvbmVudCB7XG4gIGlzTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgbXNVbnRpbFJlZnJlc2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdCg1MDAwKTtcblxuICBASW5wdXQoKVxuICBjb25maWc6IENsdXN0ZXJNYXBDb25maWc7XG5cbiAgQElucHV0KClcbiAgcm9vdE5vZGU6IElNYW5hZ2VkT2JqZWN0O1xuXG4gIEBJbnB1dCgnYXNzZXQnKVxuICBhc3NldHM6IFBvc2l0aW9uTWFuYWdlZE9iamVjdDtcblxuICBASW5wdXQoKVxuICBzaG93Q2x1c3RlckNvbG9yID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpXG4gIG1hcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TC5MZWFmbGV0RXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWxvYWRUcmlnZ2VyJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIGNsdXN0ZXJzOiBDbHVzdGVyTWFwW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBNSU5fSU5URVJWQUwgPSA1MDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IEVWRU5UX1RIUk9UVExFX1RJTUUgPSA3NTA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG1vUmVhbHRpbWVTZXJ2aWNlOiBNYW5hZ2VkT2JqZWN0UmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBtYXBTZXJ2aWNlOiBNYXBTZXJ2aWNlLFxuICAgIEBJbmplY3QoTUFQX1RJTEVfTEFZRVIpIHByb3RlY3RlZCBsYXllcnMkOiBCZWhhdmlvclN1YmplY3Q8TWFwVGlsZUxheWVyW10+LFxuICAgIEBJbmplY3QoTUFQX0RFRkFVTFRfQ09ORklHKVxuICAgIHByb3RlY3RlZCBkZWZhdWx0Q29uZmlnJDogT2JzZXJ2YWJsZTxNYXBEZWZhdWx0Q29uZmlnPixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGl0ZXJhYmxlOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgcHJpdmF0ZSBjb2xvclNlcnZpY2U6IENvbG9yU2VydmljZVxuICApIHtcbiAgICBzdXBlcihtb1JlYWx0aW1lU2VydmljZSwgbWFwU2VydmljZSwgbGF5ZXJzJCwgZGVmYXVsdENvbmZpZyQsIHRyYW5zbGF0ZVNlcnZpY2UpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmNvbmZpZz8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5yb290Tm9kZT8ucHJldmlvdXNWYWx1ZSAhPT0gY2hhbmdlcy5yb290Tm9kZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmNoYW5nZVJvb3ROb2RlKGNoYW5nZXMucm9vdE5vZGUuY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5jb25maWc/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VDb25maWcoY2hhbmdlcy5jb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUNvbmZpZyhjaGFuZ2U6IFNpbXBsZUNoYW5nZSkge1xuICAgIC8vIG9uIGZvbGxvd2luZywgY2FuY2VsIHJlbG9hZCB0byBhdm9pZCBzdGFsZSBzdGF0ZVxuICAgIGlmIChjaGFuZ2UuY3VycmVudFZhbHVlLmZvbGxvdyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5jYW5jZWxSZWxvYWQoKTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlLmN1cnJlbnRWYWx1ZS5yZWZyZXNoSW50ZXJ2YWwgIT09IGNoYW5nZS5wcmV2aW91c1ZhbHVlLnJlZnJlc2hJbnRlcnZhbCkge1xuICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG4gICAgc3VwZXIuY2hhbmdlQ29uZmlnKGNoYW5nZSk7XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLmxlYWZsZXQpIHtcbiAgICAgIHRoaXMubGVhZmxldCA9IGF3YWl0IHRoaXMubWFwU2VydmljZS5nZXRMZWFmbGV0KCk7XG4gICAgfVxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMubGF5ZXJzJCwgdGhpcy5kZWZhdWx0Q29uZmlnJF0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChbbGF5ZXJzLCBkZWZhdWx0Q29uZmlnXSkgPT4ge1xuICAgICAgICB0aGlzLmluaXRNYXAobGF5ZXJzLCBkZWZhdWx0Q29uZmlnKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VSb290Tm9kZSh0aGlzLnJvb3ROb2RlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VDb25maWcobmV3IFNpbXBsZUNoYW5nZSh7fSwgdGhpcy5jb25maWcsIGZhbHNlKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0KCkge1xuICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcbiAgICBhd2FpdCB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIHRoaXMucmVsb2FkVHJpZ2dlciQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIGNhbmNlbFJlbG9hZCgpIHtcbiAgICB0aGlzLnJlbG9hZFRyaWdnZXIkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgbGlzdGVuVG9DbHVzdGVyQ2hhbmdlcygpIHtcbiAgICBjb25zdCB0aW1lclN0YXJ0JCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgdGltZXJFbmQkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0IGRvY3VtZW50SGlkZGVuRXZlbnQkID0gZnJvbUV2ZW50PGJvb2xlYW4+KGRvY3VtZW50LCAndmlzaWJpbGl0eWNoYW5nZScpLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICApO1xuXG4gICAgY29uc3QgaW50ZXJ2YWwkID0gdGltZXJTdGFydCQucGlwZShcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwpLFxuICAgICAgc3dpdGNoTWFwKGNvbmZpZ0ludGVydmFsID0+IHtcbiAgICAgICAgaWYgKCFjb25maWdJbnRlcnZhbCkge1xuICAgICAgICAgIHJldHVybiBORVZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWwoMTAwMCkucGlwZShcbiAgICAgICAgICBtYXAodmFsdWUgPT4gdmFsdWUgKiAxMDAwKSxcbiAgICAgICAgICB0YXAodmFsdWUgPT4gdGhpcy5tc1VudGlsUmVmcmVzaCQubmV4dChjb25maWdJbnRlcnZhbCAtIHZhbHVlKSksXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlID49IHRoaXMuTUlOX0lOVEVSVkFMICYmIHZhbHVlID49IGNvbmZpZ0ludGVydmFsKSxcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aW1lckVuZCQpXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiAoZG9jdW1lbnQuaGlkZGVuID8gZG9jdW1lbnRIaWRkZW5FdmVudCQgOiBvZih0cnVlKSkpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgKTtcblxuICAgIGNvbnN0IG1hcENoYW5nZSQgPSBtZXJnZShcbiAgICAgIGZyb21FdmVudDxMLkxlYWZsZXRFdmVudD4odGhpcy5tYXAsICdtb3ZlJyksXG4gICAgICBmcm9tRXZlbnQ8TC5MZWFmbGV0RXZlbnQ+KHRoaXMubWFwLCAnbW92ZWVuZCcpXG4gICAgKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuRVZFTlRfVEhST1RUTEVfVElNRSksXG4gICAgICB0YXAoZXZlbnQgPT4gdGhpcy5tYXBDaGFuZ2UuZW1pdChldmVudCkpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgKTtcblxuICAgIG1lcmdlKHRoaXMucmVsb2FkVHJpZ2dlciQsIG1hcENoYW5nZSQsIGludGVydmFsJClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyRW5kJC5uZXh0KHRydWUpO1xuICAgICAgICAgIHRoaXMubXNVbnRpbFJlZnJlc2gkLm5leHQoMCk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT5cbiAgICAgICAgICB2YWx1ZSA9PT0gZmFsc2VcbiAgICAgICAgICAgID8gb2YoW10pXG4gICAgICAgICAgICA6IGZyb20odGhpcy5tYXBTZXJ2aWNlLmdldENsdXN0ZXJTaXplKHRoaXMubWFwLmdldEJvdW5kcygpKSkucGlwZShcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoY2x1c3RlclNpemU6IENsdXN0ZXJTaXplKSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDbHVzdGVyUmVjdHMoY2x1c3RlclNpemUsIHRoaXMubWFwLmdldEJvdW5kcygpKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAocmVjdHMgPT4gdGhpcy5jcmVhdGVPclVwZGF0ZUNsdXN0ZXIocmVjdHMpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoY2x1c3RlcnM6IENsdXN0ZXJNYXBbXSkgPT4ge1xuICAgICAgICBjbHVzdGVycy5mb3JFYWNoKGNsdXN0ZXIgPT4gY2x1c3Rlci5yZW5kZXIodGhpcy5tYXApKTtcblxuICAgICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIHRpbWVyU3RhcnQkLm5leHQoKTtcbiAgICAgICAgdGhpcy5tc1VudGlsUmVmcmVzaCQubmV4dCh0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwpO1xuICAgICAgfSk7XG4gIH1cblxuICByZWZyZXNoTWFya2VycygpIHtcbiAgICBpZiAodGhpcy5hc3NldHMpIHtcbiAgICAgIHN1cGVyLnJlZnJlc2hNYXJrZXJzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2x1c3RlcnMuZm9yRWFjaChjbHVzdGVyID0+IHtcbiAgICAgIGNsdXN0ZXIuY2xlYXIodGhpcy5tYXApO1xuICAgIH0pO1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVJvb3ROb2RlKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLmNsZWFyTWFya2VycygpO1xuICAgIHRoaXMuY2xlYXJDbHVzdGVycygpO1xuXG4gICAgY29uc3QgaXNQb3NpdGlvbkRldmljZSA9IG1vPy5jOHlfUG9zaXRpb24gJiYgbW8/LmM4eV9Jc0RldmljZTtcbiAgICBpZiAoaXNQb3NpdGlvbkRldmljZSkge1xuICAgICAgdGhpcy5hc3NldHMgPSBtbyBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG4gICAgICB0aGlzLnJlZnJlc2hNYXJrZXJzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXNzZXRzID0gbnVsbDtcbiAgICB0aGlzLmxpc3RlblRvQ2x1c3RlckNoYW5nZXMoKTtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRDbHVzdGVyUmVjdHMoXG4gICAgbGV2ZWxUaHJlc2hvbGQ6IENsdXN0ZXJTaXplID0gQ2x1c3RlclNpemUuRk9VUixcbiAgICB2aWV3Qm91bmRzOiBMLkxhdExuZ0JvdW5kcyxcbiAgICBsZXZlbCA9IDBcbiAgKTogUHJvbWlzZTxMLlJlY3RhbmdsZVtdPiB7XG4gICAgbGV0IHJlY3RzID0gW107XG5cbiAgICBpZiAobGV2ZWxUaHJlc2hvbGQgPT09IENsdXN0ZXJTaXplLk5PTkUpIHtcbiAgICAgIGNvbnN0IHJlY3QgPSBhd2FpdCB0aGlzLmdldFJlY3Qodmlld0JvdW5kcyk7XG4gICAgICByZWN0cy5wdXNoKHJlY3QpO1xuICAgICAgcmV0dXJuIHJlY3RzO1xuICAgIH1cblxuICAgIGlmIChsZXZlbCA+PSBsZXZlbFRocmVzaG9sZCkge1xuICAgICAgcmV0dXJuIHJlY3RzO1xuICAgIH1cbiAgICBsZXZlbCsrO1xuXG4gICAgY29uc3QgeyBsYXQ6IHgxLCBsbmc6IHkxIH0gPSB2aWV3Qm91bmRzLmdldFNvdXRoV2VzdCgpO1xuICAgIGNvbnN0IHsgbGF0OiB4MiwgbG5nOiB5MiB9ID0gdmlld0JvdW5kcy5nZXROb3J0aEVhc3QoKTtcbiAgICBjb25zdCBuZXdYMiA9ICh4MSArIHgyKSAvIDI7XG4gICAgY29uc3QgbmV3WTIgPSAoeTEgKyB5MikgLyAyO1xuXG4gICAgY29uc3QgYm91bmRzOiBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV1bXSA9IFtcbiAgICAgIFtcbiAgICAgICAgW3gxLCB5MV0sXG4gICAgICAgIFtuZXdYMiwgbmV3WTJdXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBbbmV3WDIsIG5ld1kyXSxcbiAgICAgICAgW3gyLCB5Ml1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIFt4MSwgbmV3WTJdLFxuICAgICAgICBbbmV3WDIsIHkyXVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgW25ld1gyLCB5MV0sXG4gICAgICAgIFt4MiwgbmV3WTJdXG4gICAgICBdXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IGJvdW5kIG9mIGJvdW5kcykge1xuICAgICAgY29uc3QgbGF0TG5nQm91bmQgPSB0aGlzLmxlYWZsZXQubGF0TG5nQm91bmRzKGJvdW5kKTtcbiAgICAgIGNvbnN0IHJlY3QgPSBhd2FpdCB0aGlzLmdldFJlY3QobGF0TG5nQm91bmQpO1xuICAgICAgcmVjdHMgPSBbLi4ucmVjdHMsIC4uLihhd2FpdCB0aGlzLmdldENsdXN0ZXJSZWN0cyhsZXZlbFRocmVzaG9sZCwgbGF0TG5nQm91bmQsIGxldmVsKSldO1xuXG4gICAgICBpZiAobGV2ZWwgPT09IGxldmVsVGhyZXNob2xkKSB7XG4gICAgICAgIHJlY3RzLnB1c2gocmVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY3RzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZWN0KGxhdExuZ0JvdW5kOiBMLkxhdExuZ0JvdW5kcykge1xuICAgIGxldCBjb2xvciA9ICdub25lJztcbiAgICBpZiAodGhpcy5zaG93Q2x1c3RlckNvbG9yKSB7XG4gICAgICBjb2xvciA9IGF3YWl0IHRoaXMuY29sb3JTZXJ2aWNlLmdlbmVyYXRlQ29sb3IobGF0TG5nQm91bmQudG9CQm94U3RyaW5nKCkpO1xuICAgIH1cbiAgICBjb25zdCByZWN0ID0gdGhpcy5sZWFmbGV0LnJlY3RhbmdsZShsYXRMbmdCb3VuZCwge1xuICAgICAgY29sb3IsXG4gICAgICB3ZWlnaHQ6IGNvbG9yID09PSAnbm9uZScgPyAwIDogMSxcbiAgICAgIGludGVyYWN0aXZlOiBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiByZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckNsdXN0ZXJzKCkge1xuICAgIHRoaXMuY2x1c3RlcnMuZm9yRWFjaChjbHVzdGVyID0+IHtcbiAgICAgIGNsdXN0ZXIuY2xlYXIodGhpcy5tYXApO1xuICAgIH0pO1xuICAgIHRoaXMuY2x1c3RlcnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQ2x1c3RlcihjbHVzdGVyOiBDbHVzdGVyTWFwKSB7XG4gICAgY29uc3QgY2x1c3RlckNvdW50ID0gYXdhaXQgdGhpcy5tYXBTZXJ2aWNlLmdldFBvc2l0aW9uTU9zRnJvbUJvdW5kQ291bnQoXG4gICAgICBjbHVzdGVyLnJlY3QuZ2V0Qm91bmRzKCksXG4gICAgICB0aGlzLnJvb3ROb2RlXG4gICAgKTtcbiAgICBpZiAoY2x1c3RlckNvdW50ID4gdGhpcy5tYXBTZXJ2aWNlLk1BWF9ERVZJQ0VfUEVSX0NMVVNURVIpIHtcbiAgICAgIGNsdXN0ZXIuc2V0Q2x1c3RlclRvQmlnTWFya2VyKHRoaXMubWFwLCBjbHVzdGVyQ291bnQsIHRoaXMubGVhZmxldCk7XG4gICAgICBjbHVzdGVyLnBvc2l0aW9ucyA9IFtdO1xuICAgICAgcmV0dXJuIGNsdXN0ZXI7XG4gICAgfVxuXG4gICAgY2x1c3Rlci5yZW1vdmVDbHVzdGVyVG9CaWdNYXJrZXIoKTtcbiAgICBjbHVzdGVyLnBvc2l0aW9ucyA9IGF3YWl0IHRoaXMubWFwU2VydmljZS5nZXRQb3NpdGlvbk1Pc0Zyb21Cb3VuZChcbiAgICAgIGNsdXN0ZXIucmVjdC5nZXRCb3VuZHMoKSxcbiAgICAgIHRoaXMucm9vdE5vZGVcbiAgICApO1xuICAgIHJldHVybiBjbHVzdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPclVwZGF0ZUNsdXN0ZXIocmVjdHM6IEwuUmVjdGFuZ2xlPHVua25vd24+W10pIHtcbiAgICBjb25zdCBpc05ldyA9IHJlY3RzLmxlbmd0aCAhPT0gdGhpcy5jbHVzdGVycy5sZW5ndGg7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICB0aGlzLmNsZWFyQ2x1c3RlcnMoKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlUHJvbWlzZSA9IHJlY3RzLm1hcCgocmVjdCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpc05ldykge1xuICAgICAgICBjb25zdCBjbHVzdGVyID0gbmV3IENsdXN0ZXJNYXAoXG4gICAgICAgICAgdGhpcy5pdGVyYWJsZSxcbiAgICAgICAgICBhc3NldCA9PiB0aGlzLmdldEFzc2V0TWFya2VyKGFzc2V0KSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jbHVzdGVycy5wdXNoKGNsdXN0ZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5jbHVzdGVyc1tpbmRleF0ucmVjdCA9IHJlY3Q7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHVzdGVyKHRoaXMuY2x1c3RlcnNbaW5kZXhdKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh1cGRhdGVQcm9taXNlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImM4eS1tYXBcIj5cbiAgPGRpdiAjbWFwPjwvZGl2PlxuPC9kaXY+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci1tYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbWFwL2NsdXN0ZXItbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL21hcC9jbHVzdGVyLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxZQUFZLEVBQ1osNEJBQTRCLEVBRzdCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUNMLGVBQWUsRUFDZixLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUCxhQUFhLEVBQ2IsSUFBSSxFQUNKLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLEVBQUUsRUFDSCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxHQUFHLEVBQ0gsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVMLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsY0FBYyxFQUVmLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQU8zQyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsWUFBWTtJQXdCbkQsWUFDWSxpQkFBK0MsRUFDL0MsVUFBc0IsRUFDRSxPQUF3QyxFQUVoRSxj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eEMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUNwQyxDQUFDO0lBQ0osQ0FBQzs7Z0hBN1NVLG1CQUFtQix3RkEyQnBCLGNBQWMsYUFDZCxrQkFBa0I7b0dBNUJqQixtQkFBbUIsc01BRm5CLENBQUMsNEJBQTRCLENBQUMsc0VDdkQzQyxrRkFJQTsyRkRxRGEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQixhQUVoQixDQUFDLDRCQUE0QixDQUFDOzswQkE2QnRDLE1BQU07MkJBQUMsY0FBYzs7MEJBQ3JCLE1BQU07MkJBQUMsa0JBQWtCO29JQXZCNUIsTUFBTTtzQkFETCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7dUJBQUMsT0FBTztnQkFJZCxnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixTQUFTO3NCQURSLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZSxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQ29sb3JTZXJ2aWNlLFxuICBNYW5hZ2VkT2JqZWN0UmVhbHRpbWVTZXJ2aWNlLFxuICBNYXBUaWxlTGF5ZXIsXG4gIE1hcERlZmF1bHRDb25maWdcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgdHlwZSAqIGFzIEwgZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE5FVkVSLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmcm9tLFxuICBmcm9tRXZlbnQsXG4gIGludGVydmFsLFxuICBtZXJnZSxcbiAgb2Zcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGZpbHRlcixcbiAgZmlyc3QsXG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2x1c3Rlck1hcCB9IGZyb20gJy4vY2x1c3Rlci1tYXAnO1xuaW1wb3J0IHsgTWFwQ29tcG9uZW50IH0gZnJvbSAnLi9tYXAuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIENsdXN0ZXJNYXBDb25maWcsXG4gIENsdXN0ZXJTaXplLFxuICBNQVBfREVGQVVMVF9DT05GSUcsXG4gIE1BUF9USUxFX0xBWUVSLFxuICBQb3NpdGlvbk1hbmFnZWRPYmplY3Rcbn0gZnJvbSAnLi9tYXAubW9kZWwnO1xuaW1wb3J0IHsgTWFwU2VydmljZSB9IGZyb20gJy4vbWFwLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY2x1c3Rlci1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2x1c3Rlci1tYXAuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtNYW5hZ2VkT2JqZWN0UmVhbHRpbWVTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDbHVzdGVyTWFwQ29tcG9uZW50IGV4dGVuZHMgTWFwQ29tcG9uZW50IHtcbiAgaXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBtc1VudGlsUmVmcmVzaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDUwMDApO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmZpZzogQ2x1c3Rlck1hcENvbmZpZztcblxuICBASW5wdXQoKVxuICByb290Tm9kZTogSU1hbmFnZWRPYmplY3Q7XG5cbiAgQElucHV0KCdhc3NldCcpXG4gIGFzc2V0czogUG9zaXRpb25NYW5hZ2VkT2JqZWN0O1xuXG4gIEBJbnB1dCgpXG4gIHNob3dDbHVzdGVyQ29sb3IgPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgbWFwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxMLkxlYWZsZXRFdmVudD4oKTtcblxuICBwcml2YXRlIHJlbG9hZFRyaWdnZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgY2x1c3RlcnM6IENsdXN0ZXJNYXBbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IE1JTl9JTlRFUlZBTCA9IDUwMDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgRVZFTlRfVEhST1RUTEVfVElNRSA9IDc1MDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgbW9SZWFsdGltZVNlcnZpY2U6IE1hbmFnZWRPYmplY3RSZWFsdGltZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG1hcFNlcnZpY2U6IE1hcFNlcnZpY2UsXG4gICAgQEluamVjdChNQVBfVElMRV9MQVlFUikgcHJvdGVjdGVkIGxheWVycyQ6IEJlaGF2aW9yU3ViamVjdDxNYXBUaWxlTGF5ZXJbXT4sXG4gICAgQEluamVjdChNQVBfREVGQVVMVF9DT05GSUcpXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDb25maWckOiBPYnNlcnZhYmxlPE1hcERlZmF1bHRDb25maWc+LFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaXRlcmFibGU6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwcml2YXRlIGNvbG9yU2VydmljZTogQ29sb3JTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKG1vUmVhbHRpbWVTZXJ2aWNlLCBtYXBTZXJ2aWNlLCBsYXllcnMkLCBkZWZhdWx0Q29uZmlnJCwgdHJhbnNsYXRlU2VydmljZSk7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuY29uZmlnPy5maXJzdENoYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnJvb3ROb2RlPy5wcmV2aW91c1ZhbHVlICE9PSBjaGFuZ2VzLnJvb3ROb2RlPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlUm9vdE5vZGUoY2hhbmdlcy5yb290Tm9kZS5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmNvbmZpZz8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmNoYW5nZUNvbmZpZyhjaGFuZ2VzLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQ29uZmlnKGNoYW5nZTogU2ltcGxlQ2hhbmdlKSB7XG4gICAgLy8gb24gZm9sbG93aW5nLCBjYW5jZWwgcmVsb2FkIHRvIGF2b2lkIHN0YWxlIHN0YXRlXG4gICAgaWYgKGNoYW5nZS5jdXJyZW50VmFsdWUuZm9sbG93ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNhbmNlbFJlbG9hZCgpO1xuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2UuY3VycmVudFZhbHVlLnJlZnJlc2hJbnRlcnZhbCAhPT0gY2hhbmdlLnByZXZpb3VzVmFsdWUucmVmcmVzaEludGVydmFsKSB7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgICBzdXBlci5jaGFuZ2VDb25maWcoY2hhbmdlKTtcbiAgfVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubGVhZmxldCkge1xuICAgICAgdGhpcy5sZWFmbGV0ID0gYXdhaXQgdGhpcy5tYXBTZXJ2aWNlLmdldExlYWZsZXQoKTtcbiAgICB9XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5sYXllcnMkLCB0aGlzLmRlZmF1bHRDb25maWckXSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlciQpKVxuICAgICAgLnN1YnNjcmliZSgoW2xheWVycywgZGVmYXVsdENvbmZpZ10pID0+IHtcbiAgICAgICAgdGhpcy5pbml0TWFwKGxheWVycywgZGVmYXVsdENvbmZpZyk7XG4gICAgICAgIHRoaXMuY2hhbmdlUm9vdE5vZGUodGhpcy5yb290Tm9kZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlQ29uZmlnKG5ldyBTaW1wbGVDaGFuZ2Uoe30sIHRoaXMuY29uZmlnLCBmYWxzZSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyByZXNldCgpIHtcbiAgICB0aGlzLm5nT25EZXN0cm95KCk7XG4gICAgYXdhaXQgdGhpcy5uZ0FmdGVyVmlld0luaXQoKTtcbiAgfVxuXG4gIHJlbG9hZCgpIHtcbiAgICB0aGlzLnJlbG9hZFRyaWdnZXIkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBjYW5jZWxSZWxvYWQoKSB7XG4gICAgdGhpcy5yZWxvYWRUcmlnZ2VyJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIGxpc3RlblRvQ2x1c3RlckFuZEludGVydmFsQ2hhbmdlcygpIHtcbiAgICBjb25zdCB0aW1lclN0YXJ0JCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgdGltZXJFbmQkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0IGRvY3VtZW50SGlkZGVuRXZlbnQkID0gZnJvbUV2ZW50PGJvb2xlYW4+KGRvY3VtZW50LCAndmlzaWJpbGl0eWNoYW5nZScpLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVRyaWdnZXIkKVxuICAgICk7XG5cbiAgICBjb25zdCBpbnRlcnZhbCQgPSB0aW1lclN0YXJ0JC5waXBlKFxuICAgICAgbWFwKCgpID0+IHRoaXMuY29uZmlnLnJlZnJlc2hJbnRlcnZhbCksXG4gICAgICBzd2l0Y2hNYXAoY29uZmlnSW50ZXJ2YWwgPT4ge1xuICAgICAgICBpZiAoIWNvbmZpZ0ludGVydmFsKSB7XG4gICAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbCgxMDAwKS5waXBlKFxuICAgICAgICAgIG1hcCh2YWx1ZSA9PiB2YWx1ZSAqIDEwMDApLFxuICAgICAgICAgIHRhcCh2YWx1ZSA9PiB0aGlzLm1zVW50aWxSZWZyZXNoJC5uZXh0KGNvbmZpZ0ludGVydmFsIC0gdmFsdWUpKSxcbiAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdmFsdWUgPj0gdGhpcy5NSU5fSU5URVJWQUwgJiYgdmFsdWUgPj0gY29uZmlnSW50ZXJ2YWwpLFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgdGFrZVVudGlsKHRpbWVyRW5kJClcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IChkb2N1bWVudC5oaWRkZW4gPyBkb2N1bWVudEhpZGRlbkV2ZW50JCA6IG9mKHRydWUpKSksXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVRyaWdnZXIkKVxuICAgICk7XG5cbiAgICBjb25zdCBtYXBDaGFuZ2UkID0gdGhpcy5nZXRNYXBDaGFuZ2VPYnNlcnZhYmxlKCk7XG5cbiAgICBtZXJnZSh0aGlzLnJlbG9hZFRyaWdnZXIkLCBtYXBDaGFuZ2UkLCBpbnRlcnZhbCQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aW1lckVuZCQubmV4dCh0cnVlKTtcbiAgICAgICAgICB0aGlzLm1zVW50aWxSZWZyZXNoJC5uZXh0KDApO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKHZhbHVlID0+XG4gICAgICAgICAgdmFsdWUgPT09IGZhbHNlXG4gICAgICAgICAgICA/IG9mKFtdKVxuICAgICAgICAgICAgOiBmcm9tKHRoaXMubWFwU2VydmljZS5nZXRDbHVzdGVyU2l6ZSh0aGlzLm1hcC5nZXRCb3VuZHMoKSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKGNsdXN0ZXJTaXplOiBDbHVzdGVyU2l6ZSkgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2x1c3RlclJlY3RzKGNsdXN0ZXJTaXplLCB0aGlzLm1hcC5nZXRCb3VuZHMoKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKHJlY3RzID0+IHRoaXMuY3JlYXRlT3JVcGRhdGVDbHVzdGVyKHJlY3RzKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVRyaWdnZXIkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoY2x1c3RlcnM6IENsdXN0ZXJNYXBbXSkgPT4ge1xuICAgICAgICBjbHVzdGVycy5mb3JFYWNoKGNsdXN0ZXIgPT4gY2x1c3Rlci5yZW5kZXIodGhpcy5tYXApKTtcblxuICAgICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIHRpbWVyU3RhcnQkLm5leHQoKTtcbiAgICAgICAgdGhpcy5tc1VudGlsUmVmcmVzaCQubmV4dCh0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwpO1xuICAgICAgfSk7XG4gIH1cblxuICBsaXN0ZW5Ub0NsdXN0ZXJNYXBDaGFuZ2VzKCkge1xuICAgIHRoaXMuZ2V0TWFwQ2hhbmdlT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcmVmcmVzaE1hcmtlcnMoKSB7XG4gICAgaWYgKHRoaXMuYXNzZXRzKSB7XG4gICAgICBzdXBlci5yZWZyZXNoTWFya2VycygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsdXN0ZXJzLmZvckVhY2goY2x1c3RlciA9PiB7XG4gICAgICBjbHVzdGVyLmNsZWFyKHRoaXMubWFwKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VSb290Tm9kZShtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQWxsTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5jbGVhck1hcmtlcnMoKTtcbiAgICB0aGlzLmNsZWFyQ2x1c3RlcnMoKTtcblxuICAgIGNvbnN0IGlzUG9zaXRpb25EZXZpY2UgPSBtbz8uYzh5X1Bvc2l0aW9uICYmIG1vPy5jOHlfSXNEZXZpY2U7XG4gICAgaWYgKGlzUG9zaXRpb25EZXZpY2UpIHtcbiAgICAgIHRoaXMuYXNzZXRzID0gbW8gYXMgUG9zaXRpb25NYW5hZ2VkT2JqZWN0O1xuICAgICAgdGhpcy5yZWZyZXNoTWFya2VycygpO1xuICAgICAgdGhpcy5saXN0ZW5Ub0NsdXN0ZXJNYXBDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXRzID0gbnVsbDtcbiAgICAgIHRoaXMubGlzdGVuVG9DbHVzdGVyQW5kSW50ZXJ2YWxDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2x1c3RlclJlY3RzKFxuICAgIGxldmVsVGhyZXNob2xkOiBDbHVzdGVyU2l6ZSA9IENsdXN0ZXJTaXplLkZPVVIsXG4gICAgdmlld0JvdW5kczogTC5MYXRMbmdCb3VuZHMsXG4gICAgbGV2ZWwgPSAwXG4gICk6IFByb21pc2U8TC5SZWN0YW5nbGVbXT4ge1xuICAgIGxldCByZWN0cyA9IFtdO1xuXG4gICAgaWYgKGxldmVsVGhyZXNob2xkID09PSBDbHVzdGVyU2l6ZS5OT05FKSB7XG4gICAgICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5nZXRSZWN0KHZpZXdCb3VuZHMpO1xuICAgICAgcmVjdHMucHVzaChyZWN0KTtcbiAgICAgIHJldHVybiByZWN0cztcbiAgICB9XG5cbiAgICBpZiAobGV2ZWwgPj0gbGV2ZWxUaHJlc2hvbGQpIHtcbiAgICAgIHJldHVybiByZWN0cztcbiAgICB9XG4gICAgbGV2ZWwrKztcblxuICAgIGNvbnN0IHsgbGF0OiB4MSwgbG5nOiB5MSB9ID0gdmlld0JvdW5kcy5nZXRTb3V0aFdlc3QoKTtcbiAgICBjb25zdCB7IGxhdDogeDIsIGxuZzogeTIgfSA9IHZpZXdCb3VuZHMuZ2V0Tm9ydGhFYXN0KCk7XG4gICAgY29uc3QgbmV3WDIgPSAoeDEgKyB4MikgLyAyO1xuICAgIGNvbnN0IG5ld1kyID0gKHkxICsgeTIpIC8gMjtcblxuICAgIGNvbnN0IGJvdW5kczogW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dW10gPSBbXG4gICAgICBbXG4gICAgICAgIFt4MSwgeTFdLFxuICAgICAgICBbbmV3WDIsIG5ld1kyXVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgW25ld1gyLCBuZXdZMl0sXG4gICAgICAgIFt4MiwgeTJdXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBbeDEsIG5ld1kyXSxcbiAgICAgICAgW25ld1gyLCB5Ml1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIFtuZXdYMiwgeTFdLFxuICAgICAgICBbeDIsIG5ld1kyXVxuICAgICAgXVxuICAgIF07XG4gICAgZm9yIChjb25zdCBib3VuZCBvZiBib3VuZHMpIHtcbiAgICAgIGNvbnN0IGxhdExuZ0JvdW5kID0gdGhpcy5sZWFmbGV0LmxhdExuZ0JvdW5kcyhib3VuZCk7XG4gICAgICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5nZXRSZWN0KGxhdExuZ0JvdW5kKTtcbiAgICAgIHJlY3RzID0gWy4uLnJlY3RzLCAuLi4oYXdhaXQgdGhpcy5nZXRDbHVzdGVyUmVjdHMobGV2ZWxUaHJlc2hvbGQsIGxhdExuZ0JvdW5kLCBsZXZlbCkpXTtcblxuICAgICAgaWYgKGxldmVsID09PSBsZXZlbFRocmVzaG9sZCkge1xuICAgICAgICByZWN0cy5wdXNoKHJlY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVjdChsYXRMbmdCb3VuZDogTC5MYXRMbmdCb3VuZHMpIHtcbiAgICBsZXQgY29sb3IgPSAnbm9uZSc7XG4gICAgaWYgKHRoaXMuc2hvd0NsdXN0ZXJDb2xvcikge1xuICAgICAgY29sb3IgPSBhd2FpdCB0aGlzLmNvbG9yU2VydmljZS5nZW5lcmF0ZUNvbG9yKGxhdExuZ0JvdW5kLnRvQkJveFN0cmluZygpKTtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IHRoaXMubGVhZmxldC5yZWN0YW5nbGUobGF0TG5nQm91bmQsIHtcbiAgICAgIGNvbG9yLFxuICAgICAgd2VpZ2h0OiBjb2xvciA9PT0gJ25vbmUnID8gMCA6IDEsXG4gICAgICBpbnRlcmFjdGl2ZTogZmFsc2VcbiAgICB9KTtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJDbHVzdGVycygpIHtcbiAgICB0aGlzLmNsdXN0ZXJzLmZvckVhY2goY2x1c3RlciA9PiB7XG4gICAgICBjbHVzdGVyLmNsZWFyKHRoaXMubWFwKTtcbiAgICB9KTtcbiAgICB0aGlzLmNsdXN0ZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNsdXN0ZXIoY2x1c3RlcjogQ2x1c3Rlck1hcCkge1xuICAgIGNvbnN0IGNsdXN0ZXJDb3VudCA9IGF3YWl0IHRoaXMubWFwU2VydmljZS5nZXRQb3NpdGlvbk1Pc0Zyb21Cb3VuZENvdW50KFxuICAgICAgY2x1c3Rlci5yZWN0LmdldEJvdW5kcygpLFxuICAgICAgdGhpcy5yb290Tm9kZVxuICAgICk7XG4gICAgaWYgKGNsdXN0ZXJDb3VudCA+IHRoaXMubWFwU2VydmljZS5NQVhfREVWSUNFX1BFUl9DTFVTVEVSKSB7XG4gICAgICBjbHVzdGVyLnNldENsdXN0ZXJUb0JpZ01hcmtlcih0aGlzLm1hcCwgY2x1c3RlckNvdW50LCB0aGlzLmxlYWZsZXQpO1xuICAgICAgY2x1c3Rlci5wb3NpdGlvbnMgPSBbXTtcbiAgICAgIHJldHVybiBjbHVzdGVyO1xuICAgIH1cblxuICAgIGNsdXN0ZXIucmVtb3ZlQ2x1c3RlclRvQmlnTWFya2VyKCk7XG4gICAgY2x1c3Rlci5wb3NpdGlvbnMgPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoXG4gICAgICBjbHVzdGVyLnJlY3QuZ2V0Qm91bmRzKCksXG4gICAgICB0aGlzLnJvb3ROb2RlXG4gICAgKTtcbiAgICByZXR1cm4gY2x1c3RlcjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3JVcGRhdGVDbHVzdGVyKHJlY3RzOiBMLlJlY3RhbmdsZTx1bmtub3duPltdKSB7XG4gICAgY29uc3QgaXNOZXcgPSByZWN0cy5sZW5ndGggIT09IHRoaXMuY2x1c3RlcnMubGVuZ3RoO1xuICAgIGlmIChpc05ldykge1xuICAgICAgdGhpcy5jbGVhckNsdXN0ZXJzKCk7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZVByb21pc2UgPSByZWN0cy5tYXAoKHJlY3QsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaXNOZXcpIHtcbiAgICAgICAgY29uc3QgY2x1c3RlciA9IG5ldyBDbHVzdGVyTWFwKFxuICAgICAgICAgIHRoaXMuaXRlcmFibGUsXG4gICAgICAgICAgYXNzZXQgPT4gdGhpcy5nZXRBc3NldE1hcmtlcihhc3NldCksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2x1c3RlcnMucHVzaChjbHVzdGVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2x1c3RlcnNbaW5kZXhdLnJlY3QgPSByZWN0O1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1c3Rlcih0aGlzLmNsdXN0ZXJzW2luZGV4XSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodXBkYXRlUHJvbWlzZSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1hcENoYW5nZU9ic2VydmFibGUoKSB7XG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgZnJvbUV2ZW50PEwuTGVhZmxldEV2ZW50Pih0aGlzLm1hcCwgJ21vdmUnKSxcbiAgICAgIGZyb21FdmVudDxMLkxlYWZsZXRFdmVudD4odGhpcy5tYXAsICdtb3ZlZW5kJylcbiAgICApLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUodGhpcy5FVkVOVF9USFJPVFRMRV9USU1FKSxcbiAgICAgIHRhcChldmVudCA9PiB0aGlzLm1hcENoYW5nZS5lbWl0KGV2ZW50KSksXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVRyaWdnZXIkKVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktbWFwXCI+XG4gIDxkaXYgI21hcD48L2Rpdj5cbjwvZGl2PlxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
@@ -1,5 +1,5 @@
1
1
  import { gettext } from '@c8y/ngx-components';
2
- import { getStatus } from './map.model';
2
+ import { MapService } from './map.service';
3
3
  export class ClusterMap {
4
4
  set clusterMarker(item) {
5
5
  this.removeClusterToBigMarker();
@@ -78,7 +78,12 @@ export class ClusterMap {
78
78
  }
79
79
  }
80
80
  trackBy(index, item) {
81
- const trackItems = [item.id, item.c8y_Position.lat, item.c8y_Position.lng, getStatus(item)];
81
+ const trackItems = [
82
+ item.id,
83
+ item.c8y_Position.lat,
84
+ item.c8y_Position.lng,
85
+ MapService.getStatus(item)
86
+ ];
82
87
  return trackItems.join('');
83
88
  }
84
89
  removeMarkerFromMap(device) {
@@ -86,4 +91,4 @@ export class ClusterMap {
86
91
  markers.forEach(marker => marker.remove());
87
92
  }
88
93
  }
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci1tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tYXAvY2x1c3Rlci1tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBYSxTQUFTLEVBQXlCLE1BQU0sYUFBYSxDQUFDO0FBRTFFLE1BQU0sT0FBTyxVQUFVO0lBSXJCLElBQUksYUFBYSxDQUFDLElBQWE7UUFDN0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBaUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNyQjtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQU1ELFlBQ1UsUUFBeUIsRUFDekIsZ0JBQTZELEVBQzdELGdCQUFrQztRQUZsQyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTZDO1FBQzdELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUE5QjVDLFlBQU8sR0FBZ0IsRUFBRSxDQUFDO1FBQzFCLGNBQVMsR0FBNEIsRUFBRSxDQUFDO1FBK0J0QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hG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SUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUYsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxNQUE2QjtRQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQWlCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSXRlcmFibGVDaGFuZ2VSZWNvcmQsIEl0ZXJhYmxlRGlmZmVyLCBJdGVyYWJsZURpZmZlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB0eXBlICogYXMgTCBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEM4eU1hcmtlciwgZ2V0U3RhdHVzLCBQb3NpdGlvbk1hbmFnZWRPYmplY3QgfSBmcm9tICcuL21hcC5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBDbHVzdGVyTWFwIHtcbiAgbWFya2VyczogQzh5TWFya2VyW10gPSBbXTtcbiAgcG9zaXRpb25zOiBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXSA9IFtdO1xuXG4gIHNldCBjbHVzdGVyTWFya2VyKGl0ZW06IEwuTGF5ZXIpIHtcbiAgICB0aGlzLnJlbW92ZUNsdXN0ZXJUb0JpZ01hcmtlcigpO1xuICAgIHRoaXMuX2NsdXN0ZXJNYXJrZXIgPSBpdGVtO1xuICB9XG5cbiAgZ2V0IGNsdXN0ZXJNYXJrZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsdXN0ZXJNYXJrZXI7XG4gIH1cblxuICBzZXQgcmVjdChpdGVtOiBMLlJlY3RhbmdsZSkge1xuICAgIGlmICh0aGlzLl9yZWN0KSB7XG4gICAgICB0aGlzLl9yZWN0LnJlbW92ZSgpO1xuICAgIH1cbiAgICB0aGlzLl9yZWN0ID0gaXRlbTtcbiAgfVxuXG4gIGdldCByZWN0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBfY2x1c3Rlck1hcmtlcjogTC5MYXllcjtcbiAgcHJpdmF0ZSBfcmVjdDogTC5SZWN0YW5nbGU7XG4gIHByaXZhdGUgaXRlcmFibGVEaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPFBvc2l0aW9uTWFuYWdlZE9iamVjdD4gfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaXRlcmFibGU6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwcml2YXRlIGFkZEFzc2V0Q2FsbGJhY2s6IChhc3NldDogUG9zaXRpb25NYW5hZ2VkT2JqZWN0KSA9PiBDOHlNYXJrZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaXRlcmFibGVEaWZmZXIgPSB0aGlzLml0ZXJhYmxlLmZpbmQodGhpcy5wb3NpdGlvbnMpLmNyZWF0ZSh0aGlzLnRyYWNrQnkpO1xuICB9XG5cbiAgcmVuZGVyKG1hcDogTC5NYXApIHtcbiAgICBpZiAodGhpcy5fcmVjdCkge1xuICAgICAgdGhpcy5fcmVjdC5hZGRUbyhtYXApO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNoYW5nZXMobWFwKTtcbiAgICBpZiAodGhpcy5fY2x1c3Rlck1hcmtlcikge1xuICAgICAgdGhpcy5fY2x1c3Rlck1hcmtlci5hZGRUbyhtYXApO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKG1hcDogTC5NYXApIHtcbiAgICB0aGlzLnJlbW92ZUNsdXN0ZXJUb0JpZ01hcmtlcigpO1xuICAgIHRoaXMuX3JlY3QucmVtb3ZlKCk7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBbXTtcbiAgICB0aGlzLnVwZGF0ZUNoYW5nZXMobWFwKTtcbiAgfVxuXG4gIHJlbW92ZUNsdXN0ZXJUb0JpZ01hcmtlcigpIHtcbiAgICBpZiAodGhpcy5fY2x1c3Rlck1hcmtlcikge1xuICAgICAgdGhpcy5fY2x1c3Rlck1hcmtlci5yZW1vdmUoKTtcbiAgICAgIHRoaXMuX2NsdXN0ZXJNYXJrZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFkZE1hcmtlclRvTWFwKGRldmljZTogUG9zaXRpb25NYW5hZ2VkT2JqZWN0LCBtYXA6IEwuTWFwKSB7XG4gICAgY29uc3QgbWFya2VyID0gdGhpcy5hZGRBc3NldENhbGxiYWNrKGRldmljZSk7XG4gICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcbiAgICBtYXJrZXIuYWRkVG8obWFwKTtcbiAgfVxuXG4gIHNldENsdXN0ZXJUb0JpZ01hcmtlcihtYXA6IEwuTWFwLCBjb3VudCwgbGVhZmxldDogdHlwZW9mIEwpIHtcbiAgICBjb25zdCBib3VuZCA9IHRoaXMucmVjdC5nZXRCb3VuZHMoKTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnWm9vbSBpbicpKTtcbiAgICBjb25zdCBkaXZNYXJrZXIgPSBsZWFmbGV0LmRpdkljb24oe1xuICAgICAgaHRtbDogYDxkaXYgY2xhc3M9XCJjOHktbWFwLW1hcmtlci1jb3VudFwiIGRhdGEtY291bnQ9XCIke2NvdW50fVwiIHRpdGxlPVwiJHt0ZXh0fVwiPjwvZGl2PmBcbiAgICB9KTtcbiAgICBjb25zdCBsYWJlbEljb24gPSBsZWFmbGV0Lm1hcmtlcihib3VuZC5nZXRDZW50ZXIoKSwge1xuICAgICAgaWNvbjogZGl2TWFya2VyXG4gICAgfSk7XG4gICAgbGFiZWxJY29uLmFkZFRvKG1hcCk7XG4gICAgbGFiZWxJY29uLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgIG1hcC5maXRCb3VuZHMoYm91bmQpO1xuICAgIH0pO1xuICAgIHRoaXMuY2x1c3Rlck1hcmtlciA9IGxhYmVsSWNvbjtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2hhbmdlcyhtYXA6IEwuTWFwKSB7XG4gICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuaXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLnBvc2l0aW9ucyk7XG4gICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgIGNoYW5nZXMuZm9yRWFjaFJlbW92ZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPFBvc2l0aW9uTWFuYWdlZE9iamVjdD4pID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVNYXJrZXJGcm9tTWFwKHJlY29yZC5pdGVtKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGFuZ2VzLmZvckVhY2hBZGRlZEl0ZW0oKHJlY29yZDogSXRlcmFibGVDaGFuZ2VSZWNvcmQ8UG9zaXRpb25NYW5hZ2VkT2JqZWN0PikgPT4ge1xuICAgICAgICB0aGlzLmFkZE1hcmtlclRvTWFwKHJlY29yZC5pdGVtLCBtYXApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IFBvc2l0aW9uTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHRyYWNrSXRlbXMgPSBbaXRlbS5pZCwgaXRlbS5jOHlfUG9zaXRpb24ubGF0LCBpdGVtLmM4eV9Qb3NpdGlvbi5sbmcsIGdldFN0YXR1cyhpdGVtKV07XG4gICAgcmV0dXJuIHRyYWNrSXRlbXMuam9pbignJyk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU1hcmtlckZyb21NYXAoZGV2aWNlOiBQb3NpdGlvbk1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBtYXJrZXJzID0gdGhpcy5tYXJrZXJzLmZpbHRlcigobWFya2VyOiBDOHlNYXJrZXIpID0+IG1hcmtlci5hc3NldD8uaWQgPT09IGRldmljZS5pZCk7XG4gICAgbWFya2Vycy5mb3JFYWNoKG1hcmtlciA9PiBtYXJrZXIucmVtb3ZlKCkpO1xuICB9XG59XG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci1tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tYXAvY2x1c3Rlci1tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBTSxPQUFPLFVBQVU7SUFJckIsSUFBSSxhQUFhLENBQUMsSUFBYTtRQUM3QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFpQjtRQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBTUQsWUFDVSxRQUF5QixFQUN6QixnQkFBNkQsRUFDN0QsZ0JBQWtDO1FBRmxDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBNkM7UUFDN0QscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQTlCNUMsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFDMUIsY0FBUyxHQUE0QixFQUFFLENBQUM7UUErQnRDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEYs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SUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRztZQUNyQixVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztTQUMzQixDQUFDO1FBQ0YsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxNQUE2QjtRQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQWlCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSXRlcmFibGVDaGFuZ2VSZWNvcmQsIEl0ZXJhYmxlRGlmZmVyLCBJdGVyYWJsZURpZmZlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB0eXBlICogYXMgTCBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEM4eU1hcmtlciwgUG9zaXRpb25NYW5hZ2VkT2JqZWN0IH0gZnJvbSAnLi9tYXAubW9kZWwnO1xuaW1wb3J0IHsgTWFwU2VydmljZSB9IGZyb20gJy4vbWFwLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgQ2x1c3Rlck1hcCB7XG4gIG1hcmtlcnM6IEM4eU1hcmtlcltdID0gW107XG4gIHBvc2l0aW9uczogUG9zaXRpb25NYW5hZ2VkT2JqZWN0W10gPSBbXTtcblxuICBzZXQgY2x1c3Rlck1hcmtlcihpdGVtOiBMLkxheWVyKSB7XG4gICAgdGhpcy5yZW1vdmVDbHVzdGVyVG9CaWdNYXJrZXIoKTtcbiAgICB0aGlzLl9jbHVzdGVyTWFya2VyID0gaXRlbTtcbiAgfVxuXG4gIGdldCBjbHVzdGVyTWFya2VyKCkge1xuICAgIHJldHVybiB0aGlzLl9jbHVzdGVyTWFya2VyO1xuICB9XG5cbiAgc2V0IHJlY3QoaXRlbTogTC5SZWN0YW5nbGUpIHtcbiAgICBpZiAodGhpcy5fcmVjdCkge1xuICAgICAgdGhpcy5fcmVjdC5yZW1vdmUoKTtcbiAgICB9XG4gICAgdGhpcy5fcmVjdCA9IGl0ZW07XG4gIH1cblxuICBnZXQgcmVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVjdDtcbiAgfVxuXG4gIHByaXZhdGUgX2NsdXN0ZXJNYXJrZXI6IEwuTGF5ZXI7XG4gIHByaXZhdGUgX3JlY3Q6IEwuUmVjdGFuZ2xlO1xuICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxQb3NpdGlvbk1hbmFnZWRPYmplY3Q+IHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGl0ZXJhYmxlOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgcHJpdmF0ZSBhZGRBc3NldENhbGxiYWNrOiAoYXNzZXQ6IFBvc2l0aW9uTWFuYWdlZE9iamVjdCkgPT4gQzh5TWFya2VyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHtcbiAgICB0aGlzLml0ZXJhYmxlRGlmZmVyID0gdGhpcy5pdGVyYWJsZS5maW5kKHRoaXMucG9zaXRpb25zKS5jcmVhdGUodGhpcy50cmFja0J5KTtcbiAgfVxuXG4gIHJlbmRlcihtYXA6IEwuTWFwKSB7XG4gICAgaWYgKHRoaXMuX3JlY3QpIHtcbiAgICAgIHRoaXMuX3JlY3QuYWRkVG8obWFwKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDaGFuZ2VzKG1hcCk7XG4gICAgaWYgKHRoaXMuX2NsdXN0ZXJNYXJrZXIpIHtcbiAgICAgIHRoaXMuX2NsdXN0ZXJNYXJrZXIuYWRkVG8obWFwKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcihtYXA6IEwuTWFwKSB7XG4gICAgdGhpcy5yZW1vdmVDbHVzdGVyVG9CaWdNYXJrZXIoKTtcbiAgICB0aGlzLl9yZWN0LnJlbW92ZSgpO1xuICAgIHRoaXMucG9zaXRpb25zID0gW107XG4gICAgdGhpcy51cGRhdGVDaGFuZ2VzKG1hcCk7XG4gIH1cblxuICByZW1vdmVDbHVzdGVyVG9CaWdNYXJrZXIoKSB7XG4gICAgaWYgKHRoaXMuX2NsdXN0ZXJNYXJrZXIpIHtcbiAgICAgIHRoaXMuX2NsdXN0ZXJNYXJrZXIucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9jbHVzdGVyTWFya2VyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhZGRNYXJrZXJUb01hcChkZXZpY2U6IFBvc2l0aW9uTWFuYWdlZE9iamVjdCwgbWFwOiBMLk1hcCkge1xuICAgIGNvbnN0IG1hcmtlciA9IHRoaXMuYWRkQXNzZXRDYWxsYmFjayhkZXZpY2UpO1xuICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XG4gICAgbWFya2VyLmFkZFRvKG1hcCk7XG4gIH1cblxuICBzZXRDbHVzdGVyVG9CaWdNYXJrZXIobWFwOiBMLk1hcCwgY291bnQsIGxlYWZsZXQ6IHR5cGVvZiBMKSB7XG4gICAgY29uc3QgYm91bmQgPSB0aGlzLnJlY3QuZ2V0Qm91bmRzKCk7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ1pvb20gaW4nKSk7XG4gICAgY29uc3QgZGl2TWFya2VyID0gbGVhZmxldC5kaXZJY29uKHtcbiAgICAgIGh0bWw6IGA8ZGl2IGNsYXNzPVwiYzh5LW1hcC1tYXJrZXItY291bnRcIiBkYXRhLWNvdW50PVwiJHtjb3VudH1cIiB0aXRsZT1cIiR7dGV4dH1cIj48L2Rpdj5gXG4gICAgfSk7XG4gICAgY29uc3QgbGFiZWxJY29uID0gbGVhZmxldC5tYXJrZXIoYm91bmQuZ2V0Q2VudGVyKCksIHtcbiAgICAgIGljb246IGRpdk1hcmtlclxuICAgIH0pO1xuICAgIGxhYmVsSWNvbi5hZGRUbyhtYXApO1xuICAgIGxhYmVsSWNvbi5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICBtYXAuZml0Qm91bmRzKGJvdW5kKTtcbiAgICB9KTtcbiAgICB0aGlzLmNsdXN0ZXJNYXJrZXIgPSBsYWJlbEljb247XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNoYW5nZXMobWFwOiBMLk1hcCkge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZXJhYmxlRGlmZmVyLmRpZmYodGhpcy5wb3NpdGlvbnMpO1xuICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICBjaGFuZ2VzLmZvckVhY2hSZW1vdmVkSXRlbSgocmVjb3JkOiBJdGVyYWJsZUNoYW5nZVJlY29yZDxQb3NpdGlvbk1hbmFnZWRPYmplY3Q+KSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlTWFya2VyRnJvbU1hcChyZWNvcmQuaXRlbSk7XG4gICAgICB9KTtcblxuICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPFBvc2l0aW9uTWFuYWdlZE9iamVjdD4pID0+IHtcbiAgICAgICAgdGhpcy5hZGRNYXJrZXJUb01hcChyZWNvcmQuaXRlbSwgbWFwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBQb3NpdGlvbk1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCB0cmFja0l0ZW1zID0gW1xuICAgICAgaXRlbS5pZCxcbiAgICAgIGl0ZW0uYzh5X1Bvc2l0aW9uLmxhdCxcbiAgICAgIGl0ZW0uYzh5X1Bvc2l0aW9uLmxuZyxcbiAgICAgIE1hcFNlcnZpY2UuZ2V0U3RhdHVzKGl0ZW0pXG4gICAgXTtcbiAgICByZXR1cm4gdHJhY2tJdGVtcy5qb2luKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTWFya2VyRnJvbU1hcChkZXZpY2U6IFBvc2l0aW9uTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IG1hcmtlcnMgPSB0aGlzLm1hcmtlcnMuZmlsdGVyKChtYXJrZXI6IEM4eU1hcmtlcikgPT4gbWFya2VyLmFzc2V0Py5pZCA9PT0gZGV2aWNlLmlkKTtcbiAgICBtYXJrZXJzLmZvckVhY2gobWFya2VyID0+IG1hcmtlci5yZW1vdmUoKSk7XG4gIH1cbn1cbiJdfQ==
@@ -11,7 +11,7 @@ export class MapStatusComponent {
11
11
  this.configChange = new EventEmitter();
12
12
  this.onUnfollow = new EventEmitter();
13
13
  this.buttonsConfig = {};
14
- this.showCenter = false;
14
+ this.centerMapButtonDisabled = true;
15
15
  this.destroy$ = new Subject();
16
16
  }
17
17
  ngOnInit() {
@@ -62,10 +62,24 @@ export class MapStatusComponent {
62
62
  this.clusterMap.mapChange.pipe(takeUntil(this.destroy$)).subscribe((event) => {
63
63
  if (this.config?.center && event.sourceTarget?.getBounds) {
64
64
  const bounds = event.sourceTarget.getBounds();
65
- this.showCenter = !bounds.getCenter().equals(this.config.center, 3);
65
+ this.centerMapButtonDisabled = this.shouldDisableCenterButton(bounds);
66
66
  }
67
67
  });
68
68
  }
69
+ /**
70
+ * Checks if Center button should be disabled according to provided bounds.
71
+ * Provided bounds contain coordinates of current map rectangle corners.
72
+ * Center button should be disabled if distance between center coordinates (from config) and center of current bounds
73
+ * is less than 1/4 of bounds dimensions.
74
+ * To achieve it we just need to check if center coordinates (from config) are contained in the boundaries of
75
+ * current bounds shrunk by 25%.
76
+ * @param bounds Current map view boundaries.
77
+ * @returns True if distance between config center and current boundaries center is bigger than 1/4 of boundaries dimensions
78
+ */
79
+ shouldDisableCenterButton(bounds) {
80
+ const shrunkBounds = bounds.pad(-0.25);
81
+ return shrunkBounds.contains(this.config.center);
82
+ }
69
83
  defaultButtonsConfig() {
70
84
  return {
71
85
  realtime: { show: this.config.realtime || this.clusterMap.config.follow, disabled: false }
@@ -73,10 +87,10 @@ export class MapStatusComponent {
73
87
  }
74
88
  }
75
89
  MapStatusComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MapStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
76
- MapStatusComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: MapStatusComponent, selector: "c8y-map-status", inputs: { config: "config", clusterMap: "clusterMap", buttonsConfig: "buttonsConfig" }, outputs: { configChange: "configChange", onUnfollow: "onUnfollow" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n type=\"button\"\n title=\"{{ 'Realtime' | translate }}\"\n class=\"c8y-realtime\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n <button\n type=\"button\"\n class=\"time-ellapsed\"\n *ngIf=\"\n clusterMap?.config.refreshInterval &&\n (secondsUntilRefresh$ | async) &&\n !clusterMap?.config.follow\n \"\n disabled=\"disabled\"\n title=\"{{ secondsUntilRefresh$ | async }}s / {{\n clusterMap?.config.refreshInterval / 1000\n }}s\"\n [style.--timescope]=\"clusterMap?.config.refreshInterval + 1000 + 'ms'\"\n >\n <svg\n [ngClass]=\"{ 'time-on': !(clusterMap?.isLoading$ | async) }\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"15.8\"\n stroke=\"var(--c8y-brand-primary)\"\n stroke-width=\"6\"\n />\n </svg>\n\n <span>{{ secondsUntilRefresh$ | async }}</span>\n </button>\n <button\n type=\"button\"\n *ngIf=\"clusterMap?.isLoading$ | async\"\n title=\"{{ 'Cancel reload' | translate }}\"\n (click)=\"cancelReload()\"\n >\n <i\n c8yIcon=\"refresh\"\n class=\"icon-spin\"\n ></i>\n </button>\n <button\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime && !clusterMap?.assets && !(clusterMap?.isLoading$ | async)\n \"\n (click)=\"reload()\"\n [title]=\"'Reload' | translate\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"center()\"\n title=\"{{ 'Center map' | translate }}\"\n [disabled]=\"!showCenter || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Unfollow' | translate }}\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n type=\"button\"\n title=\"{{ 'Follow' | translate }}\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
90
+ MapStatusComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: MapStatusComponent, selector: "c8y-map-status", inputs: { config: "config", clusterMap: "clusterMap", buttonsConfig: "buttonsConfig" }, outputs: { configChange: "configChange", onUnfollow: "onUnfollow" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n type=\"button\"\n title=\"{{ 'Realtime' | translate }}\"\n class=\"c8y-realtime\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n <button\n type=\"button\"\n class=\"time-ellapsed\"\n *ngIf=\"\n clusterMap?.config.refreshInterval &&\n (secondsUntilRefresh$ | async) &&\n !clusterMap?.config.follow\n \"\n disabled=\"disabled\"\n title=\"{{ secondsUntilRefresh$ | async }}s / {{\n clusterMap?.config.refreshInterval / 1000\n }}s\"\n [style.--timescope]=\"clusterMap?.config.refreshInterval + 1000 + 'ms'\"\n >\n <svg\n [ngClass]=\"{ 'time-on': !(clusterMap?.isLoading$ | async) }\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"15.8\"\n stroke=\"var(--c8y-brand-primary)\"\n stroke-width=\"6\"\n />\n </svg>\n\n <span>{{ secondsUntilRefresh$ | async }}</span>\n </button>\n <button\n type=\"button\"\n *ngIf=\"clusterMap?.isLoading$ | async\"\n title=\"{{ 'Cancel reload' | translate }}\"\n (click)=\"cancelReload()\"\n >\n <i\n c8yIcon=\"refresh\"\n class=\"icon-spin\"\n ></i>\n </button>\n <button\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime && !clusterMap?.assets && !(clusterMap?.isLoading$ | async)\n \"\n (click)=\"reload()\"\n [title]=\"'Reload' | translate\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"center()\"\n title=\"{{ 'Center map' | translate }}\"\n [disabled]=\"centerMapButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Unfollow' | translate }}\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n type=\"button\"\n title=\"{{ 'Follow' | translate }}\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
77
91
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MapStatusComponent, decorators: [{
78
92
  type: Component,
79
- args: [{ selector: 'c8y-map-status', template: "<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n type=\"button\"\n title=\"{{ 'Realtime' | translate }}\"\n class=\"c8y-realtime\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n <button\n type=\"button\"\n class=\"time-ellapsed\"\n *ngIf=\"\n clusterMap?.config.refreshInterval &&\n (secondsUntilRefresh$ | async) &&\n !clusterMap?.config.follow\n \"\n disabled=\"disabled\"\n title=\"{{ secondsUntilRefresh$ | async }}s / {{\n clusterMap?.config.refreshInterval / 1000\n }}s\"\n [style.--timescope]=\"clusterMap?.config.refreshInterval + 1000 + 'ms'\"\n >\n <svg\n [ngClass]=\"{ 'time-on': !(clusterMap?.isLoading$ | async) }\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"15.8\"\n stroke=\"var(--c8y-brand-primary)\"\n stroke-width=\"6\"\n />\n </svg>\n\n <span>{{ secondsUntilRefresh$ | async }}</span>\n </button>\n <button\n type=\"button\"\n *ngIf=\"clusterMap?.isLoading$ | async\"\n title=\"{{ 'Cancel reload' | translate }}\"\n (click)=\"cancelReload()\"\n >\n <i\n c8yIcon=\"refresh\"\n class=\"icon-spin\"\n ></i>\n </button>\n <button\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime && !clusterMap?.assets && !(clusterMap?.isLoading$ | async)\n \"\n (click)=\"reload()\"\n [title]=\"'Reload' | translate\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"center()\"\n title=\"{{ 'Center map' | translate }}\"\n [disabled]=\"!showCenter || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Unfollow' | translate }}\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n type=\"button\"\n title=\"{{ 'Follow' | translate }}\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n" }]
93
+ args: [{ selector: 'c8y-map-status', template: "<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n type=\"button\"\n title=\"{{ 'Realtime' | translate }}\"\n class=\"c8y-realtime\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n <button\n type=\"button\"\n class=\"time-ellapsed\"\n *ngIf=\"\n clusterMap?.config.refreshInterval &&\n (secondsUntilRefresh$ | async) &&\n !clusterMap?.config.follow\n \"\n disabled=\"disabled\"\n title=\"{{ secondsUntilRefresh$ | async }}s / {{\n clusterMap?.config.refreshInterval / 1000\n }}s\"\n [style.--timescope]=\"clusterMap?.config.refreshInterval + 1000 + 'ms'\"\n >\n <svg\n [ngClass]=\"{ 'time-on': !(clusterMap?.isLoading$ | async) }\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"15.8\"\n stroke=\"var(--c8y-brand-primary)\"\n stroke-width=\"6\"\n />\n </svg>\n\n <span>{{ secondsUntilRefresh$ | async }}</span>\n </button>\n <button\n type=\"button\"\n *ngIf=\"clusterMap?.isLoading$ | async\"\n title=\"{{ 'Cancel reload' | translate }}\"\n (click)=\"cancelReload()\"\n >\n <i\n c8yIcon=\"refresh\"\n class=\"icon-spin\"\n ></i>\n </button>\n <button\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime && !clusterMap?.assets && !(clusterMap?.isLoading$ | async)\n \"\n (click)=\"reload()\"\n [title]=\"'Reload' | translate\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"center()\"\n title=\"{{ 'Center map' | translate }}\"\n [disabled]=\"centerMapButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Unfollow' | translate }}\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n type=\"button\"\n title=\"{{ 'Follow' | translate }}\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n" }]
80
94
  }], propDecorators: { config: [{
81
95
  type: Input
82
96
  }], configChange: [{
@@ -88,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
88
102
  }], buttonsConfig: [{
89
103
  type: Input
90
104
  }] } });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tYXAvbWFwLXN0YXR1cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9tYXAvbWFwLXN0YXR1cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQUt0QyxNQUFNLE9BQU8sa0JBQWtCO0lBSi9CO1FBU0UsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUdwRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFLekMsa0JBQWEsR0FBb0MsRUFBRSxDQUFDO1FBRTdELGVBQVUsR0FBRyxLQUFLLENBQUM7UUFHWCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztLQXlFbEM7SUF2RUMsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLGFBQWEsS0FBSyxPQUFPLENBQUMsVUFBVSxFQUFFLFlBQVksRUFB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LFVBQVU7c0JBRFQsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENsdXN0ZXJNYXBDb21wb25lbnQgfSBmcm9tICcuL2NsdXN0ZXItbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDbHVzdGVyTWFwQ29uZmlnLCBNYXBTdGF0dXNCdXR0b25zQ29uZmlnIH0gZnJvbSAnLi9tYXAubW9kZWwnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LW1hcC1zdGF0dXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLXN0YXR1cy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgTWFwU3RhdHVzQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgY29uZmlnOiBDbHVzdGVyTWFwQ29uZmlnO1xuXG4gIEBPdXRwdXQoKVxuICBjb25maWdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENsdXN0ZXJNYXBDb25maWc+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uVW5mb2xsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPENsdXN0ZXJNYXBDb25maWc+KCk7XG5cbiAgQElucHV0KClcbiAgY2x1c3Rlck1hcDogQ2x1c3Rlck1hcENvbXBvbmVudDtcblxuICBASW5wdXQoKSBidXR0b25zQ29uZmlnOiBQYXJ0aWFsPE1hcFN0YXR1c0J1dHRvbnNDb25maWc+ID0ge307XG5cbiAgc2hvd0NlbnRlciA9IGZhbHNlO1xuICBzZWNvbmRzVW50aWxSZWZyZXNoJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBpbml0Q29uZmlnOiBDbHVzdGVyTWFwQ29uZmlnO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRDb25maWcgPSBjbG9uZURlZXAodGhpcy5jb25maWcpO1xuICAgIHRoaXMuYnV0dG9uc0NvbmZpZyA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZhdWx0QnV0dG9uc0NvbmZpZygpLCB0aGlzLmJ1dHRvbnNDb25maWcpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmNsdXN0ZXJNYXA/LnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZXMuY2x1c3Rlck1hcD8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmNoZWNrSWZNYXBJc0FscmVhZHlDZW50ZXJlZCgpO1xuXG4gICAgICB0aGlzLnNlY29uZHNVbnRpbFJlZnJlc2gkID0gdGhpcy5jbHVzdGVyTWFwLm1zVW50aWxSZWZyZXNoJC5waXBlKFxuICAgICAgICBtYXAobWlsbGlzZWNvbmRzID0+IGAke01hdGguZmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCl9YCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjZW50ZXIoKSB7XG4gICAgdGhpcy5jbHVzdGVyTWFwLmNlbnRlcigpO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIHRoaXMuY2x1c3Rlck1hcC5yZWxvYWQoKTtcbiAgfVxuXG4gIGNhbmNlbFJlbG9hZCgpIHtcbiAgICB0aGlzLmNsdXN0ZXJNYXAuY2FuY2VsUmVsb2FkKCk7XG4gIH1cblxuICB0b2dnbGVSZWFsdGltZSgpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgcmVhbHRpbWU6ICF0aGlzLmNvbmZpZy5yZWFsdGltZVxuICAgIH07XG4gICAgdGhpcy5jb25maWdDaGFuZ2UuZW1pdCh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICB1bmZvbGxvdygpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY2x1c3Rlck1hcC5jb25maWcsXG4gICAgICBmb2xsb3c6IGZhbHNlXG4gICAgfTtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZS5lbWl0KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLm9uVW5mb2xsb3cuZW1pdCh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBmb2xsb3coKSB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIGZvbGxvdzogdHJ1ZVxuICAgIH07XG4gICAgdGhpcy5jb25maWdDaGFuZ2UuZW1pdCh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZk1hcElzQWxyZWFkeUNlbnRlcmVkKCkge1xuICAgIHRoaXMuY2x1c3Rlck1hcC5tYXBDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQ6IEwuTGVhZmxldEV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5jb25maWc/LmNlbnRlciAmJiBldmVudC5zb3VyY2VUYXJnZXQ/LmdldEJvdW5kcykge1xuICAgICAgICBjb25zdCBib3VuZHMgPSBldmVudC5zb3VyY2VUYXJnZXQuZ2V0Qm91bmRzKCk7XG4gICAgICAgIHRoaXMuc2hvd0NlbnRlciA9ICFib3VuZHMuZ2V0Q2VudGVyKCkuZXF1YWxzKHRoaXMuY29uZmlnLmNlbnRlciwgMyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRCdXR0b25zQ29uZmlnKCk6IE1hcFN0YXR1c0J1dHRvbnNDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICByZWFsdGltZTogeyBzaG93OiB0aGlzLmNvbmZpZy5yZWFsdGltZSB8fCB0aGlzLmNsdXN0ZXJNYXAuY29uZmlnLmZvbGxvdywgZGlzYWJsZWQ6IGZhbHNlIH1cbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYzh5LW1hcC1zdGF0dXNcIj5cbiAgPGRpdiBjbGFzcz1cImxlYWZsZXQtdG91Y2hcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxlYWZsZXQtYmFyXCJcbiAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnUmVhbHRpbWUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY2xhc3M9XCJjOHktcmVhbHRpbWVcIlxuICAgICAgICAqbmdJZj1cImJ1dHRvbnNDb25maWcucmVhbHRpbWUuc2hvd1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVSZWFsdGltZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbnNDb25maWcucmVhbHRpbWUuZGlzYWJsZWRcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiYzh5LXB1bHNlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICBhY3RpdmU6IGNsdXN0ZXJNYXA/LmNvbmZpZy5yZWFsdGltZSxcbiAgICAgICAgICAgIGluYWN0aXZlOiAhY2x1c3Rlck1hcD8uY29uZmlnLnJlYWx0aW1lXG4gICAgICAgICAgfVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwidGltZS1lbGxhcHNlZFwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY2x1c3Rlck1hcD8uY29uZmlnLnJlZnJlc2hJbnRlcnZhbCAmJlxuICAgICAgICAgIChzZWNvbmRzVW50aWxSZWZyZXNoJCB8IGFzeW5jKSAmJlxuICAgICAgICAgICFjbHVzdGVyTWFwPy5jb25maWcuZm9sbG93XG4gICAgICAgIFwiXG4gICAgICAgIGRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICB0aXRsZT1cInt7IHNlY29uZHNVbnRpbFJlZnJlc2gkIHwgYXN5bmMgfX1zIC8ge3tcbiAgICAgICAgICBjbHVzdGVyTWFwPy5jb25maWcucmVmcmVzaEludGVydmFsIC8gMTAwMFxuICAgICAgICB9fXNcIlxuICAgICAgICBbc3R5bGUuLS10aW1lc2NvcGVdPVwiY2x1c3Rlck1hcD8uY29uZmlnLnJlZnJlc2hJbnRlcnZhbCArIDEwMDAgKyAnbXMnXCJcbiAgICAgID5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3RpbWUtb24nOiAhKGNsdXN0ZXJNYXA/LmlzTG9hZGluZyQgfCBhc3luYykgfVwiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA0MCA0MFwiXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY3g9XCIyMFwiXG4gICAgICAgICAgICBjeT1cIjIwXCJcbiAgICAgICAgICAgIHI9XCIxNS44XCJcbiAgICAgICAgICAgIHN0cm9rZT1cInZhcigtLWM4eS1icmFuZC1wcmltYXJ5KVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI2XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cblxuICAgICAgICA8c3Bhbj57eyBzZWNvbmRzVW50aWxSZWZyZXNoJCB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAqbmdJZj1cImNsdXN0ZXJNYXA/LmlzTG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCByZWxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgKGNsaWNrKT1cImNhbmNlbFJlbG9hZCgpXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBjOHlJY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgY2xhc3M9XCJpY29uLXNwaW5cIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICFjbHVzdGVyTWFwPy5jb25maWcucmVhbHRpbWUgJiYgIWNsdXN0ZXJNYXA/LmFzc2V0cyAmJiAhKGNsdXN0ZXJNYXA/LmlzTG9hZGluZyQgfCBhc3luYylcbiAgICAgICAgXCJcbiAgICAgICAgKGNsaWNrKT1cInJlbG9hZCgpXCJcbiAgICAgICAgW3RpdGxlXT1cIidSZWxvYWQnIHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAgPGkgYzh5SWNvbj1cInJlZnJlc2hcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJjZW50ZXIoKVwiXG4gICAgICAgIHRpdGxlPVwie3sgJ0NlbnRlciBtYXAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFzaG93Q2VudGVyIHx8IGNsdXN0ZXJNYXA/LmNvbmZpZy5mb2xsb3dcIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwidGFyZ2V0MVwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnVW5mb2xsb3cnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgKm5nSWY9XCJjbHVzdGVyTWFwPy5jb25maWcuZm9sbG93XCJcbiAgICAgICAgKGNsaWNrKT1cInVuZm9sbG93KClcIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwibWFya2VyLW9mZlwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0aXRsZT1cInt7ICdGb2xsb3cnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgKm5nSWY9XCJpbml0Q29uZmlnLmZvbGxvdyAmJiAhY2x1c3Rlck1hcD8uY29uZmlnLmZvbGxvd1wiXG4gICAgICAgIChjbGljayk9XCJmb2xsb3coKVwiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJtYXJrZXJcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tYXAvbWFwLXN0YXR1cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9tYXAvbWFwLXN0YXR1cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQUt0QyxNQUFNLE9BQU8sa0JBQWtCO0lBSi9CO1FBU0UsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUdwRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFLekMsa0JBQWEsR0FBb0MsRUFBRSxDQUFDO1FBRTdELDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUd2QixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztLQXdGbEM7SUF0RkMsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLGFBQWEsS0FBSyxPQUFPLENBQUMsVUFBVSxFQUFFLFlBQVks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QWxCLGtCQUFrQix3T0NWL0IsKzRGQXNHQTsyRkQ1RmEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGdCQUFnQjs4QkFLMUIsTUFBTTtzQkFETCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsTUFBTTtnQkFJUCxVQUFVO3NCQURULE1BQU07Z0JBSVAsVUFBVTtzQkFEVCxLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2x1c3Rlck1hcENvbXBvbmVudCB9IGZyb20gJy4vY2x1c3Rlci1tYXAuY29tcG9uZW50JztcbmltcG9ydCB7IENsdXN0ZXJNYXBDb25maWcsIE1hcFN0YXR1c0J1dHRvbnNDb25maWcgfSBmcm9tICcuL21hcC5tb2RlbCc7XG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktbWFwLXN0YXR1cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXAtc3RhdHVzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBNYXBTdGF0dXNDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBjb25maWc6IENsdXN0ZXJNYXBDb25maWc7XG5cbiAgQE91dHB1dCgpXG4gIGNvbmZpZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2x1c3Rlck1hcENvbmZpZz4oKTtcblxuICBAT3V0cHV0KClcbiAgb25VbmZvbGxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8Q2x1c3Rlck1hcENvbmZpZz4oKTtcblxuICBASW5wdXQoKVxuICBjbHVzdGVyTWFwOiBDbHVzdGVyTWFwQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIGJ1dHRvbnNDb25maWc6IFBhcnRpYWw8TWFwU3RhdHVzQnV0dG9uc0NvbmZpZz4gPSB7fTtcblxuICBjZW50ZXJNYXBCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gIHNlY29uZHNVbnRpbFJlZnJlc2gkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGluaXRDb25maWc6IENsdXN0ZXJNYXBDb25maWc7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdENvbmZpZyA9IGNsb25lRGVlcCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5idXR0b25zQ29uZmlnID0gT2JqZWN0LmFzc2lnbih0aGlzLmRlZmF1bHRCdXR0b25zQ29uZmlnKCksIHRoaXMuYnV0dG9uc0NvbmZpZyk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuY2x1c3Rlck1hcD8ucHJldmlvdXNWYWx1ZSAhPT0gY2hhbmdlcy5jbHVzdGVyTWFwPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tJZk1hcElzQWxyZWFkeUNlbnRlcmVkKCk7XG5cbiAgICAgIHRoaXMuc2Vjb25kc1VudGlsUmVmcmVzaCQgPSB0aGlzLmNsdXN0ZXJNYXAubXNVbnRpbFJlZnJlc2gkLnBpcGUoXG4gICAgICAgIG1hcChtaWxsaXNlY29uZHMgPT4gYCR7TWF0aC5mbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKX1gKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNlbnRlcigpIHtcbiAgICB0aGlzLmNsdXN0ZXJNYXAuY2VudGVyKCk7XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgdGhpcy5jbHVzdGVyTWFwLnJlbG9hZCgpO1xuICB9XG5cbiAgY2FuY2VsUmVsb2FkKCkge1xuICAgIHRoaXMuY2x1c3Rlck1hcC5jYW5jZWxSZWxvYWQoKTtcbiAgfVxuXG4gIHRvZ2dsZVJlYWx0aW1lKCkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICByZWFsdGltZTogIXRoaXMuY29uZmlnLnJlYWx0aW1lXG4gICAgfTtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZS5lbWl0KHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHVuZm9sbG93KCkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgLi4udGhpcy5jbHVzdGVyTWFwLmNvbmZpZyxcbiAgICAgIGZvbGxvdzogZmFsc2VcbiAgICB9O1xuICAgIHRoaXMuY29uZmlnQ2hhbmdlLmVtaXQodGhpcy5jb25maWcpO1xuICAgIHRoaXMub25VbmZvbGxvdy5lbWl0KHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIGZvbGxvdygpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgZm9sbG93OiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZS5lbWl0KHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmTWFwSXNBbHJlYWR5Q2VudGVyZWQoKSB7XG4gICAgdGhpcy5jbHVzdGVyTWFwLm1hcENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChldmVudDogTC5MZWFmbGV0RXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZz8uY2VudGVyICYmIGV2ZW50LnNvdXJjZVRhcmdldD8uZ2V0Qm91bmRzKSB7XG4gICAgICAgIGNvbnN0IGJvdW5kczogTC5MYXRMbmdCb3VuZHMgPSBldmVudC5zb3VyY2VUYXJnZXQuZ2V0Qm91bmRzKCk7XG4gICAgICAgIHRoaXMuY2VudGVyTWFwQnV0dG9uRGlzYWJsZWQgPSB0aGlzLnNob3VsZERpc2FibGVDZW50ZXJCdXR0b24oYm91bmRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgQ2VudGVyIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQgYWNjb3JkaW5nIHRvIHByb3ZpZGVkIGJvdW5kcy5cbiAgICogUHJvdmlkZWQgYm91bmRzIGNvbnRhaW4gY29vcmRpbmF0ZXMgb2YgY3VycmVudCBtYXAgcmVjdGFuZ2xlIGNvcm5lcnMuXG4gICAqIENlbnRlciBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkIGlmIGRpc3RhbmNlIGJldHdlZW4gY2VudGVyIGNvb3JkaW5hdGVzIChmcm9tIGNvbmZpZykgYW5kIGNlbnRlciBvZiBjdXJyZW50IGJvdW5kc1xuICAgKiBpcyBsZXNzIHRoYW4gMS80IG9mIGJvdW5kcyBkaW1lbnNpb25zLlxuICAgKiBUbyBhY2hpZXZlIGl0IHdlIGp1c3QgbmVlZCB0byBjaGVjayBpZiBjZW50ZXIgY29vcmRpbmF0ZXMgKGZyb20gY29uZmlnKSBhcmUgY29udGFpbmVkIGluIHRoZSBib3VuZGFyaWVzIG9mXG4gICAqIGN1cnJlbnQgYm91bmRzIHNocnVuayBieSAyNSUuXG4gICAqIEBwYXJhbSBib3VuZHMgQ3VycmVudCBtYXAgdmlldyBib3VuZGFyaWVzLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGRpc3RhbmNlIGJldHdlZW4gY29uZmlnIGNlbnRlciBhbmQgY3VycmVudCBib3VuZGFyaWVzIGNlbnRlciBpcyBiaWdnZXIgdGhhbiAxLzQgb2YgYm91bmRhcmllcyBkaW1lbnNpb25zXG4gICAqL1xuICBwcml2YXRlIHNob3VsZERpc2FibGVDZW50ZXJCdXR0b24oYm91bmRzOiBMLkxhdExuZ0JvdW5kcyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNocnVua0JvdW5kcyA9IGJvdW5kcy5wYWQoLTAuMjUpO1xuICAgIHJldHVybiBzaHJ1bmtCb3VuZHMuY29udGFpbnModGhpcy5jb25maWcuY2VudGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdEJ1dHRvbnNDb25maWcoKTogTWFwU3RhdHVzQnV0dG9uc0NvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYWx0aW1lOiB7IHNob3c6IHRoaXMuY29uZmlnLnJlYWx0aW1lIHx8IHRoaXMuY2x1c3Rlck1hcC5jb25maWcuZm9sbG93LCBkaXNhYmxlZDogZmFsc2UgfVxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktbWFwLXN0YXR1c1wiPlxuICA8ZGl2IGNsYXNzPVwibGVhZmxldC10b3VjaFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGVhZmxldC1iYXJcIlxuICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0aXRsZT1cInt7ICdSZWFsdGltZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImM4eS1yZWFsdGltZVwiXG4gICAgICAgICpuZ0lmPVwiYnV0dG9uc0NvbmZpZy5yZWFsdGltZS5zaG93XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJlYWx0aW1lKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uc0NvbmZpZy5yZWFsdGltZS5kaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjOHktcHVsc2VcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgIGFjdGl2ZTogY2x1c3Rlck1hcD8uY29uZmlnLnJlYWx0aW1lLFxuICAgICAgICAgICAgaW5hY3RpdmU6ICFjbHVzdGVyTWFwPy5jb25maWcucmVhbHRpbWVcbiAgICAgICAgICB9XCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJ0aW1lLWVsbGFwc2VkXCJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBjbHVzdGVyTWFwPy5jb25maWcucmVmcmVzaEludGVydmFsICYmXG4gICAgICAgICAgKHNlY29uZHNVbnRpbFJlZnJlc2gkIHwgYXN5bmMpICYmXG4gICAgICAgICAgIWNsdXN0ZXJNYXA/LmNvbmZpZy5mb2xsb3dcbiAgICAgICAgXCJcbiAgICAgICAgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIHRpdGxlPVwie3sgc2Vjb25kc1VudGlsUmVmcmVzaCQgfCBhc3luYyB9fXMgLyB7e1xuICAgICAgICAgIGNsdXN0ZXJNYXA/LmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwgLyAxMDAwXG4gICAgICAgIH19c1wiXG4gICAgICAgIFtzdHlsZS4tLXRpbWVzY29wZV09XCJjbHVzdGVyTWFwPy5jb25maWcucmVmcmVzaEludGVydmFsICsgMTAwMCArICdtcydcIlxuICAgICAgPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAndGltZS1vbic6ICEoY2x1c3Rlck1hcD8uaXNMb2FkaW5nJCB8IGFzeW5jKSB9XCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDQwIDQwXCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjeD1cIjIwXCJcbiAgICAgICAgICAgIGN5PVwiMjBcIlxuICAgICAgICAgICAgcj1cIjE1LjhcIlxuICAgICAgICAgICAgc3Ryb2tlPVwidmFyKC0tYzh5LWJyYW5kLXByaW1hcnkpXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjZcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuXG4gICAgICAgIDxzcGFuPnt7IHNlY29uZHNVbnRpbFJlZnJlc2gkIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiY2x1c3Rlck1hcD8uaXNMb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsIHJlbG9hZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAoY2xpY2spPVwiY2FuY2VsUmVsb2FkKClcIlxuICAgICAgPlxuICAgICAgICA8aVxuICAgICAgICAgIGM4eUljb249XCJyZWZyZXNoXCJcbiAgICAgICAgICBjbGFzcz1cImljb24tc3BpblwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgIWNsdXN0ZXJNYXA/LmNvbmZpZy5yZWFsdGltZSAmJiAhY2x1c3Rlck1hcD8uYXNzZXRzICYmICEoY2x1c3Rlck1hcD8uaXNMb2FkaW5nJCB8IGFzeW5jKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwicmVsb2FkKClcIlxuICAgICAgICBbdGl0bGVdPVwiJ1JlbG9hZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwicmVmcmVzaFwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImNlbnRlcigpXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQ2VudGVyIG1hcCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiY2VudGVyTWFwQnV0dG9uRGlzYWJsZWQgfHwgY2x1c3Rlck1hcD8uY29uZmlnLmZvbGxvd1wiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJ0YXJnZXQxXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0aXRsZT1cInt7ICdVbmZvbGxvdycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAqbmdJZj1cImNsdXN0ZXJNYXA/LmNvbmZpZy5mb2xsb3dcIlxuICAgICAgICAoY2xpY2spPVwidW5mb2xsb3coKVwiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJtYXJrZXItb2ZmXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRpdGxlPVwie3sgJ0ZvbGxvdycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAqbmdJZj1cImluaXRDb25maWcuZm9sbG93ICYmICFjbHVzdGVyTWFwPy5jb25maWcuZm9sbG93XCJcbiAgICAgICAgKGNsaWNrKT1cImZvbGxvdygpXCJcbiAgICAgID5cbiAgICAgICAgPGkgYzh5SWNvbj1cIm1hcmtlclwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19