@c8y/ngx-components 1021.34.1 → 1021.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts +1 -0
  2. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts.map +1 -1
  3. package/assets-navigator/asset-selector/asset-selector.component.d.ts +2 -1
  4. package/assets-navigator/asset-selector/asset-selector.component.d.ts.map +1 -1
  5. package/assets-navigator/asset-selector/asset-selector.service.d.ts +15 -0
  6. package/assets-navigator/asset-selector/asset-selector.service.d.ts.map +1 -1
  7. package/context-dashboard/context-dashboard.service.d.ts +1 -1
  8. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  9. package/core/common/service-registry.model.d.ts +2 -1
  10. package/core/common/service-registry.model.d.ts.map +1 -1
  11. package/esm2022/assets-navigator/asset-selector/asset-selector-node.component.mjs +5 -3
  12. package/esm2022/assets-navigator/asset-selector/asset-selector.component.mjs +13 -4
  13. package/esm2022/assets-navigator/asset-selector/asset-selector.service.mjs +28 -1
  14. package/esm2022/assets-navigator/asset-selector/miller-view.component.mjs +1 -1
  15. package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.mjs +1 -1
  16. package/esm2022/cockpit-config/root-node-config.component.mjs +1 -1
  17. package/esm2022/context-dashboard/context-dashboard.service.mjs +30 -9
  18. package/esm2022/core/common/service-registry.model.mjs +1 -1
  19. package/esm2022/device-grid/columns/group.filtering-form-renderer.component.mjs +1 -1
  20. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +44 -6
  21. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +1 -1
  23. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +1 -1
  25. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  26. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +29 -8
  27. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components-device-grid.mjs +1 -1
  29. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  30. package/locales/de.po +10 -8
  31. package/locales/es.po +9 -11
  32. package/locales/fr.po +9 -11
  33. package/locales/ja_JP.po +4 -1
  34. package/locales/ko.po +4 -1
  35. package/locales/nl.po +9 -11
  36. package/locales/pl.po +15 -18
  37. package/locales/pt_BR.po +11 -13
  38. package/locales/zh_CN.po +4 -1
  39. package/locales/zh_TW.po +4 -1
  40. package/package.json +1 -1
@@ -71,6 +71,7 @@ export declare class AssetSelectorNodeComponent implements OnInit {
71
71
  * @ignore
72
72
  */
73
73
  unsubscribe$: Subject<void>;
74
+ isNodeSelectable: boolean;
74
75
  /** sets the `btn-pending` class in the load more button */
75
76
  isLoading: boolean;
76
77
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"asset-selector-node.component.d.ts","sourceRoot":"","sources":["../../../assets-navigator/asset-selector/asset-selector-node.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAa,YAAY,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;;AAEzC,qBAIa,0BAA2B,YAAW,MAAM;IA6ErD,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,EAAE;IACH,oBAAoB,EAAE,oBAAoB;IA9EnD;;OAEG;IACM,IAAI,EAAE,SAAS,CAAC;IACzB;;OAEG;IACM,QAAQ,EAAE,SAAS,CAAC;IAC7B;;OAEG;IACM,WAAW,EAAE,WAAW,GAAG,WAAW,EAAE,CAAM;IACvD;;OAEG;IACM,QAAQ,UAAS;IAC1B;;OAEG;IACM,KAAK,UAAS;IACvB;;OAEG;IACM,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAU;IAC1C;;;OAGG;IACM,KAAK,MAAC;IACf;;OAEG;IACM,MAAM,EAAE,SAAS,CAAC;IAC3B;;OAEG;IACM,0BAA0B,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAExE,QAAQ,UAAS;IAC1B;;OAEG;IACO,cAAc,EAAE,YAAY,CAAC,OAAO,CAAC,CAAsB;IACrE;;OAEG;IACO,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,CAAsB;IACtE;;OAEG;IACO,UAAU,EAAE,YAAY,CAAC;QAAE,YAAY,EAAE,QAAQ,GAAG,KAAK,CAAC;QAAC,EAAE,EAAE,cAAc,CAAA;KAAE,CAAC,CACrE;IAErB,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,SAAK;IACV;;OAEG;IACH,YAAY,gBAAuB;IAEnC,2DAA2D;IAC3D,SAAS,UAAS;IAClB;;OAEG;IACH,IAAI,WAAW,0BAEd;IAED;;OAEG;gBAEO,gBAAgB,EAAE,gBAAgB,EAClC,EAAE,EAAE,iBAAiB,EACtB,oBAAoB,EAAE,oBAAoB;IAGnD;;OAEG;IACG,QAAQ;IA2Bd;;OAEG;IACH,KAAK;IAKL,wBAAwB,CAAC,IAAI,EAAE,SAAS;IAaxC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS;IAQxB;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS;IAY/B;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB,UAAU;IAOV,QAAQ;IAOR,OAAO,CAAC,eAAe;yCAvLZ,0BAA0B;2CAA1B,0BAA0B;CAmMtC"}
1
+ {"version":3,"file":"asset-selector-node.component.d.ts","sourceRoot":"","sources":["../../../assets-navigator/asset-selector/asset-selector-node.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAa,YAAY,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;;AAEzC,qBAIa,0BAA2B,YAAW,MAAM;IA8ErD,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,EAAE;IACH,oBAAoB,EAAE,oBAAoB;IA/EnD;;OAEG;IACM,IAAI,EAAE,SAAS,CAAC;IACzB;;OAEG;IACM,QAAQ,EAAE,SAAS,CAAC;IAC7B;;OAEG;IACM,WAAW,EAAE,WAAW,GAAG,WAAW,EAAE,CAAM;IACvD;;OAEG;IACM,QAAQ,UAAS;IAC1B;;OAEG;IACM,KAAK,UAAS;IACvB;;OAEG;IACM,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAU;IAC1C;;;OAGG;IACM,KAAK,MAAC;IACf;;OAEG;IACM,MAAM,EAAE,SAAS,CAAC;IAC3B;;OAEG;IACM,0BAA0B,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAExE,QAAQ,UAAS;IAC1B;;OAEG;IACO,cAAc,EAAE,YAAY,CAAC,OAAO,CAAC,CAAsB;IACrE;;OAEG;IACO,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,CAAsB;IACtE;;OAEG;IACO,UAAU,EAAE,YAAY,CAAC;QAAE,YAAY,EAAE,QAAQ,GAAG,KAAK,CAAC;QAAC,EAAE,EAAE,cAAc,CAAA;KAAE,CAAC,CACrE;IAErB,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,SAAK;IACV;;OAEG;IACH,YAAY,gBAAuB;IACnC,gBAAgB,UAAQ;IAExB,2DAA2D;IAC3D,SAAS,UAAS;IAClB;;OAEG;IACH,IAAI,WAAW,0BAEd;IAED;;OAEG;gBAEO,gBAAgB,EAAE,gBAAgB,EAClC,EAAE,EAAE,iBAAiB,EACtB,oBAAoB,EAAE,oBAAoB;IAGnD;;OAEG;IACG,QAAQ;IA4Bd;;OAEG;IACH,KAAK;IAKL,wBAAwB,CAAC,IAAI,EAAE,SAAS;IAaxC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS;IAQxB;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS;IAY/B;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB,UAAU;IAOV,QAAQ;IAOR,OAAO,CAAC,eAAe;yCAzLZ,0BAA0B;2CAA1B,0BAA0B;CAqMtC"}
@@ -49,6 +49,7 @@ export declare class AssetSelectorComponent extends AssetSelectorBase implements
49
49
  */
50
50
  selectedItems: IIdentified[] | IIdentified;
51
51
  container: '' | 'body';
52
+ isNodeSelectable: boolean | ((node: IIdentified) => boolean);
52
53
  disabled: boolean;
53
54
  /**
54
55
  * Emits if one item was selected (all currently selected nodes).
@@ -140,6 +141,6 @@ export declare class AssetSelectorComponent extends AssetSelectorBase implements
140
141
  mo: IManagedObject;
141
142
  }): void;
142
143
  static ɵfac: i0.ɵɵFactoryDeclaration<AssetSelectorComponent, never>;
143
- static ɵcmp: i0.ɵɵComponentDeclaration<AssetSelectorComponent, "c8y-asset-selector", never, { "config": { "alias": "config"; "required": false; }; "active": { "alias": "active"; "required": false; }; "index": { "alias": "index"; "required": false; }; "asset": { "alias": "asset"; "required": false; }; "selectedDevice": { "alias": "selectedDevice"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "rootNode": { "alias": "rootNode"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "container": { "alias": "container"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "onSelected": "onSelected"; "onClearSelected": "onClearSelected"; "onRowSelected": "onRowSelected"; "onLoad": "onLoad"; }, never, never, false, never>;
144
+ static ɵcmp: i0.ɵɵComponentDeclaration<AssetSelectorComponent, "c8y-asset-selector", never, { "config": { "alias": "config"; "required": false; }; "active": { "alias": "active"; "required": false; }; "index": { "alias": "index"; "required": false; }; "asset": { "alias": "asset"; "required": false; }; "selectedDevice": { "alias": "selectedDevice"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "rootNode": { "alias": "rootNode"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "container": { "alias": "container"; "required": false; }; "isNodeSelectable": { "alias": "isNodeSelectable"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "onSelected": "onSelected"; "onClearSelected": "onClearSelected"; "onRowSelected": "onRowSelected"; "onLoad": "onLoad"; }, never, never, false, never>;
144
145
  }
145
146
  //# sourceMappingURL=asset-selector.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"asset-selector.component.d.ts","sourceRoot":"","sources":["../../../assets-navigator/asset-selector/asset-selector.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asset-selector.component.d.ts","sourceRoot":"","sources":["../../../assets-navigator/asset-selector/asset-selector.component.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,22 @@
1
1
  import { IIdentified, IManagedObject } from '@c8y/client';
2
2
  import { AssetNodeService } from '../asset-node.service';
3
+ import { GroupNode } from './group-node';
3
4
  import * as i0 from "@angular/core";
4
5
  export declare class AssetSelectorService extends AssetNodeService {
6
+ /**
7
+ * Function which will check if the node is selectable.
8
+ */
9
+ private isNodeSelectableFn;
10
+ /**
11
+ * Sets the function that will decide if the node is selectable.
12
+ * @param fn A boolean or a function that will decide if the node is selectable.
13
+ */
14
+ setIsNodeSelectable(fn: boolean | ((node: GroupNode) => boolean)): void;
15
+ /**
16
+ * Checks if the node is selectable.
17
+ * @param node The node to check.
18
+ */
19
+ isNodeSelectable(node: GroupNode): boolean;
5
20
  /**
6
21
  * Simplifies the object model based on the selected mode.
7
22
  * @param obj The selected asset.
@@ -1 +1 @@
1
- {"version":3,"file":"asset-selector.service.d.ts","sourceRoot":"","sources":["../../../assets-navigator/asset-selector/asset-selector.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;;AAGzD,qBAGa,oBAAqB,SAAQ,gBAAgB;IACxD;;;;OAIG;IACH,cAAc,CACZ,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,EAC5B,SAAS,EAAE,QAAQ,GAAG,MAAM,GAC3B,OAAO,CAAC,cAAc,CAAC,GAAG,WAAW;IAIxC,aAAa,CACX,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,WAAW,EAAE,EAC9C,IAAI,EAAE,QAAQ,GAAG,MAAM,GACtB,OAAO,CAAC,cAAc,CAAC,GAAG,WAAW;IAexC;;;;;OAKG;IACH,kBAAkB,CAChB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,EAC5D,UAAU,EAAE,WAAW;IAKzB,OAAO,CAAC,mBAAmB;yCA5ChB,oBAAoB;6CAApB,oBAAoB;CAwDhC"}
1
+ {"version":3,"file":"asset-selector.service.d.ts","sourceRoot":"","sources":["../../../assets-navigator/asset-selector/asset-selector.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;;AAEzC,qBAGa,oBAAqB,SAAQ,gBAAgB;IACxD;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAkD;IAE5E;;;OAGG;IACH,mBAAmB,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,GAAG,IAAI;IAIvE;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQ1C;;;;OAIG;IACH,cAAc,CACZ,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,EAC5B,SAAS,EAAE,QAAQ,GAAG,MAAM,GAC3B,OAAO,CAAC,cAAc,CAAC,GAAG,WAAW;IAIxC,aAAa,CACX,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,WAAW,EAAE,EAC9C,IAAI,EAAE,QAAQ,GAAG,MAAM,GACtB,OAAO,CAAC,cAAc,CAAC,GAAG,WAAW;IAexC;;;;;OAKG;IACH,kBAAkB,CAChB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,EAC5D,UAAU,EAAE,WAAW;IAKzB,OAAO,CAAC,mBAAmB;yCArEhB,oBAAoB;6CAApB,oBAAoB;CAiFhC"}
@@ -82,7 +82,7 @@ export declare class ContextDashboardService {
82
82
  * @param value Fragment value
83
83
  * @returns Fragment for dashboard
84
84
  */
85
- createFragmentKey(contextDashboardType: ContextDashboardType, value: string): string;
85
+ createFragmentKey<T extends ContextDashboardType, V extends string>(contextDashboardType: T, value: V): `c8y_Dashboard!${T}!${V}`;
86
86
  /**
87
87
  * Indicates if dashboard can be set to type dashboard.
88
88
  * First, it checks if deviceTypeValue exists and if user has permission to set dashboard type.
@@ -1 +1 @@
1
- {"version":3,"file":"context-dashboard.service.d.ts","sourceRoot":"","sources":["../../context-dashboard/context-dashboard.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-dashboard.service.d.ts","sourceRoot":"","sources":["../../context-dashboard/context-dashboard.service.ts"],"names":[],"mappings":"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"}
@@ -47,12 +47,13 @@ declare global {
47
47
  canShowButton(device: IManagedObject): boolean;
48
48
  /**
49
49
  * Provides the properties necessary to render the button.
50
- * @returns An object containing the button's title, icon, label, and click action.
50
+ * @returns An object containing the button's title, icon, label, click action and optionally a class.
51
51
  */
52
52
  getButtonInfo(): {
53
53
  title: string;
54
54
  icon: string;
55
55
  label: string;
56
+ class?: string;
56
57
  action: (device: IManagedObject) => void | Promise<void>;
57
58
  };
58
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service-registry.model.d.ts","sourceRoot":"","sources":["../../../core/common/service-registry.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,CAAC,MAAM,CAAC;IACb;;OAEG;IAEH,UAAU,yBAAyB,CAAC;QAClC;;;WAGG;QACH,UAAU,aAAc,SAAQ,qBAAqB;YACnD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;SACxB;QAGD,UAAU,qBAAqB;YAE7B,6BAA6B,EAAE,oCAAoC,CAAC;SACrE;QAED;;;WAGG;QACH,UAAU,oCAAoC;YAC5C;;;;eAIG;YACH,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC;YAE/C;;;eAGG;YACH,aAAa,IAAI;gBACf,KAAK,EAAE,MAAM,CAAC;gBACd,IAAI,EAAE,MAAM,CAAC;gBACb,KAAK,EAAE,MAAM,CAAC;gBACd,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;aAC1D,CAAC;SACH;KACF;CACF"}
1
+ {"version":3,"file":"service-registry.model.d.ts","sourceRoot":"","sources":["../../../core/common/service-registry.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,CAAC,MAAM,CAAC;IACb;;OAEG;IAEH,UAAU,yBAAyB,CAAC;QAClC;;;WAGG;QACH,UAAU,aAAc,SAAQ,qBAAqB;YACnD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;SACxB;QAGD,UAAU,qBAAqB;YAE7B,6BAA6B,EAAE,oCAAoC,CAAC;SACrE;QAED;;;WAGG;QACH,UAAU,oCAAoC;YAC5C;;;;eAIG;YACH,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC;YAE/C;;;eAGG;YACH,aAAa,IAAI;gBACf,KAAK,EAAE,MAAM,CAAC;gBACd,IAAI,EAAE,MAAM,CAAC;gBACb,KAAK,EAAE,MAAM,CAAC;gBACd,KAAK,CAAC,EAAE,MAAM,CAAC;gBACf,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;aAC1D,CAAC;SACH;KACF;CACF"}
@@ -63,6 +63,7 @@ export class AssetSelectorNodeComponent {
63
63
  * @ignore
64
64
  */
65
65
  this.unsubscribe$ = new Subject();
66
+ this.isNodeSelectable = true;
66
67
  /** sets the `btn-pending` class in the load more button */
67
68
  this.isLoading = false;
68
69
  }
@@ -70,6 +71,7 @@ export class AssetSelectorNodeComponent {
70
71
  * @ignore
71
72
  */
72
73
  async ngOnInit() {
74
+ this.isNodeSelectable = this.assetSelectorService.isNodeSelectable(this.node);
73
75
  this.breadcrumb = this.node.label;
74
76
  this.setupBreadcrumbsAndLevel(this.node);
75
77
  if (this.node instanceof GroupNode) {
@@ -164,11 +166,11 @@ export class AssetSelectorNodeComponent {
164
166
  this.cd.markForCheck();
165
167
  }
166
168
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetSelectorNodeComponent, deps: [{ token: i1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i2.AssetSelectorService }], target: i0.ɵɵFactoryTarget.Component }); }
167
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: { node: "node", rootNode: "rootNode", preselected: "preselected", showPath: "showPath", multi: "multi", view: "view", index: "index", active: "active", handleNextMillerViewColumn: "handleNextMillerViewColumn", disabled: "disabled" }, outputs: { isLoadingState: "isLoadingState", onSelect: "onSelect", onDeselect: "onDeselect" }, ngImport: i0, template: "<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n [title]=\"expandTitle\"\n class=\"collapse-btn btn-dot\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n [attr.aria-expanded]=\"node.open\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div class=\"d-flex a-i-center p-t-4 p-b-4 \" *ngIf=\"node.toString() !== 'LoadMoreNode'\">\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 m-r-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n \n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [disabled]=\"disabled\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: ["node", "rootNode", "preselected", "showPath", "multi", "view", "index", "active", "handleNextMillerViewColumn", "disabled"], outputs: ["isLoadingState", "onSelect", "onDeselect"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
169
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: { node: "node", rootNode: "rootNode", preselected: "preselected", showPath: "showPath", multi: "multi", view: "view", index: "index", active: "active", handleNextMillerViewColumn: "handleNextMillerViewColumn", disabled: "disabled" }, outputs: { isLoadingState: "isLoadingState", onSelect: "onSelect", onDeselect: "onDeselect" }, ngImport: i0, template: "<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n class=\"collapse-btn btn-dot\"\n [title]=\"expandTitle | translate\"\n [attr.aria-expanded]=\"node.open\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div\n class=\"d-flex a-i-center p-t-4 p-b-4\"\n *ngIf=\"node.toString() !== 'LoadMoreNode' && isNodeSelectable\"\n >\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 m-r-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [disabled]=\"disabled\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: ["node", "rootNode", "preselected", "showPath", "multi", "view", "index", "active", "handleNextMillerViewColumn", "disabled"], outputs: ["isLoadingState", "onSelect", "onDeselect"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
168
170
  }
169
171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetSelectorNodeComponent, decorators: [{
170
172
  type: Component,
171
- args: [{ selector: 'c8y-asset-selector-node', template: "<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n [title]=\"expandTitle\"\n class=\"collapse-btn btn-dot\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n [attr.aria-expanded]=\"node.open\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div class=\"d-flex a-i-center p-t-4 p-b-4 \" *ngIf=\"node.toString() !== 'LoadMoreNode'\">\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 m-r-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n \n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [disabled]=\"disabled\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n" }]
173
+ args: [{ selector: 'c8y-asset-selector-node', template: "<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n class=\"collapse-btn btn-dot\"\n [title]=\"expandTitle | translate\"\n [attr.aria-expanded]=\"node.open\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div\n class=\"d-flex a-i-center p-t-4 p-b-4\"\n *ngIf=\"node.toString() !== 'LoadMoreNode' && isNodeSelectable\"\n >\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 m-r-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [disabled]=\"disabled\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n" }]
172
174
  }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i2.AssetSelectorService }], propDecorators: { node: [{
173
175
  type: Input
174
176
  }], rootNode: [{
@@ -196,4 +198,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
196
198
  }], onDeselect: [{
197
199
  type: Output
198
200
  }] } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3Itbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hc3NldHMtbmF2aWdhdG9yL2Fzc2V0LXNlbGVjdG9yL2Fzc2V0LXNlbGVjdG9yLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1zZWxlY3Rvci9hc3NldC1zZWxlY3Rvci1ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7O0FBTXpDLE1BQU0sT0FBTywwQkFBMEI7SUFrRXJDOztPQUVHO0lBQ0gsSUFBSSxXQUFXO1FBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUNVLGdCQUFrQyxFQUNsQyxFQUFxQixFQUN0QixvQkFBMEM7UUFG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RUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJSSxjQUFjO3NCQUF2QixNQUFNO2dCQUlHLFFBQVE7c0JBQWpCLE1BQU07Z0JBSUcsVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSWRlbnRpZmllZCwgSU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFzc2V0c05hdmlnYXRvckFjdGlvbiB9IGZyb20gJy4uL2FjdGlvbi5lbnVtJztcbmltcG9ydCB7IEFzc2V0U2VsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi9hc3NldC1zZWxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEdyb3VwTm9kZSB9IGZyb20gJy4vZ3JvdXAtbm9kZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hc3NldC1zZWxlY3Rvci1ub2RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2V0LXNlbGVjdG9yLW5vZGUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0U2VsZWN0b3JOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IG5vZGUuXG4gICAqL1xuICBASW5wdXQoKSBub2RlOiBHcm91cE5vZGU7XG4gIC8qKlxuICAgKiBSb290IG5vZGUuIE5vZGUgZm91bmQgYXQgdGhlIHRvcCBvZiB0aGUgaGllcmFyY2h5LlxuICAgKi9cbiAgQElucHV0KCkgcm9vdE5vZGU6IEdyb3VwTm9kZTtcbiAgLyoqXG4gICAqIEFsbCBwcmVzZWxlY3RlZCBpdGVtcy5cbiAgICovXG4gIEBJbnB1dCgpIHByZXNlbGVjdGVkOiBJSWRlbnRpZmllZCB8IElJZGVudGlmaWVkW10gPSBbXTtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgcGF0aCBiZSBzaG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dQYXRoID0gZmFsc2U7XG4gIC8qKlxuICAgKiBDYW4gdGhlIHVzZXIgc2VsZWN0IG11bHRpcGxlIGFzc2V0cy5cbiAgICovXG4gIEBJbnB1dCgpIG11bHRpID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBwYXRoIHRvIHRoZSBub2RlLlxuICAgKi9cbiAgQElucHV0KCkgdmlldzogJ3RyZWUnIHwgJ21pbGxlcicgPSAndHJlZSc7XG4gIC8qKlxuICAgKiBVc2VkIG9ubHkgZm9yIG1pbGxlci12aWV3LCBkaXNwbGF5cyB0aGUgY29sdW1uIGxldmVsIGZvciB0aGUgY3VycmVudCBub2RlLlxuICAgKiBFLmcgaWYgdGhlIGluZGV4IGlzIG9uZSwgdGhpcyB3aWxsIGJlIHNlY29uZCBjb2x1bW4uXG4gICAqL1xuICBASW5wdXQoKSBpbmRleDtcbiAgLyoqXG4gICAqIFNldHMgdGhlIGFjdGl2ZSBub2RlLlxuICAgKi9cbiAgQElucHV0KCkgYWN0aXZlOiBHcm91cE5vZGU7XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHZlcmlmeSB0aGUgbmVlZCB0byBhZGQgYSBjb2x1bW4gd2hlbiBhIG5vZGUgaXMgY2xpY2tlZC5cbiAgICovXG4gIEBJbnB1dCgpIGhhbmRsZU5leHRNaWxsZXJWaWV3Q29sdW1uOiAobm9kZTogR3JvdXBOb2RlLCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBFdmVudCwgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGxvYWRpbmcgb2YgdGhlIG5vZGUgaGFzIGNvbXBsZXRlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBpc0xvYWRpbmdTdGF0ZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKipcbiAgICogRXZlbnQgdGhhdCBlbWl0cyB3aGVuIGEgbm9kZSBpcyBzZWxlY3RlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPElNYW5hZ2VkT2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqXG4gICAqIEV2ZW50IHRoYXQgZW1pdHMgd2hlbiBhIG5vZGUgaXMgZGVzZWxlY3RlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvbkRlc2VsZWN0OiBFdmVudEVtaXR0ZXI8eyBkZXNlbGVjdE1vZGU6ICdzaW5nbGUnIHwgJ2FsbCc7IG1vOiBJTWFuYWdlZE9iamVjdCB9PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGJyZWFkY3J1bWI6IHN0cmluZztcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGxldmVsID0gMDtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqIHNldHMgdGhlIGBidG4tcGVuZGluZ2AgY2xhc3MgaW4gdGhlIGxvYWQgbW9yZSBidXR0b24gKi9cbiAgaXNMb2FkaW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBnZXQgZXhwYW5kVGl0bGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLm5vZGUub3BlbiA/IGdldHRleHQoJ0V4cGFuZCcpIDogZ2V0dGV4dCgnQ29sbGFwc2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlIG9ubHkgZGlcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgYXNzZXRTZWxlY3RvclNlcnZpY2U6IEFzc2V0U2VsZWN0b3JTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5icmVhZGNydW1iID0gdGhpcy5ub2RlLmxhYmVsO1xuICAgIHRoaXMuc2V0dXBCcmVhZGNydW1ic0FuZExldmVsKHRoaXMubm9kZSk7XG5cbiAgICBpZiAodGhpcy5ub2RlIGluc3RhbmNlb2YgR3JvdXBOb2RlKSB7XG4gICAgICB0aGlzLm5vZGUuaG9va0V2ZW50cygpO1xuICAgIH1cblxuICAgIC8vIG9wZW4gb24gc3RhcnR1cFxuICAgIGlmICh0aGlzLm5vZGUucm9vdCkge1xuICAgICAgdGhpcy5jbGljaygpO1xuICAgIH1cblxuICAgIC8vIHVzZWQgZm9yIGxvYWRpbmcgYW5kIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHRoZSBub2RlIGlzIG5vIGxvbmdlciBsb2FkaW5nLlxuICAgIGlmICh0aGlzLm5vZGUuZXZlbnRzKSB7XG4gICAgICB0aGlzLm5vZGUuZXZlbnRzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgICAgZmlsdGVyKChhOiBBc3NldHNOYXZpZ2F0b3JBY3Rpb24pID0+IGEgPT09IEFzc2V0c05hdmlnYXRvckFjdGlvbi5MT0FESU5HX0RPTkUpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdTdGF0ZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBub2RlLlxuICAgKi9cbiAgY2xpY2soKSB7XG4gICAgdGhpcy5ub2RlLm9wZW4gPSAhdGhpcy5ub2RlLm9wZW47XG4gICAgdGhpcy5ub2RlLmNsaWNrKHsgb3BlbjogdGhpcy5ub2RlLm9wZW4gfSk7XG4gIH1cblxuICBzZXR1cEJyZWFkY3J1bWJzQW5kTGV2ZWwobm9kZTogR3JvdXBOb2RlKSB7XG4gICAgaWYgKG5vZGUucGFyZW50cyAmJiBub2RlLnBhcmVudHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudHNbMF0gYXMgR3JvdXBOb2RlO1xuICAgICAgdGhpcy5icmVhZGNydW1iID1cbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocGFyZW50LmxhYmVsKSArXG4gICAgICAgICcgPiAnICtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5icmVhZGNydW1iKTtcbiAgICAgIHRoaXMubGV2ZWwrKztcblxuICAgICAgdGhpcy5zZXR1cEJyZWFkY3J1bWJzQW5kTGV2ZWwocGFyZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgbm9kZSBhbmQgZW1pdHMgYSBjaGFuZ2Ugb24gdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBub2RlIFRoZSBub2RlIHRvIHNlbGVjdC5cbiAgICovXG4gIHNlbGVjdGVkKG5vZGU6IEdyb3VwTm9kZSkge1xuICAgIGlmIChub2RlLm1vKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihub2RlLm1vKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbGljaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2xpY2tzIG9uIGEgaXRlbSBpbiBNaWxsZXIgVmlldy5cbiAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdGhhdCB3YXMgY2xpY2tlZC5cbiAgICovXG4gIG1pbGxlclZpZXdDbGljayhub2RlOiBHcm91cE5vZGUpIHtcbiAgICBub2RlLmJyZWFkY3J1bWIgPSB0aGlzLmJyZWFkY3J1bWI7XG5cbiAgICBpZiAoIXRoaXMuaGFuZGxlTmV4dE1pbGxlclZpZXdDb2x1bW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkSGFuZGxlRGVmYXVsdCA9IHRoaXMuaGFuZGxlTmV4dE1pbGxlclZpZXdDb2x1bW4obm9kZSwgdGhpcy5pbmRleCk7XG4gICAgaWYgKHNob3VsZEhhbmRsZURlZmF1bHQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgaXNTZWxlY3RlZCgpIHtcbiAgICBpZiAoIXRoaXMubm9kZS5tbykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3NldFNlbGVjdG9yU2VydmljZS5nZXRJbmRleE9mU2VsZWN0ZWQodGhpcy5wcmVzZWxlY3RlZCwgdGhpcy5ub2RlLm1vKSA+IC0xO1xuICB9XG5cbiAgaXNBY3RpdmUoKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlICYmIHRoaXMubm9kZS5tbykge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlLm1vPy5pZCA9PT0gdGhpcy5ub2RlLm1vLmlkO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbihzZWxlY3RlZE1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICghdGhpcy5tdWx0aSkge1xuICAgICAgdGhpcy5vbkRlc2VsZWN0LmVtaXQoeyBkZXNlbGVjdE1vZGU6ICdhbGwnLCBtbzogc2VsZWN0ZWRNbyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLm9uRGVzZWxlY3QuZW1pdCh7IGRlc2VsZWN0TW9kZTogJ3NpbmdsZScsIG1vOiBzZWxlY3RlZE1vIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9uU2VsZWN0LmVtaXQoc2VsZWN0ZWRNbyk7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPCEtLSBIaWVyYXJjaHkgdHJlZSAtLT5cbjxkaXZcbiAgY2xhc3M9XCJjOHktYXNzZXQtc2VsZWN0b3JfX2l0ZW1cIlxuICBbbmdTdHlsZV09XCJ7XG4gICAgJ21hcmdpbi1sZWZ0JzogbGV2ZWwgPiAxID8gMTYgKyAncHgnIDogJzAnXG4gIH1cIlxuICAqbmdJZj1cInZpZXcgPT09ICd0cmVlJ1wiXG4gIFthdHRyLnJvbGVdPVwidmlldyA9PT0gJ3RyZWUnID8gJ3RyZWUnIDogJ2xpc3QnXCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdjOHktYXNzZXQtc2VsZWN0b3JfX2l0ZW0tLW1vcmUnOiBub2RlPy5pY29uID09PSAncGx1cycsXG4gICAgJ2M4eS1hc3NldC1zZWxlY3Rvcl9faXRlbS0tc3RhcnQnOiBsZXZlbCA9PT0gMFxuICB9XCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYzh5LWFzc2V0LXNlbGVjdG9yX19ub2RlXCJcbiAgICB0aXRsZT1cInt7IGJyZWFkY3J1bWIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICpuZ0lmPVwibm9kZSAmJiAhbm9kZS5yb290ICYmICFub2RlLmhpZGRlblwiXG4gICAgW2F0dHIucm9sZV09XCJ2aWV3ID09PSAndHJlZScgPyAndHJlZWl0ZW0nIDogJ2xpc3RpdGVtJ1wiXG4gICAgW25nQ2xhc3NdPVwieyAnYzh5LWFzc2V0LXNlbGVjdG9yX19ub2RlLS1vcGVuJzogbm9kZT8ub3BlbiB9XCJcbiAgPlxuICAgPCEtLSBleHBhbmQgYnV0dG9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjOHktYXNzZXQtc2VsZWN0b3JfX25vZGVfX2J0bi1zcGFjZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW3RpdGxlXT1cImV4cGFuZFRpdGxlXCJcbiAgICAgICAgY2xhc3M9XCJjb2xsYXBzZS1idG4gYnRuLWRvdFwiXG4gICAgICAgIChjbGljayk9XCJjbGljaygpXCJcbiAgICAgICAgKm5nSWY9XCJub2RlLmlzR3JvdXAoKSB8fCBub2RlLmhhc0NoaWxkRGV2aWNlcygpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJub2RlLm9wZW5cIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwiYW5nbGUtcmlnaHRcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC10LTQgcC1iLTQgXCIgKm5nSWY9XCJub2RlLnRvU3RyaW5nKCkgIT09ICdMb2FkTW9yZU5vZGUnXCI+XG4gICAgICA8bGFiZWwgW25nQ2xhc3NdPVwieyAnYzh5LWNoZWNrYm94JzogbXVsdGksICdjOHktcmFkaW8nOiAhbXVsdGkgfVwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBpZD1cIm5vZGVMYWJlbFwiXG4gICAgICAgICAgW3R5cGVdPVwibXVsdGkgPyAnY2hlY2tib3gnIDogJ3JhZGlvJ1wiXG4gICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgIW5vZGUuZ3JvdXBzU2VsZWN0YWJsZSAmJiBub2RlLmlzR3JvdXAoKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInNyLW9ubHlcIlxuICAgICAgICAgIGZvcj1cIm5vZGVMYWJlbFwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgID5cbiAgICAgICAgICBOb2RlIGxhYmVsXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGdyb3VwIGJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImM4eS1hc3NldC1zZWxlY3Rvcl9fYnRuIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhbm9kZS5vcGVuXCJcbiAgICAgICpuZ0lmPVwibm9kZS5pc0dyb3VwKCkgfHwgbm9kZS5oYXNDaGlsZERldmljZXMoKVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2soKVwiXG4gICAgPlxuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJjOHktaWNvbiBjOHktaWNvbi1kdW9jb2xvciBtLXItNCB0ZXh0LTE2XCJcbiAgICAgICAgW2M4eUljb25dPVwibm9kZS5pY29uXCJcbiAgICAgICAgW3RpdGxlXT1cIidTbWFydCBncm91cCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAqbmdJZj1cIm5vZGUuaWNvbiA9PT0gJ2M4eS1ncm91cC1zbWFydCdcIlxuICAgICAgPjwvaT5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwiYzh5LWljb24gYzh5LWljb24tZHVvY29sb3IgbS1yLTQgdGV4dC0xNlwiXG4gICAgICAgIFtjOHlJY29uXT1cIm5vZGUuaWNvblwiXG4gICAgICAgIFt0aXRsZV09XCInR3JvdXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCJub2RlLmljb24gIT09ICdjOHktZ3JvdXAtc21hcnQnXCJcbiAgICAgID48L2k+XG4gICAgICA8c3BhbiB0aXRsZT1cInt7IGJyZWFkY3J1bWIgfX1cIj5cbiAgICAgICAge3sgbm9kZS50cmFuc2xhdGVMYWJlbCA/IChub2RlLmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGUubGFiZWwgfX1cbiAgICAgICAgPCEtLSB1c2UganVzdCBmb3Igc2VhcmNoIHJlc3VsdHMgdG8gZGlzcGxheSB0aGUgcGF0aCAtLT5cbiAgICAgICAgPHBcbiAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICpuZ0lmPVwic2hvd1BhdGhcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtbXV0ZWRcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBicmVhZGNydW1iIH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZW0+e3sgYnJlYWRjcnVtYiB9fTwvZW0+XG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC9wPlxuICAgICAgICA8IS0tIHVwIHRvIGhlcmUgLS0+XG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPCEtLSBub3QgYSBncm91cCBidXR0b24gLS0+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJmbGV4LWdyb3dcIlxuICAgICAgdGl0bGU9XCJ7eyBicmVhZGNydW1iIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKm5nSWY9XCIhbm9kZS5pc0dyb3VwKCkgJiYgIW5vZGUuaGFzQ2hpbGREZXZpY2VzKClcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBtLWItOCBtLXItOCBkLWZsZXggai1jLWNlbnRlcic6IG5vZGUuaWNvbiA9PT0gJ3BsdXMnLFxuICAgICAgICAnYzh5LWFzc2V0LXNlbGVjdG9yX19idG4gdGV4dC10cnVuY2F0ZSc6IG5vZGUuaWNvbiAhPSAncGx1cydcbiAgICAgIH1cIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdGVkKG5vZGUpXCJcbiAgICA+XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cImM4eS1pY29uIGM4eS1pY29uLWR1b2NvbG9yIG0tci00IHRleHQtMTZcIlxuICAgICAgICBbYzh5SWNvbl09XCJub2RlLmljb25cIlxuICAgICAgICBbdGl0bGVdPVwiJ1NtYXJ0IGdyb3VwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICpuZ0lmPVwibm9kZS5pY29uID09PSAnYzh5LWdyb3VwLXNtYXJ0J1wiXG4gICAgICA+PC9pPlxuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJjOHktaWNvbiBtLXItNFwiXG4gICAgICAgIFtjOHlJY29uXT1cIm5vZGUuaWNvblwiXG4gICAgICAgIFt0aXRsZV09XCInR3JvdXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCJub2RlLmljb24gIT09ICdjOHktZ3JvdXAtc21hcnQnXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnYzh5LWljb24tZHVvY29sb3IgdGV4dC0xNiAnOiBub2RlLmljb24gIT0gJ3BsdXMnIH1cIlxuICAgICAgPjwvaT5cbiAgICAgIDxzcGFuIHRpdGxlPVwie3sgYnJlYWRjcnVtYiB9fVwiPlxuICAgICAgICB7eyBub2RlLnRyYW5zbGF0ZUxhYmVsID8gKG5vZGUubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZS5sYWJlbCB9fVxuICAgICAgICA8IS0tIHVzZSBqdXN0IGZvciBzZWFyY2ggcmVzdWx0cyB0byBkaXNwbGF5IHRoZSBwYXRoIC0tPlxuICAgICAgICA8cFxuICAgICAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LW11dGVkIHNtYWxsXCJcbiAgICAgICAgICAqbmdJZj1cInNob3dQYXRoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxlbT57eyBicmVhZGNydW1iIH19PC9lbT5cbiAgICAgICAgPC9wPlxuICAgICAgICA8IS0tIHVwIHRvIGhlcmUgLS0+XG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICBcbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNvbGxhcHNlXCJcbiAgICAqbmdJZj1cIm5vZGUuY291bnRDaGlsZHJlbigpXCJcbiAgICBbY29sbGFwc2VdPVwiIW5vZGUub3BlblwiXG4gICAgW2lzQW5pbWF0ZWRdPVwidHJ1ZVwiXG4gICAgW2F0dHIucm9sZV09XCInZ3JvdXAnXCJcbiAgPlxuICAgIDxjOHktYXNzZXQtc2VsZWN0b3Itbm9kZVxuICAgICAgKm5nRm9yPVwibGV0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuXCJcbiAgICAgIFtub2RlXT1cImNoaWxkTm9kZVwiXG4gICAgICBbcHJlc2VsZWN0ZWRdPVwicHJlc2VsZWN0ZWQgfHwgW11cIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFttdWx0aV09XCJtdWx0aVwiXG4gICAgICBbYWN0aXZlXT1cImFjdGl2ZVwiXG4gICAgICBbYXR0ci5yb2xlXT1cInZpZXcgPT09ICd0cmVlJyA/ICd0cmVlaXRlbScgOiAnbGlzdGl0ZW0nXCJcbiAgICAgIChvblNlbGVjdCk9XCJvblNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgICAgKG9uRGVzZWxlY3QpPVwib25EZXNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgID48L2M4eS1hc3NldC1zZWxlY3Rvci1ub2RlPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIE1pbGxlciBjb2x1bW5zIC0tPlxuPGRpdiAqbmdJZj1cInZpZXcgPT09ICdtaWxsZXInXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1pbGxlci1jb2x1bW5fX2l0ZW0gYmctaW5oZXJpdFwiXG4gICAgdGl0bGU9XCJ7eyBicmVhZGNydW1iIHwgdHJhbnNsYXRlIH19XCJcbiAgICAqbmdJZj1cIm5vZGUgJiYgIW5vZGUucm9vdCAmJiAhbm9kZS5oaWRkZW4gJiYgbm9kZSAhPT0gcm9vdE5vZGVcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgIGFjdGl2ZTogaXNBY3RpdmUoKSxcbiAgICAgICdtaWxsZXItY29sdW1uX19pdGVtLS1tb3JlJzogbm9kZS50b1N0cmluZygpID09PSAnTG9hZE1vcmVOb2RlJ1xuICAgIH1cIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtLWwtNCBtLXItNCBtaWxsZXItY29sdW1uX19pdGVtX19jaGVja2JveFwiXG4gICAgICAqbmdJZj1cIm5vZGUudG9TdHJpbmcoKSAhPT0gJ0xvYWRNb3JlTm9kZSdcIlxuICAgID5cbiAgICAgIDxsYWJlbCBbbmdDbGFzc109XCJ7ICdjOHktcmFkaW8nOiAhbXVsdGksICdjOHktY2hlY2tib3gnOiBtdWx0aSB9XCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGlkPVwibm9kZUxhYmVsMlwiXG4gICAgICAgICAgW3R5cGVdPVwibXVsdGkgPyAnY2hlY2tib3gnIDogJ3JhZGlvJ1wiXG4gICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgIW5vZGUuZ3JvdXBzU2VsZWN0YWJsZSAmJiBub2RlLmlzR3JvdXAoKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInNyLW9ubHlcIlxuICAgICAgICAgIGZvcj1cIm5vZGVMYWJlbDJcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgTm9kZSBsYWJlbFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvblxuICAgICAgdGl0bGU9XCJ7eyBicmVhZGNydW1iIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBkLWZsZXggZmxleC1ncm93IGotYy1jZW50ZXIgbS1sLTE2IG0tci0xNiBtLWItNCBtLXQtNCc6XG4gICAgICAgICAgbm9kZS50b1N0cmluZygpID09PSAnTG9hZE1vcmVOb2RlJyxcbiAgICAgICAgJ21pbGxlci1jb2x1bW5fX2l0ZW1fX2J0bic6IG5vZGUudG9TdHJpbmcoKSAhPT0gJ0xvYWRNb3JlTm9kZScsXG4gICAgICAgICdidG4tcGVuZGluZyc6IG5vZGUubG9hZGluZyAmJiBub2RlLnRvU3RyaW5nKCkgPT09ICdMb2FkTW9yZU5vZGUnXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJtaWxsZXJWaWV3Q2xpY2sobm9kZSlcIlxuICAgID5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwiYzh5LWljb24gbS1yLTRcIlxuICAgICAgICBbYzh5SWNvbl09XCJub2RlLmljb25cIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdjOHktaWNvbi1kdW9jb2xvciB0ZXh0LTE2Jzogbm9kZS50b1N0cmluZygpICE9PSAnTG9hZE1vcmVOb2RlJyB9XCJcbiAgICAgID48L2k+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1sZWZ0IHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgPHBcbiAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgbm9kZS50cmFuc2xhdGVMYWJlbCA/IChub2RlLmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGUubGFiZWwgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgbm9kZS50cmFuc2xhdGVMYWJlbCA/IChub2RlLmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGUubGFiZWwgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8IS0tIHVzZSBqdXN0IGZvciBzZWFyY2ggcmVzdWx0cyB0byBkaXNwbGF5IHRoZSBwYXRoIC0tPlxuICAgICAgICA8c21hbGxcbiAgICAgICAgICBjbGFzcz1cInRleHQtbXV0ZWQgdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBicmVhZGNydW1iIH19XCJcbiAgICAgICAgICAqbmdJZj1cInNob3dQYXRoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxlbT57eyBicmVhZGNydW1iIH19PC9lbT5cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPCEtLSB1cCB0byBoZXJlIC0tPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInAtbC00IG0tbC1hdXRvXCJcbiAgICAgICAgKm5nSWY9XCJub2RlLmlzR3JvdXAoKSB8fCBub2RlLmhhc0NoaWxkRGV2aWNlcygpXCJcbiAgICAgID5cbiAgICAgICAgPGkgYzh5SWNvbj1cImFuZ2xlLXJpZ2h0XCI+PC9pPlxuICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgcm9sZT1cImxpc3RcIlxuICAgICpuZ0lmPVwibm9kZVwiXG4gICAgW25nQ2xhc3NdPVwieyBoaWRkZW46IG5vZGUgIT09IHJvb3ROb2RlIH1cIlxuICA+XG4gICAgPGM4eS1hc3NldC1zZWxlY3Rvci1ub2RlXG4gICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgKm5nRm9yPVwibGV0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuXCJcbiAgICAgIFtub2RlXT1cImNoaWxkTm9kZVwiXG4gICAgICBbcm9vdE5vZGVdPVwicm9vdE5vZGVcIlxuICAgICAgW3ByZXNlbGVjdGVkXT1cInByZXNlbGVjdGVkIHx8IFtdXCJcbiAgICAgIFttdWx0aV09XCJtdWx0aVwiXG4gICAgICBbdmlld109XCJ2aWV3XCJcbiAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICBbYWN0aXZlXT1cImFjdGl2ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2hhbmRsZU5leHRNaWxsZXJWaWV3Q29sdW1uXT1cImhhbmRsZU5leHRNaWxsZXJWaWV3Q29sdW1uXCJcbiAgICAgIChvblNlbGVjdCk9XCJvblNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgICAgKG9uRGVzZWxlY3QpPVwib25EZXNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgID48L2M4eS1hc3NldC1zZWxlY3Rvci1ub2RlPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3Itbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hc3NldHMtbmF2aWdhdG9yL2Fzc2V0LXNlbGVjdG9yL2Fzc2V0LXNlbGVjdG9yLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1zZWxlY3Rvci9hc3NldC1zZWxlY3Rvci1ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7O0FBTXpDLE1BQU0sT0FBTywwQkFBMEI7SUFtRXJDOztPQUVHO0lBQ0gsSUFBSSxXQUFXO1FBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUNVLGdCQUFrQyxFQUNsQyxFQUFxQixFQUN0QixvQkFBMEM7UUFG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QkFJRyxLQUFLO3NCQUFiLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFJRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSUcsMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUksY0FBYztzQkFBdkIsTUFBTTtnQkFJRyxRQUFRO3NCQUFqQixNQUFNO2dCQUlHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQsIElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBc3NldHNOYXZpZ2F0b3JBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBBc3NldFNlbGVjdG9yU2VydmljZSB9IGZyb20gJy4vYXNzZXQtc2VsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBHcm91cE5vZGUgfSBmcm9tICcuL2dyb3VwLW5vZGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYXNzZXQtc2VsZWN0b3Itbm9kZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1zZWxlY3Rvci1ub2RlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBc3NldFNlbGVjdG9yTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBub2RlLlxuICAgKi9cbiAgQElucHV0KCkgbm9kZTogR3JvdXBOb2RlO1xuICAvKipcbiAgICogUm9vdCBub2RlLiBOb2RlIGZvdW5kIGF0IHRoZSB0b3Agb2YgdGhlIGhpZXJhcmNoeS5cbiAgICovXG4gIEBJbnB1dCgpIHJvb3ROb2RlOiBHcm91cE5vZGU7XG4gIC8qKlxuICAgKiBBbGwgcHJlc2VsZWN0ZWQgaXRlbXMuXG4gICAqL1xuICBASW5wdXQoKSBwcmVzZWxlY3RlZDogSUlkZW50aWZpZWQgfCBJSWRlbnRpZmllZFtdID0gW107XG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIHBhdGggYmUgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKSBzaG93UGF0aCA9IGZhbHNlO1xuICAvKipcbiAgICogQ2FuIHRoZSB1c2VyIHNlbGVjdCBtdWx0aXBsZSBhc3NldHMuXG4gICAqL1xuICBASW5wdXQoKSBtdWx0aSA9IGZhbHNlO1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgcGF0aCB0byB0aGUgbm9kZS5cbiAgICovXG4gIEBJbnB1dCgpIHZpZXc6ICd0cmVlJyB8ICdtaWxsZXInID0gJ3RyZWUnO1xuICAvKipcbiAgICogVXNlZCBvbmx5IGZvciBtaWxsZXItdmlldywgZGlzcGxheXMgdGhlIGNvbHVtbiBsZXZlbCBmb3IgdGhlIGN1cnJlbnQgbm9kZS5cbiAgICogRS5nIGlmIHRoZSBpbmRleCBpcyBvbmUsIHRoaXMgd2lsbCBiZSBzZWNvbmQgY29sdW1uLlxuICAgKi9cbiAgQElucHV0KCkgaW5kZXg7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhY3RpdmUgbm9kZS5cbiAgICovXG4gIEBJbnB1dCgpIGFjdGl2ZTogR3JvdXBOb2RlO1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHNob3VsZCB2ZXJpZnkgdGhlIG5lZWQgdG8gYWRkIGEgY29sdW1uIHdoZW4gYSBub2RlIGlzIGNsaWNrZWQuXG4gICAqL1xuICBASW5wdXQoKSBoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbjogKG5vZGU6IEdyb3VwTm9kZSwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAvKipcbiAgICogRXZlbnQsIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSBsb2FkaW5nIG9mIHRoZSBub2RlIGhhcyBjb21wbGV0ZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgaXNMb2FkaW5nU3RhdGU6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqXG4gICAqIEV2ZW50IHRoYXQgZW1pdHMgd2hlbiBhIG5vZGUgaXMgc2VsZWN0ZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxJTWFuYWdlZE9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKlxuICAgKiBFdmVudCB0aGF0IGVtaXRzIHdoZW4gYSBub2RlIGlzIGRlc2VsZWN0ZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb25EZXNlbGVjdDogRXZlbnRFbWl0dGVyPHsgZGVzZWxlY3RNb2RlOiAnc2luZ2xlJyB8ICdhbGwnOyBtbzogSU1hbmFnZWRPYmplY3QgfT4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBicmVhZGNydW1iOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBsZXZlbCA9IDA7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBpc05vZGVTZWxlY3RhYmxlID0gdHJ1ZTtcblxuICAvKiogc2V0cyB0aGUgYGJ0bi1wZW5kaW5nYCBjbGFzcyBpbiB0aGUgbG9hZCBtb3JlIGJ1dHRvbiAqL1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGdldCBleHBhbmRUaXRsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMubm9kZS5vcGVuID8gZ2V0dGV4dCgnRXhwYW5kJykgOiBnZXR0ZXh0KCdDb2xsYXBzZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmUgb25seSBkaVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBhc3NldFNlbGVjdG9yU2VydmljZTogQXNzZXRTZWxlY3RvclNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlzTm9kZVNlbGVjdGFibGUgPSB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLmlzTm9kZVNlbGVjdGFibGUodGhpcy5ub2RlKTtcbiAgICB0aGlzLmJyZWFkY3J1bWIgPSB0aGlzLm5vZGUubGFiZWw7XG4gICAgdGhpcy5zZXR1cEJyZWFkY3J1bWJzQW5kTGV2ZWwodGhpcy5ub2RlKTtcblxuICAgIGlmICh0aGlzLm5vZGUgaW5zdGFuY2VvZiBHcm91cE5vZGUpIHtcbiAgICAgIHRoaXMubm9kZS5ob29rRXZlbnRzKCk7XG4gICAgfVxuXG4gICAgLy8gb3BlbiBvbiBzdGFydHVwXG4gICAgaWYgKHRoaXMubm9kZS5yb290KSB7XG4gICAgICB0aGlzLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgLy8gdXNlZCBmb3IgbG9hZGluZyBhbmQgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gdGhlIG5vZGUgaXMgbm8gbG9uZ2VyIGxvYWRpbmcuXG4gICAgaWYgKHRoaXMubm9kZS5ldmVudHMpIHtcbiAgICAgIHRoaXMubm9kZS5ldmVudHNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgICAgICBmaWx0ZXIoKGE6IEFzc2V0c05hdmlnYXRvckFjdGlvbikgPT4gYSA9PT0gQXNzZXRzTmF2aWdhdG9yQWN0aW9uLkxPQURJTkdfRE9ORSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ1N0YXRlLmVtaXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIG5vZGUuXG4gICAqL1xuICBjbGljaygpIHtcbiAgICB0aGlzLm5vZGUub3BlbiA9ICF0aGlzLm5vZGUub3BlbjtcbiAgICB0aGlzLm5vZGUuY2xpY2soeyBvcGVuOiB0aGlzLm5vZGUub3BlbiB9KTtcbiAgfVxuXG4gIHNldHVwQnJlYWRjcnVtYnNBbmRMZXZlbChub2RlOiBHcm91cE5vZGUpIHtcbiAgICBpZiAobm9kZS5wYXJlbnRzICYmIG5vZGUucGFyZW50cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50c1swXSBhcyBHcm91cE5vZGU7XG4gICAgICB0aGlzLmJyZWFkY3J1bWIgPVxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChwYXJlbnQubGFiZWwpICtcbiAgICAgICAgJyA+ICcgK1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmJyZWFkY3J1bWIpO1xuICAgICAgdGhpcy5sZXZlbCsrO1xuXG4gICAgICB0aGlzLnNldHVwQnJlYWRjcnVtYnNBbmRMZXZlbChwYXJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBub2RlIGFuZCBlbWl0cyBhIGNoYW5nZSBvbiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdG8gc2VsZWN0LlxuICAgKi9cbiAgc2VsZWN0ZWQobm9kZTogR3JvdXBOb2RlKSB7XG4gICAgaWYgKG5vZGUubW8pIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKG5vZGUubW8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsaWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjbGlja3Mgb24gYSBpdGVtIGluIE1pbGxlciBWaWV3LlxuICAgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0aGF0IHdhcyBjbGlja2VkLlxuICAgKi9cbiAgbWlsbGVyVmlld0NsaWNrKG5vZGU6IEdyb3VwTm9kZSkge1xuICAgIG5vZGUuYnJlYWRjcnVtYiA9IHRoaXMuYnJlYWRjcnVtYjtcblxuICAgIGlmICghdGhpcy5oYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG91bGRIYW5kbGVEZWZhdWx0ID0gdGhpcy5oYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbihub2RlLCB0aGlzLmluZGV4KTtcbiAgICBpZiAoc2hvdWxkSGFuZGxlRGVmYXVsdCkge1xuICAgICAgdGhpcy5zZWxlY3RlZChub2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBpc1NlbGVjdGVkKCkge1xuICAgIGlmICghdGhpcy5ub2RlLm1vKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLmdldEluZGV4T2ZTZWxlY3RlZCh0aGlzLnByZXNlbGVjdGVkLCB0aGlzLm5vZGUubW8pID4gLTE7XG4gIH1cblxuICBpc0FjdGl2ZSgpIHtcbiAgICBpZiAodGhpcy5hY3RpdmUgJiYgdGhpcy5ub2RlLm1vKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmUubW8/LmlkID09PSB0aGlzLm5vZGUubW8uaWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0aW9uKHNlbGVjdGVkTW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKCF0aGlzLm11bHRpKSB7XG4gICAgICB0aGlzLm9uRGVzZWxlY3QuZW1pdCh7IGRlc2VsZWN0TW9kZTogJ2FsbCcsIG1vOiBzZWxlY3RlZE1vIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMub25EZXNlbGVjdC5lbWl0KHsgZGVzZWxlY3RNb2RlOiAnc2luZ2xlJywgbW86IHNlbGVjdGVkTW8gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub25TZWxlY3QuZW1pdChzZWxlY3RlZE1vKTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8IS0tIEhpZXJhcmNoeSB0cmVlIC0tPlxuPGRpdlxuICBjbGFzcz1cImM4eS1hc3NldC1zZWxlY3Rvcl9faXRlbVwiXG4gIFtuZ1N0eWxlXT1cIntcbiAgICAnbWFyZ2luLWxlZnQnOiBsZXZlbCA+IDEgPyAxNiArICdweCcgOiAnMCdcbiAgfVwiXG4gICpuZ0lmPVwidmlldyA9PT0gJ3RyZWUnXCJcbiAgW2F0dHIucm9sZV09XCJ2aWV3ID09PSAndHJlZScgPyAndHJlZScgOiAnbGlzdCdcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ2M4eS1hc3NldC1zZWxlY3Rvcl9faXRlbS0tbW9yZSc6IG5vZGU/Lmljb24gPT09ICdwbHVzJyxcbiAgICAnYzh5LWFzc2V0LXNlbGVjdG9yX19pdGVtLS1zdGFydCc6IGxldmVsID09PSAwXG4gIH1cIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjOHktYXNzZXQtc2VsZWN0b3JfX25vZGVcIlxuICAgIHRpdGxlPVwie3sgYnJlYWRjcnVtYiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgKm5nSWY9XCJub2RlICYmICFub2RlLnJvb3QgJiYgIW5vZGUuaGlkZGVuXCJcbiAgICBbYXR0ci5yb2xlXT1cInZpZXcgPT09ICd0cmVlJyA/ICd0cmVlaXRlbScgOiAnbGlzdGl0ZW0nXCJcbiAgICBbbmdDbGFzc109XCJ7ICdjOHktYXNzZXQtc2VsZWN0b3JfX25vZGUtLW9wZW4nOiBub2RlPy5vcGVuIH1cIlxuICA+XG4gICAgPCEtLSBleHBhbmQgYnV0dG9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjOHktYXNzZXQtc2VsZWN0b3JfX25vZGVfX2J0bi1zcGFjZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJjb2xsYXBzZS1idG4gYnRuLWRvdFwiXG4gICAgICAgIFt0aXRsZV09XCJleHBhbmRUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwibm9kZS5vcGVuXCJcbiAgICAgICAgKGNsaWNrKT1cImNsaWNrKClcIlxuICAgICAgICAqbmdJZj1cIm5vZGUuaXNHcm91cCgpIHx8IG5vZGUuaGFzQ2hpbGREZXZpY2VzKClcIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwiYW5nbGUtcmlnaHRcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHAtdC00IHAtYi00XCJcbiAgICAgICpuZ0lmPVwibm9kZS50b1N0cmluZygpICE9PSAnTG9hZE1vcmVOb2RlJyAmJiBpc05vZGVTZWxlY3RhYmxlXCJcbiAgICA+XG4gICAgICA8bGFiZWwgW25nQ2xhc3NdPVwieyAnYzh5LWNoZWNrYm94JzogbXVsdGksICdjOHktcmFkaW8nOiAhbXVsdGkgfVwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBpZD1cIm5vZGVMYWJlbFwiXG4gICAgICAgICAgW3R5cGVdPVwibXVsdGkgPyAnY2hlY2tib3gnIDogJ3JhZGlvJ1wiXG4gICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgIW5vZGUuZ3JvdXBzU2VsZWN0YWJsZSAmJiBub2RlLmlzR3JvdXAoKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInNyLW9ubHlcIlxuICAgICAgICAgIGZvcj1cIm5vZGVMYWJlbFwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgID5cbiAgICAgICAgICBOb2RlIGxhYmVsXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGdyb3VwIGJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImM4eS1hc3NldC1zZWxlY3Rvcl9fYnRuIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhbm9kZS5vcGVuXCJcbiAgICAgICpuZ0lmPVwibm9kZS5pc0dyb3VwKCkgfHwgbm9kZS5oYXNDaGlsZERldmljZXMoKVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2soKVwiXG4gICAgPlxuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJjOHktaWNvbiBjOHktaWNvbi1kdW9jb2xvciBtLXItNCB0ZXh0LTE2XCJcbiAgICAgICAgW2M4eUljb25dPVwibm9kZS5pY29uXCJcbiAgICAgICAgW3RpdGxlXT1cIidTbWFydCBncm91cCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAqbmdJZj1cIm5vZGUuaWNvbiA9PT0gJ2M4eS1ncm91cC1zbWFydCdcIlxuICAgICAgPjwvaT5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwiYzh5LWljb24gYzh5LWljb24tZHVvY29sb3IgbS1yLTQgdGV4dC0xNlwiXG4gICAgICAgIFtjOHlJY29uXT1cIm5vZGUuaWNvblwiXG4gICAgICAgIFt0aXRsZV09XCInR3JvdXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCJub2RlLmljb24gIT09ICdjOHktZ3JvdXAtc21hcnQnXCJcbiAgICAgID48L2k+XG4gICAgICA8c3BhbiB0aXRsZT1cInt7IGJyZWFkY3J1bWIgfX1cIj5cbiAgICAgICAge3sgbm9kZS50cmFuc2xhdGVMYWJlbCA/IChub2RlLmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGUubGFiZWwgfX1cbiAgICAgICAgPCEtLSB1c2UganVzdCBmb3Igc2VhcmNoIHJlc3VsdHMgdG8gZGlzcGxheSB0aGUgcGF0aCAtLT5cbiAgICAgICAgPHBcbiAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICpuZ0lmPVwic2hvd1BhdGhcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtbXV0ZWRcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBicmVhZGNydW1iIH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZW0+e3sgYnJlYWRjcnVtYiB9fTwvZW0+XG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC9wPlxuICAgICAgICA8IS0tIHVwIHRvIGhlcmUgLS0+XG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPCEtLSBub3QgYSBncm91cCBidXR0b24gLS0+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJmbGV4LWdyb3dcIlxuICAgICAgdGl0bGU9XCJ7eyBicmVhZGNydW1iIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKm5nSWY9XCIhbm9kZS5pc0dyb3VwKCkgJiYgIW5vZGUuaGFzQ2hpbGREZXZpY2VzKClcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBtLWItOCBtLXItOCBkLWZsZXggai1jLWNlbnRlcic6IG5vZGUuaWNvbiA9PT0gJ3BsdXMnLFxuICAgICAgICAnYzh5LWFzc2V0LXNlbGVjdG9yX19idG4gdGV4dC10cnVuY2F0ZSc6IG5vZGUuaWNvbiAhPSAncGx1cydcbiAgICAgIH1cIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdGVkKG5vZGUpXCJcbiAgICA+XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cImM4eS1pY29uIGM4eS1pY29uLWR1b2NvbG9yIG0tci00IHRleHQtMTZcIlxuICAgICAgICBbYzh5SWNvbl09XCJub2RlLmljb25cIlxuICAgICAgICBbdGl0bGVdPVwiJ1NtYXJ0IGdyb3VwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICpuZ0lmPVwibm9kZS5pY29uID09PSAnYzh5LWdyb3VwLXNtYXJ0J1wiXG4gICAgICA+PC9pPlxuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJjOHktaWNvbiBtLXItNFwiXG4gICAgICAgIFtjOHlJY29uXT1cIm5vZGUuaWNvblwiXG4gICAgICAgIFt0aXRsZV09XCInR3JvdXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCJub2RlLmljb24gIT09ICdjOHktZ3JvdXAtc21hcnQnXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnYzh5LWljb24tZHVvY29sb3IgdGV4dC0xNiAnOiBub2RlLmljb24gIT0gJ3BsdXMnIH1cIlxuICAgICAgPjwvaT5cbiAgICAgIDxzcGFuIHRpdGxlPVwie3sgYnJlYWRjcnVtYiB9fVwiPlxuICAgICAgICB7eyBub2RlLnRyYW5zbGF0ZUxhYmVsID8gKG5vZGUubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZS5sYWJlbCB9fVxuICAgICAgICA8IS0tIHVzZSBqdXN0IGZvciBzZWFyY2ggcmVzdWx0cyB0byBkaXNwbGF5IHRoZSBwYXRoIC0tPlxuICAgICAgICA8cFxuICAgICAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LW11dGVkIHNtYWxsXCJcbiAgICAgICAgICAqbmdJZj1cInNob3dQYXRoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxlbT57eyBicmVhZGNydW1iIH19PC9lbT5cbiAgICAgICAgPC9wPlxuICAgICAgICA8IS0tIHVwIHRvIGhlcmUgLS0+XG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb2xsYXBzZVwiXG4gICAgKm5nSWY9XCJub2RlLmNvdW50Q2hpbGRyZW4oKVwiXG4gICAgW2NvbGxhcHNlXT1cIiFub2RlLm9wZW5cIlxuICAgIFtpc0FuaW1hdGVkXT1cInRydWVcIlxuICAgIFthdHRyLnJvbGVdPVwiJ2dyb3VwJ1wiXG4gID5cbiAgICA8Yzh5LWFzc2V0LXNlbGVjdG9yLW5vZGVcbiAgICAgICpuZ0Zvcj1cImxldCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZHJlblwiXG4gICAgICBbbm9kZV09XCJjaGlsZE5vZGVcIlxuICAgICAgW3ByZXNlbGVjdGVkXT1cInByZXNlbGVjdGVkIHx8IFtdXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbbXVsdGldPVwibXVsdGlcIlxuICAgICAgW2FjdGl2ZV09XCJhY3RpdmVcIlxuICAgICAgW2F0dHIucm9sZV09XCJ2aWV3ID09PSAndHJlZScgPyAndHJlZWl0ZW0nIDogJ2xpc3RpdGVtJ1wiXG4gICAgICAob25TZWxlY3QpPVwib25TZWxlY3QuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChvbkRlc2VsZWN0KT1cIm9uRGVzZWxlY3QuZW1pdCgkZXZlbnQpXCJcbiAgICA+PC9jOHktYXNzZXQtc2VsZWN0b3Itbm9kZT5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBNaWxsZXIgY29sdW1ucyAtLT5cbjxkaXYgKm5nSWY9XCJ2aWV3ID09PSAnbWlsbGVyJ1wiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJtaWxsZXItY29sdW1uX19pdGVtIGJnLWluaGVyaXRcIlxuICAgIHRpdGxlPVwie3sgYnJlYWRjcnVtYiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgKm5nSWY9XCJub2RlICYmICFub2RlLnJvb3QgJiYgIW5vZGUuaGlkZGVuICYmIG5vZGUgIT09IHJvb3ROb2RlXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICBhY3RpdmU6IGlzQWN0aXZlKCksXG4gICAgICAnbWlsbGVyLWNvbHVtbl9faXRlbS0tbW9yZSc6IG5vZGUudG9TdHJpbmcoKSA9PT0gJ0xvYWRNb3JlTm9kZSdcbiAgICB9XCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibS1sLTQgbS1yLTQgbWlsbGVyLWNvbHVtbl9faXRlbV9fY2hlY2tib3hcIlxuICAgICAgKm5nSWY9XCJub2RlLnRvU3RyaW5nKCkgIT09ICdMb2FkTW9yZU5vZGUnXCJcbiAgICA+XG4gICAgICA8bGFiZWwgW25nQ2xhc3NdPVwieyAnYzh5LXJhZGlvJzogIW11bHRpLCAnYzh5LWNoZWNrYm94JzogbXVsdGkgfVwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBpZD1cIm5vZGVMYWJlbDJcIlxuICAgICAgICAgIFt0eXBlXT1cIm11bHRpID8gJ2NoZWNrYm94JyA6ICdyYWRpbydcIlxuICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFub2RlLmdyb3Vwc1NlbGVjdGFibGUgJiYgbm9kZS5pc0dyb3VwKClcIlxuICAgICAgICAvPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJzci1vbmx5XCJcbiAgICAgICAgICBmb3I9XCJub2RlTGFiZWwyXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIE5vZGUgbGFiZWxcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b25cbiAgICAgIHRpdGxlPVwie3sgYnJlYWRjcnVtYiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2J0biBidG4tZGVmYXVsdCBidG4tc20gZC1mbGV4IGZsZXgtZ3JvdyBqLWMtY2VudGVyIG0tbC0xNiBtLXItMTYgbS1iLTQgbS10LTQnOlxuICAgICAgICAgIG5vZGUudG9TdHJpbmcoKSA9PT0gJ0xvYWRNb3JlTm9kZScsXG4gICAgICAgICdtaWxsZXItY29sdW1uX19pdGVtX19idG4nOiBub2RlLnRvU3RyaW5nKCkgIT09ICdMb2FkTW9yZU5vZGUnLFxuICAgICAgICAnYnRuLXBlbmRpbmcnOiBub2RlLmxvYWRpbmcgJiYgbm9kZS50b1N0cmluZygpID09PSAnTG9hZE1vcmVOb2RlJ1xuICAgICAgfVwiXG4gICAgICAoY2xpY2spPVwibWlsbGVyVmlld0NsaWNrKG5vZGUpXCJcbiAgICA+XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cImM4eS1pY29uIG0tci00XCJcbiAgICAgICAgW2M4eUljb25dPVwibm9kZS5pY29uXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnYzh5LWljb24tZHVvY29sb3IgdGV4dC0xNic6IG5vZGUudG9TdHJpbmcoKSAhPT0gJ0xvYWRNb3JlTm9kZScgfVwiXG4gICAgICA+PC9pPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbGVmdCB0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICB0aXRsZT1cInt7IG5vZGUudHJhbnNsYXRlTGFiZWwgPyAobm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlLmxhYmVsIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG5vZGUudHJhbnNsYXRlTGFiZWwgPyAobm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlLmxhYmVsIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPCEtLSB1c2UganVzdCBmb3Igc2VhcmNoIHJlc3VsdHMgdG8gZGlzcGxheSB0aGUgcGF0aCAtLT5cbiAgICAgICAgPHNtYWxsXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgYnJlYWRjcnVtYiB9fVwiXG4gICAgICAgICAgKm5nSWY9XCJzaG93UGF0aFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZW0+e3sgYnJlYWRjcnVtYiB9fTwvZW0+XG4gICAgICAgIDwvc21hbGw+XG4gICAgICAgIDwhLS0gdXAgdG8gaGVyZSAtLT5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJwLWwtNCBtLWwtYXV0b1wiXG4gICAgICAgICpuZ0lmPVwibm9kZS5pc0dyb3VwKCkgfHwgbm9kZS5oYXNDaGlsZERldmljZXMoKVwiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJhbmdsZS1yaWdodFwiPjwvaT5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIHJvbGU9XCJsaXN0XCJcbiAgICAqbmdJZj1cIm5vZGVcIlxuICAgIFtuZ0NsYXNzXT1cInsgaGlkZGVuOiBub2RlICE9PSByb290Tm9kZSB9XCJcbiAgPlxuICAgIDxjOHktYXNzZXQtc2VsZWN0b3Itbm9kZVxuICAgICAgcm9sZT1cImxpc3RpdGVtXCJcbiAgICAgICpuZ0Zvcj1cImxldCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZHJlblwiXG4gICAgICBbbm9kZV09XCJjaGlsZE5vZGVcIlxuICAgICAgW3Jvb3ROb2RlXT1cInJvb3ROb2RlXCJcbiAgICAgIFtwcmVzZWxlY3RlZF09XCJwcmVzZWxlY3RlZCB8fCBbXVwiXG4gICAgICBbbXVsdGldPVwibXVsdGlcIlxuICAgICAgW3ZpZXddPVwidmlld1wiXG4gICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgW2FjdGl2ZV09XCJhY3RpdmVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbl09XCJoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtblwiXG4gICAgICAob25TZWxlY3QpPVwib25TZWxlY3QuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChvbkRlc2VsZWN0KT1cIm9uRGVzZWxlY3QuZW1pdCgkZXZlbnQpXCJcbiAgICA+PC9jOHktYXNzZXQtc2VsZWN0b3Itbm9kZT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==