@c8y/ngx-components 1021.49.12 → 1021.50.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 (108) hide show
  1. package/core/i18n/pattern-messages.data.d.ts +18 -0
  2. package/core/i18n/pattern-messages.data.d.ts.map +1 -1
  3. package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
  4. package/esm2022/core/i18n/pattern-messages.data.mjs +19 -1
  5. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +2 -2
  6. package/esm2022/device-list/add-smart-group.component.mjs +3 -3
  7. package/esm2022/operations/bulk-operation-list-item/bulk-operation-list-item.service.mjs +5 -4
  8. package/esm2022/operations/operation-details/operation-details.module.mjs +7 -7
  9. package/esm2022/operations/operations-list/device-control.feature.mjs +20 -0
  10. package/esm2022/operations/operations-list/index.mjs +4 -3
  11. package/esm2022/operations/operations-list/operations-list-item.component.mjs +11 -9
  12. package/esm2022/operations/operations-list/operations-list.component.mjs +15 -10
  13. package/esm2022/operations/operations-list/operations-list.module.mjs +16 -41
  14. package/esm2022/operations/operations-list/operations-list.service.mjs +4 -3
  15. package/esm2022/operations/operations.module.mjs +21 -14
  16. package/esm2022/operations/shared/operations.service.mjs +4 -3
  17. package/esm2022/services/index.mjs +14 -3
  18. package/esm2022/services/service-command-tab/c8y-ngx-components-services-service-command-tab.mjs +5 -0
  19. package/esm2022/services/service-command-tab/index.mjs +3 -0
  20. package/esm2022/services/service-command-tab/service-command-tab.component.mjs +33 -0
  21. package/esm2022/services/service-command-tab/service-command.feature.mjs +14 -0
  22. package/esm2022/services/services-device-tab/index.mjs +9 -3
  23. package/esm2022/services/services-device-tab/services-device-tab.component.mjs +3 -4
  24. package/esm2022/services/services-device-tab/services-device-tab.guard.mjs +2 -2
  25. package/esm2022/services/services-device-tab/services.breadcrumb-factory.mjs +13 -1
  26. package/esm2022/services/services.module.mjs +4 -2
  27. package/esm2022/services/shared/c8y-ngx-components-services-shared.mjs +5 -0
  28. package/esm2022/services/shared/index.mjs +3 -0
  29. package/esm2022/services/shared/service-command.service.mjs +118 -0
  30. package/esm2022/services/shared/services.model.mjs +23 -0
  31. package/fesm2022/c8y-ngx-components-alarms.mjs +2 -2
  32. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +1 -1
  34. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-device-list.mjs +2 -2
  36. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +3 -2
  38. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  39. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +5 -5
  40. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs.map +1 -1
  41. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +57 -52
  42. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  43. package/fesm2022/c8y-ngx-components-operations-shared.mjs +3 -2
  44. package/fesm2022/c8y-ngx-components-operations-shared.mjs.map +1 -1
  45. package/fesm2022/c8y-ngx-components-operations.mjs +42 -35
  46. package/fesm2022/c8y-ngx-components-operations.mjs.map +1 -1
  47. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +49 -0
  48. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs.map +1 -0
  49. package/fesm2022/c8y-ngx-components-services-shared.mjs +145 -0
  50. package/fesm2022/c8y-ngx-components-services-shared.mjs.map +1 -0
  51. package/fesm2022/c8y-ngx-components-services.mjs +20 -113
  52. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  53. package/fesm2022/c8y-ngx-components.mjs +18 -0
  54. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  55. package/locales/de.po +12 -14
  56. package/locales/es.po +12 -14
  57. package/locales/fr.po +11 -13
  58. package/locales/ja_JP.po +13 -17
  59. package/locales/ko.po +13 -10
  60. package/locales/locales.pot +19 -6
  61. package/locales/nl.po +12 -14
  62. package/locales/pl.po +12 -14
  63. package/locales/pt_BR.po +11 -13
  64. package/locales/zh_CN.po +12 -9
  65. package/locales/zh_TW.po +12 -9
  66. package/operations/bulk-operation-list-item/bulk-operation-list-item.service.d.ts +2 -2
  67. package/operations/bulk-operation-list-item/bulk-operation-list-item.service.d.ts.map +1 -1
  68. package/operations/operation-details/operation-details.module.d.ts +1 -1
  69. package/operations/operations-list/device-control.feature.d.ts +4 -0
  70. package/operations/operations-list/device-control.feature.d.ts.map +1 -0
  71. package/operations/operations-list/index.d.ts +3 -2
  72. package/operations/operations-list/index.d.ts.map +1 -1
  73. package/operations/operations-list/operations-list-item.component.d.ts +1 -1
  74. package/operations/operations-list/operations-list-item.component.d.ts.map +1 -1
  75. package/operations/operations-list/operations-list.component.d.ts +3 -1
  76. package/operations/operations-list/operations-list.component.d.ts.map +1 -1
  77. package/operations/operations-list/operations-list.module.d.ts +3 -9
  78. package/operations/operations-list/operations-list.module.d.ts.map +1 -1
  79. package/operations/operations.module.d.ts +1 -2
  80. package/operations/operations.module.d.ts.map +1 -1
  81. package/package.json +1 -1
  82. package/services/index.d.ts +13 -2
  83. package/services/index.d.ts.map +1 -1
  84. package/services/service-command-tab/c8y-ngx-components-services-service-command-tab.d.ts.map +1 -0
  85. package/services/service-command-tab/index.d.ts +3 -0
  86. package/services/service-command-tab/index.d.ts.map +1 -0
  87. package/services/service-command-tab/service-command-tab.component.d.ts +12 -0
  88. package/services/service-command-tab/service-command-tab.component.d.ts.map +1 -0
  89. package/services/service-command-tab/service-command.feature.d.ts +3 -0
  90. package/services/service-command-tab/service-command.feature.d.ts.map +1 -0
  91. package/services/services-device-tab/index.d.ts +8 -2
  92. package/services/services-device-tab/index.d.ts.map +1 -1
  93. package/services/services-device-tab/services-device-tab.component.d.ts +2 -2
  94. package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
  95. package/services/services-device-tab/services.breadcrumb-factory.d.ts.map +1 -1
  96. package/services/services.module.d.ts.map +1 -1
  97. package/services/shared/c8y-ngx-components-services-shared.d.ts.map +1 -0
  98. package/services/shared/index.d.ts +3 -0
  99. package/services/shared/index.d.ts.map +1 -0
  100. package/services/{services-device-tab → shared}/service-command.service.d.ts +10 -7
  101. package/services/shared/service-command.service.d.ts.map +1 -0
  102. package/services/shared/services.model.d.ts +31 -0
  103. package/services/shared/services.model.d.ts.map +1 -0
  104. package/esm2022/services/services-device-tab/service-command.service.mjs +0 -113
  105. package/esm2022/services/services-device-tab/service-device-tab.model.mjs +0 -2
  106. package/services/services-device-tab/service-command.service.d.ts.map +0 -1
  107. package/services/services-device-tab/service-device-tab.model.d.ts +0 -11
  108. package/services/services-device-tab/service-device-tab.model.d.ts.map +0 -1
@@ -732,6 +732,12 @@ export declare const MESSAGES_CORE_I18N: {
732
732
  readonly id: "$1";
733
733
  };
734
734
  };
735
+ readonly '^RESTART (.+?)$': {
736
+ readonly gettext: "RESTART`verb, action` {{service}}";
737
+ readonly placeholders: {
738
+ readonly service: "$1";
739
+ };
740
+ };
735
741
  readonly '^Retrieve configuration snapshot from device (.+?)$': {
736
742
  readonly gettext: "Retrieve configuration snapshot from device {{deviceName}}";
737
743
  readonly placeholders: {
@@ -847,9 +853,21 @@ export declare const MESSAGES_CORE_I18N: {
847
853
  readonly name: "$1";
848
854
  };
849
855
  };
856
+ readonly '^START (.+?)$': {
857
+ readonly gettext: "START`verb, action` {{service}}";
858
+ readonly placeholders: {
859
+ readonly service: "$1";
860
+ };
861
+ };
850
862
  readonly '^Started container$': {
851
863
  readonly gettext: "Container started.";
852
864
  };
865
+ readonly '^STOP (.+?)$': {
866
+ readonly gettext: "STOP`verb, action` {{service}}";
867
+ readonly placeholders: {
868
+ readonly service: "$1";
869
+ };
870
+ };
853
871
  readonly '^Successfully assigned (.+) to (.+)$': {
854
872
  readonly gettext: "\"{{imageName}}\" assigned to \"{{address}}\".";
855
873
  readonly placeholders: {
@@ -1 +1 @@
1
- {"version":3,"file":"pattern-messages.data.d.ts","sourceRoot":"","sources":["../../../core/i18n/pattern-messages.data.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8+DrB,CAAC"}
1
+ {"version":3,"file":"pattern-messages.data.d.ts","sourceRoot":"","sources":["../../../core/i18n/pattern-messages.data.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAggErB,CAAC"}
@@ -144,11 +144,11 @@ export class AlarmsTypeFilterComponent {
144
144
  return activeFilters.map(filter => filter.filters.type).join(',');
145
145
  }
146
146
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsTypeFilterComponent, deps: [{ token: i1.AlarmEventSelectorService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.ColorService }], target: i0.ɵɵFactoryTarget.Component }); }
147
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmsTypeFilterComponent, selector: "c8y-alarms-type-filter", inputs: { alarms: "alarms", possibleFilters: "possibleFilters", activeFilters: "activeFilters" }, outputs: { onFilterChanged: "onFilterChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex a-i-center\">\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by Alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n (onHidden)=\"resetFilters()\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: unset; min-width: 250px\"\n *dropdownMenu\n >\n <div class=\"p-16 bg-level-2\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n [c8yIcon]=\"'info-circle'\"\n ></i>\n <strong tanslate>The list below may not be complete.</strong>\n </p>\n <p tanslate>\n Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n add a custom alarm.\n </p>\n </div>\n </div>\n <c8y-list-group>\n <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n <input\n class=\"form-control\"\n placeholder=\"'Custom alarm type' | translate\"\n type=\"text\"\n [(ngModel)]=\"customAlarmTypeInput\"\n (keydown)=\"confirmWithEnter($event)\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn-dot text-primary\"\n [attr.aria-label]=\"'Add custom alarm' | translate\"\n tooltip=\"'Add' | translate\"\n placement=\"top\"\n [delay]=\"500\"\n (click)=\"addCustomAlarmType()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li\n class=\"c8y-list__item__collapse--container-small cdk-drag\"\n style=\"cursor: pointer\"\n *ngFor=\"let alarmType of possibleFilters\"\n (click)=\"toggleAlarmType(alarmType)\"\n >\n <c8y-li-checkbox\n class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n [selected]=\"alarmType.__active\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n ></c8y-li-checkbox>\n <div class=\"d-flex a-i-center p-l-4\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': alarmType.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <span class=\"text-truncate text-12 flex-grow\">\n {{ alarmType.label }}\n </span>\n <button\n class=\"btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"'Remove' | translate\"\n placement=\"top\"\n *ngIf=\"alarmType.__target === null\"\n [delay]=\"500\"\n (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li>\n <c8y-li *ngIf=\"possibleFilters.length === 0\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"\n 'There is no alarm to filter. You can still add a custom alarm.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <div class=\"sticky-bottom p-16\">\n <button\n class=\"btn btn-block btn-primary\"\n [disabled]=\"possibleFilters.length === 0\"\n (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n translate\n >\n Apply\n </button>\n </div>\n </c8y-list-group>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "directive", type: i8.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
147
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmsTypeFilterComponent, selector: "c8y-alarms-type-filter", inputs: { alarms: "alarms", possibleFilters: "possibleFilters", activeFilters: "activeFilters" }, outputs: { onFilterChanged: "onFilterChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex a-i-center\">\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n (onHidden)=\"resetFilters()\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: unset; min-width: 250px\"\n *dropdownMenu\n >\n <div class=\"p-16 bg-level-2\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n [c8yIcon]=\"'info-circle'\"\n ></i>\n <strong tanslate>The list below may not be complete.</strong>\n </p>\n <p tanslate>\n Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n add a custom alarm.\n </p>\n </div>\n </div>\n <c8y-list-group>\n <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n <input\n class=\"form-control\"\n placeholder=\"'Custom alarm type' | translate\"\n type=\"text\"\n [(ngModel)]=\"customAlarmTypeInput\"\n (keydown)=\"confirmWithEnter($event)\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn-dot text-primary\"\n [attr.aria-label]=\"'Add custom alarm' | translate\"\n tooltip=\"'Add' | translate\"\n placement=\"top\"\n [delay]=\"500\"\n (click)=\"addCustomAlarmType()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li\n class=\"c8y-list__item__collapse--container-small cdk-drag\"\n style=\"cursor: pointer\"\n *ngFor=\"let alarmType of possibleFilters\"\n (click)=\"toggleAlarmType(alarmType)\"\n >\n <c8y-li-checkbox\n class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n [selected]=\"alarmType.__active\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n ></c8y-li-checkbox>\n <div class=\"d-flex a-i-center p-l-4\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': alarmType.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <span class=\"text-truncate text-12 flex-grow\">\n {{ alarmType.label }}\n </span>\n <button\n class=\"btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"'Remove' | translate\"\n placement=\"top\"\n *ngIf=\"alarmType.__target === null\"\n [delay]=\"500\"\n (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li>\n <c8y-li *ngIf=\"possibleFilters.length === 0\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"\n 'There is no alarm to filter. You can still add a custom alarm.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <div class=\"sticky-bottom p-16\">\n <button\n class=\"btn btn-block btn-primary\"\n [disabled]=\"possibleFilters.length === 0\"\n (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n translate\n >\n Apply\n </button>\n </div>\n </c8y-list-group>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "directive", type: i8.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
148
148
  }
149
149
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsTypeFilterComponent, decorators: [{
150
150
  type: Component,
151
- args: [{ selector: 'c8y-alarms-type-filter', template: "<div class=\"d-flex a-i-center\">\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by Alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n (onHidden)=\"resetFilters()\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: unset; min-width: 250px\"\n *dropdownMenu\n >\n <div class=\"p-16 bg-level-2\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n [c8yIcon]=\"'info-circle'\"\n ></i>\n <strong tanslate>The list below may not be complete.</strong>\n </p>\n <p tanslate>\n Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n add a custom alarm.\n </p>\n </div>\n </div>\n <c8y-list-group>\n <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n <input\n class=\"form-control\"\n placeholder=\"'Custom alarm type' | translate\"\n type=\"text\"\n [(ngModel)]=\"customAlarmTypeInput\"\n (keydown)=\"confirmWithEnter($event)\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn-dot text-primary\"\n [attr.aria-label]=\"'Add custom alarm' | translate\"\n tooltip=\"'Add' | translate\"\n placement=\"top\"\n [delay]=\"500\"\n (click)=\"addCustomAlarmType()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li\n class=\"c8y-list__item__collapse--container-small cdk-drag\"\n style=\"cursor: pointer\"\n *ngFor=\"let alarmType of possibleFilters\"\n (click)=\"toggleAlarmType(alarmType)\"\n >\n <c8y-li-checkbox\n class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n [selected]=\"alarmType.__active\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n ></c8y-li-checkbox>\n <div class=\"d-flex a-i-center p-l-4\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': alarmType.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <span class=\"text-truncate text-12 flex-grow\">\n {{ alarmType.label }}\n </span>\n <button\n class=\"btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"'Remove' | translate\"\n placement=\"top\"\n *ngIf=\"alarmType.__target === null\"\n [delay]=\"500\"\n (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li>\n <c8y-li *ngIf=\"possibleFilters.length === 0\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"\n 'There is no alarm to filter. You can still add a custom alarm.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <div class=\"sticky-bottom p-16\">\n <button\n class=\"btn btn-block btn-primary\"\n [disabled]=\"possibleFilters.length === 0\"\n (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n translate\n >\n Apply\n </button>\n </div>\n </c8y-list-group>\n </div>\n </div>\n</div>\n" }]
151
+ args: [{ selector: 'c8y-alarms-type-filter', template: "<div class=\"d-flex a-i-center\">\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n (onHidden)=\"resetFilters()\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: unset; min-width: 250px\"\n *dropdownMenu\n >\n <div class=\"p-16 bg-level-2\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n [c8yIcon]=\"'info-circle'\"\n ></i>\n <strong tanslate>The list below may not be complete.</strong>\n </p>\n <p tanslate>\n Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n add a custom alarm.\n </p>\n </div>\n </div>\n <c8y-list-group>\n <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n <input\n class=\"form-control\"\n placeholder=\"'Custom alarm type' | translate\"\n type=\"text\"\n [(ngModel)]=\"customAlarmTypeInput\"\n (keydown)=\"confirmWithEnter($event)\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn-dot text-primary\"\n [attr.aria-label]=\"'Add custom alarm' | translate\"\n tooltip=\"'Add' | translate\"\n placement=\"top\"\n [delay]=\"500\"\n (click)=\"addCustomAlarmType()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li\n class=\"c8y-list__item__collapse--container-small cdk-drag\"\n style=\"cursor: pointer\"\n *ngFor=\"let alarmType of possibleFilters\"\n (click)=\"toggleAlarmType(alarmType)\"\n >\n <c8y-li-checkbox\n class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n [selected]=\"alarmType.__active\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n ></c8y-li-checkbox>\n <div class=\"d-flex a-i-center p-l-4\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': alarmType.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <span class=\"text-truncate text-12 flex-grow\">\n {{ alarmType.label }}\n </span>\n <button\n class=\"btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"'Remove' | translate\"\n placement=\"top\"\n *ngIf=\"alarmType.__target === null\"\n [delay]=\"500\"\n (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li>\n <c8y-li *ngIf=\"possibleFilters.length === 0\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"\n 'There is no alarm to filter. You can still add a custom alarm.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <div class=\"sticky-bottom p-16\">\n <button\n class=\"btn btn-block btn-primary\"\n [disabled]=\"possibleFilters.length === 0\"\n (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n translate\n >\n Apply\n </button>\n </div>\n </c8y-list-group>\n </div>\n </div>\n</div>\n" }]
152
152
  }], ctorParameters: () => [{ type: i1.AlarmEventSelectorService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.ColorService }], propDecorators: { alarms: [{
153
153
  type: Input
154
154
  }], possibleFilters: [{
@@ -158,4 +158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
158
158
  }], onFilterChanged: [{
159
159
  type: Output
160
160
  }] } });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdHlwZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy10eXBlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBZ0IseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBTS9DLE1BQU0sT0FBTyx5QkFBeUI7SUFzQnBDLFlBQ1UseUJBQW9ELEVBQ3BELGNBQThCLEVBQzlCLE1BQWMsRUFDZCxZQUEwQjtRQUgxQiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFyQnBDLG9CQUFlLEdBQW1CLEVBQUUsQ0FBQztRQUdyQyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFHbkMsb0JBQWUsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuRSxxQkFBZ0IsR0FBbUIsRUFBRSxDQUFDO1FBQ3RDLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUVqQixtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUM5Qix1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUV6QyxhQUFRLEdB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LENBQUMsR0FBRyxnQ0FBZ0MsRUFBRSxHQUFHLGtDQUFrQyxDQUFDLEVBQzVFLGVBQWUsQ0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUM7SUFDOUMsQ0FBQztJQUVPLHVDQUF1QyxDQUM3QyxZQUE0QixFQUM1QixnQkFBZ0IsR0FBRyxFQUFFO1FBRXJCLE1BQU0sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEQsR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLGFBQTZCO1FBQ2xELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7OEdBakxVLHlCQUF5QjtrR0FBekIseUJBQXlCLHNPQ3BCdEMsKzZMQTRLQTs7MkZEeEphLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7MktBS2xDLE1BQU07c0JBREwsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJQWxhcm0sIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29sb3JTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbGFybURldGFpbHMsIEFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtLWV2ZW50LXNlbGVjdG9yJztcbmltcG9ydCB7IG1hcCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybXMtdHlwZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNUeXBlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIGFsYXJtczogSVJlc3VsdExpc3Q8SUFsYXJtPjtcblxuICBASW5wdXQoKVxuICBwb3NzaWJsZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdID0gW107XG5cbiAgQElucHV0KClcbiAgYWN0aXZlRmlsdGVyczogQWxhcm1EZXRhaWxzW10gPSBbXTtcblxuICBAT3V0cHV0KClcbiAgb25GaWx0ZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QWxhcm1EZXRhaWxzW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGN1c3RvbUFsYXJtVHlwZXM6IEFsYXJtRGV0YWlsc1tdID0gW107XG4gIGN1c3RvbUFsYXJtVHlwZUlucHV0ID0gJyc7XG5cbiAgcmVhZG9ubHkgcXVlcnlQYXJhbU5hbWUgPSAndHlwZUZpbHRlcic7XG4gIHJlYWRvbmx5IFNUT1JBR0VfQUNDRVNTX0tFWSA9ICdjdXN0b21BbGFybVR5cGVzJztcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50UXVlcnlQYXJhbSA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29sb3JTZXJ2aWNlOiBDb2xvclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UXVlcnlQYXJhbWV0ZXJPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuYWxhcm1zICYmIGNoYW5nZXMuYWxhcm1zLmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmFjdGl2ZUZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldFBvc3NpYmxlRmlsdGVycygpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlckNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFF1ZXJ5UGFyYW1ldGVyT2JzZXJ2YWJsZSgpIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHBhcmFtcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxhcm1zOiBBbGFybURldGFpbHNbXSA9IHRoaXMucG9zc2libGVGaWx0ZXJzO1xuICAgICAgICAgIGNvbnN0IHBvc3NpYmxlRmlsdGVycyA9IHRoaXMuc2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKFxuICAgICAgICAgICAgYWxhcm1zLFxuICAgICAgICAgICAgcGFyYW1zW3RoaXMucXVlcnlQYXJhbU5hbWVdXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gcG9zc2libGVGaWx0ZXJzO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChwb3NzaWJsZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gcG9zc2libGVGaWx0ZXJzO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyQ2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHRvZ2dsZUFsYXJtVHlwZShhbGFybVR5cGU6IEFsYXJtRGV0YWlscykge1xuICAgIGFsYXJtVHlwZS5fX2FjdGl2ZSA9ICFhbGFybVR5cGUuX19hY3RpdmU7XG4gIH1cblxuICBkZXNlbGVjdCh0eXBlOiBBbGFybURldGFpbHMpIHtcbiAgICBjb25zdCBhbGFybUZpbHRlciA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbmQoXG4gICAgICBhbGFybSA9PiBhbGFybS5maWx0ZXJzLnR5cGUgPT09IHR5cGUuZmlsdGVycy50eXBlXG4gICAgKTtcbiAgICBhbGFybUZpbHRlci5fX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJDaGFuZ2UoKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gdGhpcy5wb3NzaWJsZUZpbHRlcnMubWFwKGFsYXJtID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFsYXJtLFxuICAgICAgICBfX2FjdGl2ZTogZmFsc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5hcHBseUZpbHRlckNoYW5nZSgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJDaGFuZ2UoKSB7XG4gICAgY29uc3QgYWN0aXZlcyA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChhbGFybUZpbHRlcjogQWxhcm1EZXRhaWxzKSA9PiBhbGFybUZpbHRlci5fX2FjdGl2ZVxuICAgICk7XG4gICAgY29uc3QgbmV3UXVlcnlQYXJhbSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXMoYWN0aXZlcyk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IG5ld1F1ZXJ5UGFyYW0gIT09IHRoaXMuY3VycmVudFF1ZXJ5UGFyYW07XG4gICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVycyA9IGFjdGl2ZXM7XG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlZC5lbWl0KHRoaXMuYWN0aXZlRmlsdGVycyk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIHR5cGVGaWx0ZXI6IG5ld1F1ZXJ5UGFyYW0gfHwgbnVsbFxuICAgICAgICB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXJ5UGFyYW0gPSBuZXdRdWVyeVBhcmFtO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RmlsdGVycygpIHtcbiAgICB0aGlzLnBvc3NpYmxlRmlsdGVycy5mb3JFYWNoKHBvc3NpYmxlRmlsdGVyID0+IHtcbiAgICAgIHBvc3NpYmxlRmlsdGVyLl9fYWN0aXZlID0gdGhpcy5hY3RpdmVGaWx0ZXJzLnNvbWUoXG4gICAgICAgIChhY3RpdmVGaWx0ZXI6IEFsYXJtRGV0YWlscykgPT4gYWN0aXZlRmlsdGVyID09PSBwb3NzaWJsZUZpbHRlclxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUN1c3RvbUFsYXJtKGFsYXJtRGV0YWlsczogQWxhcm1EZXRhaWxzKSB7XG4gICAgdGhpcy5wb3NzaWJsZUZpbHRlcnMgPSB0aGlzLnBvc3NpYmxlRmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IGZpbHRlciAhPT0gYWxhcm1EZXRhaWxzKTtcbiAgICB0aGlzLnN0b3JlQ3VzdG9tQWxhcm1UeXBlcygpO1xuICB9XG5cbiAgY29uZmlybVdpdGhFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMuYWRkQ3VzdG9tQWxhcm1UeXBlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkQ3VzdG9tQWxhcm1UeXBlKCkge1xuICAgIGlmICghdGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBvc3NpYmxlRmlsdGVycy51bnNoaWZ0KHtcbiAgICAgIGxhYmVsOiB0aGlzLmN1c3RvbUFsYXJtVHlwZUlucHV0LFxuICAgICAgY29sb3I6IGF3YWl0IHRoaXMuY29sb3JTZXJ2aWNlLmdlbmVyYXRlQ29sb3IodGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCksXG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIHR5cGU6IHRoaXMuY3VzdG9tQWxhcm1UeXBlSW5wdXRcbiAgICAgIH0sXG4gICAgICB0aW1lbGluZVR5cGU6ICdBTEFSTScsXG4gICAgICBfX2FjdGl2ZTogdHJ1ZSxcbiAgICAgIF9fdGFyZ2V0OiBudWxsXG4gICAgfSk7XG4gICAgdGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCA9ICcnO1xuICAgIHRoaXMuc3RvcmVDdXN0b21BbGFybVR5cGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlQ3VzdG9tQWxhcm1UeXBlcygpIHtcbiAgICBjb25zdCBjdXN0b21UeXBlcyA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbHRlcigoZmlsdGVyOiBBbGFybURldGFpbHMpID0+ICFmaWx0ZXIuX190YXJnZXQpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfQUNDRVNTX0tFWSwgSlNPTi5zdHJpbmdpZnkoY3VzdG9tVHlwZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VzdG9tQWxhcm1UeXBlRnJvbVN0b3JhZ2UoKSB7XG4gICAgY29uc3QgdHlwZXMgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0FDQ0VTU19LRVkpO1xuICAgIHJldHVybiB0eXBlcyA/IEpTT04ucGFyc2UodHlwZXMpIDogW107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFBvc3NpYmxlRmlsdGVycygpIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KHRoaXMucXVlcnlQYXJhbU5hbWUpO1xuICAgIGNvbnN0IGFsYXJtVHlwZXNGcm9tQ3VycmVudGx5U2hvd25BbGFybXMgPVxuICAgICAgYXdhaXQgdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLmdldFVuaXF1ZUFsYXJtc09ubHkodGhpcy5hbGFybXMuZGF0YSk7XG4gICAgY29uc3QgY3VzdG9tQWxhcm1UeXBlc0Zyb21Mb2NhbFN0b3JhZ2UgPSB0aGlzLmdldEN1c3RvbUFsYXJtVHlwZUZyb21TdG9yYWdlKCk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZUFsYXJtVHlwZXMgPSB0aGlzLnNldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICAgIFsuLi5jdXN0b21BbGFybVR5cGVzRnJvbUxvY2FsU3RvcmFnZSwgLi4uYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtc10sXG4gICAgICBxdWVyeVBhcmFtZXRlcnNcbiAgICApO1xuICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gc2VsZWN0YWJsZUFsYXJtVHlwZXM7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICBhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdLFxuICAgIGZpbHRlclR5cGVzUXVlcnkgPSAnJ1xuICApOiBBbGFybURldGFpbHNbXSB7XG4gICAgY29uc3QgdHlwZXMgPSAoZmlsdGVyVHlwZXNRdWVyeSA/PyAnJykuc3BsaXQoJywnKTtcbiAgICByZXR1cm4gYWxhcm1GaWx0ZXJzLm1hcCgoYWxhcm06IEFsYXJtRGV0YWlscykgPT4gKHtcbiAgICAgIC4uLmFsYXJtLFxuICAgICAgX19hY3RpdmU6IHR5cGVzLmluY2x1ZGVzKGFsYXJtLmZpbHRlcnMudHlwZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1zKGFjdGl2ZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWN0aXZlRmlsdGVycy5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXJzLnR5cGUpLmpvaW4oJywnKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICB0aXRsZT1cInt7ICdGaWx0ZXIgYnkgQWxhcm0gdHlwZXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBkcm9wZG93blxuICAgICNmaWx0ZXJzRHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gICAgW2Nka1RyYXBGb2N1c109XCJmaWx0ZXJzRHJvcGRvd24uaXNPcGVuXCJcbiAgICAob25IaWRkZW4pPVwicmVzZXRGaWx0ZXJzKClcIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmaXQtd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbCBkLWZsZXggYS1pLWNlbnRlciBpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoID4gMDsgZWxzZSBhbGxUeXBlc1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGFjdGl2ZUZpbHRlcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXhzIGJ0bi1jbGVhbiB0ZXh0LTEwXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkZXNlbGVjdChmaWx0ZXIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXIgY2lyY2xlLWljb24td3JhcHBlci0tc21hbGxcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogZmlsdGVyLmNvbG9yIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICBjOHlJY29uPVwiYmVsbFwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7eyBmaWx0ZXIuZmlsdGVycy50eXBlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhbGxUeXBlcz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICB7eyAnQWxsIGFsYXJtIHR5cGVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3QgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWRlZmF1bHQgYnRuXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NsZWFyIGZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLS1jYXJldFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm0tdHlwZS1maWx0ZXJcIlxuICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImNhcmV0XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LWFjdGlvbi1iYXJcIlxuICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IHVuc2V0OyBtaW4td2lkdGg6IDI1MHB4XCJcbiAgICAgICpkcm9wZG93bk1lbnVcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiBiZy1sZXZlbC0yXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaW5mbyBtLXItNFwiXG4gICAgICAgICAgICAgIFtjOHlJY29uXT1cIidpbmZvLWNpcmNsZSdcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDxzdHJvbmcgdGFuc2xhdGU+VGhlIGxpc3QgYmVsb3cgbWF5IG5vdCBiZSBjb21wbGV0ZS48L3N0cm9uZz5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgdGFuc2xhdGU+XG4gICAgICAgICAgICBSZWNlbnQgYWxhcm1zIGFyZSBkaXNwbGF5ZWQgYmVsb3cuIFBhc3QgYWxhcm1zIG1pZ2h0IG5vdCBiZSBzaG93bi4gT3B0aW9uYWxseSB5b3UgY2FuXG4gICAgICAgICAgICBhZGQgYSBjdXN0b20gYWxhcm0uXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGM4eS1saXN0LWdyb3VwPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgcC10LTE2IHAtYi0xNiBwLXItMzIgcC1sLTMyIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiJ0N1c3RvbSBhbGFybSB0eXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1c3RvbUFsYXJtVHlwZUlucHV0XCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImNvbmZpcm1XaXRoRW50ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvdCB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZGQgY3VzdG9tIGFsYXJtJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXA9XCInQWRkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ3VzdG9tQWxhcm1UeXBlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGM4eS1saVxuICAgICAgICAgIGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2NvbGxhcHNlLS1jb250YWluZXItc21hbGwgY2RrLWRyYWdcIlxuICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgYWxhcm1UeXBlIG9mIHBvc3NpYmxlRmlsdGVyc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsYXJtVHlwZShhbGFybVR5cGUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktbGktY2hlY2tib3hcbiAgICAgICAgICAgIGNsYXNzPVwiYS1zLWNlbnRlciBtLXQtNCBwLXItMCBwLWwtMFwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwiYWxhcm1UeXBlLl9fYWN0aXZlXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGFybVR5cGUoYWxhcm1UeXBlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICA+PC9jOHktbGktY2hlY2tib3g+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHAtbC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2NvbG9ycGlja2VyIHAtdC0wIHAtYi0wIHAtbC0wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktY29sb3JwaWNrZXIgYzh5LWNvbG9ycGlja2VyLS1hbGFybVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGFsYXJtVHlwZS5jb2xvciB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0cm9rZWQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjOHlJY29uXT1cIidiZWxsJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LTEyIGZsZXgtZ3Jvd1wiPlxuICAgICAgICAgICAgICB7eyBhbGFybVR5cGUubGFiZWwgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4tZG90IGJ0bi1kb3QtLWRhbmdlclwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICB0b29sdGlwPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgICAqbmdJZj1cImFsYXJtVHlwZS5fX3RhcmdldCA9PT0gbnVsbFwiXG4gICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ3VzdG9tQWxhcm0oYWxhcm1UeXBlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPGM4eS1saSAqbmdJZj1cInBvc3NpYmxlRmlsdGVycy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBjbGFzcz1cInAtdC04XCJcbiAgICAgICAgICAgIGljb249XCJjOHktYWxhcm1cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidObyBhbGFybSBmb3VuZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgICAgICAnVGhlcmUgaXMgbm8gYWxhcm0gdG8gZmlsdGVyLiBZb3UgY2FuIHN0aWxsIGFkZCBhIGN1c3RvbSBhbGFybS4nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1ib3R0b20gcC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1ibG9jayBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicG9zc2libGVGaWx0ZXJzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJDaGFuZ2UoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmaWx0ZXJzRHJvcGRvd24uaGlkZSgpXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEFwcGx5XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdHlwZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy10eXBlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBZ0IseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBTS9DLE1BQU0sT0FBTyx5QkFBeUI7SUFzQnBDLFlBQ1UseUJBQW9ELEVBQ3BELGNBQThCLEVBQzlCLE1BQWMsRUFDZCxZQUEwQjtRQUgxQiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFyQnBDLG9CQUFlLEdBQW1CLEVBQUUsQ0FBQztRQUdyQyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFHbkMsb0JBQWUsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuRSxxQkFBZ0IsR0FBbUIsRUFBRSxDQUFDO1FBQ3RDLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUVqQixtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUM5Qix1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUV6QyxhQUFRLEdB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LENBQUMsR0FBRyxnQ0FBZ0MsRUFBRSxHQUFHLGtDQUFrQyxDQUFDLEVBQzVFLGVBQWUsQ0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUM7SUFDOUMsQ0FBQztJQUVPLHVDQUF1QyxDQUM3QyxZQUE0QixFQUM1QixnQkFBZ0IsR0FBRyxFQUFFO1FBRXJCLE1BQU0sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEQsR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLGFBQTZCO1FBQ2xELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7OEdBakxVLHlCQUF5QjtrR0FBekIseUJBQXlCLHNPQ3BCdEMsKzZMQTRLQTs7MkZEeEphLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7MktBS2xDLE1BQU07c0JBREwsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJQWxhcm0sIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29sb3JTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbGFybURldGFpbHMsIEFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtLWV2ZW50LXNlbGVjdG9yJztcbmltcG9ydCB7IG1hcCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybXMtdHlwZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNUeXBlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIGFsYXJtczogSVJlc3VsdExpc3Q8SUFsYXJtPjtcblxuICBASW5wdXQoKVxuICBwb3NzaWJsZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdID0gW107XG5cbiAgQElucHV0KClcbiAgYWN0aXZlRmlsdGVyczogQWxhcm1EZXRhaWxzW10gPSBbXTtcblxuICBAT3V0cHV0KClcbiAgb25GaWx0ZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QWxhcm1EZXRhaWxzW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGN1c3RvbUFsYXJtVHlwZXM6IEFsYXJtRGV0YWlsc1tdID0gW107XG4gIGN1c3RvbUFsYXJtVHlwZUlucHV0ID0gJyc7XG5cbiAgcmVhZG9ubHkgcXVlcnlQYXJhbU5hbWUgPSAndHlwZUZpbHRlcic7XG4gIHJlYWRvbmx5IFNUT1JBR0VfQUNDRVNTX0tFWSA9ICdjdXN0b21BbGFybVR5cGVzJztcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50UXVlcnlQYXJhbSA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29sb3JTZXJ2aWNlOiBDb2xvclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UXVlcnlQYXJhbWV0ZXJPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuYWxhcm1zICYmIGNoYW5nZXMuYWxhcm1zLmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmFjdGl2ZUZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldFBvc3NpYmxlRmlsdGVycygpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlckNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFF1ZXJ5UGFyYW1ldGVyT2JzZXJ2YWJsZSgpIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHBhcmFtcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxhcm1zOiBBbGFybURldGFpbHNbXSA9IHRoaXMucG9zc2libGVGaWx0ZXJzO1xuICAgICAgICAgIGNvbnN0IHBvc3NpYmxlRmlsdGVycyA9IHRoaXMuc2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKFxuICAgICAgICAgICAgYWxhcm1zLFxuICAgICAgICAgICAgcGFyYW1zW3RoaXMucXVlcnlQYXJhbU5hbWVdXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gcG9zc2libGVGaWx0ZXJzO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChwb3NzaWJsZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gcG9zc2libGVGaWx0ZXJzO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyQ2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHRvZ2dsZUFsYXJtVHlwZShhbGFybVR5cGU6IEFsYXJtRGV0YWlscykge1xuICAgIGFsYXJtVHlwZS5fX2FjdGl2ZSA9ICFhbGFybVR5cGUuX19hY3RpdmU7XG4gIH1cblxuICBkZXNlbGVjdCh0eXBlOiBBbGFybURldGFpbHMpIHtcbiAgICBjb25zdCBhbGFybUZpbHRlciA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbmQoXG4gICAgICBhbGFybSA9PiBhbGFybS5maWx0ZXJzLnR5cGUgPT09IHR5cGUuZmlsdGVycy50eXBlXG4gICAgKTtcbiAgICBhbGFybUZpbHRlci5fX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJDaGFuZ2UoKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gdGhpcy5wb3NzaWJsZUZpbHRlcnMubWFwKGFsYXJtID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFsYXJtLFxuICAgICAgICBfX2FjdGl2ZTogZmFsc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5hcHBseUZpbHRlckNoYW5nZSgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJDaGFuZ2UoKSB7XG4gICAgY29uc3QgYWN0aXZlcyA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChhbGFybUZpbHRlcjogQWxhcm1EZXRhaWxzKSA9PiBhbGFybUZpbHRlci5fX2FjdGl2ZVxuICAgICk7XG4gICAgY29uc3QgbmV3UXVlcnlQYXJhbSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXMoYWN0aXZlcyk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IG5ld1F1ZXJ5UGFyYW0gIT09IHRoaXMuY3VycmVudFF1ZXJ5UGFyYW07XG4gICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVycyA9IGFjdGl2ZXM7XG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlZC5lbWl0KHRoaXMuYWN0aXZlRmlsdGVycyk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIHR5cGVGaWx0ZXI6IG5ld1F1ZXJ5UGFyYW0gfHwgbnVsbFxuICAgICAgICB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXJ5UGFyYW0gPSBuZXdRdWVyeVBhcmFtO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RmlsdGVycygpIHtcbiAgICB0aGlzLnBvc3NpYmxlRmlsdGVycy5mb3JFYWNoKHBvc3NpYmxlRmlsdGVyID0+IHtcbiAgICAgIHBvc3NpYmxlRmlsdGVyLl9fYWN0aXZlID0gdGhpcy5hY3RpdmVGaWx0ZXJzLnNvbWUoXG4gICAgICAgIChhY3RpdmVGaWx0ZXI6IEFsYXJtRGV0YWlscykgPT4gYWN0aXZlRmlsdGVyID09PSBwb3NzaWJsZUZpbHRlclxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUN1c3RvbUFsYXJtKGFsYXJtRGV0YWlsczogQWxhcm1EZXRhaWxzKSB7XG4gICAgdGhpcy5wb3NzaWJsZUZpbHRlcnMgPSB0aGlzLnBvc3NpYmxlRmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IGZpbHRlciAhPT0gYWxhcm1EZXRhaWxzKTtcbiAgICB0aGlzLnN0b3JlQ3VzdG9tQWxhcm1UeXBlcygpO1xuICB9XG5cbiAgY29uZmlybVdpdGhFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMuYWRkQ3VzdG9tQWxhcm1UeXBlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkQ3VzdG9tQWxhcm1UeXBlKCkge1xuICAgIGlmICghdGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBvc3NpYmxlRmlsdGVycy51bnNoaWZ0KHtcbiAgICAgIGxhYmVsOiB0aGlzLmN1c3RvbUFsYXJtVHlwZUlucHV0LFxuICAgICAgY29sb3I6IGF3YWl0IHRoaXMuY29sb3JTZXJ2aWNlLmdlbmVyYXRlQ29sb3IodGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCksXG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIHR5cGU6IHRoaXMuY3VzdG9tQWxhcm1UeXBlSW5wdXRcbiAgICAgIH0sXG4gICAgICB0aW1lbGluZVR5cGU6ICdBTEFSTScsXG4gICAgICBfX2FjdGl2ZTogdHJ1ZSxcbiAgICAgIF9fdGFyZ2V0OiBudWxsXG4gICAgfSk7XG4gICAgdGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCA9ICcnO1xuICAgIHRoaXMuc3RvcmVDdXN0b21BbGFybVR5cGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlQ3VzdG9tQWxhcm1UeXBlcygpIHtcbiAgICBjb25zdCBjdXN0b21UeXBlcyA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbHRlcigoZmlsdGVyOiBBbGFybURldGFpbHMpID0+ICFmaWx0ZXIuX190YXJnZXQpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfQUNDRVNTX0tFWSwgSlNPTi5zdHJpbmdpZnkoY3VzdG9tVHlwZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VzdG9tQWxhcm1UeXBlRnJvbVN0b3JhZ2UoKSB7XG4gICAgY29uc3QgdHlwZXMgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0FDQ0VTU19LRVkpO1xuICAgIHJldHVybiB0eXBlcyA/IEpTT04ucGFyc2UodHlwZXMpIDogW107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFBvc3NpYmxlRmlsdGVycygpIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KHRoaXMucXVlcnlQYXJhbU5hbWUpO1xuICAgIGNvbnN0IGFsYXJtVHlwZXNGcm9tQ3VycmVudGx5U2hvd25BbGFybXMgPVxuICAgICAgYXdhaXQgdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLmdldFVuaXF1ZUFsYXJtc09ubHkodGhpcy5hbGFybXMuZGF0YSk7XG4gICAgY29uc3QgY3VzdG9tQWxhcm1UeXBlc0Zyb21Mb2NhbFN0b3JhZ2UgPSB0aGlzLmdldEN1c3RvbUFsYXJtVHlwZUZyb21TdG9yYWdlKCk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZUFsYXJtVHlwZXMgPSB0aGlzLnNldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICAgIFsuLi5jdXN0b21BbGFybVR5cGVzRnJvbUxvY2FsU3RvcmFnZSwgLi4uYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtc10sXG4gICAgICBxdWVyeVBhcmFtZXRlcnNcbiAgICApO1xuICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gc2VsZWN0YWJsZUFsYXJtVHlwZXM7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICBhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdLFxuICAgIGZpbHRlclR5cGVzUXVlcnkgPSAnJ1xuICApOiBBbGFybURldGFpbHNbXSB7XG4gICAgY29uc3QgdHlwZXMgPSAoZmlsdGVyVHlwZXNRdWVyeSA/PyAnJykuc3BsaXQoJywnKTtcbiAgICByZXR1cm4gYWxhcm1GaWx0ZXJzLm1hcCgoYWxhcm06IEFsYXJtRGV0YWlscykgPT4gKHtcbiAgICAgIC4uLmFsYXJtLFxuICAgICAgX19hY3RpdmU6IHR5cGVzLmluY2x1ZGVzKGFsYXJtLmZpbHRlcnMudHlwZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1zKGFjdGl2ZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWN0aXZlRmlsdGVycy5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXJzLnR5cGUpLmpvaW4oJywnKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICB0aXRsZT1cInt7ICdGaWx0ZXIgYnkgYWxhcm0gdHlwZXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBkcm9wZG93blxuICAgICNmaWx0ZXJzRHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gICAgW2Nka1RyYXBGb2N1c109XCJmaWx0ZXJzRHJvcGRvd24uaXNPcGVuXCJcbiAgICAob25IaWRkZW4pPVwicmVzZXRGaWx0ZXJzKClcIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmaXQtd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbCBkLWZsZXggYS1pLWNlbnRlciBpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoID4gMDsgZWxzZSBhbGxUeXBlc1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGFjdGl2ZUZpbHRlcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXhzIGJ0bi1jbGVhbiB0ZXh0LTEwXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkZXNlbGVjdChmaWx0ZXIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXIgY2lyY2xlLWljb24td3JhcHBlci0tc21hbGxcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogZmlsdGVyLmNvbG9yIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICBjOHlJY29uPVwiYmVsbFwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7eyBmaWx0ZXIuZmlsdGVycy50eXBlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhbGxUeXBlcz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICB7eyAnQWxsIGFsYXJtIHR5cGVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3QgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWRlZmF1bHQgYnRuXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NsZWFyIGZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLS1jYXJldFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm0tdHlwZS1maWx0ZXJcIlxuICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImNhcmV0XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LWFjdGlvbi1iYXJcIlxuICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IHVuc2V0OyBtaW4td2lkdGg6IDI1MHB4XCJcbiAgICAgICpkcm9wZG93bk1lbnVcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiBiZy1sZXZlbC0yXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaW5mbyBtLXItNFwiXG4gICAgICAgICAgICAgIFtjOHlJY29uXT1cIidpbmZvLWNpcmNsZSdcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDxzdHJvbmcgdGFuc2xhdGU+VGhlIGxpc3QgYmVsb3cgbWF5IG5vdCBiZSBjb21wbGV0ZS48L3N0cm9uZz5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgdGFuc2xhdGU+XG4gICAgICAgICAgICBSZWNlbnQgYWxhcm1zIGFyZSBkaXNwbGF5ZWQgYmVsb3cuIFBhc3QgYWxhcm1zIG1pZ2h0IG5vdCBiZSBzaG93bi4gT3B0aW9uYWxseSB5b3UgY2FuXG4gICAgICAgICAgICBhZGQgYSBjdXN0b20gYWxhcm0uXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGM4eS1saXN0LWdyb3VwPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgcC10LTE2IHAtYi0xNiBwLXItMzIgcC1sLTMyIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiJ0N1c3RvbSBhbGFybSB0eXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1c3RvbUFsYXJtVHlwZUlucHV0XCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImNvbmZpcm1XaXRoRW50ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvdCB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZGQgY3VzdG9tIGFsYXJtJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXA9XCInQWRkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ3VzdG9tQWxhcm1UeXBlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGM4eS1saVxuICAgICAgICAgIGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2NvbGxhcHNlLS1jb250YWluZXItc21hbGwgY2RrLWRyYWdcIlxuICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgYWxhcm1UeXBlIG9mIHBvc3NpYmxlRmlsdGVyc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsYXJtVHlwZShhbGFybVR5cGUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktbGktY2hlY2tib3hcbiAgICAgICAgICAgIGNsYXNzPVwiYS1zLWNlbnRlciBtLXQtNCBwLXItMCBwLWwtMFwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwiYWxhcm1UeXBlLl9fYWN0aXZlXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGFybVR5cGUoYWxhcm1UeXBlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICA+PC9jOHktbGktY2hlY2tib3g+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHAtbC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2NvbG9ycGlja2VyIHAtdC0wIHAtYi0wIHAtbC0wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktY29sb3JwaWNrZXIgYzh5LWNvbG9ycGlja2VyLS1hbGFybVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGFsYXJtVHlwZS5jb2xvciB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0cm9rZWQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjOHlJY29uXT1cIidiZWxsJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LTEyIGZsZXgtZ3Jvd1wiPlxuICAgICAgICAgICAgICB7eyBhbGFybVR5cGUubGFiZWwgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4tZG90IGJ0bi1kb3QtLWRhbmdlclwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICB0b29sdGlwPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgICAqbmdJZj1cImFsYXJtVHlwZS5fX3RhcmdldCA9PT0gbnVsbFwiXG4gICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ3VzdG9tQWxhcm0oYWxhcm1UeXBlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPGM4eS1saSAqbmdJZj1cInBvc3NpYmxlRmlsdGVycy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBjbGFzcz1cInAtdC04XCJcbiAgICAgICAgICAgIGljb249XCJjOHktYWxhcm1cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidObyBhbGFybSBmb3VuZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgICAgICAnVGhlcmUgaXMgbm8gYWxhcm0gdG8gZmlsdGVyLiBZb3UgY2FuIHN0aWxsIGFkZCBhIGN1c3RvbSBhbGFybS4nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1ib3R0b20gcC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1ibG9jayBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicG9zc2libGVGaWx0ZXJzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJDaGFuZ2UoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmaWx0ZXJzRHJvcGRvd24uaGlkZSgpXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEFwcGx5XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==