@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
@@ -196,9 +196,11 @@ export declare class ApplicationOptions {
196
196
  */
197
197
  mapConfig?: MapDefaultConfig;
198
198
  /**
199
- * The URL used to find a address via mapquest. Can be set to empty to disable the find address feature on the location tab.
199
+ * The URL used to lookup geo coordinates for a user provided address via [nominatim API](https://nominatim.org/release-docs/develop/api/Search/).
200
+ * Can be set to empty to disable the find address feature on the location tab.
201
+ * Uses: `https://nominatim.openstreetmap.org/search?format=json&q={searchTerm}` if not set.
200
202
  */
201
- mapQuestUrl?: string;
203
+ mapNominatimUrl?: string;
202
204
  }
203
205
  export interface MapDefaultConfig {
204
206
  /**
@@ -62,6 +62,14 @@ export declare class FilesService {
62
62
  * @returns Returns true if each file has allowed extension.
63
63
  */
64
64
  haveValidExtensions(files: FileList | File | File[], accept: string): boolean;
65
+ /**
66
+ * Checks if file names have allowed extension.
67
+ * If the accept parameter is not specified, all extensions are accepted.
68
+ * @param fileNames The file names to check.
69
+ * @param accept String of comma separated file extensions and generic types ([GENERIC_FILE_TYPE]{@link GENERIC_FILE_TYPE}), e.g. .zip,.7z,excel.
70
+ * @returns Returns true if each file has allowed extension.
71
+ */
72
+ fileNamesHaveValidExtension(fileNames: string | string[], accept: string): boolean;
65
73
  /**
66
74
  * Checks if each file has a valid filename length.
67
75
  * @param files Files to check.
@@ -70,10 +78,10 @@ export declare class FilesService {
70
78
  checkMaxLength(files: FileList): boolean;
71
79
  /**
72
80
  * Extracts the file extension.
73
- * @param file File from which the extension should be extracted.
81
+ * @param fileOrFileName File or name of file from which the extension should be extracted.
74
82
  * @returns Returns the file extension or undefined if the file has no extension.
75
83
  */
76
- getFileExtension(file: File): string | undefined;
84
+ getFileExtension(fileOrFileName: File | string): string | undefined;
77
85
  /**
78
86
  * List of file extensions.
79
87
  * @returns Returns list of file extensions.
@@ -1,6 +1,6 @@
1
1
  import { IManagedObject, InventoryService, IResultList } from '@c8y/client';
2
2
  import * as i0 from "@angular/core";
3
- export type ManagedObjectTypeForConfig = 'c8y_Software' | 'c8y_Firmware' | 'c8y_ConfigurationDump';
3
+ export type ManagedObjectTypeForConfig = 'c8y_Software' | 'c8y_Firmware' | 'c8y_ConfigurationDump' | 'c8y_ModbusDeviceType' | 'c8y_CANopenDeviceType' | 'c8y_LoraDeviceType' | 'c8y_SigfoxDeviceType' | 'c8y_DeviceShellTemplate';
4
4
  export declare class GlobalConfigService {
5
5
  private inventory;
6
6
  protected cache: Promise<IResultList<IManagedObject | undefined>>;
@@ -20,12 +20,79 @@ export declare class Permissions {
20
20
  private appState;
21
21
  private inventory;
22
22
  private user;
23
+ static ROLE_ADVANCED_SOFTWARE_ADMIN: string;
24
+ static ROLE_ADVANCED_SOFTWARE_READ: string;
25
+ static ROLE_ALARM_ADMIN: string;
26
+ static ROLE_ALARM_READ: string;
27
+ static ROLE_ANALYTICSBUILDER_READ: string;
28
+ static ROLE_APPLICATION_MANAGEMENT_ADMIN: string;
29
+ static ROLE_APPLICATION_MANAGEMENT_READ: string;
30
+ static ROLE_AUDIT_ADMIN: string;
31
+ static ROLE_AUDIT_READ: string;
32
+ static ROLE_BINARY_ADMIN: string;
33
+ static ROLE_BINARY_CREATE: string;
34
+ static ROLE_BINARY_READ: string;
35
+ static ROLE_BULK_OPERATION_ADMIN: string;
36
+ static ROLE_BULK_OPERATION_READ: string;
37
+ static ROLE_CEP_MANAGEMENT_ADMIN: string;
38
+ static ROLE_CEP_MANAGEMENT_READ: string;
39
+ static ROLE_DATA_BROKER_ADMIN: string;
40
+ static ROLE_DATA_BROKER_READ: string;
41
+ static ROLE_DEVICE_CONTROL_ADMIN: string;
42
+ static ROLE_DEVICE_CONTROL_READ: string;
43
+ static ROLE_EMAIL_CREATE: string;
44
+ static ROLE_EPLAPPS_READ: string;
45
+ static ROLE_EVENT_ADMIN: string;
46
+ static ROLE_EVENT_READ: string;
47
+ static ROLE_GENERIC_MQTT_ADMIN: string;
48
+ static ROLE_IDENTITY_ADMIN: string;
49
+ static ROLE_IDENTITY_READ: string;
50
+ static ROLE_INVENTORY_ADMIN: string;
51
+ static ROLE_INVENTORY_CREATE: string;
52
+ static ROLE_INVENTORY_READ: string;
53
+ static ROLE_MACHINE_LEARNING_READ: string;
54
+ static ROLE_MANAGED_OBJECT_ADMIN: string;
55
+ static ROLE_MANAGED_OBJECT_CREATE: string;
56
+ static ROLE_MANAGED_OBJECT_READ: string;
57
+ static ROLE_MEASUREMENT_ADMIN: string;
58
+ static ROLE_MEASUREMENT_READ: string;
59
+ static ROLE_MQTT_CONNECT_ADMIN: string;
60
+ static ROLE_MQTT_SERVICE_ADMIN: string;
61
+ static ROLE_NOTIFICATION_2_ADMIN: string;
62
+ static ROLE_OPTION_MANAGEMENT_ADMIN: string;
63
+ static ROLE_OPTION_MANAGEMENT_READ: string;
64
+ static ROLE_PROVISIONING_CREATE: string;
65
+ static ROLE_PROVISIONING_READ: string;
66
+ static ROLE_PROVISIONING_UPDATE: string;
67
+ static ROLE_REMOTE_ACCESS_ADMIN: string;
68
+ static ROLE_RETENTION_RULE_ADMIN: string;
69
+ static ROLE_RETENTION_RULE_READ: string;
70
+ static ROLE_SCHEDULE_REPORT_ADMIN: string;
71
+ static ROLE_SIMULATOR_ADMIN: string;
72
+ static ROLE_SMARTGROUP_ADMIN: string;
73
+ static ROLE_SMARTGROUP_CREATE: string;
74
+ static ROLE_SMARTGROUP_UPDATE: string;
75
+ static ROLE_SMARTRULE_ADMIN: string;
76
+ static ROLE_SMARTRULE_READ: string;
77
+ static ROLE_SMS_ADMIN: string;
78
+ static ROLE_SMS_READ: string;
79
+ static ROLE_TENANT_ADMIN: string;
80
+ static ROLE_TENANT_MANAGEMENT_ADMIN: string;
81
+ static ROLE_TENANT_MANAGEMENT_CREATE: string;
82
+ static ROLE_TENANT_MANAGEMENT_READ: string;
83
+ static ROLE_TENANT_MANAGEMENT_UPDATE: string;
84
+ static ROLE_TENANT_STATISTICS_READ: string;
85
+ static ROLE_USER_MANAGEMENT_ADMIN: string;
86
+ static ROLE_USER_MANAGEMENT_CREATE: string;
87
+ static ROLE_USER_MANAGEMENT_OWN_ADMIN: string;
88
+ static ROLE_USER_MANAGEMENT_OWN_READ: string;
89
+ static ROLE_USER_MANAGEMENT_READ: string;
23
90
  constructor(appState: AppStateService, inventory: InventoryService, user: UserService);
24
91
  /**
25
92
  * Checks if the current user has write permissions for the given mo.
26
93
  * (either through global role, individual device permissions or via inventory roles).
27
94
  *
28
- * @param {array} roleIds Array of roles which the current user should have.
95
+ * @param roleIds The array of role ids to check if the current user have at least one of them.
29
96
  * @param {IManagedObject | IIdentified} mo The managed object for which we are checking whether the user has access.
30
97
  * @param {CanEditConfig} config A configuration object that can take the following values:
31
98
  * - `skipRolesCheck`: `boolean` - skips roles check,
@@ -34,7 +101,7 @@ export declare class Permissions {
34
101
  * UI will make a query to backend whether the user can edit the managed object.
35
102
  * A rejection from BE indicates a lack of permission.
36
103
  */
37
- canEdit(roleIds: any, mo: IManagedObject | IIdentified, config?: CanEditConfig): Promise<boolean>;
104
+ canEdit(roleIds: string[], mo: IManagedObject | IIdentified, config?: CanEditConfig): Promise<boolean>;
38
105
  hasRole(roleId: string): boolean;
39
106
  hasAllRoles(roleIds: string[]): boolean;
40
107
  hasAnyRole(roleIds: string[]): boolean;
@@ -6,7 +6,7 @@ export declare class TenantUiService {
6
6
  private userService;
7
7
  private appStateService;
8
8
  readonly MANAGEMENT = "management";
9
- readonly ROLE_TENANT_MANAGEMENT_READ = "ROLE_TENANT_MANAGEMENT_READ";
9
+ readonly ROLE_TENANT_MANAGEMENT_READ: string;
10
10
  constructor(userService: UserService, appStateService: AppStateService);
11
11
  /**
12
12
  * Returns current tenant
@@ -79,7 +79,7 @@ export declare const MESSAGES: {
79
79
  '^Can not activate a certificate which is either expired or not yet valid$': {
80
80
  gettext: "Cannot activate a certificate which is either expired or not yet valid.";
81
81
  };
82
- '^Cannot add certificate - certificate with (.+?) fingerprint already exists. : Certificate with (.+?) fingerprint already exists.': {
82
+ '^Cannot add certificate - certificate with (.+?) fingerprint already exists. : Certificate with (.+?) fingerprint already exists.$': {
83
83
  gettext: "Could not add certificate. Certificate with {{fingerprint}} fingerprint already exists.";
84
84
  placeholders: {
85
85
  fingerprint: string;
@@ -441,7 +441,7 @@ export declare const MESSAGES: {
441
441
  applicationId: string;
442
442
  };
443
443
  };
444
- '^Http status code: 404\n{error="options/Not Found",message="Unable to find option by given key: sigfox-agent/provider.token",info="https://www.cumulocity.com/guides/reference-guide/#error_reporting",details="null"}': {
444
+ '^Http status code: 404\n{error="options/Not Found",message="Unable to find option by given key: sigfox-agent/provider.token",info="https://www.cumulocity.com/guides/reference-guide/#error_reporting",details="null"}$': {
445
445
  gettext: "Unable to find option by given key: sigfox-agent/provider.token";
446
446
  };
447
447
  '^Failed to delete application. : Cannot remove application assigned to other tenants.$': {
@@ -562,7 +562,7 @@ export declare const MESSAGES: {
562
562
  '^Inventory Role removed$': {
563
563
  gettext: "Inventory role removed";
564
564
  };
565
- '^Inventory Role (.+?) removed': {
565
+ '^Inventory Role (.+?) removed$': {
566
566
  gettext: "Inventory role \"{{name}}\" deleted.";
567
567
  placeholders: {
568
568
  name: string;
@@ -571,16 +571,16 @@ export declare const MESSAGES: {
571
571
  '^Inventory Role updated$': {
572
572
  gettext: "Inventory role updated";
573
573
  };
574
- '^Inventory Role (.+?) updated': {
574
+ '^Inventory Role (.+?) updated$': {
575
575
  gettext: "Inventory role \"{{name}}\" updated.";
576
576
  placeholders: {
577
577
  name: string;
578
578
  };
579
579
  };
580
- '^I/O error: Connection refused; nested exception is Connection refused : Connection refused': {
580
+ '^I/O error: Connection refused; nested exception is Connection refused : Connection refused$': {
581
581
  gettext: "Connection refused";
582
582
  };
583
- '^I/O error: Read timed out; nested exception is Read timed out : Read timed out': {
583
+ '^I/O error: Read timed out; nested exception is Read timed out : Read timed out$': {
584
584
  gettext: "Read timed out";
585
585
  };
586
586
  '^Log file requested$': {
@@ -656,7 +656,7 @@ export declare const MESSAGES: {
656
656
  '^Operation updated$': {
657
657
  gettext: "Operation updated.";
658
658
  };
659
- "^Operation created: status='(.+?)'.": {
659
+ "^Operation created: status='(.+?)'.$": {
660
660
  gettext: "Operation created: status: \"{{ status | translate }}\".";
661
661
  placeholders: {
662
662
  status: string;
@@ -680,13 +680,13 @@ export declare const MESSAGES: {
680
680
  option: string;
681
681
  };
682
682
  };
683
- '^Owner field error. : Cannot introduce cyclic dependency.': {
683
+ '^Owner field error. : Cannot introduce cyclic dependency.$': {
684
684
  gettext: "Could not introduce cyclic ownership dependency.";
685
685
  };
686
686
  '^Password change is temporary blocked.$': {
687
687
  gettext: "Password change is temporarily blocked.";
688
688
  };
689
- '^Password cipher does not match': {
689
+ '^Password cipher does not match$': {
690
690
  gettext: "Password cipher does not match.";
691
691
  };
692
692
  '^Platform application cannot be added to, nor removed from any tenant.$': {
@@ -695,7 +695,7 @@ export declare const MESSAGES: {
695
695
  '^Private key must be provided in KEY_PAIR credentials$': {
696
696
  gettext: "Private key must be provided when \"Public/private keys\" option is selected.";
697
697
  };
698
- '^Private key cipher does not match': {
698
+ '^Private key cipher does not match$': {
699
699
  gettext: "Private key cipher does not match";
700
700
  };
701
701
  '^Protocol "(.+?)" does not support "(.+?)" credentials type$': {
@@ -732,13 +732,13 @@ export declare const MESSAGES: {
732
732
  id: string;
733
733
  };
734
734
  };
735
- '^Retrieve configuration snapshot from device (.+?)': {
735
+ '^Retrieve configuration snapshot from device (.+?)$': {
736
736
  gettext: "Retrieve configuration snapshot from device {{deviceName}}";
737
737
  placeholders: {
738
738
  deviceName: string;
739
739
  };
740
740
  };
741
- '^Retrieve (.+?) configuration snapshot from device (.+?)': {
741
+ '^Retrieve (.+?) configuration snapshot from device (.+?)$': {
742
742
  gettext: "Retrieve {{configurationType}} configuration snapshot from device {{deviceName}}";
743
743
  placeholders: {
744
744
  configurationType: string;
@@ -752,7 +752,7 @@ export declare const MESSAGES: {
752
752
  scaleNumber: string;
753
753
  };
754
754
  };
755
- '^Send configuration snapshot (.+?) of configuration type (.+?) to device (.+?)': {
755
+ '^Send configuration snapshot (.+?) of configuration type (.+?) to device (.+?)$': {
756
756
  gettext: "Send configuration snapshot {{snapshotName}} of configuration type {{configurationType}} to device {{deviceName}}";
757
757
  placeholders: {
758
758
  snapshotName: string;
@@ -760,7 +760,7 @@ export declare const MESSAGES: {
760
760
  deviceName: string;
761
761
  };
762
762
  };
763
- '^Send configuration snapshot (.+?) to device (.+?)': {
763
+ '^Send configuration snapshot (.+?) to device (.+?)$': {
764
764
  gettext: "Send configuration snapshot {{snapshotName}} to device {{deviceName}}";
765
765
  placeholders: {
766
766
  snapshotName: string;
@@ -988,25 +988,25 @@ export declare const MESSAGES: {
988
988
  inventoryAssignment: string;
989
989
  };
990
990
  };
991
- 'applications \\[(.+?)\\] added$': {
991
+ 'applications \\[(.+?)\\] added': {
992
992
  gettext: "applications [{{applicationsList}}] added";
993
993
  placeholders: {
994
994
  applicationsList: string;
995
995
  };
996
996
  };
997
- 'applications \\[(.+?)\\] removed$': {
997
+ 'applications \\[(.+?)\\] removed': {
998
998
  gettext: "applications [{{applicationsList}}] removed";
999
999
  placeholders: {
1000
1000
  applicationsList: string;
1001
1001
  };
1002
1002
  };
1003
- 'global roles \\[(.+?)\\] added$': {
1003
+ 'global roles \\[(.+?)\\] added': {
1004
1004
  gettext: "global roles [{{globalRolesList}}] added";
1005
1005
  placeholders: {
1006
1006
  globalRolesList: string;
1007
1007
  };
1008
1008
  };
1009
- 'global roles \\[(.+?)\\] removed$': {
1009
+ 'global roles \\[(.+?)\\] removed': {
1010
1010
  gettext: "global roles [{{globalRolesList}}] removed";
1011
1011
  placeholders: {
1012
1012
  globalRolesList: string;
@@ -1055,7 +1055,7 @@ export declare const MESSAGES: {
1055
1055
  '^You have reached devices limit. No more devices can be registered.$': {
1056
1056
  gettext: "You reached devices limit. No more devices can be registered.";
1057
1057
  };
1058
- '^(.+) succeeded for volume "(.+)"': {
1058
+ '^(.+) succeeded for volume "(.+)"$': {
1059
1059
  gettext: "Operation \"{{operation}}\" succeeded for volume \"{{volume}}\".";
1060
1060
  placeholders: {
1061
1061
  operation: string;
@@ -1745,7 +1745,7 @@ export declare const MESSAGES: {
1745
1745
  '^This command returns a list of shell commands with description that can be created for the Lwm2m device connector\\.$': {
1746
1746
  gettext: "This command returns a list of shell commands with description that can be created for the LWM2M device connector.";
1747
1747
  };
1748
- '^The following operations are supported:': {
1748
+ '^The following operations are supported:$': {
1749
1749
  gettext: "The following operations are supported:";
1750
1750
  };
1751
1751
  '^PSK template$': {
@@ -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, ViewContext } from '@c8y/ngx-components';
3
+ import { AlertService, AppStateService, BreadcrumbService, GroupFragment, ModalService, OptionsService, ViewContext, Permissions } from '@c8y/ngx-components';
4
4
  import { ApiService } from '@c8y/ngx-components/api';
5
5
  import { empty } from 'rxjs';
6
6
  import { filter, first, mergeMap } from 'rxjs/operators';
@@ -143,7 +143,10 @@ export class AssetNodeService {
143
143
  };
144
144
  const groupFilter = { ...defaultFilter, ...customFilter };
145
145
  // due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles
146
- if (!this.user.hasRole(this.appState.currentUser.value, 'ROLE_INVENTORY_READ')) {
146
+ if (!this.user.hasAnyRole(this.appState.currentUser.value, [
147
+ Permissions.ROLE_INVENTORY_READ,
148
+ Permissions.ROLE_MANAGED_OBJECT_READ
149
+ ])) {
147
150
  delete groupFilter.query;
148
151
  Object.assign(groupFilter, {
149
152
  fragmentType: GroupFragment.groupFragmentType,
@@ -279,7 +282,11 @@ export class AssetNodeService {
279
282
  * @param dropOnRoot Is the drop performed on the root node
280
283
  */
281
284
  canDropNode(dropOnRoot) {
282
- return (!dropOnRoot || this.user.hasRole(this.appState.currentUser.value, 'ROLE_INVENTORY_ADMIN'));
285
+ return (!dropOnRoot ||
286
+ this.user.hasAnyRole(this.appState.currentUser.value, [
287
+ Permissions.ROLE_INVENTORY_ADMIN,
288
+ Permissions.ROLE_MANAGED_OBJECT_ADMIN
289
+ ]));
283
290
  }
284
291
  /**
285
292
  * There could be multiple breadcrumbs for devices,
@@ -332,4 +339,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
332
339
  type: Inject,
333
340
  args: [ASSET_NAVIGATOR_CONFIG]
334
341
  }] }, { type: i4.DeviceGroupService }, { type: i5.Router }]; } });
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbm9kZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1ub2RlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQVcsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFlBQVksRUFHWixjQUFjLEVBQ2QsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQXdCLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUEwQixhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVV2QyxNQUFNLE9BQU8sZ0JBQWdCO0lBTzNCLFlBQ1MsU0FBMkIsRUFDM0IsVUFBc0IsRUFDdEIsS0FBbUIsRUFDbkIsS0FBbUIsRUFDaEIsaUJBQW9DLEVBQ3BDLElBQWlC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QU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoRixhQUFhLEdBQUcsR0FBRyxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7U0FDbEQ7YUFBTTtZQUNMLGFBQWEsR0FBRyxNQUFNLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQztTQUN4QztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7OzZHQTFYVSxnQkFBZ0IsNlBBZ0JMLHNCQUFzQjtpSEFoQmpDLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBaUJJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElSZXN1bHQsIFF1ZXJpZXNVdGlsLCBVc2VyU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCcmVhZGNydW1iU2VydmljZSxcbiAgR3JvdXBGcmFnbWVudCxcbiAgTW9kYWxTZXJ2aWNlLFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JOb2RlRGF0YSxcbiAgT3B0aW9uc1NlcnZpY2UsXG4gIFZpZXdDb250ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXBpJztcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFzc2V0Tm9kZSB9IGZyb20gJy4vYXNzZXQtbm9kZSc7XG5pbXBvcnQgeyBBc3NldE5hdmlnYXRvckNvbmZpZywgQVNTRVRfTkFWSUdBVE9SX0NPTkZJRyB9IGZyb20gJy4vYXNzZXQtbm9kZS1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgRHluYW1pY0dyb3VwTm9kZSB9IGZyb20gJy4vZHluYW1pYy1ncm91cC1ub2RlJztcbmltcG9ydCB7IERldmljZUdyb3VwU2VydmljZSB9IGZyb20gJy4vZ3JvdXAuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBBY3RpdmF0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb24uZW51bSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXROb2RlTW8ge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0Tm9kZVNlcnZpY2Uge1xuICByb290Tm9kZTogQXNzZXROb2RlO1xuICBmaXJzdFVybCA9IHRydWU7XG4gIGRyYWdnZWREYXRhOiBBc3NldE5vZGU7XG4gIHF1ZXJpZXNVdGlsOiBRdWVyaWVzVXRpbDtcbiAgcHJvdGVjdGVkIFBBR0VfU0laRSA9IDIwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHVibGljIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UsXG4gICAgcHVibGljIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGJyZWFkY3J1bWJTZXJ2aWNlOiBCcmVhZGNydW1iU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdXNlcjogVXNlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG9wdGlvbnNTZXJ2aWNlOiBPcHRpb25zU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFTU0VUX05BVklHQVRPUl9DT05GSUcpIHB1YmxpYyBtb2R1bGVDb25maWc6IEFzc2V0TmF2aWdhdG9yQ29uZmlnLFxuICAgIHByb3RlY3RlZCBkZXZpY2VHcm91cFNlcnZpY2U6IERldmljZUdyb3VwU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXJcbiAgKSB7XG4gICAgdGhpcy5tb2R1bGVDb25maWcgPSB7XG4gICAgICByb290Tm9kZVByaW9yaXR5OiAyMDAwLFxuICAgICAgLi4uKG1vZHVsZUNvbmZpZyB8fCB7fSlcbiAgICB9O1xuICAgIHRoaXMucXVlcmllc1V0aWwgPSBuZXcgUXVlcmllc1V0aWwoKTtcblxuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihcbiAgICAgICAgICAoZXZlbnQ6IEFjdGl2YXRpb25FbmQpID0+XG4gICAgICAgICAgICBldmVudCBpbnN0YW5jZW9mIEFjdGl2YXRpb25FbmQgJiYgZXZlbnQuc25hcHNob3QuZGF0YT8uY29udGV4dERhdGFcbiAgICAgICAgKSxcbiAgICAgICAgZmlyc3QoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBzbmFwc2hvdCB9KSA9PiB7XG4gICAgICAgIHRoaXMuZXhwYW5kTm9kZXNPblN0YXJ0KHNuYXBzaG90KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgdGhlIG5hdmlnYXRvciBub2RlcyBvbiBmaXJzdCBuYXZpZ2F0aW9uLlxuICAgKiBAcGFyYW0gc25hcHNob3QgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBzbmFwc2hvdC5cbiAgICovXG4gIGFzeW5jIGV4cGFuZE5vZGVzT25TdGFydChzbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5yb290Tm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBzbmFwc2hvdC5kYXRhPy5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5Hcm91cCB8fFxuICAgICAgc25hcHNob3QuZGF0YT8uY29udGV4dCA9PT0gVmlld0NvbnRleHQuRGV2aWNlXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChzbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhLCB7XG4gICAgICAgIHdpdGhQYXJlbnRzOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWxsTWFuYWdlZE9iamVjdFBhcmVudElkcyA9IFtcbiAgICAgICAgLi4uZGF0YS5hc3NldFBhcmVudHMucmVmZXJlbmNlcy5tYXAoKHsgbWFuYWdlZE9iamVjdCB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG1hbmFnZWRPYmplY3QuaWQ7XG4gICAgICAgIH0pLFxuICAgICAgICBkYXRhLmlkXG4gICAgICBdO1xuICAgICAgdGhpcy5leHBhbmRBbGwodGhpcy5yb290Tm9kZSwgYWxsTWFuYWdlZE9iamVjdFBhcmVudElkcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW9kdWxlQ29uZmlnLm9wZW5PblN0YXJ0KSB7XG4gICAgICB0aGlzLmV4cGFuZEFsbCh0aGlzLnJvb3ROb2RlLCBbXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgYWxsIHRoZSBnaXZlbiBpZHMgcmVjdXJzaXZlbHkuIFN0b3BzIGlmIGl0IGRvZXMgbm90IGZpbmQgYW55LlxuICAgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB3aGVyZSB0aGUgZXhwYW5kaW5nIHNob3VsZCBiZSBzdGFydGVkXG4gICAqIEBwYXJhbSBpZHMgVGhlIGlkcyB0aGF0IHNob3VsZCBiZSBleHBhbmRlZC5cbiAgICovXG4gIGV4cGFuZEFsbChub2RlOiBBc3NldE5vZGUsIGlkczogc3RyaW5nW10pIHtcbiAgICBub2RlLm9wZW4gPSB0cnVlO1xuICAgIG5vZGUuY2xpY2soeyBvcGVuOiB0cnVlIH0pO1xuICAgIGlmIChub2RlLmV2ZW50cykge1xuICAgICAgbm9kZS5ldmVudHNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24gPT09IEFjdGlvbi5MT0FESU5HX0RPTkUpLFxuICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlVG9FeHBhbmQgPSBub2RlLmNoaWxkcmVuLmZpbmQoXG4gICAgICAgICAgICBjaGlsZE5vZGUgPT4gY2hpbGROb2RlLm1vPy5pZCAmJiBpZHMuaW5jbHVkZXMoY2hpbGROb2RlLm1vLmlkKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5vZGVUb0V4cGFuZCkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoXG4gICAgICAgICAgICAgIG5vZGVUb0V4cGFuZCxcbiAgICAgICAgICAgICAgaWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gbm9kZVRvRXhwYW5kLm1vLmlkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGljb24obW86IElNYW5hZ2VkT2JqZWN0LCBvcGVuPzogYm9vbGVhbik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmljb24obW8sIG9wZW4pO1xuICB9XG5cbiAgaXNHcm91cChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNHcm91cChtbyk7XG4gIH1cblxuICBpc0R5bmFtaWNHcm91cChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNEeW5hbWljR3JvdXAobW8pO1xuICB9XG5cbiAgaXNEYXRhQnJva2VyKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0RhdGFCcm9rZXIobW8pO1xuICB9XG5cbiAgaXNEYXRhQnJva2VyQWN0aXZlKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0RhdGFCcm9rZXJBY3RpdmUobW8pO1xuICB9XG5cbiAgaXNBc3NldChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNBc3NldChtbyk7XG4gIH1cblxuICBpc0FueUdyb3VwKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0FueUdyb3VwKG1vKTtcbiAgfVxuXG4gIGlzRGV2aWNlKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0RldmljZShtbyk7XG4gIH1cblxuICBjcmVhdGVSb290Tm9kZShjb25maWc6IE5hdmlnYXRvck5vZGVEYXRhID0ge30pIHtcbiAgICB0aGlzLnJvb3ROb2RlID0gdGhpcy5jcmVhdGVBc3NldE5vZGUoe1xuICAgICAgcm9vdDogdHJ1ZSxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIHByaW9yaXR5OiB0aGlzLm1vZHVsZUNvbmZpZy5yb290Tm9kZVByaW9yaXR5LFxuICAgICAgZmVhdHVyZUlkOiAnZ3JvdXBzJ1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnJvb3ROb2RlO1xuICB9XG5cbiAgY3JlYXRlRHluYW1pY0dyb3VwTm9kZShjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IER5bmFtaWNHcm91cE5vZGUodGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIGNyZWF0ZUFzc2V0Tm9kZShjb25maWc6IFBhcnRpYWw8QXNzZXROb2RlPikge1xuICAgIHJldHVybiBuZXcgQXNzZXROb2RlKHRoaXMsIGNvbmZpZyk7XG4gIH1cblxuICBjcmVhdGVDaGlsZE5vZGUobWFuYWdlZE9iamVjdCwgY29uZmlnOiBQYXJ0aWFsPEFzc2V0Tm9kZT4pIHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IG1hbmFnZWRPYmplY3Q7XG4gICAgY29uZmlnLm1vID0gbWFuYWdlZE9iamVjdDtcbiAgICBpZiAodHlwZSA9PT0gR3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBUeXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVEeW5hbWljR3JvdXBOb2RlKGNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUFzc2V0Tm9kZShjb25maWcpO1xuICB9XG5cbiAgZ2V0Um9vdE5vZGVzKGN1c3RvbUZpbHRlcj86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiB0aGlzLlBBR0VfU0laRSxcbiAgICAgIHdpdGhDaGlsZHJlbjogZmFsc2UsXG4gICAgICBvbmx5Um9vdHM6ICF0aGlzLm9wdGlvbnNTZXJ2aWNlLmRpc2FibGVPbmx5Um9vdHNRdWVyeSxcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkodGhpcy5uYXZSb290UXVlcnlGaWx0ZXIoKSlcbiAgICB9O1xuICAgIGNvbnN0IGdyb3VwRmlsdGVyID0geyAuLi5kZWZhdWx0RmlsdGVyLCAuLi5jdXN0b21GaWx0ZXIgfTtcblxuICAgIC8vIGR1ZSB0byBCRSBwZXJmb3JtYW5jZSBsaW1pdGF0aW9ucyB3ZSBkbyBub3QgYWxsb3cgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIGZvciBhIHVzZXIgd2l0aG91dCBpbnZlbnRvcnkgcm9sZXNcbiAgICBpZiAoIXRoaXMudXNlci5oYXNSb2xlKHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIudmFsdWUsICdST0xFX0lOVkVOVE9SWV9SRUFEJykpIHtcbiAgICAgIGRlbGV0ZSBncm91cEZpbHRlci5xdWVyeTtcbiAgICAgIE9iamVjdC5hc3NpZ24oZ3JvdXBGaWx0ZXIsIHtcbiAgICAgICAgZnJhZ21lbnRUeXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwRnJhZ21lbnRUeXBlLFxuICAgICAgICBvbmx5Um9vdHM6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh0aGlzLmNyZWF0ZUZpbHRlcihncm91cEZpbHRlcikpO1xuICB9XG5cbiAgZ2V0QWxsSW52ZW50b3JpZXMoY3VzdG9tRmlsdGVyPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0ge1xuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgZ3JvdXBGaWx0ZXIgPSB7IC4uLmRlZmF1bHRGaWx0ZXIsIC4uLmN1c3RvbUZpbHRlciB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHRoaXMuY3JlYXRlRmlsdGVyKGdyb3VwRmlsdGVyKSk7XG4gIH1cblxuICBnZXRHcm91cEl0ZW1zKG1vSWQ6IHN0cmluZywgZXh0cmFGaWx0ZXI6IG9iamVjdCA9IHt9LCB3aXRoQ2hpbGRyZW4gPSBmYWxzZSwgZmlsdGVyUXVlcnkgPSAnJykge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyID0ge1xuICAgICAgd2l0aENoaWxkcmVuLFxuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgcXVlcnk6IHRoaXMuZ3JvdXBRdWVyeUZpbHRlcihtb0lkLCBmaWx0ZXJRdWVyeSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5jaGlsZEFzc2V0c0xpc3QobW9JZCwgeyAuLi5xdWVyeUZpbHRlciwgLi4uZXh0cmFGaWx0ZXIgfSk7XG4gIH1cblxuICBnZXRVbmFzc2lnbmVkRGV2aWNlcyh3aXRoQ2hpbGRyZW4gPSBmYWxzZSwgZmlsdGVyUXVlcnkgPSAnJykge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyOiBhbnkgPSB7XG4gICAgICBmcmFnbWVudFR5cGU6ICdjOHlfSXNEZXZpY2UnLFxuICAgICAgb25seVJvb3RzOiB0cnVlLFxuICAgICAgd2l0aENoaWxkcmVuLFxuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgcTogdGhpcy5nZXRVbmFzc2lnbmVkRGV2aWNlc1F1ZXJ5U3RyKGZpbHRlclF1ZXJ5KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3QodGhpcy5jcmVhdGVGaWx0ZXIocXVlcnlGaWx0ZXIpKTtcbiAgfVxuXG4gIGdldER5bmFtaWNHcm91cEl0ZW1zKGdyb3VwUXVlcnk6IHN0cmluZywgZmlsdGVyT2JqOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IHsgcXVlcnksIC4uLnF1ZXJ5UGFyYW1zIH0gPSBmaWx0ZXJPYmo7XG4gICAgY29uc3Qgb3JkZXJCeVF1ZXJ5ID0gcXVlcnk7XG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB7XG4gICAgICBxOiB0aGlzLmJ1aWxkQ29tYmluZWRRdWVyeShncm91cFF1ZXJ5LCBvcmRlckJ5UXVlcnkpLFxuICAgICAgLi4ucXVlcnlQYXJhbXNcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHRoaXMuY3JlYXRlRmlsdGVyKHF1ZXJ5RmlsdGVyKSk7XG4gIH1cblxuICBnZXREZXZpY2VDaGlsZHJlbihcbiAgICBtb0lkOiBzdHJpbmcsXG4gICAgZXh0cmFGaWx0ZXI6IG9iamVjdCA9IHt9LFxuICAgIGZpbHRlclF1ZXJ5ID0gJycsXG4gICAgd2l0aENoaWxkcmVuID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB7XG4gICAgICB3aXRoQ2hpbGRyZW4sXG4gICAgICBwYWdlU2l6ZTogdGhpcy5QQUdFX1NJWkUsXG4gICAgICBxdWVyeTogdGhpcy5ncm91cFF1ZXJ5RmlsdGVyKG1vSWQsIGZpbHRlclF1ZXJ5KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5LmNoaWxkRGV2aWNlc0xpc3QobW9JZCwgeyAuLi5xdWVyeUZpbHRlciwgLi4uZXh0cmFGaWx0ZXIgfSk7XG4gIH1cblxuICBnZXRVbmFzc2lnbmVkRGV2aWNlc1F1ZXJ5U3RyKGZpbHRlclF1ZXJ5KTogc3RyaW5nIHtcbiAgICBjb25zdCBoYXNHcm91cElkID0gZmlsdGVyUXVlcnkuaW5jbHVkZXMoJ2J5Z3JvdXBpZCcpO1xuICAgIC8vIEZldGNoIGFsbCB1bmFzc2lnbmVkIGRldmljZXMuXG4gICAgY29uc3QgZGVmYXVsdFF1ZXJ5U3RyID0gJyRvcmRlcmJ5PW5hbWUnO1xuXG4gICAgLy8gZmlsdGVyUXVlcnkgaXMgYSBjdXN0b20gcXVlcnkgdG8gZmV0Y2ggdW5hc3NpZ25lZCBkZXZpY2VzIGZpbHRlcmVkIGJ5IG5hbWUuXG4gICAgcmV0dXJuIGhhc0dyb3VwSWQgfHwgIWZpbHRlclF1ZXJ5ID8gZGVmYXVsdFF1ZXJ5U3RyIDogZmlsdGVyUXVlcnk7XG4gIH1cblxuICBncm91cFF1ZXJ5RmlsdGVyKG1vSWQ6IHN0cmluZywgZmlsdGVyUXVlcnk/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWZpbHRlclF1ZXJ5KSB7XG4gICAgICByZXR1cm4gYCRmaWx0ZXI9KGJ5Z3JvdXBpZCgke21vSWR9KSkkb3JkZXJieT1uYW1lYDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlclF1ZXJ5O1xuICB9XG5cbiAgbmF2Um9vdFF1ZXJ5RmlsdGVyKCkge1xuICAgIGNvbnN0IG5hdlJvb3RGaWx0ZXIgPSB0aGlzLnJvb3RRdWVyeUZpbHRlcigpO1xuICAgIG5hdlJvb3RGaWx0ZXIuX19vcmRlcmJ5ID0gW3sgbmFtZTogMSB9XTtcbiAgICByZXR1cm4gbmF2Um9vdEZpbHRlcjtcbiAgfVxuXG4gIHJvb3RRdWVyeUZpbHRlcigpIHtcbiAgICBjb25zdCB7IG1vZHVsZUNvbmZpZyB9ID0gdGhpcztcbiAgICBjb25zdCByb290RmlsdGVyID0gdGhpcy5vcHRpb25zU2VydmljZS5kaXNhYmxlT25seVJvb3RzUXVlcnlcbiAgICAgID8ge1xuICAgICAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwVHlwZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgX19vcmRlcmJ5OiBbXVxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICBfX2ZpbHRlcjoge1xuICAgICAgICAgICAgX19oYXM6IEdyb3VwRnJhZ21lbnQuZ3JvdXBGcmFnbWVudFR5cGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIF9fb3JkZXJieTogW11cbiAgICAgICAgfTtcbiAgICBpZiAobW9kdWxlQ29uZmlnLnNtYXJ0R3JvdXBzKSB7XG4gICAgICBjb25zdCBxdWVyeUZpbHRlciA9IHtcbiAgICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgICBfX2FuZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cFR5cGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIF9faGFzOiBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cEZyYWdtZW50XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBfX25vdDogeyBfX2hhczogYCR7R3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBGcmFnbWVudH0uaW52aXNpYmxlYCB9IH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXJpZXNVdGlsLmFkZE9yRmlsdGVyKHJvb3RGaWx0ZXIsIHF1ZXJ5RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3RGaWx0ZXI7XG4gIH1cblxuICBvblVwZGF0ZSh7IG1vLCByb290IH0pIHtcbiAgICBpZiAobW8uaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgICAgLmhvb2tSZXNwb25zZShcbiAgICAgICAgICAoeyB1cmwsIG1ldGhvZCB9KSA9PlxuICAgICAgICAgICAgWydQVVQnLCAnREVMRVRFJywgJ1BPU1QnXS5pbmNsdWRlcyhtZXRob2QpICYmXG4gICAgICAgICAgICBSZWdFeHAoYCgoaW52ZW50b3J5L21hbmFnZWRPYmplY3RzKXwoc2VydmljZS9zbWFydGdyb3VwL3NtYXJ0Z3JvdXBzKSkvJHttby5pZH1gKS50ZXN0KFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuZHJhZ2dlZERhdGEpLFxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS5leGNsdWRlUGVybWlzc2lvbkNhbGwoKSxcbiAgICAgICAgICBtZXJnZU1hcCh0aGlzLmFwaVNlcnZpY2UucmVzb2x2ZURhdGE8SU1hbmFnZWRPYmplY3Q+KSxcbiAgICAgICAgICBmaWx0ZXIocmVzcG9uc2UgPT4gIXJlc3BvbnNlPy5kYXRhPy5jOHlfRGFzaGJvYXJkKVxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAocm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgICAuaG9va1Jlc3BvbnNlKFxuICAgICAgICAgICh7IHVybCwgbWV0aG9kIH0pID0+XG4gICAgICAgICAgICBSZWdFeHAoJygoaW52ZW50b3J5L21hbmFnZWRPYmplY3RzKXwoc2VydmljZS9zbWFydGdyb3VwL3NtYXJ0Z3JvdXBzKSkvPyQnKS50ZXN0KHVybCkgJiZcbiAgICAgICAgICAgIG1ldGhvZCA9PT0gJ1BPU1QnXG4gICAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAodGhpcy5hcGlTZXJ2aWNlLnJlc29sdmVEYXRhPElNYW5hZ2VkT2JqZWN0PiksXG4gICAgICAgICAgZmlsdGVyKHJlc3BvbnNlID0+IHRoaXMuaXNOZXdNYW5hZ2VkT2JqZWN0Um9vdChyZXNwb25zZSkpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIGlzTmV3TWFuYWdlZE9iamVjdFJvb3QocmVzcG9uc2U6IFBhcnRpYWw8SVJlc3VsdDxJTWFuYWdlZE9iamVjdD4+ID0ge30pIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgIGxldCBpc1Jvb3RBc3NldCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgaXNSb290QXNzZXQgPSAhIWRhdGFbR3JvdXBGcmFnbWVudC5ncm91cEZyYWdtZW50VHlwZV07XG4gICAgICBpZiAoIWlzUm9vdEFzc2V0ICYmIHRoaXMubW9kdWxlQ29uZmlnLnNtYXJ0R3JvdXBzKSB7XG4gICAgICAgIGlzUm9vdEFzc2V0ID0gISFkYXRhW0dyb3VwRnJhZ21lbnQuZHluYW1pY0dyb3VwRnJhZ21lbnRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNSb290QXNzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgaXQgaXMgcG9zc2libGUgdG8gZHJvcCBhIG5vZGUgYWZ0ZXIgZHJhZ2dpbmcuXG4gICAqIEBwYXJhbSBkcm9wT25Sb290IElzIHRoZSBkcm9wIHBlcmZvcm1lZCBvbiB0aGUgcm9vdCBub2RlXG4gICAqL1xuICBjYW5Ecm9wTm9kZShkcm9wT25Sb290OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICFkcm9wT25Sb290IHx8IHRoaXMudXNlci5oYXNSb2xlKHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIudmFsdWUsICdST0xFX0lOVkVOVE9SWV9BRE1JTicpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBicmVhZGNydW1icyBmb3IgZGV2aWNlcyxcbiAgICogc28gd2Ugc2V0IGEgcHJlZmVycmVkIG9uZSBvbiBjbGljayBvbiBhIGRldmljZS5cbiAgICogQHBhcmFtIHBhcmVudHMgVGhlIHBhcmVudCBub2RlcyBvZiB0aGUgZGV2aWNlIHRvIHNlbGVjdCB0aGUgcHJlZmVyZWQgb25lLlxuICAgKi9cbiAgcHJlZmVyQnJlYWRjcnVtYihwYXJlbnRzOiBOYXZpZ2F0b3JOb2RlW10pIHtcbiAgICBpZiAocGFyZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuYnJlYWRjcnVtYlNlcnZpY2Uuc2VsZWN0UHJlZmVycmVkQnlQYXRoKHBhcmVudHNbMF0ucGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUZpbHRlcihleHRyYVBhcmFtczogYW55ID0ge30pIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBjdXJyZW50UGFnZTogMSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgICAgcGFnZVNpemU6IDEwXG4gICAgfTtcbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLmV4dHJhUGFyYW1zIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29tYmluZWRRdWVyeShxdWVyeUEsIHF1ZXJ5Qikge1xuICAgIGxldCBjb21iaW5lZFF1ZXJ5O1xuICAgIGlmIChxdWVyeUEgJiYgcXVlcnlCKSB7XG4gICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeShbXG4gICAgICAgIHtcbiAgICAgICAgICBfX3VzZUZpbHRlclF1ZXJ5U3RyaW5nOiBxdWVyeUFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIF9fdXNlRmlsdGVyUXVlcnlTdHJpbmc6IHF1ZXJ5QlxuICAgICAgICB9XG4gICAgICBdKTtcbiAgICAgIGNvbnN0IG9yYmVyQnlRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuZXh0cmFjdEFuZE1lcmdlT3JkZXJCeXMoW3F1ZXJ5QSwgcXVlcnlCXSk7XG4gICAgICBjb21iaW5lZFF1ZXJ5ID0gYCR7ZmlsdGVyUXVlcnl9ICR7b3JiZXJCeVF1ZXJ5fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbWJpbmVkUXVlcnkgPSBxdWVyeUEgfHwgcXVlcnlCIHx8ICcnO1xuICAgIH1cbiAgICByZXR1cm4gY29tYmluZWRRdWVyeTtcbiAgfVxufVxuIl19
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbm9kZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1ub2RlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQVcsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFlBQVksRUFHWixjQUFjLEVBQ2QsV0FBVyxFQUNYLFdBQVcsRUFDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUF3QixzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBMEIsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFVdkMsTUFBTSxPQUFPLGdCQUFnQjtJQU8zQixZQUNTLFNBQTJCLEVBQzNCLFVBQXNCLEVBQ3RCLEtBQW1CLEVBQ25CLEtBQW1CLEVBQ2hCLGlCQUFvQyxF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Q0FBQztnQkFDOUM7b0JBQ0Usc0JBQXNCLEVBQUUsTUFBTTtpQkFDL0I7Z0JBQ0Q7b0JBQ0Usc0JBQXNCLEVBQUUsTUFBTTtpQkFDL0I7YUFDRixDQUFDLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEYsYUFBYSxHQUFHLEdBQUcsV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1NBQ2xEO2FBQU07WUFDTCxhQUFhLEdBQUcsTUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFLENBQUM7U0FDeEM7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOzs2R0FuWVUsZ0JBQWdCLDZQQWdCTCxzQkFBc0I7aUhBaEJqQyxnQkFBZ0IsY0FGZixNQUFNOzJGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWlCSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJUmVzdWx0LCBRdWVyaWVzVXRpbCwgVXNlclNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQnJlYWRjcnVtYlNlcnZpY2UsXG4gIEdyb3VwRnJhZ21lbnQsXG4gIE1vZGFsU2VydmljZSxcbiAgTmF2aWdhdG9yTm9kZSxcbiAgTmF2aWdhdG9yTm9kZURhdGEsXG4gIE9wdGlvbnNTZXJ2aWNlLFxuICBWaWV3Q29udGV4dCxcbiAgUGVybWlzc2lvbnNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgZW1wdHkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZmlyc3QsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXNzZXROb2RlIH0gZnJvbSAnLi9hc3NldC1ub2RlJztcbmltcG9ydCB7IEFzc2V0TmF2aWdhdG9yQ29uZmlnLCBBU1NFVF9OQVZJR0FUT1JfQ09ORklHIH0gZnJvbSAnLi9hc3NldC1ub2RlLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBEeW5hbWljR3JvdXBOb2RlIH0gZnJvbSAnLi9keW5hbWljLWdyb3VwLW5vZGUnO1xuaW1wb3J0IHsgRGV2aWNlR3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi9ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIEFjdGl2YXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuL2FjdGlvbi5lbnVtJztcblxuZXhwb3J0IGludGVyZmFjZSBBc3NldE5vZGVNbyB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXNzZXROb2RlU2VydmljZSB7XG4gIHJvb3ROb2RlOiBBc3NldE5vZGU7XG4gIGZpcnN0VXJsID0gdHJ1ZTtcbiAgZHJhZ2dlZERhdGE6IEFzc2V0Tm9kZTtcbiAgcXVlcmllc1V0aWw6IFF1ZXJpZXNVdGlsO1xuICBwcm90ZWN0ZWQgUEFHRV9TSVpFID0gMjA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwdWJsaWMgYXBpU2VydmljZTogQXBpU2VydmljZSxcbiAgICBwdWJsaWMgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwdWJsaWMgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYnJlYWRjcnVtYlNlcnZpY2U6IEJyZWFkY3J1bWJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB1c2VyOiBVc2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVNTRVRfTkFWSUdBVE9SX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQXNzZXROYXZpZ2F0b3JDb25maWcsXG4gICAgcHJvdGVjdGVkIGRldmljZUdyb3VwU2VydmljZTogRGV2aWNlR3JvdXBTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICB0aGlzLm1vZHVsZUNvbmZpZyA9IHtcbiAgICAgIHJvb3ROb2RlUHJpb3JpdHk6IDIwMDAsXG4gICAgICAuLi4obW9kdWxlQ29uZmlnIHx8IHt9KVxuICAgIH07XG4gICAgdGhpcy5xdWVyaWVzVXRpbCA9IG5ldyBRdWVyaWVzVXRpbCgpO1xuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIChldmVudDogQWN0aXZhdGlvbkVuZCkgPT5cbiAgICAgICAgICAgIGV2ZW50IGluc3RhbmNlb2YgQWN0aXZhdGlvbkVuZCAmJiBldmVudC5zbmFwc2hvdC5kYXRhPy5jb250ZXh0RGF0YVxuICAgICAgICApLFxuICAgICAgICBmaXJzdCgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHNuYXBzaG90IH0pID0+IHtcbiAgICAgICAgdGhpcy5leHBhbmROb2Rlc09uU3RhcnQoc25hcHNob3QpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyB0aGUgbmF2aWdhdG9yIG5vZGVzIG9uIGZpcnN0IG5hdmlnYXRpb24uXG4gICAqIEBwYXJhbSBzbmFwc2hvdCBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHNuYXBzaG90LlxuICAgKi9cbiAgYXN5bmMgZXhwYW5kTm9kZXNPblN0YXJ0KHNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnJvb3ROb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHNuYXBzaG90LmRhdGE/LmNvbnRleHQgPT09IFZpZXdDb250ZXh0Lkdyb3VwIHx8XG4gICAgICBzbmFwc2hvdC5kYXRhPy5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5EZXZpY2VcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKHNuYXBzaG90LmRhdGEuY29udGV4dERhdGEsIHtcbiAgICAgICAgd2l0aFBhcmVudHM6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhbGxNYW5hZ2VkT2JqZWN0UGFyZW50SWRzID0gW1xuICAgICAgICAuLi5kYXRhLmFzc2V0UGFyZW50cy5yZWZlcmVuY2VzLm1hcCgoeyBtYW5hZ2VkT2JqZWN0IH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gbWFuYWdlZE9iamVjdC5pZDtcbiAgICAgICAgfSksXG4gICAgICAgIGRhdGEuaWRcbiAgICAgIF07XG4gICAgICB0aGlzLmV4cGFuZEFsbCh0aGlzLnJvb3ROb2RlLCBhbGxNYW5hZ2VkT2JqZWN0UGFyZW50SWRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb2R1bGVDb25maWcub3Blbk9uU3RhcnQpIHtcbiAgICAgIHRoaXMuZXhwYW5kQWxsKHRoaXMucm9vdE5vZGUsIFtdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyBhbGwgdGhlIGdpdmVuIGlkcyByZWN1cnNpdmVseS4gU3RvcHMgaWYgaXQgZG9lcyBub3QgZmluZCBhbnkuXG4gICAqIEBwYXJhbSBub2RlIFRoZSBub2RlIHdoZXJlIHRoZSBleHBhbmRpbmcgc2hvdWxkIGJlIHN0YXJ0ZWRcbiAgICogQHBhcmFtIGlkcyBUaGUgaWRzIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLlxuICAgKi9cbiAgZXhwYW5kQWxsKG5vZGU6IEFzc2V0Tm9kZSwgaWRzOiBzdHJpbmdbXSkge1xuICAgIG5vZGUub3BlbiA9IHRydWU7XG4gICAgbm9kZS5jbGljayh7IG9wZW46IHRydWUgfSk7XG4gICAgaWYgKG5vZGUuZXZlbnRzKSB7XG4gICAgICBub2RlLmV2ZW50c1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoYWN0aW9uID0+IGFjdGlvbiA9PT0gQWN0aW9uLkxPQURJTkdfRE9ORSksXG4gICAgICAgICAgZmlyc3QoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVUb0V4cGFuZCA9IG5vZGUuY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgIGNoaWxkTm9kZSA9PiBjaGlsZE5vZGUubW8/LmlkICYmIGlkcy5pbmNsdWRlcyhjaGlsZE5vZGUubW8uaWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobm9kZVRvRXhwYW5kKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZEFsbChcbiAgICAgICAgICAgICAgbm9kZVRvRXhwYW5kLFxuICAgICAgICAgICAgICBpZHMuZmlsdGVyKGlkID0+IGlkICE9PSBub2RlVG9FeHBhbmQubW8uaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWNvbihtbzogSU1hbmFnZWRPYmplY3QsIG9wZW4/OiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaWNvbihtbywgb3Blbik7XG4gIH1cblxuICBpc0dyb3VwKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0dyb3VwKG1vKTtcbiAgfVxuXG4gIGlzRHluYW1pY0dyb3VwKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0R5bmFtaWNHcm91cChtbyk7XG4gIH1cblxuICBpc0RhdGFCcm9rZXIobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGF0YUJyb2tlcihtbyk7XG4gIH1cblxuICBpc0RhdGFCcm9rZXJBY3RpdmUobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGF0YUJyb2tlckFjdGl2ZShtbyk7XG4gIH1cblxuICBpc0Fzc2V0KG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0Fzc2V0KG1vKTtcbiAgfVxuXG4gIGlzQW55R3JvdXAobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzQW55R3JvdXAobW8pO1xuICB9XG5cbiAgaXNEZXZpY2UobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGV2aWNlKG1vKTtcbiAgfVxuXG4gIGNyZWF0ZVJvb3ROb2RlKGNvbmZpZzogTmF2aWdhdG9yTm9kZURhdGEgPSB7fSkge1xuICAgIHRoaXMucm9vdE5vZGUgPSB0aGlzLmNyZWF0ZUFzc2V0Tm9kZSh7XG4gICAgICByb290OiB0cnVlLFxuICAgICAgLi4uY29uZmlnLFxuICAgICAgcHJpb3JpdHk6IHRoaXMubW9kdWxlQ29uZmlnLnJvb3ROb2RlUHJpb3JpdHksXG4gICAgICBmZWF0dXJlSWQ6ICdncm91cHMnXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucm9vdE5vZGU7XG4gIH1cblxuICBjcmVhdGVEeW5hbWljR3JvdXBOb2RlKGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgRHluYW1pY0dyb3VwTm9kZSh0aGlzLCBjb25maWcpO1xuICB9XG5cbiAgY3JlYXRlQXNzZXROb2RlKGNvbmZpZzogUGFydGlhbDxBc3NldE5vZGU+KSB7XG4gICAgcmV0dXJuIG5ldyBBc3NldE5vZGUodGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIGNyZWF0ZUNoaWxkTm9kZShtYW5hZ2VkT2JqZWN0LCBjb25maWc6IFBhcnRpYWw8QXNzZXROb2RlPikge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gbWFuYWdlZE9iamVjdDtcbiAgICBjb25maWcubW8gPSBtYW5hZ2VkT2JqZWN0O1xuICAgIGlmICh0eXBlID09PSBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cFR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUR5bmFtaWNHcm91cE5vZGUoY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlQXNzZXROb2RlKGNvbmZpZyk7XG4gIH1cblxuICBnZXRSb290Tm9kZXMoY3VzdG9tRmlsdGVyPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0ge1xuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZSxcbiAgICAgIG9ubHlSb290czogIXRoaXMub3B0aW9uc1NlcnZpY2UuZGlzYWJsZU9ubHlSb290c1F1ZXJ5LFxuICAgICAgcXVlcnk6IHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeSh0aGlzLm5hdlJvb3RRdWVyeUZpbHRlcigpKVxuICAgIH07XG4gICAgY29uc3QgZ3JvdXBGaWx0ZXIgPSB7IC4uLmRlZmF1bHRGaWx0ZXIsIC4uLmN1c3RvbUZpbHRlciB9O1xuXG4gICAgLy8gZHVlIHRvIEJFIHBlcmZvcm1hbmNlIGxpbWl0YXRpb25zIHdlIGRvIG5vdCBhbGxvdyBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgZm9yIGEgdXNlciB3aXRob3V0IGludmVudG9yeSByb2xlc1xuICAgIGlmIChcbiAgICAgICF0aGlzLnVzZXIuaGFzQW55Um9sZSh0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlLCBbXG4gICAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX1JFQUQsXG4gICAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfUkVBRFxuICAgICAgXSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBncm91cEZpbHRlci5xdWVyeTtcbiAgICAgIE9iamVjdC5hc3NpZ24oZ3JvdXBGaWx0ZXIsIHtcbiAgICAgICAgZnJhZ21lbnRUeXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwRnJhZ21lbnRUeXBlLFxuICAgICAgICBvbmx5Um9vdHM6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh0aGlzLmNyZWF0ZUZpbHRlcihncm91cEZpbHRlcikpO1xuICB9XG5cbiAgZ2V0QWxsSW52ZW50b3JpZXMoY3VzdG9tRmlsdGVyPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0ge1xuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgZ3JvdXBGaWx0ZXIgPSB7IC4uLmRlZmF1bHRGaWx0ZXIsIC4uLmN1c3RvbUZpbHRlciB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHRoaXMuY3JlYXRlRmlsdGVyKGdyb3VwRmlsdGVyKSk7XG4gIH1cblxuICBnZXRHcm91cEl0ZW1zKG1vSWQ6IHN0cmluZywgZXh0cmFGaWx0ZXI6IG9iamVjdCA9IHt9LCB3aXRoQ2hpbGRyZW4gPSBmYWxzZSwgZmlsdGVyUXVlcnkgPSAnJykge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyID0ge1xuICAgICAgd2l0aENoaWxkcmVuLFxuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgcXVlcnk6IHRoaXMuZ3JvdXBRdWVyeUZpbHRlcihtb0lkLCBmaWx0ZXJRdWVyeSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5jaGlsZEFzc2V0c0xpc3QobW9JZCwgeyAuLi5xdWVyeUZpbHRlciwgLi4uZXh0cmFGaWx0ZXIgfSk7XG4gIH1cblxuICBnZXRVbmFzc2lnbmVkRGV2aWNlcyh3aXRoQ2hpbGRyZW4gPSBmYWxzZSwgZmlsdGVyUXVlcnkgPSAnJykge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyOiBhbnkgPSB7XG4gICAgICBmcmFnbWVudFR5cGU6ICdjOHlfSXNEZXZpY2UnLFxuICAgICAgb25seVJvb3RzOiB0cnVlLFxuICAgICAgd2l0aENoaWxkcmVuLFxuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgcTogdGhpcy5nZXRVbmFzc2lnbmVkRGV2aWNlc1F1ZXJ5U3RyKGZpbHRlclF1ZXJ5KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3QodGhpcy5jcmVhdGVGaWx0ZXIocXVlcnlGaWx0ZXIpKTtcbiAgfVxuXG4gIGdldER5bmFtaWNHcm91cEl0ZW1zKGdyb3VwUXVlcnk6IHN0cmluZywgZmlsdGVyT2JqOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IHsgcXVlcnksIC4uLnF1ZXJ5UGFyYW1zIH0gPSBmaWx0ZXJPYmo7XG4gICAgY29uc3Qgb3JkZXJCeVF1ZXJ5ID0gcXVlcnk7XG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB7XG4gICAgICBxOiB0aGlzLmJ1aWxkQ29tYmluZWRRdWVyeShncm91cFF1ZXJ5LCBvcmRlckJ5UXVlcnkpLFxuICAgICAgLi4ucXVlcnlQYXJhbXNcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHRoaXMuY3JlYXRlRmlsdGVyKHF1ZXJ5RmlsdGVyKSk7XG4gIH1cblxuICBnZXREZXZpY2VDaGlsZHJlbihcbiAgICBtb0lkOiBzdHJpbmcsXG4gICAgZXh0cmFGaWx0ZXI6IG9iamVjdCA9IHt9LFxuICAgIGZpbHRlclF1ZXJ5ID0gJycsXG4gICAgd2l0aENoaWxkcmVuID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB7XG4gICAgICB3aXRoQ2hpbGRyZW4sXG4gICAgICBwYWdlU2l6ZTogdGhpcy5QQUdFX1NJWkUsXG4gICAgICBxdWVyeTogdGhpcy5ncm91cFF1ZXJ5RmlsdGVyKG1vSWQsIGZpbHRlclF1ZXJ5KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5LmNoaWxkRGV2aWNlc0xpc3QobW9JZCwgeyAuLi5xdWVyeUZpbHRlciwgLi4uZXh0cmFGaWx0ZXIgfSk7XG4gIH1cblxuICBnZXRVbmFzc2lnbmVkRGV2aWNlc1F1ZXJ5U3RyKGZpbHRlclF1ZXJ5KTogc3RyaW5nIHtcbiAgICBjb25zdCBoYXNHcm91cElkID0gZmlsdGVyUXVlcnkuaW5jbHVkZXMoJ2J5Z3JvdXBpZCcpO1xuICAgIC8vIEZldGNoIGFsbCB1bmFzc2lnbmVkIGRldmljZXMuXG4gICAgY29uc3QgZGVmYXVsdFF1ZXJ5U3RyID0gJyRvcmRlcmJ5PW5hbWUnO1xuXG4gICAgLy8gZmlsdGVyUXVlcnkgaXMgYSBjdXN0b20gcXVlcnkgdG8gZmV0Y2ggdW5hc3NpZ25lZCBkZXZpY2VzIGZpbHRlcmVkIGJ5IG5hbWUuXG4gICAgcmV0dXJuIGhhc0dyb3VwSWQgfHwgIWZpbHRlclF1ZXJ5ID8gZGVmYXVsdFF1ZXJ5U3RyIDogZmlsdGVyUXVlcnk7XG4gIH1cblxuICBncm91cFF1ZXJ5RmlsdGVyKG1vSWQ6IHN0cmluZywgZmlsdGVyUXVlcnk/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWZpbHRlclF1ZXJ5KSB7XG4gICAgICByZXR1cm4gYCRmaWx0ZXI9KGJ5Z3JvdXBpZCgke21vSWR9KSkkb3JkZXJieT1uYW1lYDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlclF1ZXJ5O1xuICB9XG5cbiAgbmF2Um9vdFF1ZXJ5RmlsdGVyKCkge1xuICAgIGNvbnN0IG5hdlJvb3RGaWx0ZXIgPSB0aGlzLnJvb3RRdWVyeUZpbHRlcigpO1xuICAgIG5hdlJvb3RGaWx0ZXIuX19vcmRlcmJ5ID0gW3sgbmFtZTogMSB9XTtcbiAgICByZXR1cm4gbmF2Um9vdEZpbHRlcjtcbiAgfVxuXG4gIHJvb3RRdWVyeUZpbHRlcigpIHtcbiAgICBjb25zdCB7IG1vZHVsZUNvbmZpZyB9ID0gdGhpcztcbiAgICBjb25zdCByb290RmlsdGVyID0gdGhpcy5vcHRpb25zU2VydmljZS5kaXNhYmxlT25seVJvb3RzUXVlcnlcbiAgICAgID8ge1xuICAgICAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwVHlwZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgX19vcmRlcmJ5OiBbXVxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICBfX2ZpbHRlcjoge1xuICAgICAgICAgICAgX19oYXM6IEdyb3VwRnJhZ21lbnQuZ3JvdXBGcmFnbWVudFR5cGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIF9fb3JkZXJieTogW11cbiAgICAgICAgfTtcbiAgICBpZiAobW9kdWxlQ29uZmlnLnNtYXJ0R3JvdXBzKSB7XG4gICAgICBjb25zdCBxdWVyeUZpbHRlciA9IHtcbiAgICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgICBfX2FuZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cFR5cGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIF9faGFzOiBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cEZyYWdtZW50XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBfX25vdDogeyBfX2hhczogYCR7R3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBGcmFnbWVudH0uaW52aXNpYmxlYCB9IH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXJpZXNVdGlsLmFkZE9yRmlsdGVyKHJvb3RGaWx0ZXIsIHF1ZXJ5RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3RGaWx0ZXI7XG4gIH1cblxuICBvblVwZGF0ZSh7IG1vLCByb290IH0pIHtcbiAgICBpZiAobW8uaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgICAgLmhvb2tSZXNwb25zZShcbiAgICAgICAgICAoeyB1cmwsIG1ldGhvZCB9KSA9PlxuICAgICAgICAgICAgWydQVVQnLCAnREVMRVRFJywgJ1BPU1QnXS5pbmNsdWRlcyhtZXRob2QpICYmXG4gICAgICAgICAgICBSZWdFeHAoYCgoaW52ZW50b3J5L21hbmFnZWRPYmplY3RzKXwoc2VydmljZS9zbWFydGdyb3VwL3NtYXJ0Z3JvdXBzKSkvJHttby5pZH1gKS50ZXN0KFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuZHJhZ2dlZERhdGEpLFxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS5leGNsdWRlUGVybWlzc2lvbkNhbGwoKSxcbiAgICAgICAgICBtZXJnZU1hcCh0aGlzLmFwaVNlcnZpY2UucmVzb2x2ZURhdGE8SU1hbmFnZWRPYmplY3Q+KSxcbiAgICAgICAgICBmaWx0ZXIocmVzcG9uc2UgPT4gIXJlc3BvbnNlPy5kYXRhPy5jOHlfRGFzaGJvYXJkKVxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAocm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgICAuaG9va1Jlc3BvbnNlKFxuICAgICAgICAgICh7IHVybCwgbWV0aG9kIH0pID0+XG4gICAgICAgICAgICBSZWdFeHAoJygoaW52ZW50b3J5L21hbmFnZWRPYmplY3RzKXwoc2VydmljZS9zbWFydGdyb3VwL3NtYXJ0Z3JvdXBzKSkvPyQnKS50ZXN0KHVybCkgJiZcbiAgICAgICAgICAgIG1ldGhvZCA9PT0gJ1BPU1QnXG4gICAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAodGhpcy5hcGlTZXJ2aWNlLnJlc29sdmVEYXRhPElNYW5hZ2VkT2JqZWN0PiksXG4gICAgICAgICAgZmlsdGVyKHJlc3BvbnNlID0+IHRoaXMuaXNOZXdNYW5hZ2VkT2JqZWN0Um9vdChyZXNwb25zZSkpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIGlzTmV3TWFuYWdlZE9iamVjdFJvb3QocmVzcG9uc2U6IFBhcnRpYWw8SVJlc3VsdDxJTWFuYWdlZE9iamVjdD4+ID0ge30pIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgIGxldCBpc1Jvb3RBc3NldCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgaXNSb290QXNzZXQgPSAhIWRhdGFbR3JvdXBGcmFnbWVudC5ncm91cEZyYWdtZW50VHlwZV07XG4gICAgICBpZiAoIWlzUm9vdEFzc2V0ICYmIHRoaXMubW9kdWxlQ29uZmlnLnNtYXJ0R3JvdXBzKSB7XG4gICAgICAgIGlzUm9vdEFzc2V0ID0gISFkYXRhW0dyb3VwRnJhZ21lbnQuZHluYW1pY0dyb3VwRnJhZ21lbnRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNSb290QXNzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgaXQgaXMgcG9zc2libGUgdG8gZHJvcCBhIG5vZGUgYWZ0ZXIgZHJhZ2dpbmcuXG4gICAqIEBwYXJhbSBkcm9wT25Sb290IElzIHRoZSBkcm9wIHBlcmZvcm1lZCBvbiB0aGUgcm9vdCBub2RlXG4gICAqL1xuICBjYW5Ecm9wTm9kZShkcm9wT25Sb290OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICFkcm9wT25Sb290IHx8XG4gICAgICB0aGlzLnVzZXIuaGFzQW55Um9sZSh0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlLCBbXG4gICAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0FETUlOXG4gICAgICBdKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgY291bGQgYmUgbXVsdGlwbGUgYnJlYWRjcnVtYnMgZm9yIGRldmljZXMsXG4gICAqIHNvIHdlIHNldCBhIHByZWZlcnJlZCBvbmUgb24gY2xpY2sgb24gYSBkZXZpY2UuXG4gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBwYXJlbnQgbm9kZXMgb2YgdGhlIGRldmljZSB0byBzZWxlY3QgdGhlIHByZWZlcmVkIG9uZS5cbiAgICovXG4gIHByZWZlckJyZWFkY3J1bWIocGFyZW50czogTmF2aWdhdG9yTm9kZVtdKSB7XG4gICAgaWYgKHBhcmVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmJyZWFkY3J1bWJTZXJ2aWNlLnNlbGVjdFByZWZlcnJlZEJ5UGF0aChwYXJlbnRzWzBdLnBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVGaWx0ZXIoZXh0cmFQYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgY3VycmVudFBhZ2U6IDEsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIHBhZ2VTaXplOiAxMFxuICAgIH07XG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi5leHRyYVBhcmFtcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbWJpbmVkUXVlcnkocXVlcnlBLCBxdWVyeUIpIHtcbiAgICBsZXQgY29tYmluZWRRdWVyeTtcbiAgICBpZiAocXVlcnlBICYmIHF1ZXJ5Qikge1xuICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoW1xuICAgICAgICB7XG4gICAgICAgICAgX191c2VGaWx0ZXJRdWVyeVN0cmluZzogcXVlcnlBXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBfX3VzZUZpbHRlclF1ZXJ5U3RyaW5nOiBxdWVyeUJcbiAgICAgICAgfVxuICAgICAgXSk7XG4gICAgICBjb25zdCBvcmJlckJ5UXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmV4dHJhY3RBbmRNZXJnZU9yZGVyQnlzKFtxdWVyeUEsIHF1ZXJ5Ql0pO1xuICAgICAgY29tYmluZWRRdWVyeSA9IGAke2ZpbHRlclF1ZXJ5fSAke29yYmVyQnlRdWVyeX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21iaW5lZFF1ZXJ5ID0gcXVlcnlBIHx8IHF1ZXJ5QiB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuIGNvbWJpbmVkUXVlcnk7XG4gIH1cbn1cbiJdfQ==
@@ -7,7 +7,10 @@ export class AuthConfigurationGuard {
7
7
  this.permissions = permissions;
8
8
  }
9
9
  canActivate() {
10
- return this.permissions.hasAnyRole(['ROLE_TENANT_ADMIN', 'ROLE_TENANT_MANAGEMENT_ADMIN']);
10
+ return this.permissions.hasAnyRole([
11
+ Permissions.ROLE_TENANT_ADMIN,
12
+ Permissions.ROLE_TENANT_MANAGEMENT_ADMIN
13
+ ]);
11
14
  }
12
15
  }
13
16
  AuthConfigurationGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AuthConfigurationGuard, deps: [{ token: i1.Permissions }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -15,4 +18,4 @@ AuthConfigurationGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0
15
18
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AuthConfigurationGuard, decorators: [{
16
19
  type: Injectable
17
20
  }], ctorParameters: function () { return [{ type: i1.Permissions }]; } });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1jb25maWd1cmF0aW9uLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL2F1dGgtY29uZmlndXJhdGlvbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBR2xELE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBRyxDQUFDO0lBRWhELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsOEJBQThCLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUM7O21IQUxVLHNCQUFzQjt1SEFBdEIsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQZXJtaXNzaW9ucyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aENvbmZpZ3VyYXRpb25HdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMpIHt9XG5cbiAgY2FuQWN0aXZhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMuaGFzQW55Um9sZShbJ1JPTEVfVEVOQU5UX0FETUlOJywgJ1JPTEVfVEVOQU5UX01BTkFHRU1FTlRfQURNSU4nXSk7XG4gIH1cbn1cbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1jb25maWd1cmF0aW9uLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL2F1dGgtY29uZmlndXJhdGlvbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBR2xELE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBRyxDQUFDO0lBRWhELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ2pDLFdBQVcsQ0FBQyxpQkFBaUI7WUFDN0IsV0FBVyxDQUFDLDRCQUE0QjtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEFSVSxzQkFBc0I7dUhBQXRCLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FuQWN0aXZhdGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUGVybWlzc2lvbnMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhDb25maWd1cmF0aW9uR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zKSB7fVxuXG4gIGNhbkFjdGl2YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLmhhc0FueVJvbGUoW1xuICAgICAgUGVybWlzc2lvbnMuUk9MRV9URU5BTlRfQURNSU4sXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX1RFTkFOVF9NQU5BR0VNRU5UX0FETUlOXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==
@@ -9,8 +9,8 @@ export class NavigationFactory {
9
9
  }
10
10
  async get() {
11
11
  const userHasPermission = this.permissions.hasAnyRole([
12
- 'ROLE_TENANT_ADMIN',
13
- 'ROLE_TENANT_MANAGEMENT_ADMIN'
12
+ Permissions.ROLE_TENANT_ADMIN,
13
+ Permissions.ROLE_TENANT_MANAGEMENT_ADMIN
14
14
  ]);
15
15
  if (this.navs.length === 0 && userHasPermission) {
16
16
  this.navs.push(new NavigatorNode({
@@ -30,4 +30,4 @@ NavigationFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", ve
30
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NavigationFactory, decorators: [{
31
31
  type: Injectable
32
32
  }], ctorParameters: function () { return [{ type: i1.Permissions }]; } });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL2ZhY3Rvcmllcy9uYXZpZ2F0aW9uLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBd0IsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUdoRyxNQUFNLE9BQU8saUJBQWlCO0lBRzVCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRjVDLFNBQUksR0FBb0IsRUFBRSxDQUFDO0lBRW9CLENBQUM7SUFFaEQsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ3BELG1CQUFtQjtZQUNuQiw4QkFBOEI7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksaUJBQWlCLEVBQUU7WUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osSUFBSSxhQUFhLENBQUM7Z0JBQ2hCLEtBQUssRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2hDLElBQUksRUFBRSxZQUFZO2dCQUNsQixJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQztnQkFDM0IsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDOzs4R0F2QlUsaUJBQWlCO2tIQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldHRleHQsIE5hdmlnYXRvck5vZGUsIE5hdmlnYXRvck5vZGVGYWN0b3J5LCBQZXJtaXNzaW9ucyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBOYXZpZ2F0b3JOb2RlRmFjdG9yeSB7XG4gIG5hdnM6IE5hdmlnYXRvck5vZGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zKSB7fVxuXG4gIGFzeW5jIGdldCgpIHtcbiAgICBjb25zdCB1c2VySGFzUGVybWlzc2lvbiA9IHRoaXMucGVybWlzc2lvbnMuaGFzQW55Um9sZShbXG4gICAgICAnUk9MRV9URU5BTlRfQURNSU4nLFxuICAgICAgJ1JPTEVfVEVOQU5UX01BTkFHRU1FTlRfQURNSU4nXG4gICAgXSk7XG4gICAgaWYgKHRoaXMubmF2cy5sZW5ndGggPT09IDAgJiYgdXNlckhhc1Blcm1pc3Npb24pIHtcbiAgICAgIHRoaXMubmF2cy5wdXNoKFxuICAgICAgICBuZXcgTmF2aWdhdG9yTm9kZSh7XG4gICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0F1dGhlbnRpY2F0aW9uJyksXG4gICAgICAgICAgaWNvbjogJ2M4eS1zaGllbGQnLFxuICAgICAgICAgIHBhdGg6ICcvYXV0aC1jb25maWd1cmF0aW9uJyxcbiAgICAgICAgICBwYXJlbnQ6IGdldHRleHQoJ1NldHRpbmdzJyksXG4gICAgICAgICAgcm91dGVyTGlua0V4YWN0OiBmYWxzZSxcbiAgICAgICAgICBwcmlvcml0eTogMjAwMFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubmF2cztcbiAgfVxufVxuIl19
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL2ZhY3Rvcmllcy9uYXZpZ2F0aW9uLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBd0IsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUdoRyxNQUFNLE9BQU8saUJBQWlCO0lBRzVCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRjVDLFNBQUksR0FBb0IsRUFBRSxDQUFDO0lBRW9CLENBQUM7SUFFaEQsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ3BELFdBQVcsQ0FBQyxpQkFBaUI7WUFDN0IsV0FBVyxDQUFDLDRCQUE0QjtTQUN6QyxDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxpQkFBaUIsRUFBRTtZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixJQUFJLGFBQWEsQ0FBQztnQkFDaEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDaEMsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLE1BQU0sRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDO2dCQUMzQixlQUFlLEVBQUUsS0FBSztnQkFDdEIsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQ0gsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7OzhHQXZCVSxpQkFBaUI7a0hBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0dGV4dCwgTmF2aWdhdG9yTm9kZSwgTmF2aWdhdG9yTm9kZUZhY3RvcnksIFBlcm1pc3Npb25zIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIE5hdmlnYXRvck5vZGVGYWN0b3J5IHtcbiAgbmF2czogTmF2aWdhdG9yTm9kZVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMpIHt9XG5cbiAgYXN5bmMgZ2V0KCkge1xuICAgIGNvbnN0IHVzZXJIYXNQZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5oYXNBbnlSb2xlKFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfVEVOQU5UX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9URU5BTlRfTUFOQUdFTUVOVF9BRE1JTlxuICAgIF0pO1xuICAgIGlmICh0aGlzLm5hdnMubGVuZ3RoID09PSAwICYmIHVzZXJIYXNQZXJtaXNzaW9uKSB7XG4gICAgICB0aGlzLm5hdnMucHVzaChcbiAgICAgICAgbmV3IE5hdmlnYXRvck5vZGUoe1xuICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBdXRoZW50aWNhdGlvbicpLFxuICAgICAgICAgIGljb246ICdjOHktc2hpZWxkJyxcbiAgICAgICAgICBwYXRoOiAnL2F1dGgtY29uZmlndXJhdGlvbicsXG4gICAgICAgICAgcGFyZW50OiBnZXR0ZXh0KCdTZXR0aW5ncycpLFxuICAgICAgICAgIHJvdXRlckxpbmtFeGFjdDogZmFsc2UsXG4gICAgICAgICAgcHJpb3JpdHk6IDIwMDBcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5hdnM7XG4gIH1cbn1cbiJdfQ==
@@ -25,7 +25,7 @@ export class CockpitConfigGuard {
25
25
  return;
26
26
  }
27
27
  canActivate() {
28
- return (this.permissions.hasRole('ROLE_APPLICATION_MANAGEMENT_ADMIN') &&
28
+ return (this.permissions.hasRole(Permissions.ROLE_APPLICATION_MANAGEMENT_ADMIN) &&
29
29
  this.ecosystemService.isOwner(this.appState.currentApplication.value));
30
30
  }
31
31
  }
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
37
37
  providedIn: 'root'
38
38
  }]
39
39
  }], ctorParameters: function () { return [{ type: i1.Permissions }, { type: i1.AppStateService }, { type: i2.EcosystemService }]; } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ja3BpdC1jb25maWcuZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb2NrcGl0LWNvbmZpZy9jb2NrcGl0LWNvbmZpZy5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsT0FBTyxFQUNQLGFBQWEsRUFFYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUs3RCxNQUFNLE9BQU8sa0JBQWtCO0lBUzdCLFlBQ1UsV0FBd0IsRUFDeEIsUUFBeUIsRUFDekIsZ0JBQWtDO1FBRmxDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFYekIsZUFBVSxHQUFrQixJQUFJLGFBQWEsQ0FBQztZQUMvRCxJQUFJLEVBQUUsSUFBSSxtQkFBbUIsRUFBRTtZQUMvQixNQUFNLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUNoQyxLQUFLLEVBQUUsT0FBTyxDQUFDLDJCQUEyQixDQUFDO1lBQzNDLElBQUksRUFBRSxlQUFlO1lBQ3JCLGlCQUFpQixFQUFFLElBQUk7U0FDeEIsQ0FBQyxDQUFDO0lBTUEsQ0FBQztJQUVKLEdBQUc7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDeEI7UUFDRCxPQUFPO0lBQ1QsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLENBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUM7WUFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUN0RSxDQUFDO0lBQ0osQ0FBQzs7K0dBM0JVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFwcFN0YXRlU2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgTmF2aWdhdG9yTm9kZSxcbiAgTmF2aWdhdG9yTm9kZUZhY3RvcnksXG4gIFBlcm1pc3Npb25zXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRWNvc3lzdGVtU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBDT0NLUElUX0NPTkZJR19QQVRIIH0gZnJvbSAnLi9jb2NrcGl0LWNvbmZpZy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvY2twaXRDb25maWdHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlLCBOYXZpZ2F0b3JOb2RlRmFjdG9yeSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWdOb2RlOiBOYXZpZ2F0b3JOb2RlID0gbmV3IE5hdmlnYXRvck5vZGUoe1xuICAgIHBhdGg6IGAvJHtDT0NLUElUX0NPTkZJR19QQVRIfWAsXG4gICAgcGFyZW50OiBnZXR0ZXh0KCdDb25maWd1cmF0aW9uJyksXG4gICAgbGFiZWw6IGdldHRleHQoJ0FwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24nKSxcbiAgICBpY29uOiAnaW1hYy1zZXR0aW5ncycsXG4gICAgcHJldmVudER1cGxpY2F0ZXM6IHRydWVcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZVxuICApIHt9XG5cbiAgZ2V0KCk6IE5hdmlnYXRvck5vZGUge1xuICAgIGlmICh0aGlzLmNhbkFjdGl2YXRlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ05vZGU7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNhbkFjdGl2YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnBlcm1pc3Npb25zLmhhc1JvbGUoJ1JPTEVfQVBQTElDQVRJT05fTUFOQUdFTUVOVF9BRE1JTicpICYmXG4gICAgICB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNPd25lcih0aGlzLmFwcFN0YXRlLmN1cnJlbnRBcHBsaWNhdGlvbi52YWx1ZSlcbiAgICApO1xuICB9XG59XG4iXX0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ja3BpdC1jb25maWcuZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb2NrcGl0LWNvbmZpZy9jb2NrcGl0LWNvbmZpZy5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsT0FBTyxFQUNQLGFBQWEsRUFFYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUs3RCxNQUFNLE9BQU8sa0JBQWtCO0lBUzdCLFlBQ1UsV0FBd0IsRUFDeEIsUUFBeUIsRUFDekIsZ0JBQWtDO1FBRmxDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFYekIsZUFBVSxHQUFrQixJQUFJLGFBQWEsQ0FBQztZQUMvRCxJQUFJLEVBQUUsSUFBSSxtQkFBbUIsRUFBRTtZQUMvQixNQUFNLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUNoQyxLQUFLLEVBQUUsT0FBTyxDQUFDLDJCQUEyQixDQUFDO1lBQzNDLElBQUksRUFBRSxlQUFlO1lBQ3JCLGlCQUFpQixFQUFFLElBQUk7U0FDeEIsQ0FBQyxDQUFDO0lBTUEsQ0FBQztJQUVKLEdBQUc7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDeEI7UUFDRCxPQUFPO0lBQ1QsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLENBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGlDQUFpQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FDdEUsQ0FBQztJQUNKLENBQUM7OytHQTNCVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIE5hdmlnYXRvck5vZGUsXG4gIE5hdmlnYXRvck5vZGVGYWN0b3J5LFxuICBQZXJtaXNzaW9uc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEVjb3N5c3RlbVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuaW1wb3J0IHsgQ09DS1BJVF9DT05GSUdfUEFUSCB9IGZyb20gJy4vY29ja3BpdC1jb25maWcubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb2NrcGl0Q29uZmlnR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSwgTmF2aWdhdG9yTm9kZUZhY3Rvcnkge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnTm9kZTogTmF2aWdhdG9yTm9kZSA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgICBwYXRoOiBgLyR7Q09DS1BJVF9DT05GSUdfUEFUSH1gLFxuICAgIHBhcmVudDogZ2V0dGV4dCgnQ29uZmlndXJhdGlvbicpLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdBcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uJyksXG4gICAgaWNvbjogJ2ltYWMtc2V0dGluZ3MnLFxuICAgIHByZXZlbnREdXBsaWNhdGVzOiB0cnVlXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2VcbiAgKSB7fVxuXG4gIGdldCgpOiBOYXZpZ2F0b3JOb2RlIHtcbiAgICBpZiAodGhpcy5jYW5BY3RpdmF0ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWdOb2RlO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBjYW5BY3RpdmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5oYXNSb2xlKFBlcm1pc3Npb25zLlJPTEVfQVBQTElDQVRJT05fTUFOQUdFTUVOVF9BRE1JTikgJiZcbiAgICAgIHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc093bmVyKHRoaXMuYXBwU3RhdGUuY3VycmVudEFwcGxpY2F0aW9uLnZhbHVlKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==