@cqa-lib/cqa-ui 1.1.93 → 1.1.94

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.
@@ -0,0 +1,289 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { BaseStepComponent } from '../base-step.component';
3
+ import { EMPTY_STATE_IMAGES } from '../../assets/images/image-assets.constants';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../badge/badge.component";
6
+ import * as i2 from "../db-query-execution-item/db-query-execution-item.component";
7
+ import * as i3 from "../../segment-control/segment-control.component";
8
+ import * as i4 from "../../templates/table-template.component";
9
+ import * as i5 from "@angular/common";
10
+ export class DbVerificationStepComponent extends BaseStepComponent {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.verificationFilter = 'all';
14
+ this.filterSegments = [
15
+ { label: 'All', value: 'all' },
16
+ { label: 'Failed only', value: 'failed' },
17
+ { label: 'Passed only', value: 'passed' },
18
+ ];
19
+ this.verificationTableColumns = [];
20
+ this.emptyStateConfig = {
21
+ title: 'No Assertions',
22
+ description: 'No verification assertions found for this database query.',
23
+ imageUrl: EMPTY_STATE_IMAGES.DASHBOARD,
24
+ actions: [],
25
+ };
26
+ this.pageIndex = 0;
27
+ this.pageSize = 10;
28
+ // Cached query results to avoid recreating components on every change detection
29
+ this.cachedQueryResults = [];
30
+ }
31
+ ngOnInit() {
32
+ this.updateConfig();
33
+ this.setupTableColumns();
34
+ this.updateCachedQueryResults();
35
+ super.ngOnInit();
36
+ if (this.expanded !== undefined) {
37
+ this.isExpanded = this.expanded;
38
+ }
39
+ }
40
+ getStatus() {
41
+ return this.config?.status || this.status;
42
+ }
43
+ ngOnChanges(changes) {
44
+ // Update config when inputs change
45
+ if (changes['dbTestResult'] || changes['dbConfig'] || changes['expanded'] || changes['status'] || changes['duration']) {
46
+ this.updateConfig();
47
+ if (changes['dbTestResult']) {
48
+ this.setupTableColumns();
49
+ this.updateCachedQueryResults();
50
+ }
51
+ }
52
+ // Update expanded state if changed
53
+ if (changes['expanded'] && this.expanded !== undefined) {
54
+ this.isExpanded = this.expanded;
55
+ }
56
+ }
57
+ updateConfig() {
58
+ this.config = {
59
+ id: this.id,
60
+ testStepResultId: this.testStepResultId,
61
+ stepNumber: this.stepNumber,
62
+ title: this.title,
63
+ status: this.status,
64
+ duration: this.duration,
65
+ type: 'db-verification',
66
+ dbTestResult: this.dbTestResult,
67
+ dbConfig: this.dbConfig,
68
+ timingBreakdown: this.timingBreakdown,
69
+ expanded: this.expanded,
70
+ };
71
+ }
72
+ toggleHeader() {
73
+ this.toggle();
74
+ }
75
+ updateCachedQueryResults() {
76
+ if (!this.dbTestResult?.results) {
77
+ this.cachedQueryResults = [];
78
+ return;
79
+ }
80
+ this.cachedQueryResults = Object.entries(this.dbTestResult.results).map(([key, result]) => ({ key, result }));
81
+ }
82
+ getQueryResults() {
83
+ return this.cachedQueryResults;
84
+ }
85
+ trackByQueryKey(index, item) {
86
+ return item.key;
87
+ }
88
+ getTotalRowsReturned() {
89
+ if (!this.dbTestResult?.results)
90
+ return 0;
91
+ return Object.values(this.dbTestResult.results).reduce((total, result) => {
92
+ return total + (Array.isArray(result.data) ? result.data.length : 0);
93
+ }, 0);
94
+ }
95
+ getQueryStatus(queryKey) {
96
+ if (!this.dbTestResult?.assertionResults)
97
+ return 'passed';
98
+ const queryAssertions = this.dbTestResult.assertionResults.filter(assertion => assertion.variableName === queryKey);
99
+ if (queryAssertions.length === 0)
100
+ return 'passed';
101
+ return queryAssertions.every(a => a.passed) ? 'passed' : 'failed';
102
+ }
103
+ getFilteredAssertions() {
104
+ if (!this.dbTestResult?.assertionResults)
105
+ return [];
106
+ switch (this.verificationFilter) {
107
+ case 'failed':
108
+ return this.dbTestResult.assertionResults.filter(a => !a.passed);
109
+ case 'passed':
110
+ return this.dbTestResult.assertionResults.filter(a => a.passed);
111
+ default:
112
+ return this.dbTestResult.assertionResults;
113
+ }
114
+ }
115
+ setVerificationFilter(filter) {
116
+ this.verificationFilter = filter;
117
+ }
118
+ onFilterChange(value) {
119
+ this.verificationFilter = value;
120
+ }
121
+ setupTableColumns() {
122
+ this.verificationTableColumns = [
123
+ {
124
+ fieldId: 'jsonPath',
125
+ fieldName: 'JSON path',
126
+ fieldValue: 'jsonPath',
127
+ isShow: true,
128
+ weight: 2,
129
+ render: (row) => {
130
+ return `
131
+ <div class="cqa-text-[12px] cqa-text-[#4B5563] cqa-font-mono">
132
+ ${this.escapeHtml(row.jsonPath)}
133
+ </div>
134
+ `;
135
+ }
136
+ },
137
+ {
138
+ fieldId: 'verificationType',
139
+ fieldName: 'Verification type',
140
+ fieldValue: 'verificationType',
141
+ isShow: true,
142
+ weight: 1.5,
143
+ render: (row) => {
144
+ return `
145
+ <div class="cqa-text-[12px] cqa-text-[#4B5563]">
146
+ ${this.escapeHtml(this.formatVerificationType(row.verificationType))}
147
+ </div>
148
+ `;
149
+ }
150
+ },
151
+ {
152
+ fieldId: 'actualValue',
153
+ fieldName: 'Actual value',
154
+ fieldValue: 'actualValue',
155
+ isShow: true,
156
+ weight: 1.5,
157
+ render: (row) => {
158
+ const value = typeof row.actualValue === 'object' ? JSON.stringify(row.actualValue) : String(row.actualValue);
159
+ return `
160
+ <div class="cqa-text-[12px] cqa-text-[#4B5563]">
161
+ ${this.escapeHtml(value)}
162
+ </div>
163
+ `;
164
+ }
165
+ },
166
+ {
167
+ fieldId: 'expectedValue',
168
+ fieldName: 'Expected value',
169
+ fieldValue: 'expectedValue',
170
+ isShow: true,
171
+ weight: 1.5,
172
+ render: (row) => {
173
+ const value = typeof row.expectedValue === 'object' ? JSON.stringify(row.expectedValue) : String(row.expectedValue);
174
+ return `
175
+ <div class="cqa-text-[12px] cqa-text-[#4B5563]">
176
+ ${this.escapeHtml(value)}
177
+ </div>
178
+ `;
179
+ }
180
+ },
181
+ {
182
+ fieldId: 'result',
183
+ fieldName: 'Result',
184
+ fieldValue: 'passed',
185
+ isShow: true,
186
+ weight: 1,
187
+ render: (row) => {
188
+ if (row.passed) {
189
+ return `
190
+ <span class="cqa-inline-block cqa-text-center cqa-w-11 cqa-px-2 cqa-py-1 cqa-rounded-[5px] cqa-text-[12px] cqa-bg-[#2E7D32] cqa-text-[#FFFFFF]">
191
+ Pass
192
+ </span>
193
+ `;
194
+ }
195
+ else {
196
+ return `
197
+ <span class="cqa-inline-block cqa-text-center cqa-w-11 cqa-px-2 cqa-py-1 cqa-rounded-[5px] cqa-text-[12px] cqa-bg-[#DC2626] cqa-text-[#FFFFFF]">
198
+ Fail
199
+ </span>
200
+ `;
201
+ }
202
+ }
203
+ },
204
+ ];
205
+ }
206
+ escapeHtml(text) {
207
+ const div = document.createElement('div');
208
+ div.textContent = text;
209
+ return div.innerHTML;
210
+ }
211
+ getTableData() {
212
+ return this.getFilteredAssertions();
213
+ }
214
+ get isEmptyTable() {
215
+ return this.getTableData().length === 0;
216
+ }
217
+ onPageChange(event) {
218
+ this.pageIndex = event.pageIndex;
219
+ this.pageSize = event.pageSize;
220
+ }
221
+ copyQuery(query) {
222
+ navigator.clipboard.writeText(query).then(() => {
223
+ });
224
+ }
225
+ copyResponse(queryResult) {
226
+ const response = JSON.stringify(queryResult.data, null, 2);
227
+ navigator.clipboard.writeText(response).then(() => {
228
+ });
229
+ }
230
+ copyEnvironment() {
231
+ if (this.dbConfig?.name) {
232
+ navigator.clipboard.writeText(this.dbConfig.name).then(() => {
233
+ });
234
+ }
235
+ }
236
+ getFailureMessage() {
237
+ if (!this.dbTestResult || this.dbTestResult.allAssertionsPassed)
238
+ return null;
239
+ const failedAssertion = this.dbTestResult.assertionResults?.find(a => !a.passed);
240
+ if (failedAssertion) {
241
+ const queryKey = failedAssertion.variableName;
242
+ const queryIndex = this.getQueryResults().findIndex(q => q.key === queryKey) + 1;
243
+ return `Assertion failed in Query ${queryIndex}. Expected value "${failedAssertion.expectedValue}" but got "${failedAssertion.actualValue}".`;
244
+ }
245
+ return null;
246
+ }
247
+ formatVerificationType(type) {
248
+ const typeMap = {
249
+ 'equals': 'Equals',
250
+ 'not_equals': 'Not Equals',
251
+ 'contains': 'Contains',
252
+ 'not_contains': 'Not Contains',
253
+ 'greater_than': 'Greater Than',
254
+ 'less_than': 'Less Than',
255
+ 'greater_than_or_equals': 'Greater Than Or Equals',
256
+ 'less_than_or_equals': 'Less Than Or Equals',
257
+ 'exists': 'Exists',
258
+ 'not_exists': 'Not Exists',
259
+ };
260
+ return typeMap[type] || type;
261
+ }
262
+ }
263
+ DbVerificationStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DbVerificationStepComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
264
+ DbVerificationStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DbVerificationStepComponent, selector: "cqa-db-verification-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", dbTestResult: "dbTestResult", dbConfig: "dbConfig" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggleHeader()\"\n style=\"border-bottom: 1px solid #F3F4F6\">\n \n <!-- Status Icon -->\n <!-- Success -->\n <div *ngIf=\"getStatus().toLowerCase() === 'success'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <!-- Failure -->\n <div *ngIf=\"getStatus().toLowerCase() === 'failure' || getStatus().toLowerCase() === 'failed'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <!-- Pending -->\n <div *ngIf=\"getStatus().toLowerCase() === 'pending'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <!-- Running - Show spinner -->\n <div *ngIf=\"getStatus().toLowerCase() === 'running'\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <div><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\n <rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#F0F0F1\"/>\n <path d=\"M13.5 3.5H6.5C5.95 3.5 5.5 3.95 5.5 4.5V11.5C5.5 12.05 5.95 12.5 6.5 12.5H13.5C14.05 12.5 14.5 12.05 14.5 11.5V4.5C14.5 3.95 14.05 3.5 13.5 3.5ZM13.5 4.5V6H6.5V4.5H13.5ZM13.5 7V9H6.5V7H13.5ZM6.5 11.5V10H13.5V11.5H6.5Z\" fill=\"#212122\"/>\n </svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ stepNumber }}. <span [innerHTML]=\"title\"></span> \n \n <span class=\"cqa-ml-1 cqa-px-1.5 cqa-py-0.5 cqa-rounded-full cqa-font-medium cqa-text-[#212122] cqa-bg-[#F0F0F1] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n Database\n </span>\n\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(duration) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && dbTestResult\" class=\"cqa-p-2 !cqa-pl-9 !cqa-pr-6 cqa-bg-white\">\n <!-- Summary Bar -->\n <div class=\"cqa-mb-1.5 cqa-p-3 cqa-bg-[#FCFCFC] cqa-rounded-[6px] cqa-flex cqa-flex-col cqa-gap-2\" style=\"border: 1px solid #E5E7EB;\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <!-- Status Badge -->\n <cqa-badge\n *ngIf=\"getStatus().toLowerCase() === 'failure' || getStatus().toLowerCase() === 'failed'\"\n label=\"FAIL\"\n backgroundColor=\"#DC2626\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge\n *ngIf=\"getStatus().toLowerCase() === 'success'\"\n label=\"PASS\"\n backgroundColor=\"#22C55E\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n\n <div class=\"cqa-h-[19px] cqa-w-[1px] cqa-bg-[#E5E7EB]\"></div>\n \n <!-- Summary Stats -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-text-[11px] cqa-leading-[16px] cqa-text-[#6B7280]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Total Time: <span class=\"cqa-text-[#4B5563]\">{{ formatDuration(duration) }}</span></span>\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Queries: <span class=\"cqa-text-[#4B5563]\">{{ cachedQueryResults?.length || 0 }}</span></span>\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Assertions: <span class=\"cqa-text-[#4B5563]\">{{ dbTestResult?.assertionResults?.length || 0 }}</span></span>\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Rows Returned: <span class=\"cqa-text-[#4B5563]\">{{ getTotalRowsReturned() }}</span></span>\n </div>\n </div>\n\n <!-- Failure Banner -->\n <div \n *ngIf=\"getFailureMessage()\"\n class=\"cqa-flex cqa-px-2 cqa-py-1 cqa-bg-[#FEF2F2] cqa-rounded-[4px]\" style=\"border: 1px solid #FEE2E2;\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#B91C1C]\">\n {{ getFailureMessage() }}\n </span>\n </div>\n </div>\n\n <!-- Database Environment Section -->\n <div *ngIf=\"dbConfig\" class=\"cqa-mb-1.5\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Database environment</div>\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-px-4 cqa-py-2 cqa-relative cqa-flex cqa-flex-wrap cqa-gap-3\">\n <!-- Environment -->\n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Environment</div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.name }}</span>\n <span (click)=\"copyEnvironment()\" class=\"cqa-cursor-pointer\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </span>\n </div>\n </div>\n \n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Type</div>\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.dbType }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-mb-1.5\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Query Execution</div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-4 cqa-py-2 cqa-bg-white cqa-rounded-[10px]\" style=\"border: 1px solid #E2E8F0;\">\n <cqa-db-query-execution-item\n *ngFor=\"let queryItem of cachedQueryResults; let i = index; trackBy: trackByQueryKey\"\n [queryNumber]=\"i + 1\"\n [queryKey]=\"queryItem.key\"\n [queryResult]=\"queryItem.result\"\n [status]=\"getQueryStatus(queryItem.key)\"\n [variableName]=\"queryItem.key\">\n </cqa-db-query-execution-item>\n </div>\n </div>\n\n <!-- Verification Section -->\n <div *ngIf=\"dbTestResult.assertionResults && dbTestResult.assertionResults.length > 0\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Verification</div> \n <!-- Verification Table -->\n <div class=\"cqa-bg-white cqa-rounded-[10px] cqa-px-4 cqa-py-2 cqa-overflow-hidden\" style=\"border: 1px solid #E2E8F0;\">\n <!-- Segment Control for Filters -->\n <cqa-segment-control\n [segments]=\"filterSegments\"\n [value]=\"verificationFilter\"\n (valueChange)=\"onFilterChange($event)\">\n </cqa-segment-control>\n <cqa-table-template\n [columns]=\"verificationTableColumns\"\n [data]=\"getTableData()\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyTable\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n </div>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-[#374151]\">{{ formatDuration(timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-[#374151]\">{{ formatDuration(timingBreakdown.tool) }}</span>\n </div>\n </span>\n </div>\n </div>\n</div>\n\n", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading"] }, { type: i2.DbQueryExecutionItemComponent, selector: "cqa-db-query-execution-item", inputs: ["queryNumber", "queryKey", "queryResult", "status", "variableName"] }, { type: i3.SegmentControlComponent, selector: "cqa-segment-control", inputs: ["segments", "value", "disabled"], outputs: ["valueChange"] }, { type: i4.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "filterConfig", "showFilterPanel", "showFilterButton", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "serverSidePagination", "totalElements", "isTableLoading", "isTableDataLoading"], outputs: ["onSearchChange", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "pageChange", "onReload", "onAutoRefreshClick"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DbVerificationStepComponent, decorators: [{
266
+ type: Component,
267
+ args: [{ selector: 'cqa-db-verification-step', host: { class: 'cqa-ui-root' }, template: "<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggleHeader()\"\n style=\"border-bottom: 1px solid #F3F4F6\">\n \n <!-- Status Icon -->\n <!-- Success -->\n <div *ngIf=\"getStatus().toLowerCase() === 'success'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <!-- Failure -->\n <div *ngIf=\"getStatus().toLowerCase() === 'failure' || getStatus().toLowerCase() === 'failed'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <!-- Pending -->\n <div *ngIf=\"getStatus().toLowerCase() === 'pending'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <!-- Running - Show spinner -->\n <div *ngIf=\"getStatus().toLowerCase() === 'running'\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <div><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\n <rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#F0F0F1\"/>\n <path d=\"M13.5 3.5H6.5C5.95 3.5 5.5 3.95 5.5 4.5V11.5C5.5 12.05 5.95 12.5 6.5 12.5H13.5C14.05 12.5 14.5 12.05 14.5 11.5V4.5C14.5 3.95 14.05 3.5 13.5 3.5ZM13.5 4.5V6H6.5V4.5H13.5ZM13.5 7V9H6.5V7H13.5ZM6.5 11.5V10H13.5V11.5H6.5Z\" fill=\"#212122\"/>\n </svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ stepNumber }}. <span [innerHTML]=\"title\"></span> \n \n <span class=\"cqa-ml-1 cqa-px-1.5 cqa-py-0.5 cqa-rounded-full cqa-font-medium cqa-text-[#212122] cqa-bg-[#F0F0F1] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n Database\n </span>\n\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(duration) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && dbTestResult\" class=\"cqa-p-2 !cqa-pl-9 !cqa-pr-6 cqa-bg-white\">\n <!-- Summary Bar -->\n <div class=\"cqa-mb-1.5 cqa-p-3 cqa-bg-[#FCFCFC] cqa-rounded-[6px] cqa-flex cqa-flex-col cqa-gap-2\" style=\"border: 1px solid #E5E7EB;\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <!-- Status Badge -->\n <cqa-badge\n *ngIf=\"getStatus().toLowerCase() === 'failure' || getStatus().toLowerCase() === 'failed'\"\n label=\"FAIL\"\n backgroundColor=\"#DC2626\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge\n *ngIf=\"getStatus().toLowerCase() === 'success'\"\n label=\"PASS\"\n backgroundColor=\"#22C55E\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n\n <div class=\"cqa-h-[19px] cqa-w-[1px] cqa-bg-[#E5E7EB]\"></div>\n \n <!-- Summary Stats -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-text-[11px] cqa-leading-[16px] cqa-text-[#6B7280]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Total Time: <span class=\"cqa-text-[#4B5563]\">{{ formatDuration(duration) }}</span></span>\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Queries: <span class=\"cqa-text-[#4B5563]\">{{ cachedQueryResults?.length || 0 }}</span></span>\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Assertions: <span class=\"cqa-text-[#4B5563]\">{{ dbTestResult?.assertionResults?.length || 0 }}</span></span>\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Rows Returned: <span class=\"cqa-text-[#4B5563]\">{{ getTotalRowsReturned() }}</span></span>\n </div>\n </div>\n\n <!-- Failure Banner -->\n <div \n *ngIf=\"getFailureMessage()\"\n class=\"cqa-flex cqa-px-2 cqa-py-1 cqa-bg-[#FEF2F2] cqa-rounded-[4px]\" style=\"border: 1px solid #FEE2E2;\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#B91C1C]\">\n {{ getFailureMessage() }}\n </span>\n </div>\n </div>\n\n <!-- Database Environment Section -->\n <div *ngIf=\"dbConfig\" class=\"cqa-mb-1.5\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Database environment</div>\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-px-4 cqa-py-2 cqa-relative cqa-flex cqa-flex-wrap cqa-gap-3\">\n <!-- Environment -->\n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Environment</div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.name }}</span>\n <span (click)=\"copyEnvironment()\" class=\"cqa-cursor-pointer\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </span>\n </div>\n </div>\n \n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Type</div>\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.dbType }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-mb-1.5\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Query Execution</div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-4 cqa-py-2 cqa-bg-white cqa-rounded-[10px]\" style=\"border: 1px solid #E2E8F0;\">\n <cqa-db-query-execution-item\n *ngFor=\"let queryItem of cachedQueryResults; let i = index; trackBy: trackByQueryKey\"\n [queryNumber]=\"i + 1\"\n [queryKey]=\"queryItem.key\"\n [queryResult]=\"queryItem.result\"\n [status]=\"getQueryStatus(queryItem.key)\"\n [variableName]=\"queryItem.key\">\n </cqa-db-query-execution-item>\n </div>\n </div>\n\n <!-- Verification Section -->\n <div *ngIf=\"dbTestResult.assertionResults && dbTestResult.assertionResults.length > 0\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Verification</div> \n <!-- Verification Table -->\n <div class=\"cqa-bg-white cqa-rounded-[10px] cqa-px-4 cqa-py-2 cqa-overflow-hidden\" style=\"border: 1px solid #E2E8F0;\">\n <!-- Segment Control for Filters -->\n <cqa-segment-control\n [segments]=\"filterSegments\"\n [value]=\"verificationFilter\"\n (valueChange)=\"onFilterChange($event)\">\n </cqa-segment-control>\n <cqa-table-template\n [columns]=\"verificationTableColumns\"\n [data]=\"getTableData()\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyTable\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n </div>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-[#374151]\">{{ formatDuration(timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-[#374151]\">{{ formatDuration(timingBreakdown.tool) }}</span>\n </div>\n </span>\n </div>\n </div>\n</div>\n\n", styles: [] }]
268
+ }], propDecorators: { id: [{
269
+ type: Input
270
+ }], testStepResultId: [{
271
+ type: Input
272
+ }], stepNumber: [{
273
+ type: Input
274
+ }], title: [{
275
+ type: Input
276
+ }], status: [{
277
+ type: Input
278
+ }], duration: [{
279
+ type: Input
280
+ }], timingBreakdown: [{
281
+ type: Input
282
+ }], expanded: [{
283
+ type: Input
284
+ }], dbTestResult: [{
285
+ type: Input
286
+ }], dbConfig: [{
287
+ type: Input
288
+ }] } });
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItdmVyaWZpY2F0aW9uLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2RiLXZlcmlmaWNhdGlvbi1zdGVwL2RiLXZlcmlmaWNhdGlvbi1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9kYi12ZXJpZmljYXRpb24tc3RlcC9kYi12ZXJpZmljYXRpb24tc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7QUFRaEYsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGlCQUFpQjtJQU5sRTs7UUF1QkUsdUJBQWtCLEdBQWdDLEtBQUssQ0FBQztRQUV4RCxtQkFBYyxHQUFHO1lBQ2YsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDOUIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7U0FDMUMsQ0FBQztRQUVGLDZCQUF3QixHQUF5QixFQUFFLENBQUM7UUFFcEQscUJBQWdCLEdBQXFCO1lBQ25DLEtBQUssRUFBRSxlQUFlO1lBQ3RCLFdBQVcsRUFBRSwyREFBMkQ7WUFDeEUsUUFBUSxFQUFFLGtCQUFrQixDQUFDLFNBQVM7WUFDdEMsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBRUYsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixhQUFRLEdB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QixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQy9CLENBQUM7O3dIQWxTVSwyQkFBMkI7NEdBQTNCLDJCQUEyQixpWkNieEMsNm9YQWlMQTsyRkRwS2EsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNFLDBCQUEwQixRQUc5QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7OEJBR3JCLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlU3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2Utc3RlcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJWZXJpZmljYXRpb25TdGVwQ29uZmlnLCBEYlRlc3RSZXN1bHQsIERiUXVlcnlSZXN1bHQsIERiQXNzZXJ0aW9uUmVzdWx0LCBTdGVwU3RhdHVzLCBUaW1pbmdCcmVha2Rvd24gfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgRHluYW1pY1RhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vdGFibGUvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29uZmlnIH0gZnJvbSAnLi4vLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFTVBUWV9TVEFURV9JTUFHRVMgfSBmcm9tICcuLi8uLi9hc3NldHMvaW1hZ2VzL2ltYWdlLWFzc2V0cy5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZGItdmVyaWZpY2F0aW9uLXN0ZXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGItdmVyaWZpY2F0aW9uLXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgRGJWZXJpZmljYXRpb25TdGVwQ29tcG9uZW50IGV4dGVuZHMgQmFzZVN0ZXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGlkITogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXN0U3RlcFJlc3VsdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGVwTnVtYmVyITogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcbiAgQElucHV0KCkgc3RhdHVzITogU3RlcFN0YXR1cztcbiAgQElucHV0KCkgZHVyYXRpb24hOiBudW1iZXI7XG4gIEBJbnB1dCgpIHRpbWluZ0JyZWFrZG93bj86IFRpbWluZ0JyZWFrZG93bjtcbiAgQElucHV0KCkgZXhwYW5kZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBkYlRlc3RSZXN1bHQhOiBEYlRlc3RSZXN1bHQ7XG4gIEBJbnB1dCgpIGRiQ29uZmlnPzoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkYlR5cGU6IHN0cmluZztcbiAgfTtcblxuICBvdmVycmlkZSBjb25maWchOiBEYlZlcmlmaWNhdGlvblN0ZXBDb25maWc7XG5cbiAgdmVyaWZpY2F0aW9uRmlsdGVyOiAnYWxsJyB8ICdmYWlsZWQnIHwgJ3Bhc3NlZCcgPSAnYWxsJztcblxuICBmaWx0ZXJTZWdtZW50cyA9IFtcbiAgICB7IGxhYmVsOiAnQWxsJywgdmFsdWU6ICdhbGwnIH0sXG4gICAgeyBsYWJlbDogJ0ZhaWxlZCBvbmx5JywgdmFsdWU6ICdmYWlsZWQnIH0sXG4gICAgeyBsYWJlbDogJ1Bhc3NlZCBvbmx5JywgdmFsdWU6ICdwYXNzZWQnIH0sXG4gIF07XG5cbiAgdmVyaWZpY2F0aW9uVGFibGVDb2x1bW5zOiBEeW5hbWljVGFibGVDb2x1bW5bXSA9IFtdO1xuICBcbiAgZW1wdHlTdGF0ZUNvbmZpZzogRW1wdHlTdGF0ZUNvbmZpZyA9IHtcbiAgICB0aXRsZTogJ05vIEFzc2VydGlvbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnTm8gdmVyaWZpY2F0aW9uIGFzc2VydGlvbnMgZm91bmQgZm9yIHRoaXMgZGF0YWJhc2UgcXVlcnkuJyxcbiAgICBpbWFnZVVybDogRU1QVFlfU1RBVEVfSU1BR0VTLkRBU0hCT0FSRCxcbiAgICBhY3Rpb25zOiBbXSxcbiAgfTtcblxuICBwYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgXG4gIC8vIENhY2hlZCBxdWVyeSByZXN1bHRzIHRvIGF2b2lkIHJlY3JlYXRpbmcgY29tcG9uZW50cyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uXG4gIGNhY2hlZFF1ZXJ5UmVzdWx0czogQXJyYXk8eyBrZXk6IHN0cmluZzsgcmVzdWx0OiBEYlF1ZXJ5UmVzdWx0IH0+ID0gW107XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb25maWcoKTtcbiAgICB0aGlzLnNldHVwVGFibGVDb2x1bW5zKCk7XG4gICAgdGhpcy51cGRhdGVDYWNoZWRRdWVyeVJlc3VsdHMoKTtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGlmICh0aGlzLmV4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHVzKCk6IFN0ZXBTdGF0dXMge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uc3RhdHVzIHx8IHRoaXMuc3RhdHVzO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSBjb25maWcgd2hlbiBpbnB1dHMgY2hhbmdlXG4gICAgaWYgKGNoYW5nZXNbJ2RiVGVzdFJlc3VsdCddIHx8IGNoYW5nZXNbJ2RiQ29uZmlnJ10gfHwgY2hhbmdlc1snZXhwYW5kZWQnXSB8fCBjaGFuZ2VzWydzdGF0dXMnXSB8fCBjaGFuZ2VzWydkdXJhdGlvbiddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZygpO1xuICAgICAgaWYgKGNoYW5nZXNbJ2RiVGVzdFJlc3VsdCddKSB7XG4gICAgICAgIHRoaXMuc2V0dXBUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRRdWVyeVJlc3VsdHMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIGV4cGFuZGVkIHN0YXRlIGlmIGNoYW5nZWRcbiAgICBpZiAoY2hhbmdlc1snZXhwYW5kZWQnXSAmJiB0aGlzLmV4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRlc3RTdGVwUmVzdWx0SWQ6IHRoaXMudGVzdFN0ZXBSZXN1bHRJZCxcbiAgICAgIHN0ZXBOdW1iZXI6IHRoaXMuc3RlcE51bWJlcixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgICAgdHlwZTogJ2RiLXZlcmlmaWNhdGlvbicsXG4gICAgICBkYlRlc3RSZXN1bHQ6IHRoaXMuZGJUZXN0UmVzdWx0LFxuICAgICAgZGJDb25maWc6IHRoaXMuZGJDb25maWcsXG4gICAgICB0aW1pbmdCcmVha2Rvd246IHRoaXMudGltaW5nQnJlYWtkb3duLFxuICAgICAgZXhwYW5kZWQ6IHRoaXMuZXhwYW5kZWQsXG4gICAgfSBhcyBEYlZlcmlmaWNhdGlvblN0ZXBDb25maWc7XG4gIH1cblxuICB0b2dnbGVIZWFkZXIoKSB7XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2FjaGVkUXVlcnlSZXN1bHRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYlRlc3RSZXN1bHQ/LnJlc3VsdHMpIHtcbiAgICAgIHRoaXMuY2FjaGVkUXVlcnlSZXN1bHRzID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2FjaGVkUXVlcnlSZXN1bHRzID0gT2JqZWN0LmVudHJpZXModGhpcy5kYlRlc3RSZXN1bHQucmVzdWx0cykubWFwKChba2V5LCByZXN1bHRdKSA9PiAoeyBrZXksIHJlc3VsdCB9KSk7XG4gIH1cblxuICBnZXRRdWVyeVJlc3VsdHMoKTogQXJyYXk8eyBrZXk6IHN0cmluZzsgcmVzdWx0OiBEYlF1ZXJ5UmVzdWx0IH0+IHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRRdWVyeVJlc3VsdHM7XG4gIH1cblxuICB0cmFja0J5UXVlcnlLZXkoaW5kZXg6IG51bWJlciwgaXRlbTogeyBrZXk6IHN0cmluZzsgcmVzdWx0OiBEYlF1ZXJ5UmVzdWx0IH0pOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmtleTtcbiAgfVxuXG4gIGdldFRvdGFsUm93c1JldHVybmVkKCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmRiVGVzdFJlc3VsdD8ucmVzdWx0cykgcmV0dXJuIDA7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5kYlRlc3RSZXN1bHQucmVzdWx0cykucmVkdWNlKCh0b3RhbCwgcmVzdWx0KSA9PiB7XG4gICAgICByZXR1cm4gdG90YWwgKyAoQXJyYXkuaXNBcnJheShyZXN1bHQuZGF0YSkgPyByZXN1bHQuZGF0YS5sZW5ndGggOiAwKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGdldFF1ZXJ5U3RhdHVzKHF1ZXJ5S2V5OiBzdHJpbmcpOiAncGFzc2VkJyB8ICdmYWlsZWQnIHtcbiAgICBpZiAoIXRoaXMuZGJUZXN0UmVzdWx0Py5hc3NlcnRpb25SZXN1bHRzKSByZXR1cm4gJ3Bhc3NlZCc7XG4gICAgY29uc3QgcXVlcnlBc3NlcnRpb25zID0gdGhpcy5kYlRlc3RSZXN1bHQuYXNzZXJ0aW9uUmVzdWx0cy5maWx0ZXIoXG4gICAgICBhc3NlcnRpb24gPT4gYXNzZXJ0aW9uLnZhcmlhYmxlTmFtZSA9PT0gcXVlcnlLZXlcbiAgICApO1xuICAgIGlmIChxdWVyeUFzc2VydGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gJ3Bhc3NlZCc7XG4gICAgcmV0dXJuIHF1ZXJ5QXNzZXJ0aW9ucy5ldmVyeShhID0+IGEucGFzc2VkKSA/ICdwYXNzZWQnIDogJ2ZhaWxlZCc7XG4gIH1cblxuICBnZXRGaWx0ZXJlZEFzc2VydGlvbnMoKTogRGJBc3NlcnRpb25SZXN1bHRbXSB7XG4gICAgaWYgKCF0aGlzLmRiVGVzdFJlc3VsdD8uYXNzZXJ0aW9uUmVzdWx0cykgcmV0dXJuIFtdO1xuICAgIHN3aXRjaCAodGhpcy52ZXJpZmljYXRpb25GaWx0ZXIpIHtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLmRiVGVzdFJlc3VsdC5hc3NlcnRpb25SZXN1bHRzLmZpbHRlcihhID0+ICFhLnBhc3NlZCk7XG4gICAgICBjYXNlICdwYXNzZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5kYlRlc3RSZXN1bHQuYXNzZXJ0aW9uUmVzdWx0cy5maWx0ZXIoYSA9PiBhLnBhc3NlZCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5kYlRlc3RSZXN1bHQuYXNzZXJ0aW9uUmVzdWx0cztcbiAgICB9XG4gIH1cblxuICBzZXRWZXJpZmljYXRpb25GaWx0ZXIoZmlsdGVyOiAnYWxsJyB8ICdmYWlsZWQnIHwgJ3Bhc3NlZCcpIHtcbiAgICB0aGlzLnZlcmlmaWNhdGlvbkZpbHRlciA9IGZpbHRlcjtcbiAgfVxuXG4gIG9uRmlsdGVyQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZlcmlmaWNhdGlvbkZpbHRlciA9IHZhbHVlIGFzICdhbGwnIHwgJ2ZhaWxlZCcgfCAncGFzc2VkJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBUYWJsZUNvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy52ZXJpZmljYXRpb25UYWJsZUNvbHVtbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGZpZWxkSWQ6ICdqc29uUGF0aCcsXG4gICAgICAgIGZpZWxkTmFtZTogJ0pTT04gcGF0aCcsXG4gICAgICAgIGZpZWxkVmFsdWU6ICdqc29uUGF0aCcsXG4gICAgICAgIGlzU2hvdzogdHJ1ZSxcbiAgICAgICAgd2VpZ2h0OiAyLFxuICAgICAgICByZW5kZXI6IChyb3c6IERiQXNzZXJ0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM0QjU1NjNdIGNxYS1mb250LW1vbm9cIj5cbiAgICAgICAgICAgICAgJHt0aGlzLmVzY2FwZUh0bWwocm93Lmpzb25QYXRoKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIGA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpZWxkSWQ6ICd2ZXJpZmljYXRpb25UeXBlJyxcbiAgICAgICAgZmllbGROYW1lOiAnVmVyaWZpY2F0aW9uIHR5cGUnLFxuICAgICAgICBmaWVsZFZhbHVlOiAndmVyaWZpY2F0aW9uVHlwZScsXG4gICAgICAgIGlzU2hvdzogdHJ1ZSxcbiAgICAgICAgd2VpZ2h0OiAxLjUsXG4gICAgICAgIHJlbmRlcjogKHJvdzogRGJBc3NlcnRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzRCNTU2M11cIj5cbiAgICAgICAgICAgICAgJHt0aGlzLmVzY2FwZUh0bWwodGhpcy5mb3JtYXRWZXJpZmljYXRpb25UeXBlKHJvdy52ZXJpZmljYXRpb25UeXBlKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWVsZElkOiAnYWN0dWFsVmFsdWUnLFxuICAgICAgICBmaWVsZE5hbWU6ICdBY3R1YWwgdmFsdWUnLFxuICAgICAgICBmaWVsZFZhbHVlOiAnYWN0dWFsVmFsdWUnLFxuICAgICAgICBpc1Nob3c6IHRydWUsXG4gICAgICAgIHdlaWdodDogMS41LFxuICAgICAgICByZW5kZXI6IChyb3c6IERiQXNzZXJ0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0eXBlb2Ygcm93LmFjdHVhbFZhbHVlID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHJvdy5hY3R1YWxWYWx1ZSkgOiBTdHJpbmcocm93LmFjdHVhbFZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzRCNTU2M11cIj5cbiAgICAgICAgICAgICAgJHt0aGlzLmVzY2FwZUh0bWwodmFsdWUpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgYDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmllbGRJZDogJ2V4cGVjdGVkVmFsdWUnLFxuICAgICAgICBmaWVsZE5hbWU6ICdFeHBlY3RlZCB2YWx1ZScsXG4gICAgICAgIGZpZWxkVmFsdWU6ICdleHBlY3RlZFZhbHVlJyxcbiAgICAgICAgaXNTaG93OiB0cnVlLFxuICAgICAgICB3ZWlnaHQ6IDEuNSxcbiAgICAgICAgcmVuZGVyOiAocm93OiBEYkFzc2VydGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHJvdy5leHBlY3RlZFZhbHVlID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHJvdy5leHBlY3RlZFZhbHVlKSA6IFN0cmluZyhyb3cuZXhwZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM0QjU1NjNdXCI+XG4gICAgICAgICAgICAgICR7dGhpcy5lc2NhcGVIdG1sKHZhbHVlKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIGA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpZWxkSWQ6ICdyZXN1bHQnLFxuICAgICAgICBmaWVsZE5hbWU6ICdSZXN1bHQnLFxuICAgICAgICBmaWVsZFZhbHVlOiAncGFzc2VkJyxcbiAgICAgICAgaXNTaG93OiB0cnVlLFxuICAgICAgICB3ZWlnaHQ6IDEsXG4gICAgICAgIHJlbmRlcjogKHJvdzogRGJBc3NlcnRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAocm93LnBhc3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtaW5saW5lLWJsb2NrIGNxYS10ZXh0LWNlbnRlciBjcWEtdy0xMSBjcWEtcHgtMiBjcWEtcHktMSBjcWEtcm91bmRlZC1bNXB4XSBjcWEtdGV4dC1bMTJweF0gY3FhLWJnLVsjMkU3RDMyXSBjcWEtdGV4dC1bI0ZGRkZGRl1cIj5cbiAgICAgICAgICAgICAgICBQYXNzXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWlubGluZS1ibG9jayBjcWEtdGV4dC1jZW50ZXIgY3FhLXctMTEgY3FhLXB4LTIgY3FhLXB5LTEgY3FhLXJvdW5kZWQtWzVweF0gY3FhLXRleHQtWzEycHhdIGNxYS1iZy1bI0RDMjYyNl0gY3FhLXRleHQtWyNGRkZGRkZdXCI+XG4gICAgICAgICAgICAgICAgRmFpbFxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBgO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBlc2NhcGVIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDtcbiAgICByZXR1cm4gZGl2LmlubmVySFRNTDtcbiAgfVxuXG4gIGdldFRhYmxlRGF0YSgpOiBEYkFzc2VydGlvblJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZEFzc2VydGlvbnMoKTtcbiAgfVxuXG4gIGdldCBpc0VtcHR5VGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGFibGVEYXRhKCkubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiB7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XG4gIH1cblxuICBjb3B5UXVlcnkocXVlcnk6IHN0cmluZykge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHF1ZXJ5KS50aGVuKCgpID0+IHtcbiAgICB9KTtcbiAgfVxuXG4gIGNvcHlSZXNwb25zZShxdWVyeVJlc3VsdDogRGJRdWVyeVJlc3VsdCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5zdHJpbmdpZnkocXVlcnlSZXN1bHQuZGF0YSwgbnVsbCwgMik7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQocmVzcG9uc2UpLnRoZW4oKCkgPT4ge1xuICAgIH0pO1xuICB9XG5cbiAgY29weUVudmlyb25tZW50KCkge1xuICAgIGlmICh0aGlzLmRiQ29uZmlnPy5uYW1lKSB7XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmRiQ29uZmlnLm5hbWUpLnRoZW4oKCkgPT4ge1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmFpbHVyZU1lc3NhZ2UoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmRiVGVzdFJlc3VsdCB8fCB0aGlzLmRiVGVzdFJlc3VsdC5hbGxBc3NlcnRpb25zUGFzc2VkKSByZXR1cm4gbnVsbDtcbiAgICBcbiAgICBjb25zdCBmYWlsZWRBc3NlcnRpb24gPSB0aGlzLmRiVGVzdFJlc3VsdC5hc3NlcnRpb25SZXN1bHRzPy5maW5kKGEgPT4gIWEucGFzc2VkKTtcbiAgICBpZiAoZmFpbGVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBxdWVyeUtleSA9IGZhaWxlZEFzc2VydGlvbi52YXJpYWJsZU5hbWU7XG4gICAgICBjb25zdCBxdWVyeUluZGV4ID0gdGhpcy5nZXRRdWVyeVJlc3VsdHMoKS5maW5kSW5kZXgocSA9PiBxLmtleSA9PT0gcXVlcnlLZXkpICsgMTtcbiAgICAgIHJldHVybiBgQXNzZXJ0aW9uIGZhaWxlZCBpbiBRdWVyeSAke3F1ZXJ5SW5kZXh9LiBFeHBlY3RlZCB2YWx1ZSBcIiR7ZmFpbGVkQXNzZXJ0aW9uLmV4cGVjdGVkVmFsdWV9XCIgYnV0IGdvdCBcIiR7ZmFpbGVkQXNzZXJ0aW9uLmFjdHVhbFZhbHVlfVwiLmA7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9ybWF0VmVyaWZpY2F0aW9uVHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnZXF1YWxzJzogJ0VxdWFscycsXG4gICAgICAnbm90X2VxdWFscyc6ICdOb3QgRXF1YWxzJyxcbiAgICAgICdjb250YWlucyc6ICdDb250YWlucycsXG4gICAgICAnbm90X2NvbnRhaW5zJzogJ05vdCBDb250YWlucycsXG4gICAgICAnZ3JlYXRlcl90aGFuJzogJ0dyZWF0ZXIgVGhhbicsXG4gICAgICAnbGVzc190aGFuJzogJ0xlc3MgVGhhbicsXG4gICAgICAnZ3JlYXRlcl90aGFuX29yX2VxdWFscyc6ICdHcmVhdGVyIFRoYW4gT3IgRXF1YWxzJyxcbiAgICAgICdsZXNzX3RoYW5fb3JfZXF1YWxzJzogJ0xlc3MgVGhhbiBPciBFcXVhbHMnLFxuICAgICAgJ2V4aXN0cyc6ICdFeGlzdHMnLFxuICAgICAgJ25vdF9leGlzdHMnOiAnTm90IEV4aXN0cycsXG4gICAgfTtcbiAgICByZXR1cm4gdHlwZU1hcFt0eXBlXSB8fCB0eXBlO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXAtMiBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgIChjbGljayk9XCJ0b2dnbGVIZWFkZXIoKVwiXG4gICAgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI0YzRjRGNlwiPlxuICAgIFxuICAgIDwhLS0gU3RhdHVzIEljb24gLS0+XG4gICAgPCEtLSBTdWNjZXNzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJnZXRTdGF0dXMoKS50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcydcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAuOTAwNSA0Ljk5OTk5QzExLjEyODkgNi4xMjA2NCAxMC45NjYyIDcuMjg1NzEgMTAuNDM5NSA4LjMwMDg5QzkuOTEyNzkgOS4zMTYwOCA5LjA1NCAxMC4xMiA4LjAwNjMxIDEwLjU3ODdDNi45NTg2MiAxMS4wMzczIDUuNzg1MzYgMTEuMTIyOSA0LjY4MjIgMTAuODIxMkMzLjU3OTA0IDEwLjUxOTUgMi42MTI2NSA5Ljg0ODY5IDEuOTQ0MTkgOC45MjA3MUMxLjI3NTczIDcuOTkyNzIgMC45NDU2MTEgNi44NjM2MSAxLjAwODg4IDUuNzIxNjlDMS4wNzIxNSA0LjU3OTc2IDEuNTI0OTkgMy40OTQwNCAyLjI5MTg4IDIuNjQ1NThDMy4wNTg3NiAxLjc5NzEyIDQuMDkzMzQgMS4yMzcyMSA1LjIyMzA4IDEuMDU5MjJDNi4zNTI4MiAwLjg4MTIzMyA3LjUwOTQ0IDEuMDk1OTIgOC41MDAwNSAxLjY2NzQ5XCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA1LjVMNiA3TDExIDJcIiBzdHJva2U9XCIjMjJDNTVFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gRmFpbHVyZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0U3RhdHVzKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWx1cmUnIHx8IGdldFN0YXR1cygpLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsZWQnXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTcuNSA0LjVMNC41IDcuNVwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNC41TDcuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gUGVuZGluZyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0U3RhdHVzKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBSdW5uaW5nIC0gU2hvdyBzcGlubmVyIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJnZXRTdGF0dXMoKS50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZydcIj5cbiAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYW5pbWF0ZS1zcGluIGNxYS10ZXh0LVsjM0I4MkY2XVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjZcIiBjeT1cIjZcIiByPVwiNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgb3BhY2l0eT1cIjAuMjVcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJNNiAxQTUgNSAwIDAgMSAxMSA2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2PjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgcng9XCI0XCIgZmlsbD1cIiNGMEYwRjFcIi8+XG4gICAgICA8cGF0aCBkPVwiTTEzLjUgMy41SDYuNUM1Ljk1IDMuNSA1LjUgMy45NSA1LjUgNC41VjExLjVDNS41IDEyLjA1IDUuOTUgMTIuNSA2LjUgMTIuNUgxMy41QzE0LjA1IDEyLjUgMTQuNSAxMi4wNSAxNC41IDExLjVWNC41QzE0LjUgMy45NSAxNC4wNSAzLjUgMTMuNSAzLjVaTTEzLjUgNC41VjZINi41VjQuNUgxMy41Wk0xMy41IDdWOUg2LjVWN0gxMy41Wk02LjUgMTEuNVYxMEgxMy41VjExLjVINi41WlwiIGZpbGw9XCIjMjEyMTIyXCIvPlxuICAgICAgPC9zdmc+PC9kaXY+XG5cbiAgICA8IS0tIFN0ZXAgTnVtYmVyIGFuZCBUaXRsZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtYm9sZCBjcWEtZmxleC0xIGNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtdGV4dC1bMTFweF0gY3FhLWxlYWRpbmctWzEzcHhdXCI+XG4gICAgICB7eyBzdGVwTnVtYmVyIH19LiA8c3BhbiBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9zcGFuPiAgICBcbiAgICAgIFxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbWwtMSBjcWEtcHgtMS41IGNxYS1weS0wLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMyMTIxMjJdIGNxYS1iZy1bI0YwRjBGMV0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtbWluLXctbWF4XCI+XG4gICAgICAgIERhdGFiYXNlXG4gICAgICA8L3NwYW4+XG5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKGR1cmF0aW9uKSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHN2ZyBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMy41IDVMNyA4LjVMMTAuNSA1XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjAuODMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkICYmIGRiVGVzdFJlc3VsdFwiIGNsYXNzPVwiY3FhLXAtMiAhY3FhLXBsLTkgIWNxYS1wci02IGNxYS1iZy13aGl0ZVwiPlxuICAgIDwhLS0gU3VtbWFyeSBCYXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi0xLjUgY3FhLXAtMyBjcWEtYmctWyNGQ0ZDRkNdIGNxYS1yb3VuZGVkLVs2cHhdIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIiBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNFNUU3RUI7XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTRcIj5cbiAgICAgICAgPCEtLSBTdGF0dXMgQmFkZ2UgLS0+XG4gICAgICAgIDxjcWEtYmFkZ2VcbiAgICAgICAgICAqbmdJZj1cImdldFN0YXR1cygpLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsdXJlJyB8fCBnZXRTdGF0dXMoKS50b0xvd2VyQ2FzZSgpID09PSAnZmFpbGVkJ1wiXG4gICAgICAgICAgbGFiZWw9XCJGQUlMXCJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9XCIjREMyNjI2XCJcbiAgICAgICAgICB0ZXh0Q29sb3I9XCIjRkZGRkZGXCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPC9jcWEtYmFkZ2U+XG4gICAgICAgIDxjcWEtYmFkZ2VcbiAgICAgICAgICAqbmdJZj1cImdldFN0YXR1cygpLnRvTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJ1wiXG4gICAgICAgICAgbGFiZWw9XCJQQVNTXCJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9XCIjMjJDNTVFXCJcbiAgICAgICAgICB0ZXh0Q29sb3I9XCIjRkZGRkZGXCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPC9jcWEtYmFkZ2U+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1oLVsxOXB4XSBjcWEtdy1bMXB4XSBjcWEtYmctWyNFNUU3RUJdXCI+PC9kaXY+XG4gICAgICAgIFxuICAgICAgICA8IS0tIFN1bW1hcnkgU3RhdHMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtNCBjcWEtdGV4dC1bMTFweF0gY3FhLWxlYWRpbmctWzE2cHhdIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzExMTgyN11cIj5Ub3RhbCBUaW1lOiA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNEI1NTYzXVwiPnt7IGZvcm1hdER1cmF0aW9uKGR1cmF0aW9uKSB9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzEwcHhdIGNxYS10ZXh0LVsjMTExODI3XVwiPlF1ZXJpZXM6IDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyM0QjU1NjNdXCI+e3sgY2FjaGVkUXVlcnlSZXN1bHRzPy5sZW5ndGggfHwgMCB9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzEwcHhdIGNxYS10ZXh0LVsjMTExODI3XVwiPkFzc2VydGlvbnM6IDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyM0QjU1NjNdXCI+e3sgZGJUZXN0UmVzdWx0Py5hc3NlcnRpb25SZXN1bHRzPy5sZW5ndGggfHwgMCB9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzEwcHhdIGNxYS10ZXh0LVsjMTExODI3XVwiPlJvd3MgUmV0dXJuZWQ6IDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyM0QjU1NjNdXCI+e3sgZ2V0VG90YWxSb3dzUmV0dXJuZWQoKSB9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRmFpbHVyZSBCYW5uZXIgLS0+XG4gICAgICA8ZGl2IFxuICAgICAgICAqbmdJZj1cImdldEZhaWx1cmVNZXNzYWdlKClcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1weC0yIGNxYS1weS0xIGNxYS1iZy1bI0ZFRjJGMl0gY3FhLXJvdW5kZWQtWzRweF1cIiBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNGRUUyRTI7XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNCOTFDMUNdXCI+XG4gICAgICAgICAge3sgZ2V0RmFpbHVyZU1lc3NhZ2UoKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRGF0YWJhc2UgRW52aXJvbm1lbnQgU2VjdGlvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZGJDb25maWdcIiBjbGFzcz1cImNxYS1tYi0xLjVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMwQjBCMEJdIGNxYS1tYi0yXCI+RGF0YWJhc2UgZW52aXJvbm1lbnQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS1weC00IGNxYS1weS0yIGNxYS1yZWxhdGl2ZSBjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1nYXAtM1wiPlxuICAgICAgICA8IS0tIEVudmlyb25tZW50IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNDU1NTZDXSBjcWEtbWItMVwiPkVudmlyb25tZW50PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC00XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLXRleHQtWyMwRjE3MkJdXCI+e3sgZGJDb25maWcubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjb3B5RW52aXJvbm1lbnQoKVwiIGNsYXNzPVwiY3FhLWN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNS4zMzMzMiAxMC42NjY3SDMuOTk5OTlDMy42NDYzNyAxMC42NjY3IDMuMzA3MjMgMTAuNTI2MyAzLjA1NzE4IDEwLjI3NjJDMi44MDcxMyAxMC4wMjYyIDIuNjY2NjYgOS42ODcwNCAyLjY2NjY2IDkuMzMzNDFWNC4wMDAwOEMyLjY2NjY2IDMuNjQ2NDYgMi44MDcxMyAzLjMwNzMyIDMuMDU3MTggMy4wNTcyN0MzLjMwNzIzIDIuODA3MjIgMy42NDYzNyAyLjY2Njc1IDMuOTk5OTkgMi42NjY3NUg5LjMzMzMyQzkuNjg2OTUgMi42NjY3NSAxMC4wMjYxIDIuODA3MjIgMTAuMjc2MSAzLjA1NzI3QzEwLjUyNjIgMy4zMDczMiAxMC42NjY3IDMuNjQ2NDYgMTAuNjY2NyA0LjAwMDA4VjUuMzMzNDFNNi42NjY2NiAxMy4zMzM0SDEyQzEyLjM1MzYgMTMuMzMzNCAxMi42OTI4IDEzLjE5MjkgMTIuOTQyOCAxMi45NDI5QzEzLjE5MjggMTIuNjkyOCAxMy4zMzMzIDEyLjM1MzcgMTMuMzMzMyAxMi4wMDAxVjYuNjY2NzVDMTMuMzMzMyA2LjMxMzEzIDEzLjE5MjggNS45NzM5OSAxMi45NDI4IDUuNzIzOTRDMTIuNjkyOCA1LjQ3Mzg5IDEyLjM1MzYgNS4zMzM0MSAxMiA1LjMzMzQxSDYuNjY2NjZDNi4zMTMwMyA1LjMzMzQxIDUuOTczOSA1LjQ3Mzg5IDUuNzIzODUgNS43MjM5NEM1LjQ3MzggNS45NzM5OSA1LjMzMzMyIDYuMzEzMTMgNS4zMzMzMiA2LjY2Njc1VjEyLjAwMDFDNS4zMzMzMiAxMi4zNTM3IDUuNDczOCAxMi42OTI4IDUuNzIzODUgMTIuOTQyOUM1Ljk3MzkgMTMuMTkyOSA2LjMxMzAzIDEzLjMzMzQgNi42NjY2NiAxMy4zMzM0WlwiIHN0cm9rZT1cIiM2MzYzNjNcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM0NTU1NkNdIGNxYS1tYi0xXCI+VHlwZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10ZXh0LVsjMEYxNzJCXVwiPnt7IGRiQ29uZmlnLmRiVHlwZSB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi0xLjVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMwQjBCMEJdIGNxYS1tYi0yXCI+UXVlcnkgRXhlY3V0aW9uPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtcHgtNCBjcWEtcHktMiBjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzEwcHhdXCIgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjRTJFOEYwO1wiPlxuICAgICAgICA8Y3FhLWRiLXF1ZXJ5LWV4ZWN1dGlvbi1pdGVtXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXJ5SXRlbSBvZiBjYWNoZWRRdWVyeVJlc3VsdHM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlRdWVyeUtleVwiXG4gICAgICAgICAgW3F1ZXJ5TnVtYmVyXT1cImkgKyAxXCJcbiAgICAgICAgICBbcXVlcnlLZXldPVwicXVlcnlJdGVtLmtleVwiXG4gICAgICAgICAgW3F1ZXJ5UmVzdWx0XT1cInF1ZXJ5SXRlbS5yZXN1bHRcIlxuICAgICAgICAgIFtzdGF0dXNdPVwiZ2V0UXVlcnlTdGF0dXMocXVlcnlJdGVtLmtleSlcIlxuICAgICAgICAgIFt2YXJpYWJsZU5hbWVdPVwicXVlcnlJdGVtLmtleVwiPlxuICAgICAgICA8L2NxYS1kYi1xdWVyeS1leGVjdXRpb24taXRlbT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBWZXJpZmljYXRpb24gU2VjdGlvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZGJUZXN0UmVzdWx0LmFzc2VydGlvblJlc3VsdHMgJiYgZGJUZXN0UmVzdWx0LmFzc2VydGlvblJlc3VsdHMubGVuZ3RoID4gMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzBCMEIwQl0gY3FhLW1iLTJcIj5WZXJpZmljYXRpb248L2Rpdj4gICAgICBcbiAgICAgIDwhLS0gVmVyaWZpY2F0aW9uIFRhYmxlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1bMTBweF0gY3FhLXB4LTQgY3FhLXB5LTIgY3FhLW92ZXJmbG93LWhpZGRlblwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0UyRThGMDtcIj5cbiAgICAgICAgPCEtLSBTZWdtZW50IENvbnRyb2wgZm9yIEZpbHRlcnMgLS0+XG4gICAgICAgIDxjcWEtc2VnbWVudC1jb250cm9sXG4gICAgICAgICAgW3NlZ21lbnRzXT1cImZpbHRlclNlZ21lbnRzXCJcbiAgICAgICAgICBbdmFsdWVdPVwidmVyaWZpY2F0aW9uRmlsdGVyXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1zZWdtZW50LWNvbnRyb2w+XG4gICAgICAgIDxjcWEtdGFibGUtdGVtcGxhdGVcbiAgICAgICAgICBbY29sdW1uc109XCJ2ZXJpZmljYXRpb25UYWJsZUNvbHVtbnNcIlxuICAgICAgICAgIFtkYXRhXT1cImdldFRhYmxlRGF0YSgpXCJcbiAgICAgICAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICBbaXNFbXB0eVN0YXRlXT1cImlzRW1wdHlUYWJsZVwiXG4gICAgICAgICAgW2VtcHR5U3RhdGVDb25maWddPVwiZW1wdHlTdGF0ZUNvbmZpZ1wiXG4gICAgICAgICAgW3Nob3dTZWFyY2hCYXJdPVwiZmFsc2VcIlxuICAgICAgICAgIFtzaG93RmlsdGVyQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2hvd1NldHRpbmdzQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2hvd0F1dG9SZWZyZXNoQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2hvd090aGVyQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2hvd0ZpbHRlclBhbmVsXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2VydmVyU2lkZVBhZ2luYXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDwvY3FhLXRhYmxlLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRpbWluZyBCcmVha2Rvd24gLS0+XG4gICAgPGRpdiAqbmdJZj1cInRpbWluZ0JyZWFrZG93blwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLWdhcC01IGNxYS1wdC00IGNxYS1weC00IGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjOUNBM0FGXVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgICA8c3Bhbj5UaW1pbmcgYnJlYWtkb3duPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWRpYWxvZy1tdXRlZCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtM1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIEFwcCA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXVwiPnt7IGZvcm1hdER1cmF0aW9uKHRpbWluZ0JyZWFrZG93bi5hcHApIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMVwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxIDExXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0tMy44MTQ3ZS0wNiAxMC4zMlYtNy4xNTI1NmUtMDdIMC45NTk5OTZWMTAuMzJILTMuODE0N2UtMDZaXCIgZmlsbD1cIiNFNUU3RUJcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgVG9vbCA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXVwiPnt7IGZvcm1hdER1cmF0aW9uKHRpbWluZ0JyZWFrZG93bi50b29sKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==
@@ -2,4 +2,4 @@
2
2
  * Models and interfaces for execution screen step components
3
3
  */
4
4
  export {};
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLXN0ZXAubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2V4ZWN1dGlvbi1zdGVwLm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWxzIGFuZCBpbnRlcmZhY2VzIGZvciBleGVjdXRpb24gc2NyZWVuIHN0ZXAgY29tcG9uZW50c1xuICovXG5cbmV4cG9ydCB0eXBlIFN0ZXBTdGF0dXMgPSAnc3VjY2VzcycgfCAnZmFpbGVkJyB8ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdTVUNDRVNTJyB8ICdGQUlMRUQnIHwgJ1BFTkRJTkcnIHwgJ1JVTk5JTkcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWluZ0JyZWFrZG93biB7XG4gIGFwcDogbnVtYmVyOyAvLyBpbiBzZWNvbmRzXG4gIHRvb2w6IG51bWJlcjsgLy8gaW4gc2Vjb25kc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YlN0ZXAge1xuICBpZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXM6IFN0ZXBTdGF0dXM7XG4gIGR1cmF0aW9uOiBudW1iZXI7IC8vIGluIHNlY29uZHNcbiAgdGltZXN0YW1wPzogc3RyaW5nOyAvLyBvcHRpb25hbCB0aW1lc3RhbXAgbGlrZSBcIjAwOjEyXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb29wSXRlcmF0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZzsgLy8gZS5nLiwgXCJJdGVyIDIgKHByb2R1Y3Rpb24pXCJcbiAgc3RhdHVzOiBTdGVwU3RhdHVzO1xuICBzdWJTdGVwcz86IFN1YlN0ZXBbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25CcmFuY2gge1xuICB0eXBlOiAnaWYnIHwgJ2Vsc2UnIHwgJ2Vsc2UgaWYnO1xuICBsYWJlbDogc3RyaW5nOyAvLyBlLmcuLCBcIlByZW1pdW0gdXNlclwiIG9yIFwiRnJlZSB1c2VyXCJcbiAgZXhlY3V0ZWQ6IGJvb2xlYW47XG4gIHN1YlN0ZXBzPzogU3ViU3RlcFtdO1xuICBicmFuY2hTdGVwSWQ/OiBzdHJpbmcgfCBudW1iZXI7IC8vIElEIG9mIHRoZSBicmFuY2ggc3RlcCB0byBsb2FkIGNoaWxkcmVuIGZyb21cbiAgaXNJZkJyYW5jaD86IGJvb2xlYW47IC8vIFdoZXRoZXIgdGhpcyBpcyB0aGUgbWFpbiBJRiBicmFuY2hcbiAgYnJhbmNoU3RlcDogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmVlbnNob3REYXRhIHtcbiAgYmFzZWxpbmU/OiBzdHJpbmc7IC8vIFVSTCBvciBiYXNlNjRcbiAgY3VycmVudD86IHN0cmluZzsgLy8gVVJMIG9yIGJhc2U2NFxuICBkaWZmZXJlbmNlPzogc3RyaW5nOyAvLyBVUkwgb3IgYmFzZTY0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nRW50cnkge1xuICBsZXZlbDogJ2luZm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZURldGFpbHMge1xuICB0ZXN0U3RlcElkOiBzdHJpbmc7XG4gIGV4cGVjdGVkOiBzdHJpbmc7XG4gIGFjdHVhbDogc3RyaW5nO1xuICBmYWlsZWRBY3Rpb24/OiBzdHJpbmc7IC8vIFRoZSBhY3Rpb24gdGhhdCBmYWlsZWRcbiAgYWlGaXhBcHBsaWVkPzogYm9vbGVhbjtcbiAgYWlGaXhNZXNzYWdlPzogc3RyaW5nO1xuICBzY3JlZW5zaG90cz86IFNjcmVlbnNob3REYXRhO1xuICBsb2dzPzogTG9nRW50cnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlU3RlcENvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlc3RTdGVwUmVzdWx0SWQ6IHN0cmluZztcbiAgc3RlcE51bWJlcjogc3RyaW5nOyAvLyBlLmcuLCBcIjFcIiwgXCIyLjFcIiwgXCIzLjIuMVwiXG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN0YXR1czogU3RlcFN0YXR1cztcbiAgZHVyYXRpb246IG51bWJlcjsgLy8gdG90YWwgZHVyYXRpb24gaW4gc2Vjb25kc1xuICB0aW1pbmdCcmVha2Rvd24/OiBUaW1pbmdCcmVha2Rvd247XG4gIGV4cGFuZGVkPzogYm9vbGVhbjsgLy8gd2hldGhlciB0aGUgc3RlcCBpcyBleHBhbmRlZCBieSBkZWZhdWx0XG4gIGZhaWx1cmVEZXRhaWxzPzogRmFpbHVyZURldGFpbHM7XG4gIHJlYXNvbmluZz86IHN0cmluZ1tdO1xuICBjb25maWRlbmNlPzogc3RyaW5nO1xuICAvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZm9yIGxpdmUgZXhlY3V0aW9uIGFuZCBydW50aW1lIHVzZVxuICBzZWxlY3RlZEl0ZXJhdGlvbklkPzogc3RyaW5nOyAvLyB3aGljaCBpdGVyYXRpb24gdG8gZGlzcGxheVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGZIZWFsQW5hbHlzaXNEYXRhIHtcbiAgb3JpZ2luYWxMb2NhdG9yOiBzdHJpbmc7XG4gIGhlYWxlZExvY2F0b3I6IHN0cmluZztcbiAgY29uZmlkZW5jZTogbnVtYmVyOyAvLyAwLTEwMFxuICBoZWFsTWV0aG9kOiBzdHJpbmc7IC8vIGUuZy4sIFwiU2VtYW50aWMgQXR0cmlidXRlIE1hdGNoaW5nXCJcbn1cblxuZXhwb3J0IHR5cGUgU2VsZkhlYWxBY3Rpb24gPSAnYWNjZXB0JyB8ICdyZWplY3QnIHwgJ21vZGlmeS1hY2NlcHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2ljU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2Jhc2ljJztcbiAgc3ViU3RlcHM6IFN1YlN0ZXBbXTtcbiAgc2VsZkhlYWxBbmFseXNpcz86IFNlbGZIZWFsQW5hbHlzaXNEYXRhO1xuICBzZWxmSGVhbGVkPzogYm9vbGVhbjsgLy8gSW5kaWNhdGVzIGlmIHNlbGYtaGVhbGluZyB3YXMgYXBwbGllZFxuICBzZWxmSGVhbER1cmF0aW9uPzogbnVtYmVyOyAvLyBEdXJhdGlvbiBvZiBzZWxmLWhlYWxpbmcgcHJvY2Vzc1xuICBuZXN0ZWRTdGVwcz86IEV4ZWN1dGlvblN0ZXBDb25maWdbXTsgLy8gbmVzdGVkIGNoaWxkIHN0ZXBzIGZvciByZWN1cnNpdmUgcmVuZGVyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnc3RlcC1ncm91cCc7XG4gIGdyb3VwTmFtZTogc3RyaW5nOyAvLyBlLmcuLCBcIk5hdmlnYXRpb25cIiwgXCJDaGVja291dCBmbG93XCJcbiAgc3RlcHM6IEV4ZWN1dGlvblN0ZXBDb25maWdbXTsgLy8gbmVzdGVkIHN0ZXBzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9vcFN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdsb29wJztcbiAgbG9vcFR5cGU/OiAnZm9yJyB8ICd3aGlsZSc7XG4gIGl0ZXJhdGlvbnM6IExvb3BJdGVyYXRpb25bXTtcbiAgc2VsZWN0ZWRJdGVyYXRpb25JZD86IHN0cmluZzsgLy8gd2hpY2ggaXRlcmF0aW9uIHRvIGRpc3BsYXlcbiAgZGVmYXVsdEl0ZXJhdGlvbj86ICdmaXJzdCcgfCAnbGFzdCc7IC8vIGRlZmF1bHQgaXRlcmF0aW9uIHRvIHNob3dcbiAgbmVzdGVkU3RlcHM/OiBFeGVjdXRpb25TdGVwQ29uZmlnW107IC8vIHN0ZXBzIG5lc3RlZCB3aXRoaW4gdGhlIGxvb3BcbiAgc2hvd1ZpZXdBbGxJdGVyYXRpb25zPzogYm9vbGVhbjtcbiAgc3ViU3RlcHM/OiBTdWJTdGVwW107XG4gIGl0ZXJhdGlvbkRhdGE/OiBhbnk7IC8vIGRhdGEgZm9yIGVhY2ggaXRlcmF0aW9uIGluIGxpdmUgZXhlY3V0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2NvbmRpdGlvbic7XG4gIGNvbmRpdGlvblRleHQ6IHN0cmluZzsgLy8gZS5nLiwgXCJpZiB1c2VyIHR5cGUgaXMgJ1ByZW1pdW0nXCJcbiAgYnJhbmNoZXM6IENvbmRpdGlvbkJyYW5jaFtdO1xuICBuZXN0ZWRTdGVwcz86IEV4ZWN1dGlvblN0ZXBDb25maWdbXTsgLy8gbmVzdGVkIGNoaWxkIHN0ZXBzIGZvciByZWN1cnNpdmUgcmVuZGVyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2ZhaWxlZCc7XG4gIHN1YlN0ZXBzOiBTdWJTdGVwW107XG4gIGZhaWx1cmVEZXRhaWxzOiBGYWlsdXJlRGV0YWlscztcbiAgcmVhc29uaW5nPzogc3RyaW5nW107XG4gIGNvbmZpZGVuY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlBZ2VudEFjdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGU6ICdleHRyYWN0JyB8ICd2YWxpZGF0ZScgfCAnQUlfQUdFTlRfQUNUSU9OJyB8ICdUWVBFJyB8ICdDTElDSyc7XG4gIHN0YXR1czogU3RlcFN0YXR1cztcbiAgY29uZmlkZW5jZT86IG51bWJlcjsgLy8gMC0xMDBcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUFnZW50U3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2FpLWFnZW50JztcbiAgcHJvbXB0OiBzdHJpbmc7XG4gIG9wdGltaXplZFJ1bj86IGJvb2xlYW47XG4gIGFjdGlvbkNvdW50PzogbnVtYmVyO1xuICBhY3Rpb25zOiBBSUFnZW50QWN0aW9uW107XG4gIHNlbGVjdGVkVGFiPzogJ2FjdGlvbi10cmFjZScgfCAncGxhbm5lci10aW1lbGluZScgfCAnYWktcmVhc29uaW5nJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlBc3NlcnRpb24ge1xuICBpZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXM6ICdwYXNzZWQnIHwgJ2ZhaWxlZCc7XG4gIGV4cGVjdGVkOiBzdHJpbmc7XG4gIGFjdHVhbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdhcGknO1xuICBtZXRob2Q6IHN0cmluZzsgLy8gR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuICBlbmRwb2ludDogc3RyaW5nO1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHJlc3BvbnNlVGltZTogbnVtYmVyOyAvLyBpbiBtaWxsaXNlY29uZHNcbiAgcmVxdWVzdEJvZHk/OiBhbnk7XG4gIHJlc3BvbnNlQm9keT86IGFueTtcbiAgcmVxdWVzdEhlYWRlcnM/OiBhbnk7XG4gIHJlc3BvbnNlSGVhZGVycz86IGFueTtcbiAgYXNzZXJ0aW9ucz86IEFwaUFzc2VydGlvbltdO1xuICBpbml0aWFsQWN0aW9ucz86IFN1YlN0ZXBbXTsgLy8gQWN0aW9ucyBiZWZvcmUgdGhlIEFQSSBjYWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZURvd25sb2FkU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2ZpbGUtZG93bmxvYWQnO1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlVHlwZTogc3RyaW5nOyAvLyBQREYsIENTViwgZXRjLlxuICBmaWxlU2l6ZT86IHN0cmluZzsgLy8gZS5nLiwgXCIyLjQgTUJcIlxuICBmaWxlUGF0aD86IHN0cmluZztcbiAgZG93bmxvYWRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRGaWVsZCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjsgLy8gMC0xMDBcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZmljYXRpb25DaGVjayB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXR1czogJ3Bhc3MnIHwgJ2ZhaWwnO1xuICBleHBlY3RlZDogc3RyaW5nO1xuICBhY3R1YWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudFZlcmlmaWNhdGlvblN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdkb2N1bWVudC12ZXJpZmljYXRpb24nO1xuICBkb2N1bWVudFNjcmVlbnNob3Q/OiBzdHJpbmc7IC8vIFVSTCBvciBiYXNlNjRcbiAgZXh0cmFjdGVkRmllbGRzOiBFeHRyYWN0ZWRGaWVsZFtdO1xuICB2ZXJpZmljYXRpb25DaGVja3M6IFZlcmlmaWNhdGlvbkNoZWNrW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZVN1YlN0ZXAge1xuICBpZDogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7IC8vIFRleHQgZnJvbSBzb2NrZXRcbiAgaXNSdW5uaW5nOiBib29sZWFuOyAvLyB0cnVlID0gc2hvdyBsb2FkZXIsIGZhbHNlID0gc2hvdyBpY29uXG4gIGR1cmF0aW9uPzogbnVtYmVyOyAvLyBpbiBzZWNvbmRzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZUV4ZWN1dGlvblN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdsaXZlLWV4ZWN1dGlvbic7XG4gIHN1YlN0ZXBzOiBMaXZlU3ViU3RlcFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByZXJlcXVpc2l0ZUl0ZW0ge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nOyAvLyBlLmcuLCBcIlByZXJlcXVpc2l0ZSAxOiBMb2dpbiBmbG93XCJcbiAgc3RhdHVzOiBTdGVwU3RhdHVzO1xuICBkdXJhdGlvbjogbnVtYmVyOyAvLyBpbiBzZWNvbmRzXG4gIHN0ZXBDb25maWc/OiBFeGVjdXRpb25TdGVwQ29uZmlnOyAvLyBPcHRpb25hbDogZnVsbCBzdGVwIGNvbmZpZyB0byB2aWV3IGRldGFpbHNcbn1cblxuZXhwb3J0IHR5cGUgRXhlY3V0aW9uU3RlcENvbmZpZyA9XG4gIHwgQmFzaWNTdGVwQ29uZmlnXG4gIHwgU3RlcEdyb3VwQ29uZmlnXG4gIHwgTG9vcFN0ZXBDb25maWdcbiAgfCBDb25kaXRpb25TdGVwQ29uZmlnXG4gIHwgRmFpbGVkU3RlcENvbmZpZ1xuICB8IEFJQWdlbnRTdGVwQ29uZmlnXG4gIHwgQXBpU3RlcENvbmZpZ1xuICB8IEZpbGVEb3dubG9hZFN0ZXBDb25maWdcbiAgfCBEb2N1bWVudFZlcmlmaWNhdGlvblN0ZXBDb25maWdcbiAgfCBMaXZlRXhlY3V0aW9uU3RlcENvbmZpZztcbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLXN0ZXAubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2V4ZWN1dGlvbi1zdGVwLm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWxzIGFuZCBpbnRlcmZhY2VzIGZvciBleGVjdXRpb24gc2NyZWVuIHN0ZXAgY29tcG9uZW50c1xuICovXG5cbmV4cG9ydCB0eXBlIFN0ZXBTdGF0dXMgPSAnc3VjY2VzcycgfCAnZmFpbGVkJyB8ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdTVUNDRVNTJyB8ICdGQUlMRUQnIHwgJ1BFTkRJTkcnIHwgJ1JVTk5JTkcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWluZ0JyZWFrZG93biB7XG4gIGFwcDogbnVtYmVyOyAvLyBpbiBzZWNvbmRzXG4gIHRvb2w6IG51bWJlcjsgLy8gaW4gc2Vjb25kc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YlN0ZXAge1xuICBpZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXM6IFN0ZXBTdGF0dXM7XG4gIGR1cmF0aW9uOiBudW1iZXI7IC8vIGluIHNlY29uZHNcbiAgdGltZXN0YW1wPzogc3RyaW5nOyAvLyBvcHRpb25hbCB0aW1lc3RhbXAgbGlrZSBcIjAwOjEyXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb29wSXRlcmF0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZzsgLy8gZS5nLiwgXCJJdGVyIDIgKHByb2R1Y3Rpb24pXCJcbiAgc3RhdHVzOiBTdGVwU3RhdHVzO1xuICBzdWJTdGVwcz86IFN1YlN0ZXBbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25CcmFuY2gge1xuICB0eXBlOiAnaWYnIHwgJ2Vsc2UnIHwgJ2Vsc2UgaWYnO1xuICBsYWJlbDogc3RyaW5nOyAvLyBlLmcuLCBcIlByZW1pdW0gdXNlclwiIG9yIFwiRnJlZSB1c2VyXCJcbiAgZXhlY3V0ZWQ6IGJvb2xlYW47XG4gIHN1YlN0ZXBzPzogU3ViU3RlcFtdO1xuICBicmFuY2hTdGVwSWQ/OiBzdHJpbmcgfCBudW1iZXI7IC8vIElEIG9mIHRoZSBicmFuY2ggc3RlcCB0byBsb2FkIGNoaWxkcmVuIGZyb21cbiAgaXNJZkJyYW5jaD86IGJvb2xlYW47IC8vIFdoZXRoZXIgdGhpcyBpcyB0aGUgbWFpbiBJRiBicmFuY2hcbiAgYnJhbmNoU3RlcDogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmVlbnNob3REYXRhIHtcbiAgYmFzZWxpbmU/OiBzdHJpbmc7IC8vIFVSTCBvciBiYXNlNjRcbiAgY3VycmVudD86IHN0cmluZzsgLy8gVVJMIG9yIGJhc2U2NFxuICBkaWZmZXJlbmNlPzogc3RyaW5nOyAvLyBVUkwgb3IgYmFzZTY0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nRW50cnkge1xuICBsZXZlbDogJ2luZm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZURldGFpbHMge1xuICB0ZXN0U3RlcElkOiBzdHJpbmc7XG4gIGV4cGVjdGVkOiBzdHJpbmc7XG4gIGFjdHVhbDogc3RyaW5nO1xuICBmYWlsZWRBY3Rpb24/OiBzdHJpbmc7IC8vIFRoZSBhY3Rpb24gdGhhdCBmYWlsZWRcbiAgYWlGaXhBcHBsaWVkPzogYm9vbGVhbjtcbiAgYWlGaXhNZXNzYWdlPzogc3RyaW5nO1xuICBzY3JlZW5zaG90cz86IFNjcmVlbnNob3REYXRhO1xuICBsb2dzPzogTG9nRW50cnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlU3RlcENvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlc3RTdGVwUmVzdWx0SWQ6IHN0cmluZztcbiAgc3RlcE51bWJlcjogc3RyaW5nOyAvLyBlLmcuLCBcIjFcIiwgXCIyLjFcIiwgXCIzLjIuMVwiXG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN0YXR1czogU3RlcFN0YXR1cztcbiAgZHVyYXRpb246IG51bWJlcjsgLy8gdG90YWwgZHVyYXRpb24gaW4gc2Vjb25kc1xuICB0aW1pbmdCcmVha2Rvd24/OiBUaW1pbmdCcmVha2Rvd247XG4gIGV4cGFuZGVkPzogYm9vbGVhbjsgLy8gd2hldGhlciB0aGUgc3RlcCBpcyBleHBhbmRlZCBieSBkZWZhdWx0XG4gIGZhaWx1cmVEZXRhaWxzPzogRmFpbHVyZURldGFpbHM7XG4gIHJlYXNvbmluZz86IHN0cmluZ1tdO1xuICBjb25maWRlbmNlPzogc3RyaW5nO1xuICAvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZm9yIGxpdmUgZXhlY3V0aW9uIGFuZCBydW50aW1lIHVzZVxuICBzZWxlY3RlZEl0ZXJhdGlvbklkPzogc3RyaW5nOyAvLyB3aGljaCBpdGVyYXRpb24gdG8gZGlzcGxheVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGZIZWFsQW5hbHlzaXNEYXRhIHtcbiAgb3JpZ2luYWxMb2NhdG9yOiBzdHJpbmc7XG4gIGhlYWxlZExvY2F0b3I6IHN0cmluZztcbiAgY29uZmlkZW5jZTogbnVtYmVyOyAvLyAwLTEwMFxuICBoZWFsTWV0aG9kOiBzdHJpbmc7IC8vIGUuZy4sIFwiU2VtYW50aWMgQXR0cmlidXRlIE1hdGNoaW5nXCJcbn1cblxuZXhwb3J0IHR5cGUgU2VsZkhlYWxBY3Rpb24gPSAnYWNjZXB0JyB8ICdyZWplY3QnIHwgJ21vZGlmeS1hY2NlcHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2ljU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2Jhc2ljJztcbiAgc3ViU3RlcHM6IFN1YlN0ZXBbXTtcbiAgc2VsZkhlYWxBbmFseXNpcz86IFNlbGZIZWFsQW5hbHlzaXNEYXRhO1xuICBzZWxmSGVhbGVkPzogYm9vbGVhbjsgLy8gSW5kaWNhdGVzIGlmIHNlbGYtaGVhbGluZyB3YXMgYXBwbGllZFxuICBzZWxmSGVhbER1cmF0aW9uPzogbnVtYmVyOyAvLyBEdXJhdGlvbiBvZiBzZWxmLWhlYWxpbmcgcHJvY2Vzc1xuICBuZXN0ZWRTdGVwcz86IEV4ZWN1dGlvblN0ZXBDb25maWdbXTsgLy8gbmVzdGVkIGNoaWxkIHN0ZXBzIGZvciByZWN1cnNpdmUgcmVuZGVyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnc3RlcC1ncm91cCc7XG4gIGdyb3VwTmFtZTogc3RyaW5nOyAvLyBlLmcuLCBcIk5hdmlnYXRpb25cIiwgXCJDaGVja291dCBmbG93XCJcbiAgc3RlcHM6IEV4ZWN1dGlvblN0ZXBDb25maWdbXTsgLy8gbmVzdGVkIHN0ZXBzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9vcFN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdsb29wJztcbiAgbG9vcFR5cGU/OiAnZm9yJyB8ICd3aGlsZSc7XG4gIGl0ZXJhdGlvbnM6IExvb3BJdGVyYXRpb25bXTtcbiAgc2VsZWN0ZWRJdGVyYXRpb25JZD86IHN0cmluZzsgLy8gd2hpY2ggaXRlcmF0aW9uIHRvIGRpc3BsYXlcbiAgZGVmYXVsdEl0ZXJhdGlvbj86ICdmaXJzdCcgfCAnbGFzdCc7IC8vIGRlZmF1bHQgaXRlcmF0aW9uIHRvIHNob3dcbiAgbmVzdGVkU3RlcHM/OiBFeGVjdXRpb25TdGVwQ29uZmlnW107IC8vIHN0ZXBzIG5lc3RlZCB3aXRoaW4gdGhlIGxvb3BcbiAgc2hvd1ZpZXdBbGxJdGVyYXRpb25zPzogYm9vbGVhbjtcbiAgc3ViU3RlcHM/OiBTdWJTdGVwW107XG4gIGl0ZXJhdGlvbkRhdGE/OiBhbnk7IC8vIGRhdGEgZm9yIGVhY2ggaXRlcmF0aW9uIGluIGxpdmUgZXhlY3V0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2NvbmRpdGlvbic7XG4gIGNvbmRpdGlvblRleHQ6IHN0cmluZzsgLy8gZS5nLiwgXCJpZiB1c2VyIHR5cGUgaXMgJ1ByZW1pdW0nXCJcbiAgYnJhbmNoZXM6IENvbmRpdGlvbkJyYW5jaFtdO1xuICBuZXN0ZWRTdGVwcz86IEV4ZWN1dGlvblN0ZXBDb25maWdbXTsgLy8gbmVzdGVkIGNoaWxkIHN0ZXBzIGZvciByZWN1cnNpdmUgcmVuZGVyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2ZhaWxlZCc7XG4gIHN1YlN0ZXBzOiBTdWJTdGVwW107XG4gIGZhaWx1cmVEZXRhaWxzOiBGYWlsdXJlRGV0YWlscztcbiAgcmVhc29uaW5nPzogc3RyaW5nW107XG4gIGNvbmZpZGVuY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlBZ2VudEFjdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGU6ICdleHRyYWN0JyB8ICd2YWxpZGF0ZScgfCAnQUlfQUdFTlRfQUNUSU9OJyB8ICdUWVBFJyB8ICdDTElDSyc7XG4gIHN0YXR1czogU3RlcFN0YXR1cztcbiAgY29uZmlkZW5jZT86IG51bWJlcjsgLy8gMC0xMDBcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUFnZW50U3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2FpLWFnZW50JztcbiAgcHJvbXB0OiBzdHJpbmc7XG4gIG9wdGltaXplZFJ1bj86IGJvb2xlYW47XG4gIGFjdGlvbkNvdW50PzogbnVtYmVyO1xuICBhY3Rpb25zOiBBSUFnZW50QWN0aW9uW107XG4gIHNlbGVjdGVkVGFiPzogJ2FjdGlvbi10cmFjZScgfCAncGxhbm5lci10aW1lbGluZScgfCAnYWktcmVhc29uaW5nJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlBc3NlcnRpb24ge1xuICBpZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXM6ICdwYXNzZWQnIHwgJ2ZhaWxlZCc7XG4gIGV4cGVjdGVkOiBzdHJpbmc7XG4gIGFjdHVhbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdhcGknO1xuICBtZXRob2Q6IHN0cmluZzsgLy8gR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuICBlbmRwb2ludDogc3RyaW5nO1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHJlc3BvbnNlVGltZTogbnVtYmVyOyAvLyBpbiBtaWxsaXNlY29uZHNcbiAgcmVxdWVzdEJvZHk/OiBhbnk7XG4gIHJlc3BvbnNlQm9keT86IGFueTtcbiAgcmVxdWVzdEhlYWRlcnM/OiBhbnk7XG4gIHJlc3BvbnNlSGVhZGVycz86IGFueTtcbiAgYXNzZXJ0aW9ucz86IEFwaUFzc2VydGlvbltdO1xuICBpbml0aWFsQWN0aW9ucz86IFN1YlN0ZXBbXTsgLy8gQWN0aW9ucyBiZWZvcmUgdGhlIEFQSSBjYWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZURvd25sb2FkU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2ZpbGUtZG93bmxvYWQnO1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlVHlwZTogc3RyaW5nOyAvLyBQREYsIENTViwgZXRjLlxuICBmaWxlU2l6ZT86IHN0cmluZzsgLy8gZS5nLiwgXCIyLjQgTUJcIlxuICBmaWxlUGF0aD86IHN0cmluZztcbiAgZG93bmxvYWRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRGaWVsZCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjsgLy8gMC0xMDBcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZmljYXRpb25DaGVjayB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXR1czogJ3Bhc3MnIHwgJ2ZhaWwnO1xuICBleHBlY3RlZDogc3RyaW5nO1xuICBhY3R1YWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudFZlcmlmaWNhdGlvblN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdkb2N1bWVudC12ZXJpZmljYXRpb24nO1xuICBkb2N1bWVudFNjcmVlbnNob3Q/OiBzdHJpbmc7IC8vIFVSTCBvciBiYXNlNjRcbiAgZXh0cmFjdGVkRmllbGRzOiBFeHRyYWN0ZWRGaWVsZFtdO1xuICB2ZXJpZmljYXRpb25DaGVja3M6IFZlcmlmaWNhdGlvbkNoZWNrW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZVN1YlN0ZXAge1xuICBpZDogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7IC8vIFRleHQgZnJvbSBzb2NrZXRcbiAgaXNSdW5uaW5nOiBib29sZWFuOyAvLyB0cnVlID0gc2hvdyBsb2FkZXIsIGZhbHNlID0gc2hvdyBpY29uXG4gIGR1cmF0aW9uPzogbnVtYmVyOyAvLyBpbiBzZWNvbmRzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZUV4ZWN1dGlvblN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdsaXZlLWV4ZWN1dGlvbic7XG4gIHN1YlN0ZXBzOiBMaXZlU3ViU3RlcFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERiUXVlcnlSZXN1bHQge1xuICBkYXRhOiBhbnlbXTtcbiAgcXVlcnk6IHN0cmluZztcbiAgZXhlY3V0ZWRBdD86IHN0cmluZztcbiAgZHVyYXRpb24/OiBudW1iZXI7IC8vIGluIHNlY29uZHNcbiAgW2tleTogc3RyaW5nXTogYW55OyAvLyBGb3IgZHluYW1pYyBrZXlzIGxpa2UgXCJEZW1vX3VzZXJcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERiQXNzZXJ0aW9uUmVzdWx0IHtcbiAgdmFyaWFibGVOYW1lOiBzdHJpbmc7XG4gIGpzb25QYXRoOiBzdHJpbmc7XG4gIGV4cGVjdGVkVmFsdWU6IGFueTtcbiAgYWN0dWFsVmFsdWU6IGFueTtcbiAgdmVyaWZpY2F0aW9uVHlwZTogc3RyaW5nO1xuICBleHBlY3RlZFR5cGU6IHN0cmluZztcbiAgcGFzc2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERiVGVzdFJlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIHJlc3VsdHM6IHsgW2tleTogc3RyaW5nXTogRGJRdWVyeVJlc3VsdCB9O1xuICBhc3NlcnRpb25SZXN1bHRzOiBEYkFzc2VydGlvblJlc3VsdFtdO1xuICBhbGxBc3NlcnRpb25zUGFzc2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERiVmVyaWZpY2F0aW9uU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2RiLXZlcmlmaWNhdGlvbic7XG4gIGRiVGVzdFJlc3VsdDogRGJUZXN0UmVzdWx0O1xuICBkYkNvbmZpZz86IHtcbiAgICBuYW1lOiBzdHJpbmc7IC8vIEVudmlyb25tZW50IG5hbWVcbiAgICBkYlR5cGU6IHN0cmluZzsgLy8gRGF0YWJhc2UgdHlwZSAoTXlTUUwsIFNRTFNlcnZlciwgZXRjLilcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmVyZXF1aXNpdGVJdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZzsgLy8gZS5nLiwgXCJQcmVyZXF1aXNpdGUgMTogTG9naW4gZmxvd1wiXG4gIHN0YXR1czogU3RlcFN0YXR1cztcbiAgZHVyYXRpb246IG51bWJlcjsgLy8gaW4gc2Vjb25kc1xuICBzdGVwQ29uZmlnPzogRXhlY3V0aW9uU3RlcENvbmZpZzsgLy8gT3B0aW9uYWw6IGZ1bGwgc3RlcCBjb25maWcgdG8gdmlldyBkZXRhaWxzXG59XG5cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvblN0ZXBDb25maWcgPVxuICB8IEJhc2ljU3RlcENvbmZpZ1xuICB8IFN0ZXBHcm91cENvbmZpZ1xuICB8IExvb3BTdGVwQ29uZmlnXG4gIHwgQ29uZGl0aW9uU3RlcENvbmZpZ1xuICB8IEZhaWxlZFN0ZXBDb25maWdcbiAgfCBBSUFnZW50U3RlcENvbmZpZ1xuICB8IEFwaVN0ZXBDb25maWdcbiAgfCBGaWxlRG93bmxvYWRTdGVwQ29uZmlnXG4gIHwgRG9jdW1lbnRWZXJpZmljYXRpb25TdGVwQ29uZmlnXG4gIHwgTGl2ZUV4ZWN1dGlvblN0ZXBDb25maWdcbiAgfCBEYlZlcmlmaWNhdGlvblN0ZXBDb25maWc7XG4iXX0=