@cqa-lib/cqa-ui 1.1.264 → 1.1.266

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.
@@ -2,13 +2,11 @@ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, HostBi
2
2
  import { DETAIL_SIDE_PANEL_SCROLL_STYLES } from './detail-side-panel.styles';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/material/icon";
5
- import * as i2 from "../test-case-details/test-case-details.component";
6
- import * as i3 from "@angular/material/tooltip";
7
- import * as i4 from "@angular/common";
5
+ import * as i2 from "@angular/material/tooltip";
6
+ import * as i3 from "@angular/common";
8
7
  export class DetailSidePanelComponent {
9
- constructor(cdr) {
10
- this.cdr = cdr;
11
- /** Tabs - each tab has a side panel icon button; tabs and buttons are 1:1 */
8
+ constructor() {
9
+ /** Tabs - each tab has a side panel icon button; tabs and buttons are 1:1. Host defines tabs and content. */
12
10
  this.tabs = [
13
11
  { label: 'Test Case', value: 'test-case', icon: 'description' },
14
12
  { label: 'Data Library', value: 'data-library', icon: 'folder' },
@@ -16,34 +14,8 @@ export class DetailSidePanelComponent {
16
14
  ];
17
15
  /** Currently active tab value */
18
16
  this.activeTab = 'test-case';
19
- /** Description section title */
20
- this.descriptionTitle = 'Description';
21
- /** Description text content */
22
- this.descriptionContent = '';
23
- /** When true, description uses rich text editor and renders as HTML. Host app must load Trix. */
24
- this.enableMarkdown = false;
25
- /** Whether to show the Edit button in the Description header */
26
- this.showEditButton = true;
27
- /** Metadata items (Created on, Status, Priority, etc.) */
28
- this.metadataItems = [];
29
- /** Labels/tags (e.g. Automation, API, SDK, UI/UX) */
30
- this.labels = [];
31
- /** Configuration sections - full width (e.g. Execution, AI Configuration) */
32
- this.configSections = [];
33
- /** Optional config sections displayed in a 2-column row (e.g. Waits & Retries, Device) */
34
- this.configSectionsRow2 = [];
35
- /** Platform: 'web' or 'mobile'. Defaults to 'web'. Used for Device Settings. */
36
- this.platform = 'web';
37
- /** When true, hides Priority, Type, Test Data Set, and Prerequisite Case (step groups don't have these). Defaults to false. */
38
- this.isStepGroup = false;
39
- /** Configuration section title */
40
- this.configTitle = 'Configuration';
41
17
  /** Whether to show the close button in the side menu */
42
18
  this.showCloseButton = false;
43
- /** When true, test case details start in edit mode (useful for Storybook). */
44
- this.startInEditMode = false;
45
- /** Override config per select for API-driven options, server search, load more. */
46
- this.selectConfigOverrides = {};
47
19
  /** Whether the panel is expanded (affects expand button icon and panel width) */
48
20
  this.expanded = true;
49
21
  /** Panel width when expanded (e.g. '480px', '25%') */
@@ -59,15 +31,6 @@ export class DetailSidePanelComponent {
59
31
  this.closeTooltip = 'Close';
60
32
  this.back = new EventEmitter();
61
33
  this.tabChange = new EventEmitter();
62
- this.editDescription = new EventEmitter();
63
- this.cancel = new EventEmitter();
64
- this.saveChanges = new EventEmitter();
65
- this.metadataLinkClick = new EventEmitter();
66
- this.selectSearch = new EventEmitter();
67
- this.selectLoadMore = new EventEmitter();
68
- this.selectOpened = new EventEmitter();
69
- this.selectionChange = new EventEmitter();
70
- this.labelAdded = new EventEmitter();
71
34
  this.expandToggle = new EventEmitter();
72
35
  this.close = new EventEmitter();
73
36
  }
@@ -83,12 +46,6 @@ export class DetailSidePanelComponent {
83
46
  trackByTabValue(_i, tab) {
84
47
  return tab.value;
85
48
  }
86
- trackByMetadataLabel(_i, item) {
87
- return item.label;
88
- }
89
- trackByConfigTitle(_i, section) {
90
- return section.title;
91
- }
92
49
  onBack() {
93
50
  this.back.emit();
94
51
  }
@@ -100,84 +57,27 @@ export class DetailSidePanelComponent {
100
57
  this.tabChange.emit(tab.value);
101
58
  }
102
59
  }
103
- onEditDescription() {
104
- this.editDescription.emit();
105
- }
106
- onSaveChanges(data) {
107
- this.saveChanges.emit(data);
108
- }
109
- onCancel() {
110
- this.cancel.emit();
111
- }
112
60
  onExpandToggle() {
113
61
  this.expandToggle.emit();
114
62
  }
115
63
  onClose() {
116
64
  this.close.emit();
117
65
  }
118
- onMetadataLinkClick(item) {
119
- if (item.link) {
120
- this.metadataLinkClick.emit(item);
121
- }
122
- }
123
- getStatusDotClass(item) {
124
- if (!item.statusColor)
125
- return '';
126
- switch (item.statusColor) {
127
- case 'yellow':
128
- return 'cqa-bg-[#EAB308]';
129
- case 'red':
130
- return 'cqa-bg-[#DC2626]';
131
- case 'green':
132
- return 'cqa-bg-[#16A34A]';
133
- case 'gray':
134
- default:
135
- return 'cqa-bg-[#94A3B8]';
136
- }
137
- }
138
66
  }
139
- DetailSidePanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailSidePanelComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
140
- DetailSidePanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DetailSidePanelComponent, selector: "cqa-detail-side-panel", inputs: { tabs: "tabs", activeTab: "activeTab", descriptionTitle: "descriptionTitle", descriptionContent: "descriptionContent", enableMarkdown: "enableMarkdown", showEditButton: "showEditButton", metadataItems: "metadataItems", labels: "labels", configSections: "configSections", configSectionsRow2: "configSectionsRow2", platform: "platform", isStepGroup: "isStepGroup", configTitle: "configTitle", showCloseButton: "showCloseButton", startInEditMode: "startInEditMode", editing: "editing", selectConfigOverrides: "selectConfigOverrides", expanded: "expanded", expandedWidth: "expandedWidth", collapsedWidth: "collapsedWidth", expandTooltip: "expandTooltip", collapseTooltip: "collapseTooltip", closeTooltip: "closeTooltip" }, outputs: { back: "back", tabChange: "tabChange", editDescription: "editDescription", cancel: "cancel", saveChanges: "saveChanges", metadataLinkClick: "metadataLinkClick", selectSearch: "selectSearch", selectLoadMore: "selectLoadMore", selectOpened: "selectOpened", selectionChange: "selectionChange", labelAdded: "labelAdded", expandToggle: "expandToggle", close: "close" }, host: { properties: { "style.width": "this.hostWidth", "style.min-width": "this.hostMinWidth", "style.max-width": "this.hostMaxWidth", "style.overflow": "this.hostOverflow" }, styleAttribute: "transition: width 0.3s ease-in-out", classAttribute: "cqa-ui-root cqa-flex cqa-flex-col cqa-h-full cqa-flex-shrink-0 cqa-flex-grow-0 cqa-bg-white cqa-shadow-[-4px_0_6px_-1px_rgba(0,0,0,0.05)]" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-min-w-0 cqa-bg-white\">\n <!-- Main content: Side menu + Scrollable content -->\n <div\n class=\"cqa-grid cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden\"\n [style.grid-template-columns]=\"expanded ? 'auto 1fr' : 'auto 0fr'\"\n style=\"transition: grid-template-columns 0.3s ease-in-out\">\n <!-- Left vertical icon menu -->\n <div\n class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-2 cqa-py-4 cqa-px-2 cqa-border-r cqa-border-[#F5F5F5] cqa-flex-shrink-0 cqa-text-[#0A0A0A]\"\n style=\"box-shadow: 1px 4px 12px 1px rgba(0, 0, 0, 0.05);\">\n <!-- Expand / Collapse button (always visible) -->\n <button\n type=\"button\"\n [matTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onExpandToggle()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ expanded ? 'chevron_left' : 'chevron_right' }}</mat-icon>\n </button>\n <!-- Close button -->\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n [matTooltip]=\"closeTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onClose()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">close</mat-icon>\n </button>\n <!-- Tab buttons (1:1 with tabs) -->\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n [matTooltip]=\"tab.label\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onTabClick(tab)\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ tab.icon || 'circle' }}</mat-icon>\n </button>\n </div>\n\n <!-- Scrollable content area (collapses with animation when expanded is false) -->\n <div class=\"cqa-flex cqa-flex-col cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden cqa-w-full cqa-h-full\">\n <div class=\"detail-side-panel-scroll cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-p-4 cqa-space-y-4\" style=\"overflow-y: auto; overflow-x: hidden; min-height: 0; -webkit-overflow-scrolling: touch;\">\n <!-- Tabs: equally distributed (Figma: purple active, gray inactive) -->\n <div class=\"cqa-flex cqa-gap-[3.5px] cqa-p-[3.5px] cqa-bg-[#F1F5F9] cqa-rounded-lg cqa-w-full\" role=\"tablist\">\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === tab.value\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex-1 cqa-flex cqa-justify-center cqa-items-center cqa-py-2 cqa-rounded-lg cqa-text-xs cqa-font-medium cqa-transition-colors hover:cqa-opacity-90 focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onTabClick(tab)\">\n {{ tab.label }}\n </button>\n </div>\n\n <!-- Test Case tab: use cqa-test-case-details (Figma design) -->\n <cqa-test-case-details\n *ngIf=\"activeTab === 'test-case'\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [enableMarkdown]=\"enableMarkdown\"\n [showEditButton]=\"showEditButton\"\n [startInEditMode]=\"startInEditMode\"\n [editing]=\"editing\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n [isStepGroup]=\"isStepGroup\"\n (editDescription)=\"onEditDescription()\"\n (cancel)=\"onCancel()\"\n (saveChanges)=\"onSaveChanges($event)\"\n (metadataLinkClick)=\"onMetadataLinkClick($event)\"\n (selectSearch)=\"selectSearch.emit($event)\"\n (selectLoadMore)=\"selectLoadMore.emit($event)\"\n (selectOpened)=\"selectOpened.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\"\n (labelAdded)=\"labelAdded.emit($event)\">\n </cqa-test-case-details>\n\n <!-- Placeholder for other tabs (Data Library, Variables) -->\n <div *ngIf=\"activeTab !== 'test-case'\" class=\"cqa-p-4 cqa-text-[#64748B] cqa-text-sm\">\n {{ activeTab === 'data-library' ? 'Data Library content' : 'Variables content' }} \u2013 coming soon\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".detail-side-panel-scroll{overflow-y:auto!important;overflow-x:hidden!important;min-height:0!important;-webkit-overflow-scrolling:touch}\n"], components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.TestCaseDetailsComponent, selector: "cqa-test-case-details", inputs: ["editing", "startInEditMode", "descriptionTitle", "descriptionContent", "enableMarkdown", "showEditButton", "metadataItems", "labels", "configTitle", "configSections", "configSectionsRow2", "platform", "isStepGroup", "selectConfigOverrides"], outputs: ["editDescription", "cancel", "saveChanges", "metadataLinkClick", "selectSearch", "selectLoadMore", "selectOpened", "selectionChange", "labelAdded"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
67
+ DetailSidePanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailSidePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
68
+ DetailSidePanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DetailSidePanelComponent, selector: "cqa-detail-side-panel", inputs: { tabs: "tabs", activeTab: "activeTab", showCloseButton: "showCloseButton", expanded: "expanded", expandedWidth: "expandedWidth", collapsedWidth: "collapsedWidth", expandTooltip: "expandTooltip", collapseTooltip: "collapseTooltip", closeTooltip: "closeTooltip" }, outputs: { back: "back", tabChange: "tabChange", expandToggle: "expandToggle", close: "close" }, host: { properties: { "style.width": "this.hostWidth", "style.min-width": "this.hostMinWidth", "style.max-width": "this.hostMaxWidth", "style.overflow": "this.hostOverflow" }, styleAttribute: "transition: width 0.3s ease-in-out", classAttribute: "cqa-ui-root cqa-flex cqa-flex-col cqa-h-full cqa-flex-shrink-0 cqa-flex-grow-0 cqa-bg-white cqa-shadow-[-4px_0_6px_-1px_rgba(0,0,0,0.05)]" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-min-w-0 cqa-bg-white\">\n <!-- Main content: Side menu + Scrollable content -->\n <div\n class=\"cqa-grid cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden\"\n [style.grid-template-columns]=\"expanded ? 'auto 1fr' : 'auto 0fr'\"\n style=\"transition: grid-template-columns 0.3s ease-in-out\">\n <!-- Left vertical icon menu -->\n <div\n class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-2 cqa-py-4 cqa-px-2 cqa-border-r cqa-border-[#F5F5F5] cqa-flex-shrink-0 cqa-text-[#0A0A0A]\"\n style=\"box-shadow: 1px 4px 12px 1px rgba(0, 0, 0, 0.05);\">\n <!-- Expand / Collapse button (always visible) -->\n <button\n type=\"button\"\n [matTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onExpandToggle()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ expanded ? 'chevron_left' : 'chevron_right' }}</mat-icon>\n </button>\n <!-- Close button -->\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n [matTooltip]=\"closeTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onClose()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">close</mat-icon>\n </button>\n <!-- Tab buttons (1:1 with tabs) -->\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n [matTooltip]=\"tab.label\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onTabClick(tab)\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ tab.icon || 'circle' }}</mat-icon>\n </button>\n </div>\n\n <!-- Scrollable content area (collapses with animation when expanded is false) -->\n <div class=\"cqa-flex cqa-flex-col cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden cqa-w-full cqa-h-full\">\n <div class=\"detail-side-panel-scroll cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-p-4 cqa-space-y-4\" style=\"overflow-y: auto; overflow-x: hidden; min-height: 0; -webkit-overflow-scrolling: touch;\">\n <!-- Tabs: equally distributed (Figma: purple active, gray inactive) -->\n <div class=\"cqa-flex cqa-gap-[3.5px] cqa-p-[3.5px] cqa-bg-[#F1F5F9] cqa-rounded-lg cqa-w-full\" role=\"tablist\">\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === tab.value\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex-1 cqa-flex cqa-justify-center cqa-items-center cqa-py-2 cqa-rounded-lg cqa-text-xs cqa-font-medium cqa-transition-colors hover:cqa-opacity-90 focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onTabClick(tab)\">\n {{ tab.label }}\n </button>\n </div>\n\n <!-- Tab content: fully provided by host via content projection. Host uses *ngIf per tab so only active content is projected. Add/remove tabs in the host without changing cqa-ui-lib. -->\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n", styles: [".detail-side-panel-scroll{overflow-y:auto!important;overflow-x:hidden!important;min-height:0!important;-webkit-overflow-scrolling:touch}\n"], components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
141
69
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailSidePanelComponent, decorators: [{
142
70
  type: Component,
143
71
  args: [{ selector: 'cqa-detail-side-panel', styles: [DETAIL_SIDE_PANEL_SCROLL_STYLES], changeDetection: ChangeDetectionStrategy.OnPush, host: {
144
72
  class: 'cqa-ui-root cqa-flex cqa-flex-col cqa-h-full cqa-flex-shrink-0 cqa-flex-grow-0 cqa-bg-white cqa-shadow-[-4px_0_6px_-1px_rgba(0,0,0,0.05)]',
145
73
  style: 'transition: width 0.3s ease-in-out',
146
- }, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-min-w-0 cqa-bg-white\">\n <!-- Main content: Side menu + Scrollable content -->\n <div\n class=\"cqa-grid cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden\"\n [style.grid-template-columns]=\"expanded ? 'auto 1fr' : 'auto 0fr'\"\n style=\"transition: grid-template-columns 0.3s ease-in-out\">\n <!-- Left vertical icon menu -->\n <div\n class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-2 cqa-py-4 cqa-px-2 cqa-border-r cqa-border-[#F5F5F5] cqa-flex-shrink-0 cqa-text-[#0A0A0A]\"\n style=\"box-shadow: 1px 4px 12px 1px rgba(0, 0, 0, 0.05);\">\n <!-- Expand / Collapse button (always visible) -->\n <button\n type=\"button\"\n [matTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onExpandToggle()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ expanded ? 'chevron_left' : 'chevron_right' }}</mat-icon>\n </button>\n <!-- Close button -->\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n [matTooltip]=\"closeTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onClose()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">close</mat-icon>\n </button>\n <!-- Tab buttons (1:1 with tabs) -->\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n [matTooltip]=\"tab.label\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onTabClick(tab)\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ tab.icon || 'circle' }}</mat-icon>\n </button>\n </div>\n\n <!-- Scrollable content area (collapses with animation when expanded is false) -->\n <div class=\"cqa-flex cqa-flex-col cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden cqa-w-full cqa-h-full\">\n <div class=\"detail-side-panel-scroll cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-p-4 cqa-space-y-4\" style=\"overflow-y: auto; overflow-x: hidden; min-height: 0; -webkit-overflow-scrolling: touch;\">\n <!-- Tabs: equally distributed (Figma: purple active, gray inactive) -->\n <div class=\"cqa-flex cqa-gap-[3.5px] cqa-p-[3.5px] cqa-bg-[#F1F5F9] cqa-rounded-lg cqa-w-full\" role=\"tablist\">\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === tab.value\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex-1 cqa-flex cqa-justify-center cqa-items-center cqa-py-2 cqa-rounded-lg cqa-text-xs cqa-font-medium cqa-transition-colors hover:cqa-opacity-90 focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onTabClick(tab)\">\n {{ tab.label }}\n </button>\n </div>\n\n <!-- Test Case tab: use cqa-test-case-details (Figma design) -->\n <cqa-test-case-details\n *ngIf=\"activeTab === 'test-case'\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [enableMarkdown]=\"enableMarkdown\"\n [showEditButton]=\"showEditButton\"\n [startInEditMode]=\"startInEditMode\"\n [editing]=\"editing\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n [isStepGroup]=\"isStepGroup\"\n (editDescription)=\"onEditDescription()\"\n (cancel)=\"onCancel()\"\n (saveChanges)=\"onSaveChanges($event)\"\n (metadataLinkClick)=\"onMetadataLinkClick($event)\"\n (selectSearch)=\"selectSearch.emit($event)\"\n (selectLoadMore)=\"selectLoadMore.emit($event)\"\n (selectOpened)=\"selectOpened.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\"\n (labelAdded)=\"labelAdded.emit($event)\">\n </cqa-test-case-details>\n\n <!-- Placeholder for other tabs (Data Library, Variables) -->\n <div *ngIf=\"activeTab !== 'test-case'\" class=\"cqa-p-4 cqa-text-[#64748B] cqa-text-sm\">\n {{ activeTab === 'data-library' ? 'Data Library content' : 'Variables content' }} \u2013 coming soon\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
147
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { tabs: [{
74
+ }, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-min-w-0 cqa-bg-white\">\n <!-- Main content: Side menu + Scrollable content -->\n <div\n class=\"cqa-grid cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden\"\n [style.grid-template-columns]=\"expanded ? 'auto 1fr' : 'auto 0fr'\"\n style=\"transition: grid-template-columns 0.3s ease-in-out\">\n <!-- Left vertical icon menu -->\n <div\n class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-2 cqa-py-4 cqa-px-2 cqa-border-r cqa-border-[#F5F5F5] cqa-flex-shrink-0 cqa-text-[#0A0A0A]\"\n style=\"box-shadow: 1px 4px 12px 1px rgba(0, 0, 0, 0.05);\">\n <!-- Expand / Collapse button (always visible) -->\n <button\n type=\"button\"\n [matTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onExpandToggle()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ expanded ? 'chevron_left' : 'chevron_right' }}</mat-icon>\n </button>\n <!-- Close button -->\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n [matTooltip]=\"closeTooltip\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onClose()\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">close</mat-icon>\n </button>\n <!-- Tab buttons (1:1 with tabs) -->\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n [matTooltip]=\"tab.label\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onTabClick(tab)\">\n <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5\">{{ tab.icon || 'circle' }}</mat-icon>\n </button>\n </div>\n\n <!-- Scrollable content area (collapses with animation when expanded is false) -->\n <div class=\"cqa-flex cqa-flex-col cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden cqa-w-full cqa-h-full\">\n <div class=\"detail-side-panel-scroll cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-p-4 cqa-space-y-4\" style=\"overflow-y: auto; overflow-x: hidden; min-height: 0; -webkit-overflow-scrolling: touch;\">\n <!-- Tabs: equally distributed (Figma: purple active, gray inactive) -->\n <div class=\"cqa-flex cqa-gap-[3.5px] cqa-p-[3.5px] cqa-bg-[#F1F5F9] cqa-rounded-lg cqa-w-full\" role=\"tablist\">\n <button\n *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === tab.value\"\n [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n [class.cqa-text-white]=\"activeTab === tab.value\"\n [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n class=\"cqa-flex-1 cqa-flex cqa-justify-center cqa-items-center cqa-py-2 cqa-rounded-lg cqa-text-xs cqa-font-medium cqa-transition-colors hover:cqa-opacity-90 focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onTabClick(tab)\">\n {{ tab.label }}\n </button>\n </div>\n\n <!-- Tab content: fully provided by host via content projection. Host uses *ngIf per tab so only active content is projected. Add/remove tabs in the host without changing cqa-ui-lib. -->\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n" }]
75
+ }], propDecorators: { tabs: [{
148
76
  type: Input
149
77
  }], activeTab: [{
150
78
  type: Input
151
- }], descriptionTitle: [{
152
- type: Input
153
- }], descriptionContent: [{
154
- type: Input
155
- }], enableMarkdown: [{
156
- type: Input
157
- }], showEditButton: [{
158
- type: Input
159
- }], metadataItems: [{
160
- type: Input
161
- }], labels: [{
162
- type: Input
163
- }], configSections: [{
164
- type: Input
165
- }], configSectionsRow2: [{
166
- type: Input
167
- }], platform: [{
168
- type: Input
169
- }], isStepGroup: [{
170
- type: Input
171
- }], configTitle: [{
172
- type: Input
173
79
  }], showCloseButton: [{
174
80
  type: Input
175
- }], startInEditMode: [{
176
- type: Input
177
- }], editing: [{
178
- type: Input
179
- }], selectConfigOverrides: [{
180
- type: Input
181
81
  }], expanded: [{
182
82
  type: Input
183
83
  }], expandedWidth: [{
@@ -206,27 +106,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
206
106
  type: Output
207
107
  }], tabChange: [{
208
108
  type: Output
209
- }], editDescription: [{
210
- type: Output
211
- }], cancel: [{
212
- type: Output
213
- }], saveChanges: [{
214
- type: Output
215
- }], metadataLinkClick: [{
216
- type: Output
217
- }], selectSearch: [{
218
- type: Output
219
- }], selectLoadMore: [{
220
- type: Output
221
- }], selectOpened: [{
222
- type: Output
223
- }], selectionChange: [{
224
- type: Output
225
- }], labelAdded: [{
226
- type: Output
227
109
  }], expandToggle: [{
228
110
  type: Output
229
111
  }], close: [{
230
112
  type: Output
231
113
  }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXNpZGUtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXRhaWwtc2lkZS1wYW5lbC9kZXRhaWwtc2lkZS1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RldGFpbC1zaWRlLXBhbmVsL2RldGFpbC1zaWRlLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBRXZCLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQVd2QixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0FBZTdFLE1BQU0sT0FBTyx3QkFBd0I7SUFzR25DLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBckcxQyw2RUFBNkU7UUFDcEUsU0FBSSxHQUF5QjtZQUNwQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQy9ELEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDaEUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtTQUN6RCxDQUFDO1FBRUYsaUNBQWlDO1FBQ3hCLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFFakMsZ0NBQWdDO1FBQ3ZCLHFCQUFnQixHQUFHLGFBQWEsQ0FBQztRQUUxQywrQkFBK0I7UUFDdEIsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBRWpDLGlHQUFpRztRQUN4RixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUVoQyxnRUFBZ0U7UUFDdkQs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LGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEhvc3RCaW5kaW5nLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25JdGVtIH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbi1jYXJkL2NvbmZpZ3VyYXRpb24tY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRGV0YWlsU2lkZVBhbmVsVGFiLFxuICBEZXRhaWxTaWRlUGFuZWxNZXRhZGF0YUl0ZW0sXG4gIERldGFpbFNpZGVQYW5lbENvbmZpZ1NlY3Rpb24sXG59IGZyb20gJy4vZGV0YWlsLXNpZGUtcGFuZWwubW9kZWxzJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlRGV0YWlsc0VkaXRGb3JtRGF0YSxcbiAgU2VsZWN0Q29uZmlnT3ZlcnJpZGVzLFxufSBmcm9tICcuLi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy1lZGl0L3Rlc3QtY2FzZS1kZXRhaWxzLWVkaXQuY29tcG9uZW50JztcbmltcG9ydCB7IERFVEFJTF9TSURFX1BBTkVMX1NDUk9MTF9TVFlMRVMgfSBmcm9tICcuL2RldGFpbC1zaWRlLXBhbmVsLnN0eWxlcyc7XG5cbmV4cG9ydCB0eXBlIHsgRGV0YWlsU2lkZVBhbmVsVGFiLCBEZXRhaWxTaWRlUGFuZWxNZXRhZGF0YUl0ZW0sIERldGFpbFNpZGVQYW5lbENvbmZpZ1NlY3Rpb24gfSBmcm9tICcuL2RldGFpbC1zaWRlLXBhbmVsLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kZXRhaWwtc2lkZS1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWwtc2lkZS1wYW5lbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW0RFVEFJTF9TSURFX1BBTkVMX1NDUk9MTF9TVFlMRVNdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOlxuICAgICAgJ2NxYS11aS1yb290IGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaC1mdWxsIGNxYS1mbGV4LXNocmluay0wIGNxYS1mbGV4LWdyb3ctMCBjcWEtYmctd2hpdGUgY3FhLXNoYWRvdy1bLTRweF8wXzZweF8tMXB4X3JnYmEoMCwwLDAsMC4wNSldJyxcbiAgICBzdHlsZTogJ3RyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZS1pbi1vdXQnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBEZXRhaWxTaWRlUGFuZWxDb21wb25lbnQge1xuICAvKiogVGFicyAtIGVhY2ggdGFiIGhhcyBhIHNpZGUgcGFuZWwgaWNvbiBidXR0b247IHRhYnMgYW5kIGJ1dHRvbnMgYXJlIDE6MSAqL1xuICBASW5wdXQoKSB0YWJzOiBEZXRhaWxTaWRlUGFuZWxUYWJbXSA9IFtcbiAgICB7IGxhYmVsOiAnVGVzdCBDYXNlJywgdmFsdWU6ICd0ZXN0LWNhc2UnLCBpY29uOiAnZGVzY3JpcHRpb24nIH0sXG4gICAgeyBsYWJlbDogJ0RhdGEgTGlicmFyeScsIHZhbHVlOiAnZGF0YS1saWJyYXJ5JywgaWNvbjogJ2ZvbGRlcicgfSxcbiAgICB7IGxhYmVsOiAnVmFyaWFibGVzJywgdmFsdWU6ICd2YXJpYWJsZXMnLCBpY29uOiAnY29kZScgfSxcbiAgXTtcblxuICAvKiogQ3VycmVudGx5IGFjdGl2ZSB0YWIgdmFsdWUgKi9cbiAgQElucHV0KCkgYWN0aXZlVGFiID0gJ3Rlc3QtY2FzZSc7XG5cbiAgLyoqIERlc2NyaXB0aW9uIHNlY3Rpb24gdGl0bGUgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb25UaXRsZSA9ICdEZXNjcmlwdGlvbic7XG5cbiAgLyoqIERlc2NyaXB0aW9uIHRleHQgY29udGVudCAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbkNvbnRlbnQgPSAnJztcblxuICAvKiogV2hlbiB0cnVlLCBkZXNjcmlwdGlvbiB1c2VzIHJpY2ggdGV4dCBlZGl0b3IgYW5kIHJlbmRlcnMgYXMgSFRNTC4gSG9zdCBhcHAgbXVzdCBsb2FkIFRyaXguICovXG4gIEBJbnB1dCgpIGVuYWJsZU1hcmtkb3duID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgRWRpdCBidXR0b24gaW4gdGhlIERlc2NyaXB0aW9uIGhlYWRlciAqL1xuICBASW5wdXQoKSBzaG93RWRpdEJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqIE1ldGFkYXRhIGl0ZW1zIChDcmVhdGVkIG9uLCBTdGF0dXMsIFByaW9yaXR5LCBldGMuKSAqL1xuICBASW5wdXQoKSBtZXRhZGF0YUl0ZW1zOiBEZXRhaWxTaWRlUGFuZWxNZXRhZGF0YUl0ZW1bXSA9IFtdO1xuXG4gIC8qKiBMYWJlbHMvdGFncyAoZS5nLiBBdXRvbWF0aW9uLCBBUEksIFNESywgVUkvVVgpICovXG4gIEBJbnB1dCgpIGxhYmVsczogc3RyaW5nW10gPSBbXTtcblxuICAvKiogQ29uZmlndXJhdGlvbiBzZWN0aW9ucyAtIGZ1bGwgd2lkdGggKGUuZy4gRXhlY3V0aW9uLCBBSSBDb25maWd1cmF0aW9uKSAqL1xuICBASW5wdXQoKSBjb25maWdTZWN0aW9uczogRGV0YWlsU2lkZVBhbmVsQ29uZmlnU2VjdGlvbltdID0gW107XG5cbiAgLyoqIE9wdGlvbmFsIGNvbmZpZyBzZWN0aW9ucyBkaXNwbGF5ZWQgaW4gYSAyLWNvbHVtbiByb3cgKGUuZy4gV2FpdHMgJiBSZXRyaWVzLCBEZXZpY2UpICovXG4gIEBJbnB1dCgpIGNvbmZpZ1NlY3Rpb25zUm93MjogRGV0YWlsU2lkZVBhbmVsQ29uZmlnU2VjdGlvbltdID0gW107XG5cbiAgLyoqIFBsYXRmb3JtOiAnd2ViJyBvciAnbW9iaWxlJy4gRGVmYXVsdHMgdG8gJ3dlYicuIFVzZWQgZm9yIERldmljZSBTZXR0aW5ncy4gKi9cbiAgQElucHV0KCkgcGxhdGZvcm06ICd3ZWInIHwgJ21vYmlsZScgPSAnd2ViJztcblxuICAvKiogV2hlbiB0cnVlLCBoaWRlcyBQcmlvcml0eSwgVHlwZSwgVGVzdCBEYXRhIFNldCwgYW5kIFByZXJlcXVpc2l0ZSBDYXNlIChzdGVwIGdyb3VwcyBkb24ndCBoYXZlIHRoZXNlKS4gRGVmYXVsdHMgdG8gZmFsc2UuICovXG4gIEBJbnB1dCgpIGlzU3RlcEdyb3VwID0gZmFsc2U7XG5cbiAgLyoqIENvbmZpZ3VyYXRpb24gc2VjdGlvbiB0aXRsZSAqL1xuICBASW5wdXQoKSBjb25maWdUaXRsZSA9ICdDb25maWd1cmF0aW9uJztcblxuICAvKiogV2hldGhlciB0byBzaG93IHRoZSBjbG9zZSBidXR0b24gaW4gdGhlIHNpZGUgbWVudSAqL1xuICBASW5wdXQoKSBzaG93Q2xvc2VCdXR0b24gPSBmYWxzZTtcblxuICAvKiogV2hlbiB0cnVlLCB0ZXN0IGNhc2UgZGV0YWlscyBzdGFydCBpbiBlZGl0IG1vZGUgKHVzZWZ1bCBmb3IgU3Rvcnlib29rKS4gKi9cbiAgQElucHV0KCkgc3RhcnRJbkVkaXRNb2RlID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHBhcmVudCBjb250cm9scyBlZGl0IG1vZGUgKGZpeGVzIFN0b3J5Ym9vayBldmVudCBmbG93KS4gKi9cbiAgQElucHV0KCkgZWRpdGluZz86IGJvb2xlYW47XG5cbiAgLyoqIE92ZXJyaWRlIGNvbmZpZyBwZXIgc2VsZWN0IGZvciBBUEktZHJpdmVuIG9wdGlvbnMsIHNlcnZlciBzZWFyY2gsIGxvYWQgbW9yZS4gKi9cbiAgQElucHV0KCkgc2VsZWN0Q29uZmlnT3ZlcnJpZGVzOiBTZWxlY3RDb25maWdPdmVycmlkZXMgPSB7fTtcblxuICAvKiogV2hldGhlciB0aGUgcGFuZWwgaXMgZXhwYW5kZWQgKGFmZmVjdHMgZXhwYW5kIGJ1dHRvbiBpY29uIGFuZCBwYW5lbCB3aWR0aCkgKi9cbiAgQElucHV0KCkgZXhwYW5kZWQgPSB0cnVlO1xuXG4gIC8qKiBQYW5lbCB3aWR0aCB3aGVuIGV4cGFuZGVkIChlLmcuICc0ODBweCcsICcyNSUnKSAqL1xuICBASW5wdXQoKSBleHBhbmRlZFdpZHRoID0gJzM4MHB4JztcblxuICAvKiogUGFuZWwgd2lkdGggd2hlbiBjb2xsYXBzZWQgKGUuZy4gJzU2cHgnIC0gZml0cyBpY29uIGJhciArIGJhY2sgYnV0dG9uKSAqL1xuICBASW5wdXQoKSBjb2xsYXBzZWRXaWR0aCA9ICc1NnB4JztcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJykgZ2V0IGhvc3RXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkID8gdGhpcy5leHBhbmRlZFdpZHRoIDogdGhpcy5jb2xsYXBzZWRXaWR0aDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWluLXdpZHRoJykgZ2V0IGhvc3RNaW5XaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkID8gdGhpcy5leHBhbmRlZFdpZHRoIDogdGhpcy5jb2xsYXBzZWRXaWR0aDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWF4LXdpZHRoJykgZ2V0IGhvc3RNYXhXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkID8gdGhpcy5leHBhbmRlZFdpZHRoIDogdGhpcy5jb2xsYXBzZWRXaWR0aDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUub3ZlcmZsb3cnKSBob3N0T3ZlcmZsb3cgPSAnaGlkZGVuJztcblxuICAvKiogVG9vbHRpcCBmb3IgZXhwYW5kIGJ1dHRvbiB3aGVuIHBhbmVsIGlzIGNvbGxhcHNlZCAqL1xuICBASW5wdXQoKSBleHBhbmRUb29sdGlwID0gJ0V4cGFuZCc7XG5cbiAgLyoqIFRvb2x0aXAgZm9yIGV4cGFuZCBidXR0b24gd2hlbiBwYW5lbCBpcyBleHBhbmRlZCAoY29sbGFwc2UpICovXG4gIEBJbnB1dCgpIGNvbGxhcHNlVG9vbHRpcCA9ICdDb2xsYXBzZSc7XG5cbiAgLyoqIFRvb2x0aXAgZm9yIGNsb3NlIGJ1dHRvbiAqL1xuICBASW5wdXQoKSBjbG9zZVRvb2x0aXAgPSAnQ2xvc2UnO1xuXG4gIEBPdXRwdXQoKSBiYWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgdGFiQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBlZGl0RGVzY3JpcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzYXZlQ2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhPigpO1xuICBAT3V0cHV0KCkgbWV0YWRhdGFMaW5rQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbFNpZGVQYW5lbE1ldGFkYXRhSXRlbT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0TG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdE9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9PigpO1xuICBAT3V0cHV0KCkgbGFiZWxBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgZXhwYW5kVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIHRyYWNrQnlUYWJWYWx1ZShfaTogbnVtYmVyLCB0YWI6IERldGFpbFNpZGVQYW5lbFRhYik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRhYi52YWx1ZTtcbiAgfVxuXG4gIHRyYWNrQnlNZXRhZGF0YUxhYmVsKF9pOiBudW1iZXIsIGl0ZW06IERldGFpbFNpZGVQYW5lbE1ldGFkYXRhSXRlbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0ubGFiZWw7XG4gIH1cblxuICB0cmFja0J5Q29uZmlnVGl0bGUoX2k6IG51bWJlciwgc2VjdGlvbjogRGV0YWlsU2lkZVBhbmVsQ29uZmlnU2VjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlY3Rpb24udGl0bGU7XG4gIH1cblxuICBvbkJhY2soKTogdm9pZCB7XG4gICAgdGhpcy5iYWNrLmVtaXQoKTtcbiAgfVxuXG4gIG9uVGFiQ2xpY2sodGFiOiBEZXRhaWxTaWRlUGFuZWxUYWIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kVG9nZ2xlLmVtaXQoKTtcbiAgICB9XG4gICAgaWYgKHRhYi52YWx1ZSAhPT0gdGhpcy5hY3RpdmVUYWIpIHtcbiAgICAgIHRoaXMudGFiQ2hhbmdlLmVtaXQodGFiLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvbkVkaXREZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXREZXNjcmlwdGlvbi5lbWl0KCk7XG4gIH1cblxuICBvblNhdmVDaGFuZ2VzKGRhdGE6IFRlc3RDYXNlRGV0YWlsc0VkaXRGb3JtRGF0YSk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZUNoYW5nZXMuZW1pdChkYXRhKTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIG9uRXhwYW5kVG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kVG9nZ2xlLmVtaXQoKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZS5lbWl0KCk7XG4gIH1cblxuICBvbk1ldGFkYXRhTGlua0NsaWNrKGl0ZW06IERldGFpbFNpZGVQYW5lbE1ldGFkYXRhSXRlbSk6IHZvaWQge1xuICAgIGlmIChpdGVtLmxpbmspIHtcbiAgICAgIHRoaXMubWV0YWRhdGFMaW5rQ2xpY2suZW1pdChpdGVtKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0dXNEb3RDbGFzcyhpdGVtOiBEZXRhaWxTaWRlUGFuZWxNZXRhZGF0YUl0ZW0pOiBzdHJpbmcge1xuICAgIGlmICghaXRlbS5zdGF0dXNDb2xvcikgcmV0dXJuICcnO1xuICAgIHN3aXRjaCAoaXRlbS5zdGF0dXNDb2xvcikge1xuICAgICAgY2FzZSAneWVsbG93JzpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyNFQUIzMDhdJztcbiAgICAgIGNhc2UgJ3JlZCc6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjREMyNjI2XSc7XG4gICAgICBjYXNlICdncmVlbic6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjMTZBMzRBXSc7XG4gICAgICBjYXNlICdncmF5JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjOTRBM0I4XSc7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1oLWZ1bGwgY3FhLW1pbi13LTAgY3FhLWJnLXdoaXRlXCI+XG4gIDwhLS0gTWFpbiBjb250ZW50OiBTaWRlIG1lbnUgKyBTY3JvbGxhYmxlIGNvbnRlbnQgLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1ncmlkIGNxYS1mbGV4LTEgY3FhLW1pbi1oLTAgY3FhLW1pbi13LTAgY3FhLW92ZXJmbG93LWhpZGRlblwiXG4gICAgW3N0eWxlLmdyaWQtdGVtcGxhdGUtY29sdW1uc109XCJleHBhbmRlZCA/ICdhdXRvIDFmcicgOiAnYXV0byAwZnInXCJcbiAgICBzdHlsZT1cInRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtY29sdW1ucyAwLjNzIGVhc2UtaW4tb3V0XCI+XG4gICAgPCEtLSBMZWZ0IHZlcnRpY2FsIGljb24gbWVudSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHktNCBjcWEtcHgtMiBjcWEtYm9yZGVyLXIgY3FhLWJvcmRlci1bI0Y1RjVGNV0gY3FhLWZsZXgtc2hyaW5rLTAgY3FhLXRleHQtWyMwQTBBMEFdXCJcbiAgICAgIHN0eWxlPVwiYm94LXNoYWRvdzogMXB4IDRweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1wiPlxuICAgICAgPCEtLSBFeHBhbmQgLyBDb2xsYXBzZSBidXR0b24gKGFsd2F5cyB2aXNpYmxlKSAtLT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cImV4cGFuZGVkID8gY29sbGFwc2VUb29sdGlwIDogZXhwYW5kVG9vbHRpcFwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctOSBjcWEtaC05IGNxYS1yb3VuZGVkLWxnIGNxYS10ZXh0LVsjNjQ3NDhCXSBob3ZlcjpjcWEtYmctWyNFMkU4RjBdIGhvdmVyOmNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXM6Y3FhLW91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLTIgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy1bIzNGNDNFRV0gZm9jdXMtdmlzaWJsZTpjcWEtcmluZy1vZmZzZXQtMlwiXG4gICAgICAgIChjbGljayk9XCJvbkV4cGFuZFRvZ2dsZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsyMHB4XSBjcWEtdy01IGNxYS1oLTVcIj57eyBleHBhbmRlZCA/ICdjaGV2cm9uX2xlZnQnIDogJ2NoZXZyb25fcmlnaHQnIH19PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPCEtLSBDbG9zZSBidXR0b24gLS0+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd0Nsb3NlQnV0dG9uXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cImNsb3NlVG9vbHRpcFwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctOSBjcWEtaC05IGNxYS1yb3VuZGVkLWxnIGNxYS10ZXh0LVsjNjQ3NDhCXSBob3ZlcjpjcWEtYmctWyNFMkU4RjBdIGhvdmVyOmNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXM6Y3FhLW91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLTIgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy1bIzNGNDNFRV0gZm9jdXMtdmlzaWJsZTpjcWEtcmluZy1vZmZzZXQtMlwiXG4gICAgICAgIChjbGljayk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzIwcHhdIGNxYS13LTUgY3FhLWgtNVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPCEtLSBUYWIgYnV0dG9ucyAoMToxIHdpdGggdGFicykgLS0+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiczsgdHJhY2tCeTogdHJhY2tCeVRhYlZhbHVlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRhYi5sYWJlbFwiXG4gICAgICAgIFtjbGFzcy5jcWEtYmctWyMzRjQzRUVdXT1cImFjdGl2ZVRhYiA9PT0gdGFiLnZhbHVlXCJcbiAgICAgICAgW2NsYXNzLmNxYS10ZXh0LXdoaXRlXT1cImFjdGl2ZVRhYiA9PT0gdGFiLnZhbHVlXCJcbiAgICAgICAgW2NsYXNzLmNxYS10ZXh0LVsjNjQ3NDhCXV09XCJhY3RpdmVUYWIgIT09IHRhYi52YWx1ZVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctOSBjcWEtaC05IGNxYS1yb3VuZGVkLWxnIGhvdmVyOmNxYS1iZy1bI0UyRThGMF0gaG92ZXI6Y3FhLXRleHQtWyMzMzQxNTVdIGNxYS10cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpjcWEtb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctMiBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLVsjM0Y0M0VFXSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLW9mZnNldC0yXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uVGFiQ2xpY2sodGFiKVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bMjBweF0gY3FhLXctNSBjcWEtaC01XCI+e3sgdGFiLmljb24gfHwgJ2NpcmNsZScgfX08L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNjcm9sbGFibGUgY29udGVudCBhcmVhIChjb2xsYXBzZXMgd2l0aCBhbmltYXRpb24gd2hlbiBleHBhbmRlZCBpcyBmYWxzZSkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWluLWgtMCBjcWEtbWluLXctMCBjcWEtb3ZlcmZsb3ctaGlkZGVuIGNxYS13LWZ1bGwgY3FhLWgtZnVsbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1zaWRlLXBhbmVsLXNjcm9sbCBjcWEtZmxleC0xIGNxYS1taW4taC0wIGNxYS1taW4tdy0wIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLW92ZXJmbG93LXgtaGlkZGVuIGNxYS1wLTQgY3FhLXNwYWNlLXktNFwiIHN0eWxlPVwib3ZlcmZsb3cteTogYXV0bzsgb3ZlcmZsb3cteDogaGlkZGVuOyBtaW4taGVpZ2h0OiAwOyAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XCI+XG4gICAgICA8IS0tIFRhYnM6IGVxdWFsbHkgZGlzdHJpYnV0ZWQgKEZpZ21hOiBwdXJwbGUgYWN0aXZlLCBncmF5IGluYWN0aXZlKSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLVszLjVweF0gY3FhLXAtWzMuNXB4XSBjcWEtYmctWyNGMUY1RjldIGNxYS1yb3VuZGVkLWxnIGNxYS13LWZ1bGxcIiByb2xlPVwidGFibGlzdFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyB0cmFja0J5OiB0cmFja0J5VGFiVmFsdWVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiYWN0aXZlVGFiID09PSB0YWIudmFsdWVcIlxuICAgICAgICAgIFtjbGFzcy5jcWEtYmctWyMzRjQzRUVdXT1cImFjdGl2ZVRhYiA9PT0gdGFiLnZhbHVlXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLXRleHQtd2hpdGVdPVwiYWN0aXZlVGFiID09PSB0YWIudmFsdWVcIlxuICAgICAgICAgIFtjbGFzcy5jcWEtdGV4dC1bIzY0NzQ4Ql1dPVwiYWN0aXZlVGFiICE9PSB0YWIudmFsdWVcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktMiBjcWEtcm91bmRlZC1sZyBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW0gY3FhLXRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmNxYS1vcGFjaXR5LTkwIGZvY3VzOmNxYS1vdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy0yIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctWyMzRjQzRUVdIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctb2Zmc2V0LTJcIlxuICAgICAgICAgIChjbGljayk9XCJvblRhYkNsaWNrKHRhYilcIj5cbiAgICAgICAgICB7eyB0YWIubGFiZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBUZXN0IENhc2UgdGFiOiB1c2UgY3FhLXRlc3QtY2FzZS1kZXRhaWxzIChGaWdtYSBkZXNpZ24pIC0tPlxuICAgICAgPGNxYS10ZXN0LWNhc2UtZGV0YWlsc1xuICAgICAgICAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ3Rlc3QtY2FzZSdcIlxuICAgICAgICBbZGVzY3JpcHRpb25UaXRsZV09XCJkZXNjcmlwdGlvblRpdGxlXCJcbiAgICAgICAgW2Rlc2NyaXB0aW9uQ29udGVudF09XCJkZXNjcmlwdGlvbkNvbnRlbnRcIlxuICAgICAgICBbZW5hYmxlTWFya2Rvd25dPVwiZW5hYmxlTWFya2Rvd25cIlxuICAgICAgICBbc2hvd0VkaXRCdXR0b25dPVwic2hvd0VkaXRCdXR0b25cIlxuICAgICAgICBbc3RhcnRJbkVkaXRNb2RlXT1cInN0YXJ0SW5FZGl0TW9kZVwiXG4gICAgICAgIFtlZGl0aW5nXT1cImVkaXRpbmdcIlxuICAgICAgICBbc2VsZWN0Q29uZmlnT3ZlcnJpZGVzXT1cInNlbGVjdENvbmZpZ092ZXJyaWRlc1wiXG4gICAgICAgIFttZXRhZGF0YUl0ZW1zXT1cIm1ldGFkYXRhSXRlbXNcIlxuICAgICAgICBbbGFiZWxzXT1cImxhYmVsc1wiXG4gICAgICAgIFtjb25maWdUaXRsZV09XCJjb25maWdUaXRsZVwiXG4gICAgICAgIFtjb25maWdTZWN0aW9uc109XCJjb25maWdTZWN0aW9uc1wiXG4gICAgICAgIFtjb25maWdTZWN0aW9uc1JvdzJdPVwiY29uZmlnU2VjdGlvbnNSb3cyXCJcbiAgICAgICAgW3BsYXRmb3JtXT1cInBsYXRmb3JtXCJcbiAgICAgICAgW2lzU3RlcEdyb3VwXT1cImlzU3RlcEdyb3VwXCJcbiAgICAgICAgKGVkaXREZXNjcmlwdGlvbik9XCJvbkVkaXREZXNjcmlwdGlvbigpXCJcbiAgICAgICAgKGNhbmNlbCk9XCJvbkNhbmNlbCgpXCJcbiAgICAgICAgKHNhdmVDaGFuZ2VzKT1cIm9uU2F2ZUNoYW5nZXMoJGV2ZW50KVwiXG4gICAgICAgIChtZXRhZGF0YUxpbmtDbGljayk9XCJvbk1ldGFkYXRhTGlua0NsaWNrKCRldmVudClcIlxuICAgICAgICAoc2VsZWN0U2VhcmNoKT1cInNlbGVjdFNlYXJjaC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2VsZWN0TG9hZE1vcmUpPVwic2VsZWN0TG9hZE1vcmUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdE9wZW5lZCk9XCJzZWxlY3RPcGVuZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGxhYmVsQWRkZWQpPVwibGFiZWxBZGRlZC5lbWl0KCRldmVudClcIj5cbiAgICAgIDwvY3FhLXRlc3QtY2FzZS1kZXRhaWxzPlxuXG4gICAgICA8IS0tIFBsYWNlaG9sZGVyIGZvciBvdGhlciB0YWJzIChEYXRhIExpYnJhcnksIFZhcmlhYmxlcykgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlVGFiICE9PSAndGVzdC1jYXNlJ1wiIGNsYXNzPVwiY3FhLXAtNCBjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLXRleHQtc21cIj5cbiAgICAgICAge3sgYWN0aXZlVGFiID09PSAnZGF0YS1saWJyYXJ5JyA/ICdEYXRhIExpYnJhcnkgY29udGVudCcgOiAnVmFyaWFibGVzIGNvbnRlbnQnIH19IOKAkyBjb21pbmcgc29vblxuICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXNpZGUtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXRhaWwtc2lkZS1wYW5lbC9kZXRhaWwtc2lkZS1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RldGFpbC1zaWRlLXBhbmVsL2RldGFpbC1zaWRlLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFlN0UsTUFBTSxPQUFPLHdCQUF3QjtJQVhyQztRQVlFLDZHQUE2RztRQUNwRyxTQUFJLEdBQXlCO1lBQ3BDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7WUFDL0QsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNoRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1NBQ3pELENBQUM7UUFFRixpQ0FBaUM7UUFDeEIsY0FBUyxHQUFHLFdBQVcsQ0FBQztRQUVqQyx3REFBd0Q7UUFDL0Msb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFakMsaUZBQWlGO1FBQ3hFLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFFekIsc0RBQXNEO1FBQzdDLGtCQUFhLEdBQUcsT0FBTyxDQUFDO1FBRWpDLDZFQUE2RTtRQUNwRSxtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQWNGLGlCQUFZLEdBQUcsUUFBUSxDQUFD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XG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSG9zdEJpbmRpbmcsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGV0YWlsU2lkZVBhbmVsVGFiIH0gZnJvbSAnLi9kZXRhaWwtc2lkZS1wYW5lbC5tb2RlbHMnO1xuaW1wb3J0IHsgREVUQUlMX1NJREVfUEFORUxfU0NST0xMX1NUWUxFUyB9IGZyb20gJy4vZGV0YWlsLXNpZGUtcGFuZWwuc3R5bGVzJztcblxuZXhwb3J0IHR5cGUgeyBEZXRhaWxTaWRlUGFuZWxUYWIsIERldGFpbFNpZGVQYW5lbE1ldGFkYXRhSXRlbSwgRGV0YWlsU2lkZVBhbmVsQ29uZmlnU2VjdGlvbiB9IGZyb20gJy4vZGV0YWlsLXNpZGUtcGFuZWwubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWRldGFpbC1zaWRlLXBhbmVsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RldGFpbC1zaWRlLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbREVUQUlMX1NJREVfUEFORUxfU0NST0xMX1NUWUxFU10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6XG4gICAgICAnY3FhLXVpLXJvb3QgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1oLWZ1bGwgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWZsZXgtZ3Jvdy0wIGNxYS1iZy13aGl0ZSBjcWEtc2hhZG93LVstNHB4XzBfNnB4Xy0xcHhfcmdiYSgwLDAsMCwwLjA1KV0nLFxuICAgIHN0eWxlOiAndHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlLWluLW91dCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIERldGFpbFNpZGVQYW5lbENvbXBvbmVudCB7XG4gIC8qKiBUYWJzIC0gZWFjaCB0YWIgaGFzIGEgc2lkZSBwYW5lbCBpY29uIGJ1dHRvbjsgdGFicyBhbmQgYnV0dG9ucyBhcmUgMToxLiBIb3N0IGRlZmluZXMgdGFicyBhbmQgY29udGVudC4gKi9cbiAgQElucHV0KCkgdGFiczogRGV0YWlsU2lkZVBhbmVsVGFiW10gPSBbXG4gICAgeyBsYWJlbDogJ1Rlc3QgQ2FzZScsIHZhbHVlOiAndGVzdC1jYXNlJywgaWNvbjogJ2Rlc2NyaXB0aW9uJyB9LFxuICAgIHsgbGFiZWw6ICdEYXRhIExpYnJhcnknLCB2YWx1ZTogJ2RhdGEtbGlicmFyeScsIGljb246ICdmb2xkZXInIH0sXG4gICAgeyBsYWJlbDogJ1ZhcmlhYmxlcycsIHZhbHVlOiAndmFyaWFibGVzJywgaWNvbjogJ2NvZGUnIH0sXG4gIF07XG5cbiAgLyoqIEN1cnJlbnRseSBhY3RpdmUgdGFiIHZhbHVlICovXG4gIEBJbnB1dCgpIGFjdGl2ZVRhYiA9ICd0ZXN0LWNhc2UnO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgdGhlIGNsb3NlIGJ1dHRvbiBpbiB0aGUgc2lkZSBtZW51ICovXG4gIEBJbnB1dCgpIHNob3dDbG9zZUJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBwYW5lbCBpcyBleHBhbmRlZCAoYWZmZWN0cyBleHBhbmQgYnV0dG9uIGljb24gYW5kIHBhbmVsIHdpZHRoKSAqL1xuICBASW5wdXQoKSBleHBhbmRlZCA9IHRydWU7XG5cbiAgLyoqIFBhbmVsIHdpZHRoIHdoZW4gZXhwYW5kZWQgKGUuZy4gJzQ4MHB4JywgJzI1JScpICovXG4gIEBJbnB1dCgpIGV4cGFuZGVkV2lkdGggPSAnMzgwcHgnO1xuXG4gIC8qKiBQYW5lbCB3aWR0aCB3aGVuIGNvbGxhcHNlZCAoZS5nLiAnNTZweCcgLSBmaXRzIGljb24gYmFyICsgYmFjayBidXR0b24pICovXG4gIEBJbnB1dCgpIGNvbGxhcHNlZFdpZHRoID0gJzU2cHgnO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKSBnZXQgaG9zdFdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWQgPyB0aGlzLmV4cGFuZGVkV2lkdGggOiB0aGlzLmNvbGxhcHNlZFdpZHRoO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5taW4td2lkdGgnKSBnZXQgaG9zdE1pbldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWQgPyB0aGlzLmV4cGFuZGVkV2lkdGggOiB0aGlzLmNvbGxhcHNlZFdpZHRoO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXgtd2lkdGgnKSBnZXQgaG9zdE1heFdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWQgPyB0aGlzLmV4cGFuZGVkV2lkdGggOiB0aGlzLmNvbGxhcHNlZFdpZHRoO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5vdmVyZmxvdycpIGhvc3RPdmVyZmxvdyA9ICdoaWRkZW4nO1xuXG4gIC8qKiBUb29sdGlwIGZvciBleHBhbmQgYnV0dG9uIHdoZW4gcGFuZWwgaXMgY29sbGFwc2VkICovXG4gIEBJbnB1dCgpIGV4cGFuZFRvb2x0aXAgPSAnRXhwYW5kJztcblxuICAvKiogVG9vbHRpcCBmb3IgZXhwYW5kIGJ1dHRvbiB3aGVuIHBhbmVsIGlzIGV4cGFuZGVkIChjb2xsYXBzZSkgKi9cbiAgQElucHV0KCkgY29sbGFwc2VUb29sdGlwID0gJ0NvbGxhcHNlJztcblxuICAvKiogVG9vbHRpcCBmb3IgY2xvc2UgYnV0dG9uICovXG4gIEBJbnB1dCgpIGNsb3NlVG9vbHRpcCA9ICdDbG9zZSc7XG5cbiAgQE91dHB1dCgpIGJhY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB0YWJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGV4cGFuZFRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHRyYWNrQnlUYWJWYWx1ZShfaTogbnVtYmVyLCB0YWI6IERldGFpbFNpZGVQYW5lbFRhYik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRhYi52YWx1ZTtcbiAgfVxuXG4gIG9uQmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLmJhY2suZW1pdCgpO1xuICB9XG5cbiAgb25UYWJDbGljayh0YWI6IERldGFpbFNpZGVQYW5lbFRhYik6IHZvaWQge1xuICAgIGlmICghdGhpcy5leHBhbmRlZCkge1xuICAgICAgdGhpcy5leHBhbmRUb2dnbGUuZW1pdCgpO1xuICAgIH1cbiAgICBpZiAodGFiLnZhbHVlICE9PSB0aGlzLmFjdGl2ZVRhYikge1xuICAgICAgdGhpcy50YWJDaGFuZ2UuZW1pdCh0YWIudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uRXhwYW5kVG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kVG9nZ2xlLmVtaXQoKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZS5lbWl0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWgtZnVsbCBjcWEtbWluLXctMCBjcWEtYmctd2hpdGVcIj5cbiAgPCEtLSBNYWluIGNvbnRlbnQ6IFNpZGUgbWVudSArIFNjcm9sbGFibGUgY29udGVudCAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWdyaWQgY3FhLWZsZXgtMSBjcWEtbWluLWgtMCBjcWEtbWluLXctMCBjcWEtb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cImV4cGFuZGVkID8gJ2F1dG8gMWZyJyA6ICdhdXRvIDBmcidcIlxuICAgIHN0eWxlPVwidHJhbnNpdGlvbjogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIDAuM3MgZWFzZS1pbi1vdXRcIj5cbiAgICA8IS0tIExlZnQgdmVydGljYWwgaWNvbiBtZW51IC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1weS00IGNxYS1weC0yIGNxYS1ib3JkZXItciBjcWEtYm9yZGVyLVsjRjVGNUY1XSBjcWEtZmxleC1zaHJpbmstMCBjcWEtdGV4dC1bIzBBMEEwQV1cIlxuICAgICAgc3R5bGU9XCJib3gtc2hhZG93OiAxcHggNHB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XCI+XG4gICAgICA8IS0tIEV4cGFuZCAvIENvbGxhcHNlIGJ1dHRvbiAoYWx3YXlzIHZpc2libGUpIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZXhwYW5kZWQgPyBjb2xsYXBzZVRvb2x0aXAgOiBleHBhbmRUb29sdGlwXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy05IGNxYS1oLTkgY3FhLXJvdW5kZWQtbGcgY3FhLXRleHQtWyM2NDc0OEJdIGhvdmVyOmNxYS1iZy1bI0UyRThGMF0gaG92ZXI6Y3FhLXRleHQtWyMzMzQxNTVdIGNxYS10cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpjcWEtb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctMiBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLVsjM0Y0M0VFXSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLW9mZnNldC0yXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kVG9nZ2xlKClcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzIwcHhdIGNxYS13LTUgY3FhLWgtNVwiPnt7IGV4cGFuZGVkID8gJ2NoZXZyb25fbGVmdCcgOiAnY2hldnJvbl9yaWdodCcgfX08L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8IS0tIENsb3NlIGJ1dHRvbiAtLT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93Q2xvc2VCdXR0b25cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiY2xvc2VUb29sdGlwXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy05IGNxYS1oLTkgY3FhLXJvdW5kZWQtbGcgY3FhLXRleHQtWyM2NDc0OEJdIGhvdmVyOmNxYS1iZy1bI0UyRThGMF0gaG92ZXI6Y3FhLXRleHQtWyMzMzQxNTVdIGNxYS10cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpjcWEtb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctMiBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLVsjM0Y0M0VFXSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLW9mZnNldC0yXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bMjBweF0gY3FhLXctNSBjcWEtaC01XCI+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8IS0tIFRhYiBidXR0b25zICgxOjEgd2l0aCB0YWJzKSAtLT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyB0cmFja0J5OiB0cmFja0J5VGFiVmFsdWVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwidGFiLmxhYmVsXCJcbiAgICAgICAgW2NsYXNzLmNxYS1iZy1bIzNGNDNFRV1dPVwiYWN0aXZlVGFiID09PSB0YWIudmFsdWVcIlxuICAgICAgICBbY2xhc3MuY3FhLXRleHQtd2hpdGVdPVwiYWN0aXZlVGFiID09PSB0YWIudmFsdWVcIlxuICAgICAgICBbY2xhc3MuY3FhLXRleHQtWyM2NDc0OEJdXT1cImFjdGl2ZVRhYiAhPT0gdGFiLnZhbHVlXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy05IGNxYS1oLTkgY3FhLXJvdW5kZWQtbGcgaG92ZXI6Y3FhLWJnLVsjRTJFOEYwXSBob3ZlcjpjcWEtdGV4dC1bIzMzNDE1NV0gY3FhLXRyYW5zaXRpb24tY29sb3JzIGZvY3VzOmNxYS1vdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy0yIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctWyMzRjQzRUVdIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctb2Zmc2V0LTJcIlxuICAgICAgICAoY2xpY2spPVwib25UYWJDbGljayh0YWIpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsyMHB4XSBjcWEtdy01IGNxYS1oLTVcIj57eyB0YWIuaWNvbiB8fCAnY2lyY2xlJyB9fTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2Nyb2xsYWJsZSBjb250ZW50IGFyZWEgKGNvbGxhcHNlcyB3aXRoIGFuaW1hdGlvbiB3aGVuIGV4cGFuZGVkIGlzIGZhbHNlKSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1taW4taC0wIGNxYS1taW4tdy0wIGNxYS1vdmVyZmxvdy1oaWRkZW4gY3FhLXctZnVsbCBjcWEtaC1mdWxsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXNpZGUtcGFuZWwtc2Nyb2xsIGNxYS1mbGV4LTEgY3FhLW1pbi1oLTAgY3FhLW1pbi13LTAgY3FhLW92ZXJmbG93LXktYXV0byBjcWEtb3ZlcmZsb3cteC1oaWRkZW4gY3FhLXAtNCBjcWEtc3BhY2UteS00XCIgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvOyBvdmVyZmxvdy14OiBoaWRkZW47IG1pbi1oZWlnaHQ6IDA7IC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcIj5cbiAgICAgIDwhLS0gVGFiczogZXF1YWxseSBkaXN0cmlidXRlZCAoRmlnbWE6IHB1cnBsZSBhY3RpdmUsIGdyYXkgaW5hY3RpdmUpIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAtWzMuNXB4XSBjcWEtcC1bMy41cHhdIGNxYS1iZy1bI0YxRjVGOV0gY3FhLXJvdW5kZWQtbGcgY3FhLXctZnVsbFwiIHJvbGU9XCJ0YWJsaXN0XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnM7IHRyYWNrQnk6IHRyYWNrQnlUYWJWYWx1ZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJhY3RpdmVUYWIgPT09IHRhYi52YWx1ZVwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1iZy1bIzNGNDNFRV1dPVwiYWN0aXZlVGFiID09PSB0YWIudmFsdWVcIlxuICAgICAgICAgIFtjbGFzcy5jcWEtdGV4dC13aGl0ZV09XCJhY3RpdmVUYWIgPT09IHRhYi52YWx1ZVwiXG4gICAgICAgICAgW2NsYXNzLmNxYS10ZXh0LVsjNjQ3NDhCXV09XCJhY3RpdmVUYWIgIT09IHRhYi52YWx1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyIGNxYS1weS0yIGNxYS1yb3VuZGVkLWxnIGNxYS10ZXh0LXhzIGNxYS1mb250LW1lZGl1bSBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Y3FhLW9wYWNpdHktOTAgZm9jdXM6Y3FhLW91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLTIgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy1bIzNGNDNFRV0gZm9jdXMtdmlzaWJsZTpjcWEtcmluZy1vZmZzZXQtMlwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uVGFiQ2xpY2sodGFiKVwiPlxuICAgICAgICAgIHt7IHRhYi5sYWJlbCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFRhYiBjb250ZW50OiBmdWxseSBwcm92aWRlZCBieSBob3N0IHZpYSBjb250ZW50IHByb2plY3Rpb24uIEhvc3QgdXNlcyAqbmdJZiBwZXIgdGFiIHNvIG9ubHkgYWN0aXZlIGNvbnRlbnQgaXMgcHJvamVjdGVkLiBBZGQvcmVtb3ZlIHRhYnMgaW4gdGhlIGhvc3Qgd2l0aG91dCBjaGFuZ2luZyBjcWEtdWktbGliLiAtLT5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -150,10 +150,10 @@ export class AdvancedVariablesFormComponent {
150
150
  }
151
151
  }
152
152
  AdvancedVariablesFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AdvancedVariablesFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
153
- AdvancedVariablesFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: { advancedVariables: "advancedVariables", advancedVariableForm: "advancedVariableForm" }, outputs: { variableBooleanChange: "variableBooleanChange", variableValueChange: "variableValueChange" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-gap-x-6 cqa-gap-y-4 cqa-flex-wrap advanced-variables-form cqa-mb-4\">\n <ng-container *ngFor=\"let variable of advancedVariables; let i = index; trackBy: trackByVariable\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"isBooleanType(variable)\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: 100%\">\n <mat-slide-toggle \n [checked]=\"getBooleanValue(variable, i)\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\" \n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n {{ variable.label }}\n </label>\n </div>\n </ng-container>\n\n <!-- str_list variables with dynamic list -->\n <ng-container *ngIf=\"isStrListType(variable)\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n {{ variable.label }}\n </label>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <ng-container *ngIf=\"getStrListFormArray(variable, i) as formArray\">\n <div *ngFor=\"let control of formArray.controls; let itemIndex = index; trackBy: trackByControl\" class=\"cqa-flex cqa-gap-2 cqa-items-center\">\n <cqa-custom-input \n [placeholder]=\"'Enter locator'\" \n [value]=\"control.value\" \n [fullWidth]=\"true\"\n (valueChange)=\"onStrListItemChange(variable, i, itemIndex, $event)\">\n </cqa-custom-input>\n <div class=\"cqa-cursor-pointer cqa-text-red-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"removeStrListItem(variable, i, itemIndex)\">\n <mat-icon style=\"font-size: 24px;\">delete</mat-icon>\n </div>\n <div *ngIf=\"itemIndex === formArray.length - 1\" class=\"cqa-cursor-pointer cqa-text-blue-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"addStrListItem(variable, i)\">\n <mat-icon style=\"font-size: 24px;\">add</mat-icon>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n", components: [{ type: i1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i2.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
153
+ AdvancedVariablesFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: { advancedVariables: "advancedVariables", advancedVariableForm: "advancedVariableForm" }, outputs: { variableBooleanChange: "variableBooleanChange", variableValueChange: "variableValueChange" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-gap-x-6 cqa-gap-y-4 cqa-flex-wrap advanced-variables-form cqa-mb-4\">\n <ng-container *ngFor=\"let variable of advancedVariables; let i = index; trackBy: trackByVariable\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"isBooleanType(variable)\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: 100%\">\n <mat-slide-toggle \n [checked]=\"getBooleanValue(variable, i)\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\" \n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n {{ variable.label }}\n </label>\n </div>\n </ng-container>\n\n <!-- str_list variables with dynamic list -->\n <ng-container *ngIf=\"isStrListType(variable)\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n {{ variable.label }}\n </label>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <ng-container *ngIf=\"getStrListFormArray(variable, i) as formArray\">\n <div *ngFor=\"let control of formArray.controls; let itemIndex = index; trackBy: trackByControl\" class=\"cqa-flex cqa-gap-2 cqa-items-center\">\n <cqa-custom-input \n [placeholder]=\"'Enter locator'\" \n [value]=\"control.value\" \n [fullWidth]=\"true\"\n (valueChange)=\"onStrListItemChange(variable, i, itemIndex, $event)\">\n </cqa-custom-input>\n <div *ngIf=\"formArray.length > 1\" class=\"cqa-cursor-pointer cqa-text-red-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"removeStrListItem(variable, i, itemIndex)\">\n <mat-icon style=\"font-size: 24px;\">delete</mat-icon>\n </div>\n <div *ngIf=\"itemIndex === formArray.length - 1\" class=\"cqa-cursor-pointer cqa-text-blue-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"addStrListItem(variable, i)\">\n <mat-icon style=\"font-size: 24px;\">add</mat-icon>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n", components: [{ type: i1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i2.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
154
154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AdvancedVariablesFormComponent, decorators: [{
155
155
  type: Component,
156
- args: [{ selector: 'cqa-advanced-variables-form', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-gap-x-6 cqa-gap-y-4 cqa-flex-wrap advanced-variables-form cqa-mb-4\">\n <ng-container *ngFor=\"let variable of advancedVariables; let i = index; trackBy: trackByVariable\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"isBooleanType(variable)\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: 100%\">\n <mat-slide-toggle \n [checked]=\"getBooleanValue(variable, i)\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\" \n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n {{ variable.label }}\n </label>\n </div>\n </ng-container>\n\n <!-- str_list variables with dynamic list -->\n <ng-container *ngIf=\"isStrListType(variable)\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n {{ variable.label }}\n </label>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <ng-container *ngIf=\"getStrListFormArray(variable, i) as formArray\">\n <div *ngFor=\"let control of formArray.controls; let itemIndex = index; trackBy: trackByControl\" class=\"cqa-flex cqa-gap-2 cqa-items-center\">\n <cqa-custom-input \n [placeholder]=\"'Enter locator'\" \n [value]=\"control.value\" \n [fullWidth]=\"true\"\n (valueChange)=\"onStrListItemChange(variable, i, itemIndex, $event)\">\n </cqa-custom-input>\n <div class=\"cqa-cursor-pointer cqa-text-red-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"removeStrListItem(variable, i, itemIndex)\">\n <mat-icon style=\"font-size: 24px;\">delete</mat-icon>\n </div>\n <div *ngIf=\"itemIndex === formArray.length - 1\" class=\"cqa-cursor-pointer cqa-text-blue-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"addStrListItem(variable, i)\">\n <mat-icon style=\"font-size: 24px;\">add</mat-icon>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n", styles: [] }]
156
+ args: [{ selector: 'cqa-advanced-variables-form', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-gap-x-6 cqa-gap-y-4 cqa-flex-wrap advanced-variables-form cqa-mb-4\">\n <ng-container *ngFor=\"let variable of advancedVariables; let i = index; trackBy: trackByVariable\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"isBooleanType(variable)\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: 100%\">\n <mat-slide-toggle \n [checked]=\"getBooleanValue(variable, i)\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\" \n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n {{ variable.label }}\n </label>\n </div>\n </ng-container>\n\n <!-- str_list variables with dynamic list -->\n <ng-container *ngIf=\"isStrListType(variable)\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n {{ variable.label }}\n </label>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <ng-container *ngIf=\"getStrListFormArray(variable, i) as formArray\">\n <div *ngFor=\"let control of formArray.controls; let itemIndex = index; trackBy: trackByControl\" class=\"cqa-flex cqa-gap-2 cqa-items-center\">\n <cqa-custom-input \n [placeholder]=\"'Enter locator'\" \n [value]=\"control.value\" \n [fullWidth]=\"true\"\n (valueChange)=\"onStrListItemChange(variable, i, itemIndex, $event)\">\n </cqa-custom-input>\n <div *ngIf=\"formArray.length > 1\" class=\"cqa-cursor-pointer cqa-text-red-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"removeStrListItem(variable, i, itemIndex)\">\n <mat-icon style=\"font-size: 24px;\">delete</mat-icon>\n </div>\n <div *ngIf=\"itemIndex === formArray.length - 1\" class=\"cqa-cursor-pointer cqa-text-blue-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"addStrListItem(variable, i)\">\n <mat-icon style=\"font-size: 24px;\">add</mat-icon>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n", styles: [] }]
157
157
  }], propDecorators: { advancedVariables: [{
158
158
  type: Input
159
159
  }], advancedVariableForm: [{
@@ -163,4 +163,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
163
163
  }], variableValueChange: [{
164
164
  type: Output
165
165
  }] } });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0vYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0vYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBNEIsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQWdCbkUsTUFBTSxPQUFPLDhCQUE4QjtJQVAzQztRQVFXLHNCQUFpQixHQUF1QixFQUFFLENBQUM7UUFDM0MseUJBQW9CLEdBQWMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQW9DLENBQUM7UUFDN0Usd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQWdDLENBQUM7S0FzSmxGO0lBcEpDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQywyQkFBMkI7UUFDM0IsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUNuRSxzQ0FBc0M7U0FDdkM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsS0FBYTtRQUMxQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENB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cG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRWYXJpYWJsZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IGJvb2xlYW4gfCBzdHJpbmdbXTtcbiAgdHlwZT86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXZhcmlhYmxlcy1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFZhcmlhYmxlc0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBhZHZhbmNlZFZhcmlhYmxlczogQWR2YW5jZWRWYXJpYWJsZVtdID0gW107XG4gIEBJbnB1dCgpIGFkdmFuY2VkVmFyaWFibGVGb3JtOiBGb3JtQXJyYXkgPSBuZXcgRm9ybUFycmF5KFtdKTtcbiAgXG4gIEBPdXRwdXQoKSB2YXJpYWJsZUJvb2xlYW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgdmFyaWFibGVWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBhbnkgfT4oKTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGNoYW5nZXMgaWYgbmVlZGVkXG4gICAgaWYgKGNoYW5nZXNbJ2FkdmFuY2VkVmFyaWFibGVzJ10gfHwgY2hhbmdlc1snYWR2YW5jZWRWYXJpYWJsZUZvcm0nXSkge1xuICAgICAgLy8gRm9ybSBpcyBtYW5hZ2VkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGb3JtR3JvdXAgYXQgYSBzcGVjaWZpYyBpbmRleFxuICAgKi9cbiAgZ2V0Rm9ybUdyb3VwQXQoaW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB8IG51bGwge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVmFyaWFibGVGb3JtICYmIGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLmFkdmFuY2VkVmFyaWFibGVGb3JtLmxlbmd0aCkge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZUZvcm0uYXQoaW5kZXgpO1xuICAgICAgcmV0dXJuIGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgPyBjb250cm9sIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBmcm9tIGZvcm0gb3IgdmFyaWFibGVcbiAgICovXG4gIGdldEJvb2xlYW5WYWx1ZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZm9ybUdyb3VwLmdldCgndmFsdWUnKT8udmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogKHZhcmlhYmxlLnZhbHVlIGFzIGJvb2xlYW4pIHx8IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKHZhcmlhYmxlLnZhbHVlIGFzIGJvb2xlYW4pIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgZnJvbSBmb3JtIG9yIHZhcmlhYmxlIChmb3Igbm9uLWJvb2xlYW4gdHlwZXMpXG4gICAqL1xuICBnZXRWYWx1ZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXBBdChpbmRleCk7XG4gICAgaWYgKGZvcm1Hcm91cCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy52YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB2YXJpYWJsZS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhcmlhYmxlLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhcmlhYmxlIGlzIGJvb2xlYW4gdHlwZVxuICAgKi9cbiAgaXNCb29sZWFuVHlwZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YXJpYWJsZS50eXBlICE9PSAnc3RyX2xpc3QnICYmIHR5cGVvZiB2YXJpYWJsZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhcmlhYmxlIGlzIHN0cl9saXN0IHR5cGVcbiAgICovXG4gIGlzU3RyTGlzdFR5cGUodmFyaWFibGU6IEFkdmFuY2VkVmFyaWFibGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZSBjaGFuZ2VcbiAgICovXG4gIG9uVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFyaWFibGVCb29sZWFuQ2hhbmdlLmVtaXQoeyBuYW1lOiB2YXJpYWJsZU5hbWUsIHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB2YWx1ZSBjaGFuZ2UgZm9yIG5vbi1ib29sZWFuIHR5cGVzXG4gICAqL1xuICBvblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhcmlhYmxlVmFsdWVDaGFuZ2UuZW1pdCh7IG5hbWU6IHZhcmlhYmxlTmFtZSwgdmFsdWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkZGluZyBhIG5ldyBpdGVtIHRvIHN0cl9saXN0XG4gICAqL1xuICBhZGRTdHJMaXN0SXRlbSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJyk7XG4gICAgICBpZiAodmFsdWVDb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgIHZhbHVlQ29udHJvbC5wdXNoKG5ldyBGb3JtQ29udHJvbCgnJykpO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgY3VycmVudFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0V4cGVjdGVkIEZvcm1BcnJheSBmb3Igc3RyX2xpc3QgdmFyaWFibGUsIGdvdDonLCB2YWx1ZUNvbnRyb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVtb3ZpbmcgYW4gaXRlbSBmcm9tIHN0cl9saXN0XG4gICAqL1xuICByZW1vdmVTdHJMaXN0SXRlbSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlciwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cEF0KGluZGV4KTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjb25zdCB2YWx1ZUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpO1xuICAgICAgaWYgKHZhbHVlQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSAmJiBpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB2YWx1ZUNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlQ29udHJvbC5yZW1vdmVBdChpdGVtSW5kZXgpO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgY3VycmVudFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHN0cl9saXN0IGl0ZW0gdmFsdWUgY2hhbmdlXG4gICAqL1xuICBvblN0ckxpc3RJdGVtQ2hhbmdlKHZhcmlhYmxlOiBBZHZhbmNlZFZhcmlhYmxlLCBpbmRleDogbnVtYmVyLCBpdGVtSW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJyk7XG4gICAgICBpZiAodmFsdWVDb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5ICYmIGl0ZW1JbmRleCA+PSAwICYmIGl0ZW1JbmRleCA8IHZhbHVlQ29udHJvbC5sZW5ndGgpIHtcbiAgICAgICAgLy8gVXNlIGVtaXRFdmVudDogZmFsc2UgdG8gcHJldmVudCB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb24gdGhhdCBjYXVzZXMgZm9jdXMgbG9zc1xuICAgICAgICB2YWx1ZUNvbnRyb2wuYXQoaXRlbUluZGV4KS5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlIGFmdGVyIGEgc2hvcnQgZGVsYXkgdG8gYXZvaWQgZm9jdXMgaXNzdWVzXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICB0aGlzLm9uVmFyaWFibGVWYWx1ZUNoYW5nZSh2YXJpYWJsZS5uYW1lLCBjdXJyZW50VmFsdWUpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IEZvcm1BcnJheSBmb3Igc3RyX2xpc3QgdmFyaWFibGVcbiAgICovXG4gIGdldFN0ckxpc3RGb3JtQXJyYXkodmFyaWFibGU6IEFkdmFuY2VkVmFyaWFibGUsIGluZGV4OiBudW1iZXIpOiBGb3JtQXJyYXkgfCBudWxsIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cEF0KGluZGV4KTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpO1xuICAgICAgcmV0dXJuIGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSA/IGZvcm1BcnJheSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBuZ0ZvclxuICAgKi9cbiAgdHJhY2tCeVZhcmlhYmxlKGluZGV4OiBudW1iZXIsIHZhcmlhYmxlOiBBZHZhbmNlZFZhcmlhYmxlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFyaWFibGUubmFtZSB8fCBpbmRleC50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIHN0cl9saXN0XG4gICAqL1xuICB0cmFja0J5Q29udHJvbChpbmRleDogbnVtYmVyLCBjb250cm9sOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBjb250cm9sIHx8IGluZGV4O1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLXgtNiBjcWEtZ2FwLXktNCBjcWEtZmxleC13cmFwIGFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtIGNxYS1tYi00XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIGFkdmFuY2VkVmFyaWFibGVzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5VmFyaWFibGVcIj5cbiAgICA8IS0tIEJvb2xlYW4gdmFyaWFibGVzIHdpdGggbWF0LXNsaWRlLXRvZ2dsZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNCb29sZWFuVHlwZSh2YXJpYWJsZSlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgXG4gICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0Qm9vbGVhblZhbHVlKHZhcmlhYmxlLCBpKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvblZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZS5uYW1lLCAkZXZlbnQuY2hlY2tlZClcIiBcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY2FwaXRhbGl6ZS1maXJzdFwiPlxuICAgICAgICAgIHt7IHZhcmlhYmxlLmxhYmVsIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gc3RyX2xpc3QgdmFyaWFibGVzIHdpdGggZHluYW1pYyBsaXN0IC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0ckxpc3RUeXBlKHZhcmlhYmxlKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtdy1mdWxsXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMSBjYXBpdGFsaXplLWZpcnN0XCI+XG4gICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RyTGlzdEZvcm1BcnJheSh2YXJpYWJsZSwgaSkgYXMgZm9ybUFycmF5XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb250cm9sIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGl0ZW1JbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Q29udHJvbFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0yIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidFbnRlciBsb2NhdG9yJ1wiIFxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb250cm9sLnZhbHVlXCIgXG4gICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25TdHJMaXN0SXRlbUNoYW5nZSh2YXJpYWJsZSwgaSwgaXRlbUluZGV4LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdGV4dC1yZWQtNjAwIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCIgKGNsaWNrKT1cInJlbW92ZVN0ckxpc3RJdGVtKHZhcmlhYmxlLCBpLCBpdGVtSW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4O1wiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbUluZGV4ID09PSBmb3JtQXJyYXkubGVuZ3RoIC0gMVwiIGNsYXNzPVwiY3FhLWN1cnNvci1wb2ludGVyIGNxYS10ZXh0LWJsdWUtNjAwIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCIgKGNsaWNrKT1cImFkZFN0ckxpc3RJdGVtKHZhcmlhYmxlLCBpKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweDtcIj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG4iXX0=
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0vYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0vYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBNEIsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQWdCbkUsTUFBTSxPQUFPLDhCQUE4QjtJQVAzQztRQVFXLHNCQUFpQixHQUF1QixFQUFFLENBQUM7UUFDM0MseUJBQW9CLEdBQWMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQW9DLENBQUM7UUFDN0Usd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQWdDLENBQUM7S0FzSmxGO0lBcEpDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQywyQkFBMkI7UUFDM0IsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUNuRSxzQ0FBc0M7U0FDdkM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsS0FBYTtRQUMxQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENB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cG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRWYXJpYWJsZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IGJvb2xlYW4gfCBzdHJpbmdbXTtcbiAgdHlwZT86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXZhcmlhYmxlcy1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFZhcmlhYmxlc0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBhZHZhbmNlZFZhcmlhYmxlczogQWR2YW5jZWRWYXJpYWJsZVtdID0gW107XG4gIEBJbnB1dCgpIGFkdmFuY2VkVmFyaWFibGVGb3JtOiBGb3JtQXJyYXkgPSBuZXcgRm9ybUFycmF5KFtdKTtcbiAgXG4gIEBPdXRwdXQoKSB2YXJpYWJsZUJvb2xlYW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgdmFyaWFibGVWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBhbnkgfT4oKTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGNoYW5nZXMgaWYgbmVlZGVkXG4gICAgaWYgKGNoYW5nZXNbJ2FkdmFuY2VkVmFyaWFibGVzJ10gfHwgY2hhbmdlc1snYWR2YW5jZWRWYXJpYWJsZUZvcm0nXSkge1xuICAgICAgLy8gRm9ybSBpcyBtYW5hZ2VkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGb3JtR3JvdXAgYXQgYSBzcGVjaWZpYyBpbmRleFxuICAgKi9cbiAgZ2V0Rm9ybUdyb3VwQXQoaW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB8IG51bGwge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVmFyaWFibGVGb3JtICYmIGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLmFkdmFuY2VkVmFyaWFibGVGb3JtLmxlbmd0aCkge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZUZvcm0uYXQoaW5kZXgpO1xuICAgICAgcmV0dXJuIGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgPyBjb250cm9sIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBmcm9tIGZvcm0gb3IgdmFyaWFibGVcbiAgICovXG4gIGdldEJvb2xlYW5WYWx1ZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZm9ybUdyb3VwLmdldCgndmFsdWUnKT8udmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogKHZhcmlhYmxlLnZhbHVlIGFzIGJvb2xlYW4pIHx8IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKHZhcmlhYmxlLnZhbHVlIGFzIGJvb2xlYW4pIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgZnJvbSBmb3JtIG9yIHZhcmlhYmxlIChmb3Igbm9uLWJvb2xlYW4gdHlwZXMpXG4gICAqL1xuICBnZXRWYWx1ZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXBBdChpbmRleCk7XG4gICAgaWYgKGZvcm1Hcm91cCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy52YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB2YXJpYWJsZS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhcmlhYmxlLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhcmlhYmxlIGlzIGJvb2xlYW4gdHlwZVxuICAgKi9cbiAgaXNCb29sZWFuVHlwZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YXJpYWJsZS50eXBlICE9PSAnc3RyX2xpc3QnICYmIHR5cGVvZiB2YXJpYWJsZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhcmlhYmxlIGlzIHN0cl9saXN0IHR5cGVcbiAgICovXG4gIGlzU3RyTGlzdFR5cGUodmFyaWFibGU6IEFkdmFuY2VkVmFyaWFibGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZSBjaGFuZ2VcbiAgICovXG4gIG9uVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFyaWFibGVCb29sZWFuQ2hhbmdlLmVtaXQoeyBuYW1lOiB2YXJpYWJsZU5hbWUsIHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB2YWx1ZSBjaGFuZ2UgZm9yIG5vbi1ib29sZWFuIHR5cGVzXG4gICAqL1xuICBvblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhcmlhYmxlVmFsdWVDaGFuZ2UuZW1pdCh7IG5hbWU6IHZhcmlhYmxlTmFtZSwgdmFsdWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkZGluZyBhIG5ldyBpdGVtIHRvIHN0cl9saXN0XG4gICAqL1xuICBhZGRTdHJMaXN0SXRlbSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJyk7XG4gICAgICBpZiAodmFsdWVDb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgIHZhbHVlQ29udHJvbC5wdXNoKG5ldyBGb3JtQ29udHJvbCgnJykpO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgY3VycmVudFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0V4cGVjdGVkIEZvcm1BcnJheSBmb3Igc3RyX2xpc3QgdmFyaWFibGUsIGdvdDonLCB2YWx1ZUNvbnRyb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVtb3ZpbmcgYW4gaXRlbSBmcm9tIHN0cl9saXN0XG4gICAqL1xuICByZW1vdmVTdHJMaXN0SXRlbSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlciwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cEF0KGluZGV4KTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjb25zdCB2YWx1ZUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpO1xuICAgICAgaWYgKHZhbHVlQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSAmJiBpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB2YWx1ZUNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlQ29udHJvbC5yZW1vdmVBdChpdGVtSW5kZXgpO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgY3VycmVudFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHN0cl9saXN0IGl0ZW0gdmFsdWUgY2hhbmdlXG4gICAqL1xuICBvblN0ckxpc3RJdGVtQ2hhbmdlKHZhcmlhYmxlOiBBZHZhbmNlZFZhcmlhYmxlLCBpbmRleDogbnVtYmVyLCBpdGVtSW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJyk7XG4gICAgICBpZiAodmFsdWVDb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5ICYmIGl0ZW1JbmRleCA+PSAwICYmIGl0ZW1JbmRleCA8IHZhbHVlQ29udHJvbC5sZW5ndGgpIHtcbiAgICAgICAgLy8gVXNlIGVtaXRFdmVudDogZmFsc2UgdG8gcHJldmVudCB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb24gdGhhdCBjYXVzZXMgZm9jdXMgbG9zc1xuICAgICAgICB2YWx1ZUNvbnRyb2wuYXQoaXRlbUluZGV4KS5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlIGFmdGVyIGEgc2hvcnQgZGVsYXkgdG8gYXZvaWQgZm9jdXMgaXNzdWVzXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICB0aGlzLm9uVmFyaWFibGVWYWx1ZUNoYW5nZSh2YXJpYWJsZS5uYW1lLCBjdXJyZW50VmFsdWUpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IEZvcm1BcnJheSBmb3Igc3RyX2xpc3QgdmFyaWFibGVcbiAgICovXG4gIGdldFN0ckxpc3RGb3JtQXJyYXkodmFyaWFibGU6IEFkdmFuY2VkVmFyaWFibGUsIGluZGV4OiBudW1iZXIpOiBGb3JtQXJyYXkgfCBudWxsIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cEF0KGluZGV4KTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpO1xuICAgICAgcmV0dXJuIGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSA/IGZvcm1BcnJheSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBuZ0ZvclxuICAgKi9cbiAgdHJhY2tCeVZhcmlhYmxlKGluZGV4OiBudW1iZXIsIHZhcmlhYmxlOiBBZHZhbmNlZFZhcmlhYmxlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFyaWFibGUubmFtZSB8fCBpbmRleC50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIHN0cl9saXN0XG4gICAqL1xuICB0cmFja0J5Q29udHJvbChpbmRleDogbnVtYmVyLCBjb250cm9sOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBjb250cm9sIHx8IGluZGV4O1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLXgtNiBjcWEtZ2FwLXktNCBjcWEtZmxleC13cmFwIGFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtIGNxYS1tYi00XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIGFkdmFuY2VkVmFyaWFibGVzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5VmFyaWFibGVcIj5cbiAgICA8IS0tIEJvb2xlYW4gdmFyaWFibGVzIHdpdGggbWF0LXNsaWRlLXRvZ2dsZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNCb29sZWFuVHlwZSh2YXJpYWJsZSlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgXG4gICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0Qm9vbGVhblZhbHVlKHZhcmlhYmxlLCBpKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvblZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZS5uYW1lLCAkZXZlbnQuY2hlY2tlZClcIiBcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY2FwaXRhbGl6ZS1maXJzdFwiPlxuICAgICAgICAgIHt7IHZhcmlhYmxlLmxhYmVsIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gc3RyX2xpc3QgdmFyaWFibGVzIHdpdGggZHluYW1pYyBsaXN0IC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0ckxpc3RUeXBlKHZhcmlhYmxlKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtdy1mdWxsXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMSBjYXBpdGFsaXplLWZpcnN0XCI+XG4gICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RyTGlzdEZvcm1BcnJheSh2YXJpYWJsZSwgaSkgYXMgZm9ybUFycmF5XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb250cm9sIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGl0ZW1JbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Q29udHJvbFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0yIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidFbnRlciBsb2NhdG9yJ1wiIFxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb250cm9sLnZhbHVlXCIgXG4gICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25TdHJMaXN0SXRlbUNoYW5nZSh2YXJpYWJsZSwgaSwgaXRlbUluZGV4LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZvcm1BcnJheS5sZW5ndGggPiAxXCIgY2xhc3M9XCJjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXRleHQtcmVkLTYwMCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiIChjbGljayk9XCJyZW1vdmVTdHJMaXN0SXRlbSh2YXJpYWJsZSwgaSwgaXRlbUluZGV4KVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweDtcIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW1JbmRleCA9PT0gZm9ybUFycmF5Lmxlbmd0aCAtIDFcIiBjbGFzcz1cImNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdGV4dC1ibHVlLTYwMCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiIChjbGljayk9XCJhZGRTdHJMaXN0SXRlbSh2YXJpYWJsZSwgaSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDI0cHg7XCI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuIl19