@c8y/ngx-components 1018.503.26 → 1018.503.41
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.
- package/assets-navigator/asset-node.service.d.ts +5 -2
- package/device-grid/device-grid.component.d.ts +7 -2
- package/esm2020/assets-navigator/asset-node.mjs +2 -2
- package/esm2020/assets-navigator/asset-node.service.mjs +14 -5
- package/esm2020/child-devices/child-devices.component.mjs +1 -1
- package/esm2020/core/bootstrap/bootstrap.component.mjs +3 -3
- package/esm2020/core/docs/docs.service.mjs +1 -11
- package/esm2020/core/dynamic-forms/json-schema/c8y-json-schema.service.mjs +8 -2
- package/esm2020/device-grid/columns/registration-date.device-grid-column.mjs +4 -10
- package/esm2020/device-grid/device-grid-extension.service.mjs +13 -8
- package/esm2020/device-grid/device-grid.component.mjs +30 -15
- package/esm2020/device-list/device-list.component.mjs +1 -1
- package/esm2020/ecosystem/application-plugins/application-plugins.component.mjs +34 -13
- package/esm2020/operations/device-selector/device-selector.component.mjs +1 -1
- package/esm2020/replace-device-wizard/replace-device-wizard.component.mjs +2 -2
- package/esm2020/repository/shared/repository.service.mjs +4 -4
- package/esm2020/services/services-device-tab/columns/last-updated-date.device-grid-column.mjs +4 -10
- package/esm2020/sub-assets/add-group/add-group.component.mjs +4 -3
- package/esm2020/sub-assets/asset-properties-item.component.mjs +7 -3
- package/esm2020/sub-assets/asset-properties.component.mjs +25 -10
- package/esm2020/sub-assets/assign-devices/assign-devices.component.mjs +4 -3
- package/esm2020/sub-assets/location/asset-location.component.mjs +5 -3
- package/fesm2015/c8y-ngx-components-assets-navigator.mjs +16 -9
- package/fesm2015/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-child-devices.mjs +1 -1
- package/fesm2015/c8y-ngx-components-child-devices.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-device-grid.mjs +44 -30
- package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-device-list.mjs +1 -1
- package/fesm2015/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +26 -13
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem.mjs +26 -13
- package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-operations-device-selector.mjs +1 -1
- package/fesm2015/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-replace-device-wizard.mjs +1 -1
- package/fesm2015/c8y-ngx-components-replace-device-wizard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-repository-shared.mjs +3 -3
- package/fesm2015/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-services.mjs +3 -9
- package/fesm2015/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sub-assets.mjs +39 -18
- package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +6 -12
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-assets-navigator.mjs +16 -9
- package/fesm2020/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-child-devices.mjs +1 -1
- package/fesm2020/c8y-ngx-components-child-devices.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-grid.mjs +44 -30
- package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-list.mjs +1 -1
- package/fesm2020/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +33 -13
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem.mjs +33 -13
- package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-operations-device-selector.mjs +1 -1
- package/fesm2020/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-replace-device-wizard.mjs +1 -1
- package/fesm2020/c8y-ngx-components-replace-device-wizard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-repository-shared.mjs +3 -3
- package/fesm2020/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-services.mjs +3 -9
- package/fesm2020/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sub-assets.mjs +38 -17
- package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +9 -12
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/sub-assets/add-group/add-group.component.d.ts +2 -1
- package/sub-assets/asset-properties.component.d.ts +6 -0
- package/sub-assets/assign-devices/assign-devices.component.d.ts +2 -1
|
@@ -6,6 +6,7 @@ import { AssetNavigatorConfig } from './asset-node-config.model';
|
|
|
6
6
|
import { DynamicGroupNode } from './dynamic-group-node';
|
|
7
7
|
import { DeviceGroupService } from './group.service';
|
|
8
8
|
import { ActivatedRouteSnapshot, Router } from '@angular/router';
|
|
9
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
export interface AssetNodeMo {
|
|
11
12
|
id: string;
|
|
@@ -23,12 +24,13 @@ export declare class AssetNodeService {
|
|
|
23
24
|
moduleConfig: AssetNavigatorConfig;
|
|
24
25
|
protected deviceGroupService: DeviceGroupService;
|
|
25
26
|
protected router: Router;
|
|
27
|
+
protected translateService: TranslateService;
|
|
26
28
|
rootNode: AssetNode;
|
|
27
29
|
firstUrl: boolean;
|
|
28
30
|
draggedData: AssetNode;
|
|
29
31
|
queriesUtil: QueriesUtil;
|
|
30
32
|
protected PAGE_SIZE: number;
|
|
31
|
-
constructor(inventory: InventoryService, apiService: ApiService, modal: ModalService, alert: AlertService, breadcrumbService: BreadcrumbService, user: UserService, appState: AppStateService, optionsService: OptionsService, moduleConfig: AssetNavigatorConfig, deviceGroupService: DeviceGroupService, router: Router);
|
|
33
|
+
constructor(inventory: InventoryService, apiService: ApiService, modal: ModalService, alert: AlertService, breadcrumbService: BreadcrumbService, user: UserService, appState: AppStateService, optionsService: OptionsService, moduleConfig: AssetNavigatorConfig, deviceGroupService: DeviceGroupService, router: Router, translateService: TranslateService);
|
|
32
34
|
/**
|
|
33
35
|
* Expands the navigator nodes on first navigation.
|
|
34
36
|
* @param snapshot The current navigation snapshot.
|
|
@@ -40,6 +42,7 @@ export declare class AssetNodeService {
|
|
|
40
42
|
* @param ids The ids that should be expanded.
|
|
41
43
|
*/
|
|
42
44
|
expandAll(node: AssetNode, ids: string[]): void;
|
|
45
|
+
label(mo: IManagedObject): string;
|
|
43
46
|
icon(mo: IManagedObject, open?: boolean): Promise<string>;
|
|
44
47
|
isGroup(mo: IManagedObject): boolean;
|
|
45
48
|
isDynamicGroup(mo: IManagedObject): boolean;
|
|
@@ -108,6 +111,6 @@ export declare class AssetNodeService {
|
|
|
108
111
|
preferBreadcrumb(parents: NavigatorNode[]): void;
|
|
109
112
|
protected createFilter(extraParams?: any): any;
|
|
110
113
|
private buildCombinedQuery;
|
|
111
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AssetNodeService, [null, null, null, null, null, null, null, null, { optional: true; }, null, null]>;
|
|
114
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AssetNodeService, [null, null, null, null, null, null, null, null, { optional: true; }, null, null, null]>;
|
|
112
115
|
static ɵprov: i0.ɵɵInjectableDeclaration<AssetNodeService>;
|
|
113
116
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
-
import { ActionControl, BulkActionControl, Column, DataGridComponent, DataSourceModifier, FilteringActionType, FilteringModifier, HeaderActionControl, LoadMoreMode, Pagination, ProductExperienceEvent, ProductExperienceEventSource, ServerSideDataCallback, ServerSideDataResult } from '@c8y/ngx-components';
|
|
2
|
+
import { ActionControl, BuiltInActionType, BulkActionControl, Column, DataGridComponent, DataSourceModifier, FilteringActionType, FilteringModifier, HeaderActionControl, LoadMoreMode, Pagination, ProductExperienceEvent, ProductExperienceEventSource, ServerSideDataCallback, ServerSideDataResult } from '@c8y/ngx-components';
|
|
3
3
|
import { DeviceGridExtensionService } from './device-grid-extension.service';
|
|
4
4
|
import { DataCallback, FilterConfig } from './device-grid.model';
|
|
5
5
|
import { DeviceGridService } from './device-grid.service';
|
|
@@ -36,6 +36,11 @@ export declare class DeviceGridComponent implements OnInit, OnDestroy, ProductEx
|
|
|
36
36
|
infiniteScroll: LoadMoreMode;
|
|
37
37
|
/** Sets load more mode. */
|
|
38
38
|
set _infiniteScroll(infiniteScroll: LoadMoreMode);
|
|
39
|
+
/**
|
|
40
|
+
* Represents the input property for hiding specific built-in action types.
|
|
41
|
+
* The `actionsToHide` input allows specifying an array of `BuiltInActionType` values or the string 'ALL' to hide all action controls
|
|
42
|
+
*/
|
|
43
|
+
builtInActionsToHide: BuiltInActionType[] | 'ALL';
|
|
39
44
|
/** Sets action controls (actions available for individual items). If not given, it defaults to standard actions. */
|
|
40
45
|
set _actionControls(value: ActionControl[]);
|
|
41
46
|
/** Determines whether items can be selected by clicking a checkbox in the first column. */
|
|
@@ -90,5 +95,5 @@ export declare class DeviceGridComponent implements OnInit, OnDestroy, ProductEx
|
|
|
90
95
|
};
|
|
91
96
|
}): void;
|
|
92
97
|
static ɵfac: i0.ɵɵFactoryDeclaration<DeviceGridComponent, never>;
|
|
93
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DeviceGridComponent, "c8y-device-grid", never, { "dataCallback": "dataCallback"; "refresh": "refresh"; "title": "title"; "loadMoreItemsLabel": "loadMoreItemsLabel"; "loadingItemsLabel": "loadingItemsLabel"; "legacyConfigKey": "legacyConfigKey"; "legacyFilterKey": "legacyFilterKey"; "columns": "columns"; "_pagination": "pagination"; "_infiniteScroll": "infiniteScroll"; "_actionControls": "actionControls"; "selectable": "selectable"; "singleSelection": "singleSelection"; "baseQuery": "baseQuery"; "_bulkActionControls": "bulkActionControls"; "_headerActionControls": "headerActionControls"; "childDeviceGrid": "childDeviceGrid"; "parentDeviceId": "parentDeviceId"; "withChildren": "withChildren"; "showSearch": "showSearch"; "activeClassName": "activeClassName"; }, { "onColumnsChange": "onColumnsChange"; "onFilterChange": "onFilterChange"; "onDeviceQueryStringChange": "onDeviceQueryStringChange"; "itemsSelect": "itemsSelect"; }, never, never, false, never>;
|
|
98
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DeviceGridComponent, "c8y-device-grid", never, { "dataCallback": "dataCallback"; "refresh": "refresh"; "title": "title"; "loadMoreItemsLabel": "loadMoreItemsLabel"; "loadingItemsLabel": "loadingItemsLabel"; "legacyConfigKey": "legacyConfigKey"; "legacyFilterKey": "legacyFilterKey"; "columns": "columns"; "_pagination": "pagination"; "_infiniteScroll": "infiniteScroll"; "builtInActionsToHide": "builtInActionsToHide"; "_actionControls": "actionControls"; "selectable": "selectable"; "singleSelection": "singleSelection"; "baseQuery": "baseQuery"; "_bulkActionControls": "bulkActionControls"; "_headerActionControls": "headerActionControls"; "childDeviceGrid": "childDeviceGrid"; "parentDeviceId": "parentDeviceId"; "withChildren": "withChildren"; "showSearch": "showSearch"; "activeClassName": "activeClassName"; }, { "onColumnsChange": "onColumnsChange"; "onFilterChange": "onFilterChange"; "onDeviceQueryStringChange": "onDeviceQueryStringChange"; "itemsSelect": "itemsSelect"; }, never, never, false, never>;
|
|
94
99
|
}
|
|
@@ -75,7 +75,7 @@ export class AssetNode extends NavigatorNode {
|
|
|
75
75
|
this.translateLabel = true;
|
|
76
76
|
}
|
|
77
77
|
else {
|
|
78
|
-
this.label = this.mo
|
|
78
|
+
this.label = this.service.label(this.mo);
|
|
79
79
|
this.translateLabel = false;
|
|
80
80
|
}
|
|
81
81
|
}
|
|
@@ -320,4 +320,4 @@ export class AssetNode extends NavigatorNode {
|
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
322
|
AssetNode.NAME = 'AssetNode';
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2Fzc2V0cy1uYXZpZ2F0b3IvYXNzZXQtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxhQUFhLEVBQ2IsYUFBYSxFQUVkLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsTUFBTSxPQUFPLFNBQVUsU0FBUSxhQUFhO0lBYTFDLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLDZCQUE2QjtRQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQ2QsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNYLENBQUM7SUFDSixDQUFD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QU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO29CQUNsQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUNwQixJQUFJLEVBQUUsYUFBYSxDQUFDLFlBQVk7aUJBQ2pDLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDMUU7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQzs7QUE5V00sY0FBSSxHQUFHLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElJZGVudGlmaWVkLCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBDbGlja09wdGlvbnMsXG4gIERldmljZVN0YXR1c0NvbXBvbmVudCxcbiAgZ2V0dGV4dCxcbiAgR3JvdXBGcmFnbWVudCxcbiAgTmF2aWdhdG9yTm9kZSxcbiAgTmF2aWdhdG9yTm9kZURhdGFcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBBc3NldE5vZGVNbywgQXNzZXROb2RlU2VydmljZSB9IGZyb20gJy4vYXNzZXQtbm9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IExvYWRNb3JlTm9kZSB9IGZyb20gJy4vbG9hZC1tb3JlLW5vZGUnO1xuXG5leHBvcnQgY2xhc3MgQXNzZXROb2RlIGV4dGVuZHMgTmF2aWdhdG9yTm9kZSB7XG4gIHN0YXRpYyBOQU1FID0gJ0Fzc2V0Tm9kZSc7XG4gIHJvb3Q6IGJvb2xlYW47XG4gIG1vOiBhbnk7XG4gIGhpZGVEZXZpY2VzID0gZmFsc2U7XG4gIGZpbHRlclF1ZXJ5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHNob3dDaGlsZERldmljZXMgPSBmYWxzZTtcblxuICAvKipcbiAgICogQXNzZXQgbm9kZSBjaGlsZHJlbiAoc3ViZW50cmllcykuXG4gICAqL1xuICBjaGlsZHJlbjogQXNzZXROb2RlW10gPSBbXTtcblxuICBnZXQgaGFzQ2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMucm9vdCB8fCB0aGlzLnNlcnZpY2UuaXNHcm91cCh0aGlzLm1vKTtcbiAgfVxuXG4gIGdldCBpc0RldmljZSgpIHtcbiAgICByZXR1cm4gISF0aGlzLm1vLmM4eV9Jc0RldmljZTtcbiAgfVxuXG4gIGdldCBpc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RldmljZSB8fCB0aGlzLmlzTmVpdGhlckRldmljZU9yR3JvdXA7XG4gIH1cblxuICBnZXQgaXNOZWl0aGVyRGV2aWNlT3JHcm91cCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuc2VydmljZS5pc0dyb3VwKHRoaXMubW8pICYmXG4gICAgICAhdGhpcy5zZXJ2aWNlLmlzRHluYW1pY0dyb3VwKHRoaXMubW8pICYmXG4gICAgICAhdGhpcy5pc0RldmljZSAmJlxuICAgICAgIXRoaXMucm9vdFxuICAgICk7XG4gIH1cblxuICBldmVudHM6IFN1YmplY3Q8QWN0aW9uPjtcbiAgbm9kZXNGZXRjaGVkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICBwcm90ZWN0ZWQgcGFnaW5nOiBQYWdpbmc8QXNzZXROb2RlTW8+O1xuICBwcm90ZWN0ZWQgbG9hZE1vcmVOb2RlOiBMb2FkTW9yZU5vZGU7XG4gIHByaXZhdGUgb25VcGRhdGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2VydmljZTogQXNzZXROb2RlU2VydmljZSwgcHJvdGVjdGVkIGNvbmZpZzogTmF2aWdhdG9yTm9kZURhdGEgPSB7fSkge1xuICAgIHN1cGVyKGNvbmZpZyk7XG5cbiAgICB0aGlzLnJvb3QgPSB0aGlzLnJvb3QgfHwgZmFsc2U7XG4gICAgdGhpcy5oaWRlRGV2aWNlcyA9IGNvbmZpZy5oaWRlRGV2aWNlcyA/PyB0aGlzLmhpZGVEZXZpY2VzO1xuICAgIHRoaXMubW8gPSB0aGlzLm1vIHx8IHt9O1xuICAgIHRoaXMucGF0aCA9IHRoaXMuZ2V0UGF0aCgpO1xuICAgIHRoaXMuZHJhZ2dhYmxlID0gIXRoaXMuc2VydmljZT8ubW9kdWxlQ29uZmlnPy5kaXNhYmxlRHJhZ0FuZERyb3AgJiYgIXRoaXMucm9vdDtcbiAgICB0aGlzLmRyb3BwYWJsZSA9XG4gICAgICAhdGhpcy5zZXJ2aWNlPy5tb2R1bGVDb25maWc/LmRpc2FibGVEcmFnQW5kRHJvcCAmJiAhdGhpcy5pc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZTtcbiAgICB0aGlzLnJvdXRlckxpbmtFeGFjdCA9IHRoaXMucm9vdDtcbiAgICB0aGlzLnVwZGF0ZUljb24oZmFsc2UpO1xuICAgIHRoaXMub25VcGRhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnNlcnZpY2VcbiAgICAgIC5vblVwZGF0ZSh0aGlzKVxuICAgICAgLnN1YnNjcmliZSgoeyBkYXRhLCBtZXRob2QgfSkgPT4gdGhpcy5yZWZyZXNoKGRhdGEsIG1ldGhvZCkpO1xuICAgIHRoaXMuc2V0TGFiZWwoKTtcbiAgICB0aGlzLmljb25Db21wb25lbnQgPSB0aGlzLmlzRGV2aWNlT3JQcm9iYWJseUNoaWxkRGV2aWNlID8gRGV2aWNlU3RhdHVzQ29tcG9uZW50IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UGF0aCgpIHtcbiAgICBpZiAodGhpcy5jb25maWcucGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnBhdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucm9vdFxuICAgICAgPyAnZ3JvdXAnXG4gICAgICA6IHRoaXMuaXNEZXZpY2VPclByb2JhYmx5Q2hpbGREZXZpY2VcbiAgICAgID8gYGRldmljZS8ke3RoaXMubW8uaWR9YFxuICAgICAgOiBgZ3JvdXAvJHt0aGlzLm1vLmlkfWA7XG4gIH1cblxuICByZWZyZXNoKG1vOiBhbnkgPSB7fSwgbWV0aG9kID0gJ0dFVCcpIHtcbiAgICBpZiAobW8/LmlkID09PSB0aGlzLm1vLmlkKSB7XG4gICAgICB0aGlzLm1vID0gbW87XG4gICAgICB0aGlzLnNldExhYmVsKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdERUxFVEUnKSB7XG4gICAgICB0aGlzLnBhcmVudHMuZm9yRWFjaCgobm9kZTogQXNzZXROb2RlKSA9PiBub2RlLnJlZnJlc2goKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmV2ZW50cykge1xuICAgICAgdGhpcy5ldmVudHMubmV4dChBY3Rpb24uUkVGUkVTSCk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGFiZWwoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmxhYmVsIHx8IHRoaXMucm9vdCkge1xuICAgICAgdGhpcy5sYWJlbCA9IHRoaXMuY29uZmlnLmxhYmVsIHx8IGdldHRleHQoJ0dyb3VwcycpO1xuICAgICAgdGhpcy50cmFuc2xhdGVMYWJlbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFiZWwgPSB0aGlzLm1vLm5hbWUgfHwgJy0tJztcbiAgICAgIHRoaXMudHJhbnNsYXRlTGFiZWwgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjbGljayhvcHRpb25zOiBDbGlja09wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0aGlzLmlzRGV2aWNlT3JQcm9iYWJseUNoaWxkRGV2aWNlICYmICF0aGlzLnNob3dDaGlsZERldmljZXMpIHtcbiAgICAgIHRoaXMuc2VydmljZS5wcmVmZXJCcmVhZGNydW1iKHRoaXMucGFyZW50cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaG9va0V2ZW50cygpO1xuICAgIHRoaXMudXBkYXRlSWNvbihvcHRpb25zLm9wZW4pO1xuICAgIGlmIChvcHRpb25zLm9wZW4pIHtcbiAgICAgIHRoaXMuZXZlbnRzLm5leHQoQWN0aW9uLkZFVENIKTtcbiAgICB9XG4gIH1cblxuICBzb3J0KCkge1xuICAgIHRoaXMuY2hpbGRyZW4uc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGEucHJpb3JpdHkgPiBiLnByaW9yaXR5KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYS5wcmlvcml0eSA8IGIucHJpb3JpdHkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZE1hbmFnZWRPYmplY3QobW8pIHtcbiAgICBjb25zdCB7IGNoaWxkQWRkaXRpb25zIH0gPSB0aGlzLm1vO1xuICAgIGlmICghdGhpcy5pc0NoaWxkQWRkaXRpb24oY2hpbGRBZGRpdGlvbnMsIG1vKSkge1xuICAgICAgdGhpcy5hZGQodGhpcy5zZXJ2aWNlLmNyZWF0ZUNoaWxkTm9kZShtbywgeyBoaWRlRGV2aWNlczogdGhpcy5oaWRlRGV2aWNlcyB9KSk7XG4gICAgfVxuICB9XG5cbiAgaXNDaGlsZEFkZGl0aW9uKGNoaWxkQWRkaXRpb25zLCBtbykge1xuICAgIHJldHVybiAoXG4gICAgICBjaGlsZEFkZGl0aW9ucyAmJiBjaGlsZEFkZGl0aW9ucy5yZWZlcmVuY2VzLnNvbWUoKHsgbWFuYWdlZE9iamVjdDogeyBpZCB9IH0pID0+IGlkID09PSBtby5pZClcbiAgICApO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLm9uVXBkYXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnZXQgY2FuRHJvcCgpIHtcbiAgICBjb25zdCBub2RlVG9Nb3ZlID0gdGhpcy5zZXJ2aWNlLmRyYWdnZWREYXRhO1xuICAgIGlmIChub2RlVG9Nb3ZlKSB7XG4gICAgICBjb25zdCBzaG91bGRHZXRDaGlsZE9mSXRzT3duID0gISFub2RlVG9Nb3ZlLmZpbmQoY2hpbGQgPT4gY2hpbGQgPT09IHRoaXMpO1xuICAgICAgY29uc3QgaXNBbHJlYWR5Q2hpbGQgPSAodGhpcy5jaGlsZHJlbiBhcyBBc3NldE5vZGVbXSkuc29tZShcbiAgICAgICAgY2hpbGQgPT4gY2hpbGQubW8gJiYgY2hpbGQubW8uaWQgPT09IG5vZGVUb01vdmUubW8uaWRcbiAgICAgICk7XG4gICAgICBjb25zdCBwcmV2ZW50TW92ZSA9IHRoaXMgPT09IG5vZGVUb01vdmUgfHwgc2hvdWxkR2V0Q2hpbGRPZkl0c093biB8fCBpc0FscmVhZHlDaGlsZDtcbiAgICAgIHJldHVybiB0aGlzLmRyb3BwYWJsZSAmJiAhcHJldmVudE1vdmUgJiYgdGhpcy5zZXJ2aWNlLmNhbkRyb3BOb2RlKHRoaXMucm9vdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRyb3BwYWJsZTtcbiAgfVxuXG4gIGRyYWdTdGFydCgkZXZlbnQpIHtcbiAgICBzdXBlci5kcmFnU3RhcnQoJGV2ZW50KTtcbiAgICB0aGlzLnNlcnZpY2UuZHJhZ2dlZERhdGEgPSB0aGlzO1xuICAgIHRoaXMuc2VydmljZS5yb290Tm9kZS5kcm9wcGFibGUgPSAhdGhpcy5pc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZTtcbiAgfVxuXG4gIGRyYWdFbmQoJGV2ZW50KSB7XG4gICAgc3VwZXIuZHJhZ0VuZCgkZXZlbnQpO1xuICB9XG5cbiAgYXN5bmMgZHJvcCgkZXZlbnQpIHtcbiAgICBjb25zdCBub2RlVG9Nb3ZlID0gdGhpcy5zZXJ2aWNlLmRyYWdnZWREYXRhO1xuXG4gICAgLy8gVE9ETyByZW1vdmUgd2hlbiBhc3NldCB0eXBlIG5vZGUgY2FuIGJlIHVzZWQgb24gdGhlIHJvb3QgbGV2ZWwuXG4gICAgaWYgKHRoaXMucm9vdCAmJiB0aGlzLmlzQXNzZXQobm9kZVRvTW92ZSkpIHtcbiAgICAgIHRoaXMuc2VydmljZS5hbGVydC5pbmZvKGdldHRleHQoJ0Fzc2V0IHR5cGUgbm9kZSBjYW5ub3QgYmVjb21lIHJvb3Qgbm9kZS4nKSk7XG4gICAgICB0aGlzLmRyYWdnZWRIb3ZlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXJ2aWNlLmRyYWdnZWREYXRhID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmRyb3AoJGV2ZW50KTtcbiAgICBpZiAodGhpcy5jYW5Ecm9wKSB7XG4gICAgICBhd2FpdCB0aGlzLm1vdmVOb2RlKG5vZGVUb01vdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyYWdnZWRIb3ZlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXJ2aWNlLmRyYWdnZWREYXRhID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGhvb2tFdmVudHMoKSB7XG4gICAgaWYgKCF0aGlzLmV2ZW50cykge1xuICAgICAgdGhpcy5ldmVudHMgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgdGhpcy5ldmVudHMuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFdmVudChldnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gQXNzZXROb2RlLk5BTUU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IG5vZGUgaGFzIGNoaWxkIGRldmljZXMuXG4gICAqL1xuICBoYXNDaGlsZERldmljZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubW8gJiYgdGhpcy5tby5jOHlfSXNEZXZpY2UgJiYgdGhpcy5tby5jaGlsZERldmljZXMucmVmZXJlbmNlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZldGNoKCkge1xuICAgIHJldHVybiB0aGlzLnJvb3RcbiAgICAgID8gdGhpcy5zZXJ2aWNlLmdldFJvb3ROb2RlcygpXG4gICAgICA6IHRoaXMuc2VydmljZS5nZXRHcm91cEl0ZW1zKFxuICAgICAgICAgIHRoaXMubW8uaWQsXG4gICAgICAgICAgdGhpcy5oaWRlRGV2aWNlc1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgcXVlcnk6IGAkZmlsdGVyPShoYXMoJHtHcm91cEZyYWdtZW50Lmdyb3VwRnJhZ21lbnRUeXBlfSkpJG9yZGVyYnk9bmFtZWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fVxuICAgICAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZUljb24ob3Blbikge1xuICAgIHRoaXMuaWNvbiA9IGF3YWl0IHRoaXMuc2VydmljZS5pY29uKFxuICAgICAgLy8gaWYgaXQncyByb290IHdlIGFyZSBnb2luZyB0byBwYXNzIGEgZmFrZSBtbyB0byBnZXQgdGhlIHNhbWUgaWNvbiBhcyBncm91cHNcbiAgICAgIHRoaXMucm9vdCA/IHsgYzh5X0lzRGV2aWNlR3JvdXA6IHt9IH0gOiB0aGlzLm1vLFxuICAgICAgb3BlblxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY291bnRDaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlRXZlbnQoZXZ0OiBBY3Rpb24pIHtcbiAgICBpZiAoIXRoaXMuY291bnRDaGlsZHJlbigpICYmIGV2dCA9PT0gQWN0aW9uLkZFVENIKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hZGROb2Rlcyhhd2FpdCB0aGlzLmZldGNoKCkpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChldnQgPT09IEFjdGlvbi5ORVhUKSB7XG4gICAgICB0aGlzLmxvYWRNb3JlTm9kZS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWRkTm9kZXMoYXdhaXQgdGhpcy5wYWdpbmcubmV4dCgpKTtcbiAgICAgIHRoaXMubG9hZE1vcmVOb2RlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGV2dCA9PT0gQWN0aW9uLlJFRlJFU0gpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5wYWdpbmcgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmxvYWRNb3JlTm9kZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZW1wdHkoKTtcbiAgICAgIHRoaXMuZXZlbnRzLm5leHQoQWN0aW9uLkZFVENIKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTm9kZXMocmVzKSB7XG4gICAgaWYgKHJlcy5wYWdpbmcpIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFBhZ2UsIG5leHRQYWdlLCBwYWdlU2l6ZSB9ID0gKHRoaXMucGFnaW5nID0gcmVzLnBhZ2luZyk7XG4gICAgICBpZiAoY3VycmVudFBhZ2UgPT09IDEpIHtcbiAgICAgICAgdGhpcy5lbXB0eSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbXNDb3VudCA9IHJlcy5kYXRhLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1vcmVJdGVtc0F2YWlsYWJsZSA9ICEhbmV4dFBhZ2UgJiYgaXRlbXNDb3VudCA9PT0gcGFnZVNpemU7XG4gICAgICB0aGlzLnRvZ2dsZUxvYWRNb3JlKG1vcmVJdGVtc0F2YWlsYWJsZSk7XG4gICAgfVxuICAgIChyZXMuZGF0YSB8fCByZXMpLm1hcChtbyA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRNYW5hZ2VkT2JqZWN0KG1vKTtcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50cy5uZXh0KEFjdGlvbi5MT0FESU5HX0RPTkUpO1xuICAgIHRoaXMubm9kZXNGZXRjaGVkLm5leHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVMb2FkTW9yZShzaG93OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmxvYWRNb3JlTm9kZSAmJiBzaG93KSB7XG4gICAgICB0aGlzLmxvYWRNb3JlTm9kZSA9IG5ldyBMb2FkTW9yZU5vZGUoKTtcbiAgICAgIHRoaXMuYWRkKHRoaXMubG9hZE1vcmVOb2RlKTtcbiAgICAgIHRoaXMubG9hZE1vcmVOb2RlLmNsaWNrID0gZGVib3VuY2UoKCkgPT4gdGhpcy5ldmVudHMubmV4dChBY3Rpb24uTkVYVCksIDMwMCwge1xuICAgICAgICBsZWFkaW5nOiB0cnVlLFxuICAgICAgICB0cmFpbGluZzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvYWRNb3JlTm9kZSkge1xuICAgICAgdGhpcy5sb2FkTW9yZU5vZGUuaGlkZGVuID0gIXNob3c7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtb3ZlTm9kZShub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaXNDb3B5ID0gYXdhaXQgdGhpcy5zaG93RHJvcENvbmZpcm0obm9kZVRvTW92ZSk7XG4gICAgICBhd2FpdCB0aGlzLnZlcmlmeU5vZGVBY2Nlc3Mobm9kZVRvTW92ZSk7XG4gICAgICBhd2FpdCB0aGlzLmFkZE1vdmVkTm9kZShub2RlVG9Nb3ZlKTtcbiAgICAgIGlmICghaXNDb3B5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlTW92ZWROb2RlKG5vZGVUb01vdmUpO1xuICAgICAgfVxuICAgICAgdGhpcy5leHBhbmQoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuc2VydmljZS5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kcmFnZ2VkSG92ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VydmljZS5kcmFnZ2VkRGF0YSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dEcm9wQ29uZmlybShub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICB0aGlzLmNvbmZpcm0udGl0bGUgPSBnZXR0ZXh0KCdNb3ZlJyk7XG4gICAgdGhpcy5jb25maXJtLm1lc3NhZ2UgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBtb3ZlIHRoZSBncm91cD8nKTtcbiAgICBjb25zdCBidXR0b25zOiBhbnkgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDYW5jZWwnKSxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBQcm9taXNlLnJlamVjdCgpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogZ2V0dGV4dCgnTW92ZScpLFxuICAgICAgICBzdGF0dXM6ICdkZWZhdWx0JyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpXG4gICAgICB9XG4gICAgXTtcbiAgICBpZiAobm9kZVRvTW92ZS5pc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZSkge1xuICAgICAgdGhpcy5jb25maXJtLnRpdGxlID0gZ2V0dGV4dCgnTW92ZSBvciBhZGQnKTtcbiAgICAgIHRoaXMuY29uZmlybS5tZXNzYWdlID0gZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gbW92ZSBvciBhZGQgdGhlIGRldmljZT8nKTtcbiAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBZGQnKSxcbiAgICAgICAgc3RhdHVzOiAncHJpbWFyeScsXG4gICAgICAgIGFjdGlvbjogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHRydWUpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlybS5zaG93KGJ1dHRvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2ZXJpZnlOb2RlQWNjZXNzKG5vZGVUb01vdmU6IEFzc2V0Tm9kZSkge1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuaW52ZW50b3J5LnVwZGF0ZSh7IGlkOiBub2RlVG9Nb3ZlLm1vLmlkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRNb3ZlZE5vZGUobm9kZVRvTW92ZTogQXNzZXROb2RlKSB7XG4gICAgbGV0IG1vOiBJSWRlbnRpZmllZDtcblxuICAgIGlmICh0aGlzLnJvb3QgJiYgIXRoaXMuaXNBc3NldChub2RlVG9Nb3ZlKSkge1xuICAgICAgbW8gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5pbnZlbnRvcnkudXBkYXRlKHtcbiAgICAgICAgICBpZDogbm9kZVRvTW92ZS5tby5pZCxcbiAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwVHlwZVxuICAgICAgICB9KVxuICAgICAgKS5kYXRhO1xuXG4gICAgICB0aGlzLmFkZE1hbmFnZWRPYmplY3QobW8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vID0gKGF3YWl0IHRoaXMuc2VydmljZS5pbnZlbnRvcnkuY2hpbGRBc3NldHNBZGQobm9kZVRvTW92ZS5tbywgdGhpcy5tbykpLmRhdGE7XG4gICAgdGhpcy5hZGRNYW5hZ2VkT2JqZWN0KG1vKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBc3NldChub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICAvLyBUT0RPIHVzZSBpc0Fzc2V0IGNoZWNrIHdoZW4gaHR0cHM6Ly9naXRodWIuc29mdHdhcmVhZy5jb20vSU9UQS9jdW11bG9jaXR5LXVpL3B1bGwvNjkwIGlzIG1lcmdlZC5cbiAgICAvLyBEbyBub3Qgb3ZlcnJpZGUgYXNzZXQgdHlwZSFcbiAgICByZXR1cm4gbm9kZVRvTW92ZS5tbz8uYzh5X0lzQXNzZXQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZU1vdmVkTm9kZShub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiBub2RlVG9Nb3ZlLnBhcmVudHMgYXMgQXNzZXROb2RlW10pIHtcbiAgICAgIGlmIChwYXJlbnQubW8gJiYgcGFyZW50Lm1vLnR5cGUgPT09IEdyb3VwRnJhZ21lbnQuZHluYW1pY0dyb3VwVHlwZSkge1xuICAgICAgICBicmVhazsgLy8gc21hcnQgZ3JvdXBzIGRvbid0IG5lZWQgdG8gYmUgY2hhbmdlZFxuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50LnJvb3QgJiYgIXRoaXMuaXNBc3NldChub2RlVG9Nb3ZlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuaW52ZW50b3J5LnVwZGF0ZSh7XG4gICAgICAgICAgaWQ6IG5vZGVUb01vdmUubW8uaWQsXG4gICAgICAgICAgdHlwZTogR3JvdXBGcmFnbWVudC5zdWJHcm91cFR5cGVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyZW50LnJvb3QpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmludmVudG9yeS5jaGlsZEFzc2V0c1JlbW92ZShub2RlVG9Nb3ZlLm1vLCBwYXJlbnQubW8pO1xuICAgICAgfVxuICAgICAgcGFyZW50LnJlbW92ZShub2RlVG9Nb3ZlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2Fzc2V0cy1uYXZpZ2F0b3IvYXNzZXQtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxhQUFhLEVBQ2IsYUFBYSxFQUVkLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsTUFBTSxPQUFPLFNBQVUsU0FBUSxhQUFhO0lBYTFDLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLDZCQUE2QjtRQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQ2QsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNYLENBQUM7SUFDSixDQUFD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QyxFQUFFO2dCQUM1QyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztvQkFDbEMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxZQUFZO2lCQUNqQyxDQUFDLENBQUM7YUFDSjtZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUNoQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzFFO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzQjtJQUNILENBQUM7O0FBalhNLGNBQUksR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJSWRlbnRpZmllZCwgUGFnaW5nIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQ2xpY2tPcHRpb25zLFxuICBEZXZpY2VTdGF0dXNDb21wb25lbnQsXG4gIGdldHRleHQsXG4gIEdyb3VwRnJhZ21lbnQsXG4gIE5hdmlnYXRvck5vZGUsXG4gIE5hdmlnYXRvck5vZGVEYXRhXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4vYWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgQXNzZXROb2RlTW8sIEFzc2V0Tm9kZVNlcnZpY2UgfSBmcm9tICcuL2Fzc2V0LW5vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBMb2FkTW9yZU5vZGUgfSBmcm9tICcuL2xvYWQtbW9yZS1ub2RlJztcblxuZXhwb3J0IGNsYXNzIEFzc2V0Tm9kZSBleHRlbmRzIE5hdmlnYXRvck5vZGUge1xuICBzdGF0aWMgTkFNRSA9ICdBc3NldE5vZGUnO1xuICByb290OiBib29sZWFuO1xuICBtbzogYW55O1xuICBoaWRlRGV2aWNlcyA9IGZhbHNlO1xuICBmaWx0ZXJRdWVyeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBzaG93Q2hpbGREZXZpY2VzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFzc2V0IG5vZGUgY2hpbGRyZW4gKHN1YmVudHJpZXMpLlxuICAgKi9cbiAgY2hpbGRyZW46IEFzc2V0Tm9kZVtdID0gW107XG5cbiAgZ2V0IGhhc0NoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLnJvb3QgfHwgdGhpcy5zZXJ2aWNlLmlzR3JvdXAodGhpcy5tbyk7XG4gIH1cblxuICBnZXQgaXNEZXZpY2UoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5tby5jOHlfSXNEZXZpY2U7XG4gIH1cblxuICBnZXQgaXNEZXZpY2VPclByb2JhYmx5Q2hpbGREZXZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXZpY2UgfHwgdGhpcy5pc05laXRoZXJEZXZpY2VPckdyb3VwO1xuICB9XG5cbiAgZ2V0IGlzTmVpdGhlckRldmljZU9yR3JvdXAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLnNlcnZpY2UuaXNHcm91cCh0aGlzLm1vKSAmJlxuICAgICAgIXRoaXMuc2VydmljZS5pc0R5bmFtaWNHcm91cCh0aGlzLm1vKSAmJlxuICAgICAgIXRoaXMuaXNEZXZpY2UgJiZcbiAgICAgICF0aGlzLnJvb3RcbiAgICApO1xuICB9XG5cbiAgZXZlbnRzOiBTdWJqZWN0PEFjdGlvbj47XG4gIG5vZGVzRmV0Y2hlZDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJvdGVjdGVkIHBhZ2luZzogUGFnaW5nPEFzc2V0Tm9kZU1vPjtcbiAgcHJvdGVjdGVkIGxvYWRNb3JlTm9kZTogTG9hZE1vcmVOb2RlO1xuICBwcml2YXRlIG9uVXBkYXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHNlcnZpY2U6IEFzc2V0Tm9kZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNvbmZpZzogTmF2aWdhdG9yTm9kZURhdGEgPSB7fVxuICApIHtcbiAgICBzdXBlcihjb25maWcpO1xuXG4gICAgdGhpcy5yb290ID0gdGhpcy5yb290IHx8IGZhbHNlO1xuICAgIHRoaXMuaGlkZURldmljZXMgPSBjb25maWcuaGlkZURldmljZXMgPz8gdGhpcy5oaWRlRGV2aWNlcztcbiAgICB0aGlzLm1vID0gdGhpcy5tbyB8fCB7fTtcbiAgICB0aGlzLnBhdGggPSB0aGlzLmdldFBhdGgoKTtcbiAgICB0aGlzLmRyYWdnYWJsZSA9ICF0aGlzLnNlcnZpY2U/Lm1vZHVsZUNvbmZpZz8uZGlzYWJsZURyYWdBbmREcm9wICYmICF0aGlzLnJvb3Q7XG4gICAgdGhpcy5kcm9wcGFibGUgPVxuICAgICAgIXRoaXMuc2VydmljZT8ubW9kdWxlQ29uZmlnPy5kaXNhYmxlRHJhZ0FuZERyb3AgJiYgIXRoaXMuaXNEZXZpY2VPclByb2JhYmx5Q2hpbGREZXZpY2U7XG4gICAgdGhpcy5yb3V0ZXJMaW5rRXhhY3QgPSB0aGlzLnJvb3Q7XG4gICAgdGhpcy51cGRhdGVJY29uKGZhbHNlKTtcbiAgICB0aGlzLm9uVXBkYXRlU3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlXG4gICAgICAub25VcGRhdGUodGhpcylcbiAgICAgIC5zdWJzY3JpYmUoKHsgZGF0YSwgbWV0aG9kIH0pID0+IHRoaXMucmVmcmVzaChkYXRhLCBtZXRob2QpKTtcbiAgICB0aGlzLnNldExhYmVsKCk7XG4gICAgdGhpcy5pY29uQ29tcG9uZW50ID0gdGhpcy5pc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZSA/IERldmljZVN0YXR1c0NvbXBvbmVudCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFBhdGgoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5wYXRoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJvb3RcbiAgICAgID8gJ2dyb3VwJ1xuICAgICAgOiB0aGlzLmlzRGV2aWNlT3JQcm9iYWJseUNoaWxkRGV2aWNlXG4gICAgICAgID8gYGRldmljZS8ke3RoaXMubW8uaWR9YFxuICAgICAgICA6IGBncm91cC8ke3RoaXMubW8uaWR9YDtcbiAgfVxuXG4gIHJlZnJlc2gobW86IGFueSA9IHt9LCBtZXRob2QgPSAnR0VUJykge1xuICAgIGlmIChtbz8uaWQgPT09IHRoaXMubW8uaWQpIHtcbiAgICAgIHRoaXMubW8gPSBtbztcbiAgICAgIHRoaXMuc2V0TGFiZWwoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScpIHtcbiAgICAgIHRoaXMucGFyZW50cy5mb3JFYWNoKChub2RlOiBBc3NldE5vZGUpID0+IG5vZGUucmVmcmVzaCgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXZlbnRzKSB7XG4gICAgICB0aGlzLmV2ZW50cy5uZXh0KEFjdGlvbi5SRUZSRVNIKTtcbiAgICB9XG4gIH1cblxuICBzZXRMYWJlbCgpIHtcbiAgICBpZiAodGhpcy5jb25maWcubGFiZWwgfHwgdGhpcy5yb290KSB7XG4gICAgICB0aGlzLmxhYmVsID0gdGhpcy5jb25maWcubGFiZWwgfHwgZ2V0dGV4dCgnR3JvdXBzJyk7XG4gICAgICB0aGlzLnRyYW5zbGF0ZUxhYmVsID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYWJlbCA9IHRoaXMuc2VydmljZS5sYWJlbCh0aGlzLm1vKTtcbiAgICAgIHRoaXMudHJhbnNsYXRlTGFiZWwgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjbGljayhvcHRpb25zOiBDbGlja09wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0aGlzLmlzRGV2aWNlT3JQcm9iYWJseUNoaWxkRGV2aWNlICYmICF0aGlzLnNob3dDaGlsZERldmljZXMpIHtcbiAgICAgIHRoaXMuc2VydmljZS5wcmVmZXJCcmVhZGNydW1iKHRoaXMucGFyZW50cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaG9va0V2ZW50cygpO1xuICAgIHRoaXMudXBkYXRlSWNvbihvcHRpb25zLm9wZW4pO1xuICAgIGlmIChvcHRpb25zLm9wZW4pIHtcbiAgICAgIHRoaXMuZXZlbnRzLm5leHQoQWN0aW9uLkZFVENIKTtcbiAgICB9XG4gIH1cblxuICBzb3J0KCkge1xuICAgIHRoaXMuY2hpbGRyZW4uc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGEucHJpb3JpdHkgPiBiLnByaW9yaXR5KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYS5wcmlvcml0eSA8IGIucHJpb3JpdHkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZE1hbmFnZWRPYmplY3QobW8pIHtcbiAgICBjb25zdCB7IGNoaWxkQWRkaXRpb25zIH0gPSB0aGlzLm1vO1xuICAgIGlmICghdGhpcy5pc0NoaWxkQWRkaXRpb24oY2hpbGRBZGRpdGlvbnMsIG1vKSkge1xuICAgICAgdGhpcy5hZGQodGhpcy5zZXJ2aWNlLmNyZWF0ZUNoaWxkTm9kZShtbywgeyBoaWRlRGV2aWNlczogdGhpcy5oaWRlRGV2aWNlcyB9KSk7XG4gICAgfVxuICB9XG5cbiAgaXNDaGlsZEFkZGl0aW9uKGNoaWxkQWRkaXRpb25zLCBtbykge1xuICAgIHJldHVybiAoXG4gICAgICBjaGlsZEFkZGl0aW9ucyAmJiBjaGlsZEFkZGl0aW9ucy5yZWZlcmVuY2VzLnNvbWUoKHsgbWFuYWdlZE9iamVjdDogeyBpZCB9IH0pID0+IGlkID09PSBtby5pZClcbiAgICApO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLm9uVXBkYXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnZXQgY2FuRHJvcCgpIHtcbiAgICBjb25zdCBub2RlVG9Nb3ZlID0gdGhpcy5zZXJ2aWNlLmRyYWdnZWREYXRhO1xuICAgIGlmIChub2RlVG9Nb3ZlKSB7XG4gICAgICBjb25zdCBzaG91bGRHZXRDaGlsZE9mSXRzT3duID0gISFub2RlVG9Nb3ZlLmZpbmQoY2hpbGQgPT4gY2hpbGQgPT09IHRoaXMpO1xuICAgICAgY29uc3QgaXNBbHJlYWR5Q2hpbGQgPSAodGhpcy5jaGlsZHJlbiBhcyBBc3NldE5vZGVbXSkuc29tZShcbiAgICAgICAgY2hpbGQgPT4gY2hpbGQubW8gJiYgY2hpbGQubW8uaWQgPT09IG5vZGVUb01vdmUubW8uaWRcbiAgICAgICk7XG4gICAgICBjb25zdCBwcmV2ZW50TW92ZSA9IHRoaXMgPT09IG5vZGVUb01vdmUgfHwgc2hvdWxkR2V0Q2hpbGRPZkl0c093biB8fCBpc0FscmVhZHlDaGlsZDtcbiAgICAgIHJldHVybiB0aGlzLmRyb3BwYWJsZSAmJiAhcHJldmVudE1vdmUgJiYgdGhpcy5zZXJ2aWNlLmNhbkRyb3BOb2RlKHRoaXMucm9vdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRyb3BwYWJsZTtcbiAgfVxuXG4gIGRyYWdTdGFydCgkZXZlbnQpIHtcbiAgICBzdXBlci5kcmFnU3RhcnQoJGV2ZW50KTtcbiAgICB0aGlzLnNlcnZpY2UuZHJhZ2dlZERhdGEgPSB0aGlzO1xuICAgIHRoaXMuc2VydmljZS5yb290Tm9kZS5kcm9wcGFibGUgPSAhdGhpcy5pc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZTtcbiAgfVxuXG4gIGRyYWdFbmQoJGV2ZW50KSB7XG4gICAgc3VwZXIuZHJhZ0VuZCgkZXZlbnQpO1xuICB9XG5cbiAgYXN5bmMgZHJvcCgkZXZlbnQpIHtcbiAgICBjb25zdCBub2RlVG9Nb3ZlID0gdGhpcy5zZXJ2aWNlLmRyYWdnZWREYXRhO1xuXG4gICAgLy8gVE9ETyByZW1vdmUgd2hlbiBhc3NldCB0eXBlIG5vZGUgY2FuIGJlIHVzZWQgb24gdGhlIHJvb3QgbGV2ZWwuXG4gICAgaWYgKHRoaXMucm9vdCAmJiB0aGlzLmlzQXNzZXQobm9kZVRvTW92ZSkpIHtcbiAgICAgIHRoaXMuc2VydmljZS5hbGVydC5pbmZvKGdldHRleHQoJ0Fzc2V0IHR5cGUgbm9kZSBjYW5ub3QgYmVjb21lIHJvb3Qgbm9kZS4nKSk7XG4gICAgICB0aGlzLmRyYWdnZWRIb3ZlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXJ2aWNlLmRyYWdnZWREYXRhID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmRyb3AoJGV2ZW50KTtcbiAgICBpZiAodGhpcy5jYW5Ecm9wKSB7XG4gICAgICBhd2FpdCB0aGlzLm1vdmVOb2RlKG5vZGVUb01vdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyYWdnZWRIb3ZlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXJ2aWNlLmRyYWdnZWREYXRhID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGhvb2tFdmVudHMoKSB7XG4gICAgaWYgKCF0aGlzLmV2ZW50cykge1xuICAgICAgdGhpcy5ldmVudHMgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgdGhpcy5ldmVudHMuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFdmVudChldnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gQXNzZXROb2RlLk5BTUU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IG5vZGUgaGFzIGNoaWxkIGRldmljZXMuXG4gICAqL1xuICBoYXNDaGlsZERldmljZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubW8gJiYgdGhpcy5tby5jOHlfSXNEZXZpY2UgJiYgdGhpcy5tby5jaGlsZERldmljZXMucmVmZXJlbmNlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZldGNoKCkge1xuICAgIHJldHVybiB0aGlzLnJvb3RcbiAgICAgID8gdGhpcy5zZXJ2aWNlLmdldFJvb3ROb2RlcygpXG4gICAgICA6IHRoaXMuc2VydmljZS5nZXRHcm91cEl0ZW1zKFxuICAgICAgICAgIHRoaXMubW8uaWQsXG4gICAgICAgICAgdGhpcy5oaWRlRGV2aWNlc1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgcXVlcnk6IGAkZmlsdGVyPShoYXMoJHtHcm91cEZyYWdtZW50Lmdyb3VwRnJhZ21lbnRUeXBlfSkpJG9yZGVyYnk9bmFtZWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fVxuICAgICAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZUljb24ob3Blbikge1xuICAgIHRoaXMuaWNvbiA9IGF3YWl0IHRoaXMuc2VydmljZS5pY29uKFxuICAgICAgLy8gaWYgaXQncyByb290IHdlIGFyZSBnb2luZyB0byBwYXNzIGEgZmFrZSBtbyB0byBnZXQgdGhlIHNhbWUgaWNvbiBhcyBncm91cHNcbiAgICAgIHRoaXMucm9vdCA/IHsgYzh5X0lzRGV2aWNlR3JvdXA6IHt9IH0gOiB0aGlzLm1vLFxuICAgICAgb3BlblxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY291bnRDaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlRXZlbnQoZXZ0OiBBY3Rpb24pIHtcbiAgICBpZiAoIXRoaXMuY291bnRDaGlsZHJlbigpICYmIGV2dCA9PT0gQWN0aW9uLkZFVENIKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hZGROb2Rlcyhhd2FpdCB0aGlzLmZldGNoKCkpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChldnQgPT09IEFjdGlvbi5ORVhUKSB7XG4gICAgICB0aGlzLmxvYWRNb3JlTm9kZS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWRkTm9kZXMoYXdhaXQgdGhpcy5wYWdpbmcubmV4dCgpKTtcbiAgICAgIHRoaXMubG9hZE1vcmVOb2RlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGV2dCA9PT0gQWN0aW9uLlJFRlJFU0gpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5wYWdpbmcgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmxvYWRNb3JlTm9kZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZW1wdHkoKTtcbiAgICAgIHRoaXMuZXZlbnRzLm5leHQoQWN0aW9uLkZFVENIKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTm9kZXMocmVzKSB7XG4gICAgaWYgKHJlcy5wYWdpbmcpIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFBhZ2UsIG5leHRQYWdlLCBwYWdlU2l6ZSB9ID0gKHRoaXMucGFnaW5nID0gcmVzLnBhZ2luZyk7XG4gICAgICBpZiAoY3VycmVudFBhZ2UgPT09IDEpIHtcbiAgICAgICAgdGhpcy5lbXB0eSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbXNDb3VudCA9IHJlcy5kYXRhLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1vcmVJdGVtc0F2YWlsYWJsZSA9ICEhbmV4dFBhZ2UgJiYgaXRlbXNDb3VudCA9PT0gcGFnZVNpemU7XG4gICAgICB0aGlzLnRvZ2dsZUxvYWRNb3JlKG1vcmVJdGVtc0F2YWlsYWJsZSk7XG4gICAgfVxuICAgIChyZXMuZGF0YSB8fCByZXMpLm1hcChtbyA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRNYW5hZ2VkT2JqZWN0KG1vKTtcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50cy5uZXh0KEFjdGlvbi5MT0FESU5HX0RPTkUpO1xuICAgIHRoaXMubm9kZXNGZXRjaGVkLm5leHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVMb2FkTW9yZShzaG93OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmxvYWRNb3JlTm9kZSAmJiBzaG93KSB7XG4gICAgICB0aGlzLmxvYWRNb3JlTm9kZSA9IG5ldyBMb2FkTW9yZU5vZGUoKTtcbiAgICAgIHRoaXMuYWRkKHRoaXMubG9hZE1vcmVOb2RlKTtcbiAgICAgIHRoaXMubG9hZE1vcmVOb2RlLmNsaWNrID0gZGVib3VuY2UoKCkgPT4gdGhpcy5ldmVudHMubmV4dChBY3Rpb24uTkVYVCksIDMwMCwge1xuICAgICAgICBsZWFkaW5nOiB0cnVlLFxuICAgICAgICB0cmFpbGluZzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvYWRNb3JlTm9kZSkge1xuICAgICAgdGhpcy5sb2FkTW9yZU5vZGUuaGlkZGVuID0gIXNob3c7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtb3ZlTm9kZShub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaXNDb3B5ID0gYXdhaXQgdGhpcy5zaG93RHJvcENvbmZpcm0obm9kZVRvTW92ZSk7XG4gICAgICBhd2FpdCB0aGlzLnZlcmlmeU5vZGVBY2Nlc3Mobm9kZVRvTW92ZSk7XG4gICAgICBhd2FpdCB0aGlzLmFkZE1vdmVkTm9kZShub2RlVG9Nb3ZlKTtcbiAgICAgIGlmICghaXNDb3B5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlTW92ZWROb2RlKG5vZGVUb01vdmUpO1xuICAgICAgfVxuICAgICAgdGhpcy5leHBhbmQoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuc2VydmljZS5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kcmFnZ2VkSG92ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VydmljZS5kcmFnZ2VkRGF0YSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dEcm9wQ29uZmlybShub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICB0aGlzLmNvbmZpcm0udGl0bGUgPSBnZXR0ZXh0KCdNb3ZlJyk7XG4gICAgdGhpcy5jb25maXJtLm1lc3NhZ2UgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBtb3ZlIHRoZSBncm91cD8nKTtcbiAgICBjb25zdCBidXR0b25zOiBhbnkgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDYW5jZWwnKSxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBQcm9taXNlLnJlamVjdCgpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogZ2V0dGV4dCgnTW92ZScpLFxuICAgICAgICBzdGF0dXM6ICdkZWZhdWx0JyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpXG4gICAgICB9XG4gICAgXTtcbiAgICBpZiAobm9kZVRvTW92ZS5pc0RldmljZU9yUHJvYmFibHlDaGlsZERldmljZSkge1xuICAgICAgdGhpcy5jb25maXJtLnRpdGxlID0gZ2V0dGV4dCgnTW92ZSBvciBhZGQnKTtcbiAgICAgIHRoaXMuY29uZmlybS5tZXNzYWdlID0gZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gbW92ZSBvciBhZGQgdGhlIGRldmljZT8nKTtcbiAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBZGQnKSxcbiAgICAgICAgc3RhdHVzOiAncHJpbWFyeScsXG4gICAgICAgIGFjdGlvbjogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHRydWUpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlybS5zaG93KGJ1dHRvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2ZXJpZnlOb2RlQWNjZXNzKG5vZGVUb01vdmU6IEFzc2V0Tm9kZSkge1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuaW52ZW50b3J5LnVwZGF0ZSh7IGlkOiBub2RlVG9Nb3ZlLm1vLmlkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRNb3ZlZE5vZGUobm9kZVRvTW92ZTogQXNzZXROb2RlKSB7XG4gICAgbGV0IG1vOiBJSWRlbnRpZmllZDtcblxuICAgIGlmICh0aGlzLnJvb3QgJiYgIXRoaXMuaXNBc3NldChub2RlVG9Nb3ZlKSkge1xuICAgICAgbW8gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5pbnZlbnRvcnkudXBkYXRlKHtcbiAgICAgICAgICBpZDogbm9kZVRvTW92ZS5tby5pZCxcbiAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwVHlwZVxuICAgICAgICB9KVxuICAgICAgKS5kYXRhO1xuXG4gICAgICB0aGlzLmFkZE1hbmFnZWRPYmplY3QobW8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vID0gKGF3YWl0IHRoaXMuc2VydmljZS5pbnZlbnRvcnkuY2hpbGRBc3NldHNBZGQobm9kZVRvTW92ZS5tbywgdGhpcy5tbykpLmRhdGE7XG4gICAgdGhpcy5hZGRNYW5hZ2VkT2JqZWN0KG1vKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBc3NldChub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICAvLyBUT0RPIHVzZSBpc0Fzc2V0IGNoZWNrIHdoZW4gaHR0cHM6Ly9naXRodWIuc29mdHdhcmVhZy5jb20vSU9UQS9jdW11bG9jaXR5LXVpL3B1bGwvNjkwIGlzIG1lcmdlZC5cbiAgICAvLyBEbyBub3Qgb3ZlcnJpZGUgYXNzZXQgdHlwZSFcbiAgICByZXR1cm4gbm9kZVRvTW92ZS5tbz8uYzh5X0lzQXNzZXQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZU1vdmVkTm9kZShub2RlVG9Nb3ZlOiBBc3NldE5vZGUpIHtcbiAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiBub2RlVG9Nb3ZlLnBhcmVudHMgYXMgQXNzZXROb2RlW10pIHtcbiAgICAgIGlmIChwYXJlbnQubW8gJiYgcGFyZW50Lm1vLnR5cGUgPT09IEdyb3VwRnJhZ21lbnQuZHluYW1pY0dyb3VwVHlwZSkge1xuICAgICAgICBicmVhazsgLy8gc21hcnQgZ3JvdXBzIGRvbid0IG5lZWQgdG8gYmUgY2hhbmdlZFxuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50LnJvb3QgJiYgIXRoaXMuaXNBc3NldChub2RlVG9Nb3ZlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuaW52ZW50b3J5LnVwZGF0ZSh7XG4gICAgICAgICAgaWQ6IG5vZGVUb01vdmUubW8uaWQsXG4gICAgICAgICAgdHlwZTogR3JvdXBGcmFnbWVudC5zdWJHcm91cFR5cGVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyZW50LnJvb3QpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmludmVudG9yeS5jaGlsZEFzc2V0c1JlbW92ZShub2RlVG9Nb3ZlLm1vLCBwYXJlbnQubW8pO1xuICAgICAgfVxuICAgICAgcGFyZW50LnJlbW92ZShub2RlVG9Nb3ZlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -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, Permissions } from '@c8y/ngx-components';
|
|
3
|
+
import { AlertService, AppStateService, BreadcrumbService, GroupFragment, ModalService, OptionsService, ViewContext, Permissions, gettext } from '@c8y/ngx-components';
|
|
4
4
|
import { ApiService } from '@c8y/ngx-components/api';
|
|
5
5
|
import { empty } from 'rxjs';
|
|
6
6
|
import { filter, first, mergeMap } from 'rxjs/operators';
|
|
@@ -10,14 +10,16 @@ import { DynamicGroupNode } from './dynamic-group-node';
|
|
|
10
10
|
import { DeviceGroupService } from './group.service';
|
|
11
11
|
import { ActivationEnd, Router } from '@angular/router';
|
|
12
12
|
import { Action } from './action.enum';
|
|
13
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
15
|
import * as i1 from "@c8y/client";
|
|
15
16
|
import * as i2 from "@c8y/ngx-components/api";
|
|
16
17
|
import * as i3 from "@c8y/ngx-components";
|
|
17
18
|
import * as i4 from "./group.service";
|
|
18
19
|
import * as i5 from "@angular/router";
|
|
20
|
+
import * as i6 from "@ngx-translate/core";
|
|
19
21
|
export class AssetNodeService {
|
|
20
|
-
constructor(inventory, apiService, modal, alert, breadcrumbService, user, appState, optionsService, moduleConfig, deviceGroupService, router) {
|
|
22
|
+
constructor(inventory, apiService, modal, alert, breadcrumbService, user, appState, optionsService, moduleConfig, deviceGroupService, router, translateService) {
|
|
21
23
|
this.inventory = inventory;
|
|
22
24
|
this.apiService = apiService;
|
|
23
25
|
this.modal = modal;
|
|
@@ -29,6 +31,7 @@ export class AssetNodeService {
|
|
|
29
31
|
this.moduleConfig = moduleConfig;
|
|
30
32
|
this.deviceGroupService = deviceGroupService;
|
|
31
33
|
this.router = router;
|
|
34
|
+
this.translateService = translateService;
|
|
32
35
|
this.firstUrl = true;
|
|
33
36
|
this.PAGE_SIZE = 20;
|
|
34
37
|
this.moduleConfig = {
|
|
@@ -87,6 +90,12 @@ export class AssetNodeService {
|
|
|
87
90
|
});
|
|
88
91
|
}
|
|
89
92
|
}
|
|
93
|
+
label(mo) {
|
|
94
|
+
return (mo.name ||
|
|
95
|
+
(this.isDevice(mo) &&
|
|
96
|
+
this.translateService.instant(gettext('Device {{id}}'), { id: mo.id })) ||
|
|
97
|
+
'--');
|
|
98
|
+
}
|
|
90
99
|
icon(mo, open) {
|
|
91
100
|
return this.deviceGroupService.icon(mo, open);
|
|
92
101
|
}
|
|
@@ -326,7 +335,7 @@ export class AssetNodeService {
|
|
|
326
335
|
return combinedQuery;
|
|
327
336
|
}
|
|
328
337
|
}
|
|
329
|
-
AssetNodeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AssetNodeService, deps: [{ token: i1.InventoryService }, { token: i2.ApiService }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i3.BreadcrumbService }, { token: i1.UserService }, { token: i3.AppStateService }, { token: i3.OptionsService }, { token: ASSET_NAVIGATOR_CONFIG, optional: true }, { token: i4.DeviceGroupService }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
338
|
+
AssetNodeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AssetNodeService, deps: [{ token: i1.InventoryService }, { token: i2.ApiService }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i3.BreadcrumbService }, { token: i1.UserService }, { token: i3.AppStateService }, { token: i3.OptionsService }, { token: ASSET_NAVIGATOR_CONFIG, optional: true }, { token: i4.DeviceGroupService }, { token: i5.Router }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
330
339
|
AssetNodeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AssetNodeService, providedIn: 'root' });
|
|
331
340
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AssetNodeService, decorators: [{
|
|
332
341
|
type: Injectable,
|
|
@@ -338,5 +347,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
338
347
|
}, {
|
|
339
348
|
type: Inject,
|
|
340
349
|
args: [ASSET_NAVIGATOR_CONFIG]
|
|
341
|
-
}] }, { type: i4.DeviceGroupService }, { type: i5.Router }]; } });
|
|
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==
|
|
350
|
+
}] }, { type: i4.DeviceGroupService }, { type: i5.Router }, { type: i6.TranslateService }]; } });
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbm9kZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1ub2RlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQVcsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFlBQVksRUFHWixjQUFjLEVBQ2QsV0FBVyxFQUNYLFdBQVcsRUFDWCxPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBd0Isc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQTBCLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7OztBQVV2RCxNQUFNLE9BQU8sZ0JBQWdCO0lBTzNCLFlBQ1MsU0FBMkIsRUFDM0IsVUFBc0IsRUFDdEIsS0FBbUIsRUFDbkIsS0FBbUIsRUFDaEIsaUJBQW9DLEVBQ3BDLElBQWlCLEVBQ2pCLFFBQXlCLEVBQ3pCLGNBQThCLEVBQ1csWUFBa0MsRUFDM0Usa0JBQXNDLEVBQ3RDLE1BQWMsRUFDZCxnQkFBa0M7UUFYckMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDaEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNXLGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQUMzRSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBakI5QyxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBR04sY0FBUyxHQUFHLEVBQUUsQ0FBQztRQWdCdkIsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLEdBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1NBQ3hCLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFFckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2FBQ2YsSUFBSSxDQUNILE1BQU0sQ0FDSixDQUFDLEtBQW9CLEVBQUUsRUFBRSxDQUN2QixLQUFLLFlBQVksYUFBYSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FDckUsRUFDRCxLQUFLLEVBQUUsQ0FDUjthQUNBLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQWdDO1FBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLE9BQU87U0FDUjtRQUNELElBQ0UsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssV0FBVyxDQUFDLEtBQUs7WUFDNUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssV0FBVyxDQUFDLE1BQU0sRUFDN0M7WUFDQSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDdEUsV0FBVyxFQUFFLElBQUk7YUFDbEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSx5QkFBeUIsR0FBRztnQkFDaEMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUU7b0JBQ3hELE9BQU8sYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQyxDQUFDO2dCQUNGLElBQUksQ0FBQyxFQUFFO2FBQ1IsQ0FBQztZQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQ3pELE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsSUFBZSxFQUFFLEdBQWE7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNO2lCQUNSLElBQUksQ0FDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUNoRCxLQUFLLEVBQUUsQ0FDUjtpQkFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0QsQ0FBQztnQkFDRixJQUFJLFlBQVksRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FDWixZQUFZLEVBQ1osR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUM1QyxDQUFDO2lCQUNIO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsRUFBa0I7UUFDdEIsT0FBTyxDQUNMLEVBQUUsQ0FBQyxJQUFJO1lBQ1AsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLEVBQWtCLEVBQUUsSUFBYztRQUNyQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxPQUFPLENBQUMsRUFBa0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxjQUFjLENBQUMsRUFBa0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxZQUFZLENBQUMsRUFBa0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFrQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQWtCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQTRCLEVBQUU7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ25DLElBQUksRUFBRSxJQUFJO1lBQ1YsR0FBRyxNQUFNO1lBQ1QsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCO1lBQzVDLFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsTUFBTTtRQUMzQixPQUFPLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBMEI7UUFDeEMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWUsQ0FBQyxhQUFhLEVBQUUsTUFBMEI7UUFDdkQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQztRQUMvQixNQUFNLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQztRQUMxQixJQUFJLElBQUksS0FBSyxhQUFhLENBQUMsZ0JBQWdCLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFlBQVksQ0FBQyxZQUFrQjtRQUM3QixNQUFNLGFBQWEsR0FBRztZQUNwQixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDeEIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUI7WUFDckQsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzlELENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFFMUQsNkdBQTZHO1FBQzdHLElBQ0UsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDckQsV0FBVyxDQUFDLG1CQUFtQjtZQUMvQixXQUFXLENBQUMsd0JBQXdCO1NBQ3JDLENBQUMsRUFDRjtZQUNBLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtnQkFDekIsWUFBWSxFQUFFLGFBQWEsQ0FBQyxpQkFBaUI7Z0JBQzdDLFNBQVMsRUFBRSxJQUFJO2FBQ2hCLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGlCQUFpQixDQUFDLFlBQWtCO1FBQ2xDLE1BQU0sYUFBYSxHQUFHO1lBQ3BCLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN4QixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxhQUFhLENBQUMsSUFBWSxFQUFFLGNBQXNCLEVBQUUsRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUFFLFdBQVcsR0FBRyxFQUFFO1FBQzFGLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLFlBQVk7WUFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDO1NBQ2hELENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsb0JBQW9CLENBQUMsWUFBWSxHQUFHLEtBQUssRUFBRSxXQUFXLEdBQUcsRUFBRTtRQUN6RCxNQUFNLFdBQVcsR0FBUTtZQUN2QixZQUFZLEVBQUUsY0FBYztZQUM1QixTQUFTLEVBQUUsSUFBSTtZQUNmLFlBQVk7WUFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDeEIsQ0FBQyxFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLENBQUM7U0FDbEQsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxVQUFrQixFQUFFLFlBQWlCLEVBQUU7UUFDMUQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUM1QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxXQUFXLEdBQUc7WUFDbEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO1lBQ3BELEdBQUcsV0FBVztTQUNmLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsSUFBWSxFQUNaLGNBQXNCLEVBQUUsRUFDeEIsV0FBVyxHQUFHLEVBQUUsRUFDaEIsWUFBWSxHQUFHLEtBQUs7UUFFcEIsTUFBTSxXQUFXLEdBQUc7WUFDbEIsWUFBWTtZQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7U0FDaEQsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELDRCQUE0QixDQUFDLFdBQVc7UUFDdEMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRCxnQ0FBZ0M7UUFDaEMsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBRXhDLDhFQUE4RTtRQUM5RSxPQUFPLFVBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDcEUsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVksRUFBRSxXQUFvQjtRQUNqRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU8sc0JBQXNCLElBQUksaUJBQWlCLENBQUM7U0FDcEQ7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUI7WUFDMUQsQ0FBQyxDQUFDO2dCQUNFLFFBQVEsRUFBRTtvQkFDUixJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVM7aUJBQzlCO2dCQUNELFNBQVMsRUFBRSxFQUFFO2FBQ2Q7WUFDSCxDQUFDLENBQUM7Z0JBQ0UsUUFBUSxFQUFFO29CQUNSLEtBQUssRUFBRSxhQUFhLENBQUMsaUJBQWlCO2lCQUN2QztnQkFDRCxTQUFTLEVBQUUsRUFBRTthQUNkLENBQUM7UUFDTixJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDNUIsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFFBQVEsRUFBRTtvQkFDUixLQUFLLEVBQUU7d0JBQ0w7NEJBQ0UsSUFBSSxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0I7eUJBQ3JDO3dCQUNEOzRCQUNFLEtBQUssRUFBRSxhQUFhLENBQUMsb0JBQW9CO3lCQUMxQzt3QkFDRCxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQyxvQkFBb0IsWUFBWSxFQUFFLEVBQUU7cUJBQ3hFO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFO1FBQ25CLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNULE9BQU8sSUFBSSxDQUFDLFVBQVU7aUJBQ25CLFlBQVksQ0FDWCxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FDbEIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxpRUFBaUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNuRixHQUFHLENBQ0osQ0FDSjtpQkFDQSxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLEVBQ3ZDLFFBQVEsQ0FBQyxDQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBMkIsQ0FBQSxDQUFDLEVBQ3JELE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FDbkQsQ0FBQztTQUNMO2FBQU0sSUFBSSxJQUFJLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQyxVQUFVO2lCQUNuQixZQUFZLENBQ1gsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQ2xCLE1BQU0sQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQ3BGLE1BQU0sS0FBSyxNQUFNLENBQ3BCO2lCQUNBLElBQUksQ0FDSCxRQUFRLENBQUMsQ0FBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQTJCLENBQUEsQ0FBQyxFQUNyRCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDMUQsQ0FBQztTQUNMO2FBQU07WUFDTCxPQUFPLEtBQUssRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQTZDLEVBQUU7UUFDcEUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFeEIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDNUIsV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtnQkFDakQsV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDMUQ7U0FDRjtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsVUFBbUI7UUFDN0IsT0FBTyxDQUNMLENBQUMsVUFBVTtZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtnQkFDcEQsV0FBVyxDQUFDLG9CQUFvQjtnQkFDaEMsV0FBVyxDQUFDLHlCQUF5QjthQUN0QyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsT0FBd0I7UUFDdkMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVTLFlBQVksQ0FBQyxjQUFtQixFQUFFO1FBQzFDLE1BQU0sTUFBTSxHQUFHO1lBQ2IsV0FBVyxFQUFFLENBQUM7WUFDZCxjQUFjLEVBQUUsSUFBSTtZQUNwQixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFDRixPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLE1BQU07UUFDdkMsSUFBSSxhQUFhLENBQUM7UUFDbEIsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFO1lBQ3BCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUM5QztvQkFDRSxzQkFBc0IsRUFBRSxNQUFNO2lCQUMvQjtnQkFDRDtvQkFDRSxzQkFBc0IsRUFBRSxNQUFNO2lCQUMvQjthQUNGLENBQUMsQ0FBQztZQUNILE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoRixhQUFhLEdBQUcsR0FBRyxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7U0FDbEQ7YUFBTTtZQUNMLGFBQWEsR0FBRyxNQUFNLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQztTQUN4QztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7OzZHQTdZVSxnQkFBZ0IsNlBBZ0JMLHNCQUFzQjtpSEFoQmpDLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBaUJJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElSZXN1bHQsIFF1ZXJpZXNVdGlsLCBVc2VyU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCcmVhZGNydW1iU2VydmljZSxcbiAgR3JvdXBGcmFnbWVudCxcbiAgTW9kYWxTZXJ2aWNlLFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JOb2RlRGF0YSxcbiAgT3B0aW9uc1NlcnZpY2UsXG4gIFZpZXdDb250ZXh0LFxuICBQZXJtaXNzaW9ucyxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBlbXB0eSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBc3NldE5vZGUgfSBmcm9tICcuL2Fzc2V0LW5vZGUnO1xuaW1wb3J0IHsgQXNzZXROYXZpZ2F0b3JDb25maWcsIEFTU0VUX05BVklHQVRPUl9DT05GSUcgfSBmcm9tICcuL2Fzc2V0LW5vZGUtY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IER5bmFtaWNHcm91cE5vZGUgfSBmcm9tICcuL2R5bmFtaWMtZ3JvdXAtbm9kZSc7XG5pbXBvcnQgeyBEZXZpY2VHcm91cFNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQWN0aXZhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4vYWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0Tm9kZU1vIHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBc3NldE5vZGVTZXJ2aWNlIHtcbiAgcm9vdE5vZGU6IEFzc2V0Tm9kZTtcbiAgZmlyc3RVcmwgPSB0cnVlO1xuICBkcmFnZ2VkRGF0YTogQXNzZXROb2RlO1xuICBxdWVyaWVzVXRpbDogUXVlcmllc1V0aWw7XG4gIHByb3RlY3RlZCBQQUdFX1NJWkUgPSAyMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHB1YmxpYyBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlLFxuICAgIHB1YmxpYyBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHB1YmxpYyBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBicmVhZGNydW1iU2VydmljZTogQnJlYWRjcnVtYlNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXI6IFVzZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBU1NFVF9OQVZJR0FUT1JfQ09ORklHKSBwdWJsaWMgbW9kdWxlQ29uZmlnOiBBc3NldE5hdmlnYXRvckNvbmZpZyxcbiAgICBwcm90ZWN0ZWQgZGV2aWNlR3JvdXBTZXJ2aWNlOiBEZXZpY2VHcm91cFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubW9kdWxlQ29uZmlnID0ge1xuICAgICAgcm9vdE5vZGVQcmlvcml0eTogMjAwMCxcbiAgICAgIC4uLihtb2R1bGVDb25maWcgfHwge30pXG4gICAgfTtcbiAgICB0aGlzLnF1ZXJpZXNVdGlsID0gbmV3IFF1ZXJpZXNVdGlsKCk7XG5cbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgKGV2ZW50OiBBY3RpdmF0aW9uRW5kKSA9PlxuICAgICAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kICYmIGV2ZW50LnNuYXBzaG90LmRhdGE/LmNvbnRleHREYXRhXG4gICAgICAgICksXG4gICAgICAgIGZpcnN0KClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgc25hcHNob3QgfSkgPT4ge1xuICAgICAgICB0aGlzLmV4cGFuZE5vZGVzT25TdGFydChzbmFwc2hvdCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmRzIHRoZSBuYXZpZ2F0b3Igbm9kZXMgb24gZmlyc3QgbmF2aWdhdGlvbi5cbiAgICogQHBhcmFtIHNuYXBzaG90IFRoZSBjdXJyZW50IG5hdmlnYXRpb24gc25hcHNob3QuXG4gICAqL1xuICBhc3luYyBleHBhbmROb2Rlc09uU3RhcnQoc25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMucm9vdE5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgc25hcHNob3QuZGF0YT8uY29udGV4dCA9PT0gVmlld0NvbnRleHQuR3JvdXAgfHxcbiAgICAgIHNuYXBzaG90LmRhdGE/LmNvbnRleHQgPT09IFZpZXdDb250ZXh0LkRldmljZVxuICAgICkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YSwge1xuICAgICAgICB3aXRoUGFyZW50czogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFsbE1hbmFnZWRPYmplY3RQYXJlbnRJZHMgPSBbXG4gICAgICAgIC4uLmRhdGEuYXNzZXRQYXJlbnRzLnJlZmVyZW5jZXMubWFwKCh7IG1hbmFnZWRPYmplY3QgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBtYW5hZ2VkT2JqZWN0LmlkO1xuICAgICAgICB9KSxcbiAgICAgICAgZGF0YS5pZFxuICAgICAgXTtcbiAgICAgIHRoaXMuZXhwYW5kQWxsKHRoaXMucm9vdE5vZGUsIGFsbE1hbmFnZWRPYmplY3RQYXJlbnRJZHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vZHVsZUNvbmZpZy5vcGVuT25TdGFydCkge1xuICAgICAgdGhpcy5leHBhbmRBbGwodGhpcy5yb290Tm9kZSwgW10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmRzIGFsbCB0aGUgZ2l2ZW4gaWRzIHJlY3Vyc2l2ZWx5LiBTdG9wcyBpZiBpdCBkb2VzIG5vdCBmaW5kIGFueS5cbiAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgd2hlcmUgdGhlIGV4cGFuZGluZyBzaG91bGQgYmUgc3RhcnRlZFxuICAgKiBAcGFyYW0gaWRzIFRoZSBpZHMgdGhhdCBzaG91bGQgYmUgZXhwYW5kZWQuXG4gICAqL1xuICBleHBhbmRBbGwobm9kZTogQXNzZXROb2RlLCBpZHM6IHN0cmluZ1tdKSB7XG4gICAgbm9kZS5vcGVuID0gdHJ1ZTtcbiAgICBub2RlLmNsaWNrKHsgb3BlbjogdHJ1ZSB9KTtcbiAgICBpZiAobm9kZS5ldmVudHMpIHtcbiAgICAgIG5vZGUuZXZlbnRzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcihhY3Rpb24gPT4gYWN0aW9uID09PSBBY3Rpb24uTE9BRElOR19ET05FKSxcbiAgICAgICAgICBmaXJzdCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9kZVRvRXhwYW5kID0gbm9kZS5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgY2hpbGROb2RlID0+IGNoaWxkTm9kZS5tbz8uaWQgJiYgaWRzLmluY2x1ZGVzKGNoaWxkTm9kZS5tby5pZClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChub2RlVG9FeHBhbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKFxuICAgICAgICAgICAgICBub2RlVG9FeHBhbmQsXG4gICAgICAgICAgICAgIGlkcy5maWx0ZXIoaWQgPT4gaWQgIT09IG5vZGVUb0V4cGFuZC5tby5pZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsYWJlbChtbzogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBtby5uYW1lIHx8XG4gICAgICAodGhpcy5pc0RldmljZShtbykgJiZcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnRGV2aWNlIHt7aWR9fScpLCB7IGlkOiBtby5pZCB9KSkgfHxcbiAgICAgICctLSdcbiAgICApO1xuICB9XG5cbiAgaWNvbihtbzogSU1hbmFnZWRPYmplY3QsIG9wZW4/OiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaWNvbihtbywgb3Blbik7XG4gIH1cblxuICBpc0dyb3VwKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0dyb3VwKG1vKTtcbiAgfVxuXG4gIGlzRHluYW1pY0dyb3VwKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0R5bmFtaWNHcm91cChtbyk7XG4gIH1cblxuICBpc0RhdGFCcm9rZXIobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGF0YUJyb2tlcihtbyk7XG4gIH1cblxuICBpc0RhdGFCcm9rZXJBY3RpdmUobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGF0YUJyb2tlckFjdGl2ZShtbyk7XG4gIH1cblxuICBpc0Fzc2V0KG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0Fzc2V0KG1vKTtcbiAgfVxuXG4gIGlzQW55R3JvdXAobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzQW55R3JvdXAobW8pO1xuICB9XG5cbiAgaXNEZXZpY2UobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGV2aWNlKG1vKTtcbiAgfVxuXG4gIGNyZWF0ZVJvb3ROb2RlKGNvbmZpZzogTmF2aWdhdG9yTm9kZURhdGEgPSB7fSkge1xuICAgIHRoaXMucm9vdE5vZGUgPSB0aGlzLmNyZWF0ZUFzc2V0Tm9kZSh7XG4gICAgICByb290OiB0cnVlLFxuICAgICAgLi4uY29uZmlnLFxuICAgICAgcHJpb3JpdHk6IHRoaXMubW9kdWxlQ29uZmlnLnJvb3ROb2RlUHJpb3JpdHksXG4gICAgICBmZWF0dXJlSWQ6ICdncm91cHMnXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucm9vdE5vZGU7XG4gIH1cblxuICBjcmVhdGVEeW5hbWljR3JvdXBOb2RlKGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgRHluYW1pY0dyb3VwTm9kZSh0aGlzLCBjb25maWcpO1xuICB9XG5cbiAgY3JlYXRlQXNzZXROb2RlKGNvbmZpZzogUGFydGlhbDxBc3NldE5vZGU+KSB7XG4gICAgcmV0dXJuIG5ldyBBc3NldE5vZGUodGhpcywgY29uZmlnKTtcbiAgfVxuXG4gIGNyZWF0ZUNoaWxkTm9kZShtYW5hZ2VkT2JqZWN0LCBjb25maWc6IFBhcnRpYWw8QXNzZXROb2RlPikge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gbWFuYWdlZE9iamVjdDtcbiAgICBjb25maWcubW8gPSBtYW5hZ2VkT2JqZWN0O1xuICAgIGlmICh0eXBlID09PSBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cFR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUR5bmFtaWNHcm91cE5vZGUoY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlQXNzZXROb2RlKGNvbmZpZyk7XG4gIH1cblxuICBnZXRSb290Tm9kZXMoY3VzdG9tRmlsdGVyPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0ge1xuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZSxcbiAgICAgIG9ubHlSb290czogIXRoaXMub3B0aW9uc1NlcnZpY2UuZGlzYWJsZU9ubHlSb290c1F1ZXJ5LFxuICAgICAgcXVlcnk6IHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeSh0aGlzLm5hdlJvb3RRdWVyeUZpbHRlcigpKVxuICAgIH07XG4gICAgY29uc3QgZ3JvdXBGaWx0ZXIgPSB7IC4uLmRlZmF1bHRGaWx0ZXIsIC4uLmN1c3RvbUZpbHRlciB9O1xuXG4gICAgLy8gZHVlIHRvIEJFIHBlcmZvcm1hbmNlIGxpbWl0YXRpb25zIHdlIGRvIG5vdCBhbGxvdyBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgZm9yIGEgdXNlciB3aXRob3V0IGludmVudG9yeSByb2xlc1xuICAgIGlmIChcbiAgICAgICF0aGlzLnVzZXIuaGFzQW55Um9sZSh0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlLCBbXG4gICAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX1JFQUQsXG4gICAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfUkVBRFxuICAgICAgXSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBncm91cEZpbHRlci5xdWVyeTtcbiAgICAgIE9iamVjdC5hc3NpZ24oZ3JvdXBGaWx0ZXIsIHtcbiAgICAgICAgZnJhZ21lbnRUeXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwRnJhZ21lbnRUeXBlLFxuICAgICAgICBvbmx5Um9vdHM6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh0aGlzLmNyZWF0ZUZpbHRlcihncm91cEZpbHRlcikpO1xuICB9XG5cbiAgZ2V0QWxsSW52ZW50b3JpZXMoY3VzdG9tRmlsdGVyPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0ge1xuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgZ3JvdXBGaWx0ZXIgPSB7IC4uLmRlZmF1bHRGaWx0ZXIsIC4uLmN1c3RvbUZpbHRlciB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHRoaXMuY3JlYXRlRmlsdGVyKGdyb3VwRmlsdGVyKSk7XG4gIH1cblxuICBnZXRHcm91cEl0ZW1zKG1vSWQ6IHN0cmluZywgZXh0cmFGaWx0ZXI6IG9iamVjdCA9IHt9LCB3aXRoQ2hpbGRyZW4gPSBmYWxzZSwgZmlsdGVyUXVlcnkgPSAnJykge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyID0ge1xuICAgICAgd2l0aENoaWxkcmVuLFxuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgcXVlcnk6IHRoaXMuZ3JvdXBRdWVyeUZpbHRlcihtb0lkLCBmaWx0ZXJRdWVyeSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5jaGlsZEFzc2V0c0xpc3QobW9JZCwgeyAuLi5xdWVyeUZpbHRlciwgLi4uZXh0cmFGaWx0ZXIgfSk7XG4gIH1cblxuICBnZXRVbmFzc2lnbmVkRGV2aWNlcyh3aXRoQ2hpbGRyZW4gPSBmYWxzZSwgZmlsdGVyUXVlcnkgPSAnJykge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyOiBhbnkgPSB7XG4gICAgICBmcmFnbWVudFR5cGU6ICdjOHlfSXNEZXZpY2UnLFxuICAgICAgb25seVJvb3RzOiB0cnVlLFxuICAgICAgd2l0aENoaWxkcmVuLFxuICAgICAgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFLFxuICAgICAgcTogdGhpcy5nZXRVbmFzc2lnbmVkRGV2aWNlc1F1ZXJ5U3RyKGZpbHRlclF1ZXJ5KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3QodGhpcy5jcmVhdGVGaWx0ZXIocXVlcnlGaWx0ZXIpKTtcbiAgfVxuXG4gIGdldER5bmFtaWNHcm91cEl0ZW1zKGdyb3VwUXVlcnk6IHN0cmluZywgZmlsdGVyT2JqOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IHsgcXVlcnksIC4uLnF1ZXJ5UGFyYW1zIH0gPSBmaWx0ZXJPYmo7XG4gICAgY29uc3Qgb3JkZXJCeVF1ZXJ5ID0gcXVlcnk7XG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB7XG4gICAgICBxOiB0aGlzLmJ1aWxkQ29tYmluZWRRdWVyeShncm91cFF1ZXJ5LCBvcmRlckJ5UXVlcnkpLFxuICAgICAgLi4ucXVlcnlQYXJhbXNcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHRoaXMuY3JlYXRlRmlsdGVyKHF1ZXJ5RmlsdGVyKSk7XG4gIH1cblxuICBnZXREZXZpY2VDaGlsZHJlbihcbiAgICBtb0lkOiBzdHJpbmcsXG4gICAgZXh0cmFGaWx0ZXI6IG9iamVjdCA9IHt9LFxuICAgIGZpbHRlclF1ZXJ5ID0gJycsXG4gICAgd2l0aENoaWxkcmVuID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB7XG4gICAgICB3aXRoQ2hpbGRyZW4sXG4gICAgICBwYWdlU2l6ZTogdGhpcy5QQUdFX1NJWkUsXG4gICAgICBxdWVyeTogdGhpcy5ncm91cFF1ZXJ5RmlsdGVyKG1vSWQsIGZpbHRlclF1ZXJ5KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5LmNoaWxkRGV2aWNlc0xpc3QobW9JZCwgeyAuLi5xdWVyeUZpbHRlciwgLi4uZXh0cmFGaWx0ZXIgfSk7XG4gIH1cblxuICBnZXRVbmFzc2lnbmVkRGV2aWNlc1F1ZXJ5U3RyKGZpbHRlclF1ZXJ5KTogc3RyaW5nIHtcbiAgICBjb25zdCBoYXNHcm91cElkID0gZmlsdGVyUXVlcnkuaW5jbHVkZXMoJ2J5Z3JvdXBpZCcpO1xuICAgIC8vIEZldGNoIGFsbCB1bmFzc2lnbmVkIGRldmljZXMuXG4gICAgY29uc3QgZGVmYXVsdFF1ZXJ5U3RyID0gJyRvcmRlcmJ5PW5hbWUnO1xuXG4gICAgLy8gZmlsdGVyUXVlcnkgaXMgYSBjdXN0b20gcXVlcnkgdG8gZmV0Y2ggdW5hc3NpZ25lZCBkZXZpY2VzIGZpbHRlcmVkIGJ5IG5hbWUuXG4gICAgcmV0dXJuIGhhc0dyb3VwSWQgfHwgIWZpbHRlclF1ZXJ5ID8gZGVmYXVsdFF1ZXJ5U3RyIDogZmlsdGVyUXVlcnk7XG4gIH1cblxuICBncm91cFF1ZXJ5RmlsdGVyKG1vSWQ6IHN0cmluZywgZmlsdGVyUXVlcnk/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWZpbHRlclF1ZXJ5KSB7XG4gICAgICByZXR1cm4gYCRmaWx0ZXI9KGJ5Z3JvdXBpZCgke21vSWR9KSkkb3JkZXJieT1uYW1lYDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlclF1ZXJ5O1xuICB9XG5cbiAgbmF2Um9vdFF1ZXJ5RmlsdGVyKCkge1xuICAgIGNvbnN0IG5hdlJvb3RGaWx0ZXIgPSB0aGlzLnJvb3RRdWVyeUZpbHRlcigpO1xuICAgIG5hdlJvb3RGaWx0ZXIuX19vcmRlcmJ5ID0gW3sgbmFtZTogMSB9XTtcbiAgICByZXR1cm4gbmF2Um9vdEZpbHRlcjtcbiAgfVxuXG4gIHJvb3RRdWVyeUZpbHRlcigpIHtcbiAgICBjb25zdCB7IG1vZHVsZUNvbmZpZyB9ID0gdGhpcztcbiAgICBjb25zdCByb290RmlsdGVyID0gdGhpcy5vcHRpb25zU2VydmljZS5kaXNhYmxlT25seVJvb3RzUXVlcnlcbiAgICAgID8ge1xuICAgICAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50Lmdyb3VwVHlwZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgX19vcmRlcmJ5OiBbXVxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICBfX2ZpbHRlcjoge1xuICAgICAgICAgICAgX19oYXM6IEdyb3VwRnJhZ21lbnQuZ3JvdXBGcmFnbWVudFR5cGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIF9fb3JkZXJieTogW11cbiAgICAgICAgfTtcbiAgICBpZiAobW9kdWxlQ29uZmlnLnNtYXJ0R3JvdXBzKSB7XG4gICAgICBjb25zdCBxdWVyeUZpbHRlciA9IHtcbiAgICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgICBfX2FuZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cFR5cGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIF9faGFzOiBHcm91cEZyYWdtZW50LmR5bmFtaWNHcm91cEZyYWdtZW50XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBfX25vdDogeyBfX2hhczogYCR7R3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBGcmFnbWVudH0uaW52aXNpYmxlYCB9IH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXJpZXNVdGlsLmFkZE9yRmlsdGVyKHJvb3RGaWx0ZXIsIHF1ZXJ5RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3RGaWx0ZXI7XG4gIH1cblxuICBvblVwZGF0ZSh7IG1vLCByb290IH0pIHtcbiAgICBpZiAobW8uaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgICAgLmhvb2tSZXNwb25zZShcbiAgICAgICAgICAoeyB1cmwsIG1ldGhvZCB9KSA9PlxuICAgICAgICAgICAgWydQVVQnLCAnREVMRVRFJywgJ1BPU1QnXS5pbmNsdWRlcyhtZXRob2QpICYmXG4gICAgICAgICAgICBSZWdFeHAoYCgoaW52ZW50b3J5L21hbmFnZWRPYmplY3RzKXwoc2VydmljZS9zbWFydGdyb3VwL3NtYXJ0Z3JvdXBzKSkvJHttby5pZH1gKS50ZXN0KFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuZHJhZ2dlZERhdGEpLFxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS5leGNsdWRlUGVybWlzc2lvbkNhbGwoKSxcbiAgICAgICAgICBtZXJnZU1hcCh0aGlzLmFwaVNlcnZpY2UucmVzb2x2ZURhdGE8SU1hbmFnZWRPYmplY3Q+KSxcbiAgICAgICAgICBmaWx0ZXIocmVzcG9uc2UgPT4gIXJlc3BvbnNlPy5kYXRhPy5jOHlfRGFzaGJvYXJkKVxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAocm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgICAuaG9va1Jlc3BvbnNlKFxuICAgICAgICAgICh7IHVybCwgbWV0aG9kIH0pID0+XG4gICAgICAgICAgICBSZWdFeHAoJygoaW52ZW50b3J5L21hbmFnZWRPYmplY3RzKXwoc2VydmljZS9zbWFydGdyb3VwL3NtYXJ0Z3JvdXBzKSkvPyQnKS50ZXN0KHVybCkgJiZcbiAgICAgICAgICAgIG1ldGhvZCA9PT0gJ1BPU1QnXG4gICAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAodGhpcy5hcGlTZXJ2aWNlLnJlc29sdmVEYXRhPElNYW5hZ2VkT2JqZWN0PiksXG4gICAgICAgICAgZmlsdGVyKHJlc3BvbnNlID0+IHRoaXMuaXNOZXdNYW5hZ2VkT2JqZWN0Um9vdChyZXNwb25zZSkpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIGlzTmV3TWFuYWdlZE9iamVjdFJvb3QocmVzcG9uc2U6IFBhcnRpYWw8SVJlc3VsdDxJTWFuYWdlZE9iamVjdD4+ID0ge30pIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgIGxldCBpc1Jvb3RBc3NldCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgaXNSb290QXNzZXQgPSAhIWRhdGFbR3JvdXBGcmFnbWVudC5ncm91cEZyYWdtZW50VHlwZV07XG4gICAgICBpZiAoIWlzUm9vdEFzc2V0ICYmIHRoaXMubW9kdWxlQ29uZmlnLnNtYXJ0R3JvdXBzKSB7XG4gICAgICAgIGlzUm9vdEFzc2V0ID0gISFkYXRhW0dyb3VwRnJhZ21lbnQuZHluYW1pY0dyb3VwRnJhZ21lbnRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNSb290QXNzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgaXQgaXMgcG9zc2libGUgdG8gZHJvcCBhIG5vZGUgYWZ0ZXIgZHJhZ2dpbmcuXG4gICAqIEBwYXJhbSBkcm9wT25Sb290IElzIHRoZSBkcm9wIHBlcmZvcm1lZCBvbiB0aGUgcm9vdCBub2RlXG4gICAqL1xuICBjYW5Ecm9wTm9kZShkcm9wT25Sb290OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICFkcm9wT25Sb290IHx8XG4gICAgICB0aGlzLnVzZXIuaGFzQW55Um9sZSh0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlLCBbXG4gICAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0FETUlOXG4gICAgICBdKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgY291bGQgYmUgbXVsdGlwbGUgYnJlYWRjcnVtYnMgZm9yIGRldmljZXMsXG4gICAqIHNvIHdlIHNldCBhIHByZWZlcnJlZCBvbmUgb24gY2xpY2sgb24gYSBkZXZpY2UuXG4gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBwYXJlbnQgbm9kZXMgb2YgdGhlIGRldmljZSB0byBzZWxlY3QgdGhlIHByZWZlcmVkIG9uZS5cbiAgICovXG4gIHByZWZlckJyZWFkY3J1bWIocGFyZW50czogTmF2aWdhdG9yTm9kZVtdKSB7XG4gICAgaWYgKHBhcmVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmJyZWFkY3J1bWJTZXJ2aWNlLnNlbGVjdFByZWZlcnJlZEJ5UGF0aChwYXJlbnRzWzBdLnBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVGaWx0ZXIoZXh0cmFQYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgY3VycmVudFBhZ2U6IDEsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIHBhZ2VTaXplOiAxMFxuICAgIH07XG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi5leHRyYVBhcmFtcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbWJpbmVkUXVlcnkocXVlcnlBLCBxdWVyeUIpIHtcbiAgICBsZXQgY29tYmluZWRRdWVyeTtcbiAgICBpZiAocXVlcnlBICYmIHF1ZXJ5Qikge1xuICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoW1xuICAgICAgICB7XG4gICAgICAgICAgX191c2VGaWx0ZXJRdWVyeVN0cmluZzogcXVlcnlBXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBfX3VzZUZpbHRlclF1ZXJ5U3RyaW5nOiBxdWVyeUJcbiAgICAgICAgfVxuICAgICAgXSk7XG4gICAgICBjb25zdCBvcmJlckJ5UXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmV4dHJhY3RBbmRNZXJnZU9yZGVyQnlzKFtxdWVyeUEsIHF1ZXJ5Ql0pO1xuICAgICAgY29tYmluZWRRdWVyeSA9IGAke2ZpbHRlclF1ZXJ5fSAke29yYmVyQnlRdWVyeX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21iaW5lZFF1ZXJ5ID0gcXVlcnlBIHx8IHF1ZXJ5QiB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuIGNvbWJpbmVkUXVlcnk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -20,7 +20,7 @@ export class ChildDevicesComponent {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
ChildDevicesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ChildDevicesComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.DeviceGridService }], target: i0.ɵɵFactoryTarget.Component });
|
|
23
|
-
ChildDevicesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ChildDevicesComponent, selector: "c8y-child-devices", providers: [ManagedObjectRealtimeService], ngImport: i0, template: "<div class=\"content-fullpage border-top border-bottom\">\n <c8y-device-grid\n [title]=\"'Child devices' | translate\"\n [childDeviceGrid]=\"true\"\n [columns]=\"columns\"\n [parentDeviceId]=\"id\"\n c8yProductExperience\n [actionName]=\"'childDevices'\"\n ></c8y-device-grid>\n</div>\n", dependencies: [{ kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i2.DeviceGridComponent, selector: "c8y-device-grid", inputs: ["dataCallback", "refresh", "title", "loadMoreItemsLabel", "loadingItemsLabel", "legacyConfigKey", "legacyFilterKey", "columns", "pagination", "infiniteScroll", "actionControls", "selectable", "singleSelection", "baseQuery", "bulkActionControls", "headerActionControls", "childDeviceGrid", "parentDeviceId", "withChildren", "showSearch", "activeClassName"], outputs: ["onColumnsChange", "onFilterChange", "onDeviceQueryStringChange", "itemsSelect"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
|
|
23
|
+
ChildDevicesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ChildDevicesComponent, selector: "c8y-child-devices", providers: [ManagedObjectRealtimeService], ngImport: i0, template: "<div class=\"content-fullpage border-top border-bottom\">\n <c8y-device-grid\n [title]=\"'Child devices' | translate\"\n [childDeviceGrid]=\"true\"\n [columns]=\"columns\"\n [parentDeviceId]=\"id\"\n c8yProductExperience\n [actionName]=\"'childDevices'\"\n ></c8y-device-grid>\n</div>\n", dependencies: [{ kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i2.DeviceGridComponent, selector: "c8y-device-grid", inputs: ["dataCallback", "refresh", "title", "loadMoreItemsLabel", "loadingItemsLabel", "legacyConfigKey", "legacyFilterKey", "columns", "pagination", "infiniteScroll", "builtInActionsToHide", "actionControls", "selectable", "singleSelection", "baseQuery", "bulkActionControls", "headerActionControls", "childDeviceGrid", "parentDeviceId", "withChildren", "showSearch", "activeClassName"], outputs: ["onColumnsChange", "onFilterChange", "onDeviceQueryStringChange", "itemsSelect"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
|
|
24
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ChildDevicesComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
26
|
args: [{ selector: 'c8y-child-devices', providers: [ManagedObjectRealtimeService], template: "<div class=\"content-fullpage border-top border-bottom\">\n <c8y-device-grid\n [title]=\"'Child devices' | translate\"\n [childDeviceGrid]=\"true\"\n [columns]=\"columns\"\n [parentDeviceId]=\"id\"\n c8yProductExperience\n [actionName]=\"'childDevices'\"\n ></c8y-device-grid>\n</div>\n" }]
|
|
@@ -141,9 +141,9 @@ export class BootstrapComponent {
|
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
BootstrapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: BootstrapComponent, deps: [{ token: i1.TabsService }, { token: i2.AppStateService }, { token: i3.NavigatorService }, { token: i4.ActionBarService }, { token: i5.HeaderService }, { token: i6.OptionsService }, { token: i7.PluginsResolveService }, { token: i8.SetupService }, { token: i9.LoginService }], target: i0.ɵɵFactoryTarget.Component });
|
|
144
|
-
BootstrapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: BootstrapComponent, selector: "c8y-bootstrap", ngImport: i0, template: "<c8y-login *ngIf=\"showLogin$ | async\"></c8y-login>\n\n<div class=\"init-load\" *ngIf=\"showLoadingIndicator$ | async\">\n <div class=\"spinner-snake\"></div>\n <div class=\"mainlogo-placeholder mainlogo\"></div>\n</div>\n\n<div\n *ngIf=\"showMainView$ | async\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar #header></c8y-header-bar>\n <c8y-drawer-outlet\n role=\"region\"\n position=\"left\"\n [open]=\"headerService.navigatorOpen$ | async\"\n [tabindex]=\"(headerService.navigatorOpen$ | async) ? '0' : '-1'\"\n ></c8y-drawer-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n class=\"mcontainer\"\n [ngClass]=\"{\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"showSetup$ | async\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n", dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.HeaderBarComponent, selector: "c8y-header-bar", inputs: ["simple"] }, { kind: "component", type: i12.LoginComponent, selector: "c8y-login", inputs: ["name"] }, { kind: "directive", type: i13.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i14.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen"] }, { kind: "component", type: i15.ActionBarComponent, selector: "c8y-action-bar", inputs: ["navigatorOpen", "hasTabs", "isTabsHorizontal", "items$"] }, { kind: "component", type: i16.AlertOutletComponent, selector: "c8y-alert-outlet" }, { kind: "component", type: i17.SetupComponent, selector: "c8y-setup" }, { kind: "component", type: i18.DrawerOutletComponent, selector: "c8y-drawer-outlet", inputs: ["position", "open"] }, { kind: "component", type: i19.CookieBannerComponent, selector: "c8y-cookie-banner" }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }] });
|
|
144
|
+
BootstrapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: BootstrapComponent, selector: "c8y-bootstrap", ngImport: i0, template: "<c8y-login *ngIf=\"showLogin$ | async\"></c8y-login>\n\n<div class=\"init-load\" *ngIf=\"showLoadingIndicator$ | async\">\n <div class=\"spinner-snake\"></div>\n <div class=\"mainlogo-placeholder mainlogo\"></div>\n</div>\n\n<div\n *ngIf=\"showMainView$ | async\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar #header></c8y-header-bar>\n <c8y-drawer-outlet\n role=\"region\"\n position=\"left\"\n data-cy=\"bootstrap.template--c8y-drawer-outlet\"\n [open]=\"headerService.navigatorOpen$ | async\"\n [tabindex]=\"(headerService.navigatorOpen$ | async) ? '0' : '-1'\"\n ></c8y-drawer-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n class=\"mcontainer\"\n [ngClass]=\"{\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"showSetup$ | async\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n", dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.HeaderBarComponent, selector: "c8y-header-bar", inputs: ["simple"] }, { kind: "component", type: i12.LoginComponent, selector: "c8y-login", inputs: ["name"] }, { kind: "directive", type: i13.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i14.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen"] }, { kind: "component", type: i15.ActionBarComponent, selector: "c8y-action-bar", inputs: ["navigatorOpen", "hasTabs", "isTabsHorizontal", "items$"] }, { kind: "component", type: i16.AlertOutletComponent, selector: "c8y-alert-outlet" }, { kind: "component", type: i17.SetupComponent, selector: "c8y-setup" }, { kind: "component", type: i18.DrawerOutletComponent, selector: "c8y-drawer-outlet", inputs: ["position", "open"] }, { kind: "component", type: i19.CookieBannerComponent, selector: "c8y-cookie-banner" }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }] });
|
|
145
145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: BootstrapComponent, decorators: [{
|
|
146
146
|
type: Component,
|
|
147
|
-
args: [{ selector: 'c8y-bootstrap', template: "<c8y-login *ngIf=\"showLogin$ | async\"></c8y-login>\n\n<div class=\"init-load\" *ngIf=\"showLoadingIndicator$ | async\">\n <div class=\"spinner-snake\"></div>\n <div class=\"mainlogo-placeholder mainlogo\"></div>\n</div>\n\n<div\n *ngIf=\"showMainView$ | async\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar #header></c8y-header-bar>\n <c8y-drawer-outlet\n role=\"region\"\n position=\"left\"\n [open]=\"headerService.navigatorOpen$ | async\"\n [tabindex]=\"(headerService.navigatorOpen$ | async) ? '0' : '-1'\"\n ></c8y-drawer-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n class=\"mcontainer\"\n [ngClass]=\"{\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"showSetup$ | async\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n" }]
|
|
147
|
+
args: [{ selector: 'c8y-bootstrap', template: "<c8y-login *ngIf=\"showLogin$ | async\"></c8y-login>\n\n<div class=\"init-load\" *ngIf=\"showLoadingIndicator$ | async\">\n <div class=\"spinner-snake\"></div>\n <div class=\"mainlogo-placeholder mainlogo\"></div>\n</div>\n\n<div\n *ngIf=\"showMainView$ | async\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar #header></c8y-header-bar>\n <c8y-drawer-outlet\n role=\"region\"\n position=\"left\"\n data-cy=\"bootstrap.template--c8y-drawer-outlet\"\n [open]=\"headerService.navigatorOpen$ | async\"\n [tabindex]=\"(headerService.navigatorOpen$ | async) ? '0' : '-1'\"\n ></c8y-drawer-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n class=\"mcontainer\"\n [ngClass]=\"{\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"showSetup$ | async\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n" }]
|
|
148
148
|
}], ctorParameters: function () { return [{ type: i1.TabsService }, { type: i2.AppStateService }, { type: i3.NavigatorService }, { type: i4.ActionBarService }, { type: i5.HeaderService }, { type: i6.OptionsService }, { type: i7.PluginsResolveService }, { type: i8.SetupService }, { type: i9.LoginService }]; } });
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9ib290c3RyYXAudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQWMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU10RCxNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFlBQ1MsSUFBaUIsRUFDakIsRUFBbUIsRUFDbkIs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SyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDbkMsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBVSxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0I7YUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDNUMsQ0FBQzs7K0dBN0lVLGtCQUFrQjttR0FBbEIsa0JBQWtCLHFEQ3BCL0IsMGlFQW1FQTsyRkQvQ2Esa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGlvbkJhclNlcnZpY2UgfSBmcm9tICcuLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vbmF2aWdhdG9yL25hdmlnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGx1Z2luc0NvbmZpZyB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy5tb2RlbCc7XG5pbXBvcnQgeyBTZXR1cFNlcnZpY2UgfSBmcm9tICcuLi9zZXR1cC9zZXR1cC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYnNTZXJ2aWNlIH0gZnJvbSAnLi4vdGFicy90YWJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuLi9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJvb3RzdHJhcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ib290c3RyYXAudGVtcGxhdGUuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQm9vdHN0cmFwQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBuYXZpZ2F0b3JPcGVuJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgbm9BcHBzTWFyZ2luJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdGFic09yaWVudGF0aW9uOiBzdHJpbmc7XG4gIHNob3dQb3dlcmVkQnkgPSB0cnVlO1xuICBzaG93TG9naW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzaG93TG9hZGluZ0luZGljYXRvciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNob3dNYWluVmlldyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNob3dTZXR1cCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIGxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhYnM6IFRhYnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHVibGljIGFjdGlvbkJhcjogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwdWJsaWMgaGVhZGVyU2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1Jlc29sdmU6IFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgICBwdWJsaWMgc2V0dXBTZXJ2aWNlOiBTZXR1cFNlcnZpY2UsXG4gICAgcHVibGljIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubm9BcHBzTWFyZ2luJCA9IHRoaXMuaGVhZGVyU2VydmljZS5tYXAoKHsgbmF2IH0pID0+ICFuYXYub3BlbiAmJiBuYXYuaGlkZGVuT25TdGFydHVwKTtcbiAgICB0aGlzLnRhYnNPcmllbnRhdGlvbiA9IHRoaXMub3B0aW9ucy50YWJzSG9yaXpvbnRhbCA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCc7XG4gICAgdGhpcy51aVxuICAgICAgLm1hcCgoeyBsYW5nIH0pID0+IGxhbmcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hY3Rpb25CYXIucmVmcmVzaCgpO1xuICAgICAgfSk7XG4gICAgdGhpcy5zaG93UG93ZXJlZEJ5ID0gIXRoaXMub3B0aW9ucy5nZXQoJ2hpZGVQb3dlcmVkJyk7XG4gICAgY29uc3Qgbm9Mb2dpbiQgPSBvZih0aGlzLm9wdGlvbnMuZ2V0PGJvb2xlYW4+KCdub0xvZ2luJywgZmFsc2UpKTtcbiAgICB0aGlzLnNob3dMb2dpbiQgPSBjb21iaW5lTGF0ZXN0KFtub0xvZ2luJCwgdGhpcy51aS5jdXJyZW50VXNlcl0pLnBpcGUoXG4gICAgICBtYXAoKFtub0xvZ2luLCBjdXJyZW50VXNlcl0pID0+ICFub0xvZ2luICYmICFjdXJyZW50VXNlcilcbiAgICApO1xuICAgIHRoaXMuc2hvd0xvYWRpbmdJbmRpY2F0b3IkID0gY29tYmluZUxhdGVzdChbXG4gICAgICBub0xvZ2luJCxcbiAgICAgIHRoaXMudWkuY3VycmVudFVzZXIsXG4gICAgICB0aGlzLmxvZ2luU2VydmljZS5hdXRvbWF0aWNMb2dpbkluUHJvZ3Jlc3MkLFxuICAgICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5hbGxQbHVnaW5zTG9hZGVkJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbbm9Mb2dpbiwgY3VycmVudFVzZXIsIGF1dG9tYXRpY0xvZ2luSW5Qcm9ncmVzcywgYWxsUGx1Z2luc0xvYWRlZF0pID0+XG4gICAgICAgICAgKCFub0xvZ2luICYmIGF1dG9tYXRpY0xvZ2luSW5Qcm9ncmVzcykgfHwgKGN1cnJlbnRVc2VyICYmICFhbGxQbHVnaW5zTG9hZGVkKVxuICAgICAgKSxcbiAgICAgIHN0YXJ0V2l0aCh0cnVlKVxuICAgICk7XG4gICAgdGhpcy5zaG93TWFpblZpZXckID0gbm9Mb2dpbiQucGlwZShcbiAgICAgIHN3aXRjaE1hcChub0xvZ2luID0+IHtcbiAgICAgICAgaWYgKG5vTG9naW4pIHtcbiAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHRoaXMudWkuY3VycmVudFVzZXIsXG4gICAgICAgICAgdGhpcy5zZXR1cFNlcnZpY2UuaXNTZXR1cE5lZWRlZCQsXG4gICAgICAgICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5hbGxQbHVnaW5zTG9hZGVkJFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgIG1hcCgoW2N1cnJlbnRVc2VyLCBpc1NldHVwTmVlZGVkLCBhbGxQbHVnaW5zTG9hZGVkXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRVc2VyICYmICFpc1NldHVwTmVlZGVkICYmIGFsbFBsdWdpbnNMb2FkZWQ7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnNob3dTZXR1cCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnVpLmN1cnJlbnRVc2VyLCB0aGlzLnNldHVwU2VydmljZS5pc1NldHVwTmVlZGVkJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjdXJyZW50VXNlciwgaXNTZXR1cE5lZWRlZF0pID0+IGN1cnJlbnRVc2VyICYmIGlzU2V0dXBOZWVkZWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9Mb2FkUmVtb3RlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW1vdGVzKGNvbmZpZzogUGx1Z2luc0NvbmZpZyk6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB7XG4gICAgbGV0IHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucztcbiAgICBpZiAoISFjb25maWc/LnJlbW90ZXMpIHtcbiAgICAgIC8vIE1lcmdlIHBsdWdpbnMgY29uZmlnIHJlbW90ZXMgYW5kIHJlbW90ZXMgcGFzc2VkIGluIHRoZSBVUkwuXG4gICAgICAvLyBSZW1vdGVzIGluIHRoZSBVUkwgYXJlIHVzZWQgaW4gdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuXG4gICAgICByZW1vdGVzID0gdGhpcy5wbHVnaW5zUmVzb2x2ZS5tZXJnZU1GUmVtb3RlcyhbXG4gICAgICAgIGNvbmZpZy5yZW1vdGVzLFxuICAgICAgICB0aGlzLnBsdWdpbnNSZXNvbHZlLmxvYWRVcmxSZW1vdGVzKClcbiAgICAgIF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdGVzID0gdGhpcy5vcHRpb25zPy5yZW1vdGVzO1xuICAgIH1cblxuICAgIC8vIEJsb2NrIHRoZSBwb3NzaWJpbGl0eSBvZiBsb2FkaW5nIHBsdWdpbnMgbXVsdGlwbGUgdGltZXMuXG4gICAgT2JqZWN0LmtleXMocmVtb3RlcyB8fCB7fSkuZm9yRWFjaChjb250ZXh0UGF0aCA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkZWRSZW1vdGVzQ29udGV4dFBhdGhDYWNoZS5nZXQoY29udGV4dFBhdGgpKSB7XG4gICAgICAgIGRlbGV0ZSByZW1vdGVzW2NvbnRleHRQYXRoXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNFbXB0eShyZW1vdGVzKSA/IHVuZGVmaW5lZCA6IHJlbW90ZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRSZW1vdGVzKHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucykge1xuICAgIGlmICghcmVtb3Rlcykge1xuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3RlTW9kdWxlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1Jlc29sdmUubG9hZFJlbW90ZXMocmVtb3Rlcyk7XG5cbiAgICAvLyBDYWNoZSBsb2FkZWQgcmVtb3Rlcy5cbiAgICBPYmplY3Qua2V5cyhyZW1vdGVzKS5mb3JFYWNoKGNvbnRleHRQYXRoID0+XG4gICAgICB0aGlzLmxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlLnNldChjb250ZXh0UGF0aCwgdHJ1ZSlcbiAgICApO1xuXG4gICAgaWYgKHJlbW90ZU1vZHVsZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBsdWdpbnNSZXNvbHZlLnJlc29sdmVSZW1vdGVQbHVnaW5zKHJlbW90ZU1vZHVsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbiBjYXNlIGxvYWRpbmcgYWxsIG1vZHVsZXMgdmlhIHBsdWdpbnNSZXNvbHZlLmxvYWRSZW1vdGVzIGZhaWxlZFxuICAgICAgLy8gKGUuZy4gYWxsIHBsdWdpbnMgdGhhdCB3ZXJlIGluc3RhbGxlZCBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSB0ZW5hbnQpXG4gICAgICAvLyB3ZSBzdGlsbCBuZWVkIHRvIG1hcmsgbG9hZGluZyB0aGUgcGx1Z2lucyBhcyBzdWNjZXNzZnVsLlxuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvTG9hZFJlbW90ZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ25vUGx1Z2lucycsIGZhbHNlKSkge1xuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmdldDxib29sZWFuPignbm9Mb2dpbicsIGZhbHNlKSkge1xuICAgICAgdGhpcy5sb2FkUmVtb3Rlcyh0aGlzLmdldFJlbW90ZXMobnVsbCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudWkuY3VycmVudEFwcGxpY2F0aW9uQ29uZmlnXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChjb25maWc6IFBsdWdpbnNDb25maWcpID0+IHRoaXMubG9hZFJlbW90ZXModGhpcy5nZXRSZW1vdGVzKGNvbmZpZykpKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlV2VNYXJrUGx1Z2luc0FzTG9hZGVkKCk6IHZvaWQge1xuICAgIC8vIGVuc3VyZSB3ZSBjYWxsIG1hcmtQbHVnaW5zQXNMb2FkZWQgb24gdGhlIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlXG4gICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5tYXJrUGx1Z2luc0FzTG9hZGVkKCk7XG4gIH1cbn1cbiIsIjxjOHktbG9naW4gKm5nSWY9XCJzaG93TG9naW4kIHwgYXN5bmNcIj48L2M4eS1sb2dpbj5cblxuPGRpdiBjbGFzcz1cImluaXQtbG9hZFwiICpuZ0lmPVwic2hvd0xvYWRpbmdJbmRpY2F0b3IkIHwgYXN5bmNcIj5cbiAgPGRpdiBjbGFzcz1cInNwaW5uZXItc25ha2VcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1haW5sb2dvLXBsYWNlaG9sZGVyIG1haW5sb2dvXCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdlxuICAqbmdJZj1cInNob3dNYWluVmlldyQgfCBhc3luY1wiXG4gIFtjbGFzcy5oZWFkLW9wZW5dPVwiaGVhZGVyU2VydmljZS5oZWFkZXJPcGVuXCJcbj5cbiAgPGM4eS1oZWFkZXItYmFyICNoZWFkZXI+PC9jOHktaGVhZGVyLWJhcj5cbiAgPGM4eS1kcmF3ZXItb3V0bGV0XG4gICAgcm9sZT1cInJlZ2lvblwiXG4gICAgcG9zaXRpb249XCJsZWZ0XCJcbiAgICBbb3Blbl09XCJoZWFkZXJTZXJ2aWNlLm5hdmlnYXRvck9wZW4kIHwgYXN5bmNcIlxuICAgIFt0YWJpbmRleF09XCIoaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jKSA/ICcwJyA6ICctMSdcIlxuICA+PC9jOHktZHJhd2VyLW91dGxldD5cblxuICA8ZGl2IGNsYXNzPVwiYWxlcnRzXCI+XG4gICAgPGM4eS1hbGVydC1vdXRsZXQ+PC9jOHktYWxlcnQtb3V0bGV0PlxuICA8L2Rpdj5cbiAgPGM4eS10YWJzLW91dGxldFxuICAgICN0YWJzQ29tcG9uZW50XG4gICAgW3RhYnNdPVwidGFicy5pdGVtcyQgfCBhc3luY1wiXG4gICAgW25hdmlnYXRvck9wZW5dPVwiaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jXCJcbiAgICBbb3JpZW50YXRpb25dPVwidGFicy5vcmllbnRhdGlvbiQgfCBhc3luY1wiXG4gICAgcm9sZT1cIm5hdmlnYXRpb25cIlxuICA+PC9jOHktdGFicy1vdXRsZXQ+XG4gIDxjOHktYWN0aW9uLWJhclxuICAgICNhY3Rpb25CYXJDb21wb25lbnRcbiAgICBbbmF2aWdhdG9yT3Blbl09XCJoZWFkZXJTZXJ2aWNlLm5hdmlnYXRvck9wZW4kIHwgYXN5bmNcIlxuICAgIFtoYXNUYWJzXT1cInRhYnNDb21wb25lbnQuaGFzVGFic1wiXG4gICAgW2lzVGFic0hvcml6b250YWxdPVwidGFic0NvbXBvbmVudD8uaXNIb3Jpem9udGFsXCJcbiAgICBbaXRlbXMkXT1cImFjdGlvbkJhci5pdGVtcyRcIlxuICAgIHJvbGU9XCJncm91cFwiXG4gID48L2M4eS1hY3Rpb24tYmFyPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm1jb250YWluZXJcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgIG9wZW46IGhlYWRlclNlcnZpY2UubmF2aWdhdG9yT3BlbiQgfCBhc3luYyxcbiAgICAgICduby1hcHBzLW1hcmdpbic6IG5vQXBwc01hcmdpbiQgfCBhc3luYyxcbiAgICAgICdob3Jpem9udGFsLXRhYnMnOiB0YWJzQ29tcG9uZW50LmlzSG9yaXpvbnRhbCxcbiAgICAgICd2ZXJ0aWNhbC10YWJzJzogIXRhYnNDb21wb25lbnQuaXNIb3Jpem9udGFsLFxuICAgICAgJ2hhcy10YWJzJzogdGFic0NvbXBvbmVudC5oYXNUYWJzLFxuICAgICAgJ2hhcy1hY3Rpb24tYmFyJzogIWFjdGlvbkJhckNvbXBvbmVudD8uaGlkZGVuXG4gICAgfVwiXG4gID5cbiAgICA8bWFpbiBpZD1cIm1haW4tY29udGVudFwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiI2M4eS1sZWdhY3ktdmlld1wiPjwvbmctY29udGVudD5cbiAgICAgIDwhLS0gbGVnYWN5IG5nLXZpZXcsIHdpbGwgbm90IGJlIG1pZ3JhdGVkIGF0bSAtLT5cbiAgICA8L21haW4+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJzaG93U2V0dXAkIHwgYXN5bmNcIj5cbiAgPGM4eS1oZWFkZXItYmFyIFtzaW1wbGVdPVwidHJ1ZVwiPjwvYzh5LWhlYWRlci1iYXI+XG4gIDxkaXYgY2xhc3M9XCJtY29udGFpbmVyXCIgcm9sZT1cIm1haW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICA8Yzh5LXNldHVwPjwvYzh5LXNldHVwPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48Yzh5LWNvb2tpZS1iYW5uZXI+PC9jOHktY29va2llLWJhbm5lcj5cbiJdfQ==
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9ib290c3RyYXAudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQWMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU10RCxNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFlBQ1MsSUFBaUIsRUFDakIsRUFBbUIsRUFDbkIs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SyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDbkMsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBVSxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0I7YUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDNUMsQ0FBQzs7K0dBN0lVLGtCQUFrQjttR0FBbEIsa0JBQWtCLHFEQ3BCL0IsaW1FQW9FQTsyRkRoRGEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGlvbkJhclNlcnZpY2UgfSBmcm9tICcuLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vbmF2aWdhdG9yL25hdmlnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGx1Z2luc0NvbmZpZyB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy5tb2RlbCc7XG5pbXBvcnQgeyBTZXR1cFNlcnZpY2UgfSBmcm9tICcuLi9zZXR1cC9zZXR1cC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYnNTZXJ2aWNlIH0gZnJvbSAnLi4vdGFicy90YWJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuLi9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJvb3RzdHJhcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ib290c3RyYXAudGVtcGxhdGUuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQm9vdHN0cmFwQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBuYXZpZ2F0b3JPcGVuJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgbm9BcHBzTWFyZ2luJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdGFic09yaWVudGF0aW9uOiBzdHJpbmc7XG4gIHNob3dQb3dlcmVkQnkgPSB0cnVlO1xuICBzaG93TG9naW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzaG93TG9hZGluZ0luZGljYXRvciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNob3dNYWluVmlldyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNob3dTZXR1cCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIGxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhYnM6IFRhYnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHVibGljIGFjdGlvbkJhcjogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwdWJsaWMgaGVhZGVyU2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1Jlc29sdmU6IFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgICBwdWJsaWMgc2V0dXBTZXJ2aWNlOiBTZXR1cFNlcnZpY2UsXG4gICAgcHVibGljIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubm9BcHBzTWFyZ2luJCA9IHRoaXMuaGVhZGVyU2VydmljZS5tYXAoKHsgbmF2IH0pID0+ICFuYXYub3BlbiAmJiBuYXYuaGlkZGVuT25TdGFydHVwKTtcbiAgICB0aGlzLnRhYnNPcmllbnRhdGlvbiA9IHRoaXMub3B0aW9ucy50YWJzSG9yaXpvbnRhbCA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCc7XG4gICAgdGhpcy51aVxuICAgICAgLm1hcCgoeyBsYW5nIH0pID0+IGxhbmcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hY3Rpb25CYXIucmVmcmVzaCgpO1xuICAgICAgfSk7XG4gICAgdGhpcy5zaG93UG93ZXJlZEJ5ID0gIXRoaXMub3B0aW9ucy5nZXQoJ2hpZGVQb3dlcmVkJyk7XG4gICAgY29uc3Qgbm9Mb2dpbiQgPSBvZih0aGlzLm9wdGlvbnMuZ2V0PGJvb2xlYW4+KCdub0xvZ2luJywgZmFsc2UpKTtcbiAgICB0aGlzLnNob3dMb2dpbiQgPSBjb21iaW5lTGF0ZXN0KFtub0xvZ2luJCwgdGhpcy51aS5jdXJyZW50VXNlcl0pLnBpcGUoXG4gICAgICBtYXAoKFtub0xvZ2luLCBjdXJyZW50VXNlcl0pID0+ICFub0xvZ2luICYmICFjdXJyZW50VXNlcilcbiAgICApO1xuICAgIHRoaXMuc2hvd0xvYWRpbmdJbmRpY2F0b3IkID0gY29tYmluZUxhdGVzdChbXG4gICAgICBub0xvZ2luJCxcbiAgICAgIHRoaXMudWkuY3VycmVudFVzZXIsXG4gICAgICB0aGlzLmxvZ2luU2VydmljZS5hdXRvbWF0aWNMb2dpbkluUHJvZ3Jlc3MkLFxuICAgICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5hbGxQbHVnaW5zTG9hZGVkJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbbm9Mb2dpbiwgY3VycmVudFVzZXIsIGF1dG9tYXRpY0xvZ2luSW5Qcm9ncmVzcywgYWxsUGx1Z2luc0xvYWRlZF0pID0+XG4gICAgICAgICAgKCFub0xvZ2luICYmIGF1dG9tYXRpY0xvZ2luSW5Qcm9ncmVzcykgfHwgKGN1cnJlbnRVc2VyICYmICFhbGxQbHVnaW5zTG9hZGVkKVxuICAgICAgKSxcbiAgICAgIHN0YXJ0V2l0aCh0cnVlKVxuICAgICk7XG4gICAgdGhpcy5zaG93TWFpblZpZXckID0gbm9Mb2dpbiQucGlwZShcbiAgICAgIHN3aXRjaE1hcChub0xvZ2luID0+IHtcbiAgICAgICAgaWYgKG5vTG9naW4pIHtcbiAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHRoaXMudWkuY3VycmVudFVzZXIsXG4gICAgICAgICAgdGhpcy5zZXR1cFNlcnZpY2UuaXNTZXR1cE5lZWRlZCQsXG4gICAgICAgICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5hbGxQbHVnaW5zTG9hZGVkJFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgIG1hcCgoW2N1cnJlbnRVc2VyLCBpc1NldHVwTmVlZGVkLCBhbGxQbHVnaW5zTG9hZGVkXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRVc2VyICYmICFpc1NldHVwTmVlZGVkICYmIGFsbFBsdWdpbnNMb2FkZWQ7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnNob3dTZXR1cCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnVpLmN1cnJlbnRVc2VyLCB0aGlzLnNldHVwU2VydmljZS5pc1NldHVwTmVlZGVkJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjdXJyZW50VXNlciwgaXNTZXR1cE5lZWRlZF0pID0+IGN1cnJlbnRVc2VyICYmIGlzU2V0dXBOZWVkZWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9Mb2FkUmVtb3RlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW1vdGVzKGNvbmZpZzogUGx1Z2luc0NvbmZpZyk6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB7XG4gICAgbGV0IHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucztcbiAgICBpZiAoISFjb25maWc/LnJlbW90ZXMpIHtcbiAgICAgIC8vIE1lcmdlIHBsdWdpbnMgY29uZmlnIHJlbW90ZXMgYW5kIHJlbW90ZXMgcGFzc2VkIGluIHRoZSBVUkwuXG4gICAgICAvLyBSZW1vdGVzIGluIHRoZSBVUkwgYXJlIHVzZWQgaW4gdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuXG4gICAgICByZW1vdGVzID0gdGhpcy5wbHVnaW5zUmVzb2x2ZS5tZXJnZU1GUmVtb3RlcyhbXG4gICAgICAgIGNvbmZpZy5yZW1vdGVzLFxuICAgICAgICB0aGlzLnBsdWdpbnNSZXNvbHZlLmxvYWRVcmxSZW1vdGVzKClcbiAgICAgIF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdGVzID0gdGhpcy5vcHRpb25zPy5yZW1vdGVzO1xuICAgIH1cblxuICAgIC8vIEJsb2NrIHRoZSBwb3NzaWJpbGl0eSBvZiBsb2FkaW5nIHBsdWdpbnMgbXVsdGlwbGUgdGltZXMuXG4gICAgT2JqZWN0LmtleXMocmVtb3RlcyB8fCB7fSkuZm9yRWFjaChjb250ZXh0UGF0aCA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkZWRSZW1vdGVzQ29udGV4dFBhdGhDYWNoZS5nZXQoY29udGV4dFBhdGgpKSB7XG4gICAgICAgIGRlbGV0ZSByZW1vdGVzW2NvbnRleHRQYXRoXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNFbXB0eShyZW1vdGVzKSA/IHVuZGVmaW5lZCA6IHJlbW90ZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRSZW1vdGVzKHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucykge1xuICAgIGlmICghcmVtb3Rlcykge1xuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3RlTW9kdWxlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1Jlc29sdmUubG9hZFJlbW90ZXMocmVtb3Rlcyk7XG5cbiAgICAvLyBDYWNoZSBsb2FkZWQgcmVtb3Rlcy5cbiAgICBPYmplY3Qua2V5cyhyZW1vdGVzKS5mb3JFYWNoKGNvbnRleHRQYXRoID0+XG4gICAgICB0aGlzLmxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlLnNldChjb250ZXh0UGF0aCwgdHJ1ZSlcbiAgICApO1xuXG4gICAgaWYgKHJlbW90ZU1vZHVsZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBsdWdpbnNSZXNvbHZlLnJlc29sdmVSZW1vdGVQbHVnaW5zKHJlbW90ZU1vZHVsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbiBjYXNlIGxvYWRpbmcgYWxsIG1vZHVsZXMgdmlhIHBsdWdpbnNSZXNvbHZlLmxvYWRSZW1vdGVzIGZhaWxlZFxuICAgICAgLy8gKGUuZy4gYWxsIHBsdWdpbnMgdGhhdCB3ZXJlIGluc3RhbGxlZCBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSB0ZW5hbnQpXG4gICAgICAvLyB3ZSBzdGlsbCBuZWVkIHRvIG1hcmsgbG9hZGluZyB0aGUgcGx1Z2lucyBhcyBzdWNjZXNzZnVsLlxuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvTG9hZFJlbW90ZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ25vUGx1Z2lucycsIGZhbHNlKSkge1xuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmdldDxib29sZWFuPignbm9Mb2dpbicsIGZhbHNlKSkge1xuICAgICAgdGhpcy5sb2FkUmVtb3Rlcyh0aGlzLmdldFJlbW90ZXMobnVsbCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudWkuY3VycmVudEFwcGxpY2F0aW9uQ29uZmlnXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChjb25maWc6IFBsdWdpbnNDb25maWcpID0+IHRoaXMubG9hZFJlbW90ZXModGhpcy5nZXRSZW1vdGVzKGNvbmZpZykpKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlV2VNYXJrUGx1Z2luc0FzTG9hZGVkKCk6IHZvaWQge1xuICAgIC8vIGVuc3VyZSB3ZSBjYWxsIG1hcmtQbHVnaW5zQXNMb2FkZWQgb24gdGhlIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlXG4gICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5tYXJrUGx1Z2luc0FzTG9hZGVkKCk7XG4gIH1cbn1cbiIsIjxjOHktbG9naW4gKm5nSWY9XCJzaG93TG9naW4kIHwgYXN5bmNcIj48L2M4eS1sb2dpbj5cblxuPGRpdiBjbGFzcz1cImluaXQtbG9hZFwiICpuZ0lmPVwic2hvd0xvYWRpbmdJbmRpY2F0b3IkIHwgYXN5bmNcIj5cbiAgPGRpdiBjbGFzcz1cInNwaW5uZXItc25ha2VcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1haW5sb2dvLXBsYWNlaG9sZGVyIG1haW5sb2dvXCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdlxuICAqbmdJZj1cInNob3dNYWluVmlldyQgfCBhc3luY1wiXG4gIFtjbGFzcy5oZWFkLW9wZW5dPVwiaGVhZGVyU2VydmljZS5oZWFkZXJPcGVuXCJcbj5cbiAgPGM4eS1oZWFkZXItYmFyICNoZWFkZXI+PC9jOHktaGVhZGVyLWJhcj5cbiAgPGM4eS1kcmF3ZXItb3V0bGV0XG4gICAgcm9sZT1cInJlZ2lvblwiXG4gICAgcG9zaXRpb249XCJsZWZ0XCJcbiAgICBkYXRhLWN5PVwiYm9vdHN0cmFwLnRlbXBsYXRlLS1jOHktZHJhd2VyLW91dGxldFwiXG4gICAgW29wZW5dPVwiaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jXCJcbiAgICBbdGFiaW5kZXhdPVwiKGhlYWRlclNlcnZpY2UubmF2aWdhdG9yT3BlbiQgfCBhc3luYykgPyAnMCcgOiAnLTEnXCJcbiAgPjwvYzh5LWRyYXdlci1vdXRsZXQ+XG5cbiAgPGRpdiBjbGFzcz1cImFsZXJ0c1wiPlxuICAgIDxjOHktYWxlcnQtb3V0bGV0PjwvYzh5LWFsZXJ0LW91dGxldD5cbiAgPC9kaXY+XG4gIDxjOHktdGFicy1vdXRsZXRcbiAgICAjdGFic0NvbXBvbmVudFxuICAgIFt0YWJzXT1cInRhYnMuaXRlbXMkIHwgYXN5bmNcIlxuICAgIFtuYXZpZ2F0b3JPcGVuXT1cImhlYWRlclNlcnZpY2UubmF2aWdhdG9yT3BlbiQgfCBhc3luY1wiXG4gICAgW29yaWVudGF0aW9uXT1cInRhYnMub3JpZW50YXRpb24kIHwgYXN5bmNcIlxuICAgIHJvbGU9XCJuYXZpZ2F0aW9uXCJcbiAgPjwvYzh5LXRhYnMtb3V0bGV0PlxuICA8Yzh5LWFjdGlvbi1iYXJcbiAgICAjYWN0aW9uQmFyQ29tcG9uZW50XG4gICAgW25hdmlnYXRvck9wZW5dPVwiaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jXCJcbiAgICBbaGFzVGFic109XCJ0YWJzQ29tcG9uZW50Lmhhc1RhYnNcIlxuICAgIFtpc1RhYnNIb3Jpem9udGFsXT1cInRhYnNDb21wb25lbnQ/LmlzSG9yaXpvbnRhbFwiXG4gICAgW2l0ZW1zJF09XCJhY3Rpb25CYXIuaXRlbXMkXCJcbiAgICByb2xlPVwiZ3JvdXBcIlxuICA+PC9jOHktYWN0aW9uLWJhcj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICBvcGVuOiBoZWFkZXJTZXJ2aWNlLm5hdmlnYXRvck9wZW4kIHwgYXN5bmMsXG4gICAgICAnbm8tYXBwcy1tYXJnaW4nOiBub0FwcHNNYXJnaW4kIHwgYXN5bmMsXG4gICAgICAnaG9yaXpvbnRhbC10YWJzJzogdGFic0NvbXBvbmVudC5pc0hvcml6b250YWwsXG4gICAgICAndmVydGljYWwtdGFicyc6ICF0YWJzQ29tcG9uZW50LmlzSG9yaXpvbnRhbCxcbiAgICAgICdoYXMtdGFicyc6IHRhYnNDb21wb25lbnQuaGFzVGFicyxcbiAgICAgICdoYXMtYWN0aW9uLWJhcic6ICFhY3Rpb25CYXJDb21wb25lbnQ/LmhpZGRlblxuICAgIH1cIlxuICA+XG4gICAgPG1haW4gaWQ9XCJtYWluLWNvbnRlbnRcIiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIiNjOHktbGVnYWN5LXZpZXdcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8IS0tIGxlZ2FjeSBuZy12aWV3LCB3aWxsIG5vdCBiZSBtaWdyYXRlZCBhdG0gLS0+XG4gICAgPC9tYWluPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwic2hvd1NldHVwJCB8IGFzeW5jXCI+XG4gIDxjOHktaGVhZGVyLWJhciBbc2ltcGxlXT1cInRydWVcIj48L2M4eS1oZWFkZXItYmFyPlxuICA8ZGl2IGNsYXNzPVwibWNvbnRhaW5lclwiIHJvbGU9XCJtYWluXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgICAgPGM4eS1zZXR1cD48L2M4eS1zZXR1cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGM4eS1jb29raWUtYmFubmVyPjwvYzh5LWNvb2tpZS1iYW5uZXI+XG4iXX0=
|