bways-report 0.1.9 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +506 -313
- package/esm2022/lib/core/config/bways-report-config.mjs +29 -32
- package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
- package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
- package/esm2022/lib/core/services/report-api-execution.service.mjs +33 -11
- package/esm2022/lib/core/services/report-overlay.service.mjs +79 -0
- package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
- package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
- package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
- package/esm2022/lib/core/utils/report-parameter.util.mjs +68 -15
- package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
- package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +16 -1
- package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +14 -2
- package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
- package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
- package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
- package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
- package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +13 -37
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +13 -50
- package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
- package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
- package/esm2022/lib/data-access/adapters/index.mjs +1 -1
- package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
- package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
- package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
- package/esm2022/lib/data-access/contracts/index.mjs +1 -1
- package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +53 -41
- package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +551 -123
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +39 -6
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +12 -6
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +11 -10
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +13 -6
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
- package/esm2022/lib/features/designer/designer.component.mjs +107 -69
- package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
- package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
- package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
- package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
- package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
- package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
- package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +5 -3
- package/esm2022/lib/features/routing/report-routes.mjs +6 -6
- package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +2 -2
- package/esm2022/lib/features/runtime/report-execution.service.mjs +52 -8
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +18 -21
- package/esm2022/lib/features/runtime/report-runtime.component.mjs +94 -71
- package/esm2022/lib/features/runtime/rpt-report.component.mjs +49 -41
- package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +21 -10
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +13 -1
- package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +15 -5
- package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +6 -6
- package/esm2022/lib/provide-reporting.mjs +9 -29
- package/fesm2022/bways-report.mjs +2072 -1088
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/config/bways-report-config.d.ts +14 -5
- package/lib/core/models/report-datasource.model.d.ts +5 -0
- package/lib/core/models/report-grid.model.d.ts +1 -1
- package/lib/core/services/report-overlay.service.d.ts +14 -0
- package/lib/core/services/report-session-context.service.d.ts +9 -0
- package/lib/core/tokens/designer-config.token.d.ts +4 -0
- package/lib/core/tokens/reporting-config.token.d.ts +4 -0
- package/lib/core/utils/report-endpoint.util.d.ts +12 -0
- package/lib/core/utils/report-parameter.util.d.ts +13 -1
- package/lib/core/utils/report-request-scope.d.ts +14 -0
- package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
- package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
- package/lib/data-access/adapters/endpoint-tokens.d.ts +4 -0
- package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
- package/lib/data-access/adapters/http-lookup.adapter.d.ts +1 -3
- package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
- package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
- package/lib/data-access/adapters/index.d.ts +1 -1
- package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
- package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
- package/lib/data-access/adapters/session-headers.d.ts +3 -0
- package/lib/data-access/contracts/index.d.ts +1 -0
- package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
- package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
- package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +5 -0
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -3
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +1 -0
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +1 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
- package/lib/features/designer/designer.component.d.ts +16 -2
- package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
- package/lib/features/designer/services/designer-config.service.d.ts +13 -0
- package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
- package/lib/features/persistence/services/report-store.service.d.ts +15 -1
- package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
- package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
- package/lib/features/runtime/report-execution.service.d.ts +3 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +3 -2
- package/lib/features/runtime/report-runtime.component.d.ts +1 -0
- package/lib/features/runtime/rpt-report.component.d.ts +5 -0
- package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
- package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +1 -2
- package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +0 -1
- package/package.json +9 -5
- package/styles/theme.css +184 -0
- package/third-party-notices/angular-cdk-LICENSE.txt +21 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DesignerEndpointsService } from '../../services/designer-endpoints.service';
|
|
1
2
|
import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, untracked, } from '@angular/core';
|
|
2
3
|
import { CommonModule } from '@angular/common';
|
|
3
4
|
import { FormsModule } from '@angular/forms';
|
|
@@ -14,6 +15,8 @@ import { ParameterBindingEditorComponent } from './parameter-binding-editor.comp
|
|
|
14
15
|
import * as i0 from "@angular/core";
|
|
15
16
|
import * as i1 from "@angular/forms";
|
|
16
17
|
export class PropertyEditorDatasourceComponent {
|
|
18
|
+
endpointScope = inject(DesignerEndpointsService, { optional: true });
|
|
19
|
+
entitiesSub;
|
|
17
20
|
discoveryAdapter = inject(ReportSchemaDiscoveryAdapter, { optional: true });
|
|
18
21
|
sessionService = inject(ReportSessionContextService, { optional: true });
|
|
19
22
|
designerState = inject(DesignerStateService, { optional: true });
|
|
@@ -144,10 +147,14 @@ export class PropertyEditorDatasourceComponent {
|
|
|
144
147
|
}));
|
|
145
148
|
});
|
|
146
149
|
constructor() {
|
|
150
|
+
effect(() => {
|
|
151
|
+
this.endpointScope?.revision();
|
|
152
|
+
this.loadEntities();
|
|
153
|
+
}, { allowSignalWrites: true });
|
|
147
154
|
effect(() => {
|
|
148
155
|
const entity = this.selectedEntity();
|
|
149
156
|
const type = this.currentSourceType();
|
|
150
|
-
const key = `${type}:${entity}`;
|
|
157
|
+
const key = `${type}:${entity}:${this.endpointScope?.revision() ?? 0}`;
|
|
151
158
|
if (entity && (type === 'table' || type === 'procedure')) {
|
|
152
159
|
if (this.lastLoadedKey !== key) {
|
|
153
160
|
this.lastLoadedKey = key;
|
|
@@ -163,10 +170,8 @@ export class PropertyEditorDatasourceComponent {
|
|
|
163
170
|
}
|
|
164
171
|
}, { allowSignalWrites: true });
|
|
165
172
|
}
|
|
166
|
-
ngOnInit() {
|
|
167
|
-
this.loadEntities();
|
|
168
|
-
}
|
|
169
173
|
ngOnDestroy() {
|
|
174
|
+
this.entitiesSub?.unsubscribe();
|
|
170
175
|
this.columnsSub?.unsubscribe();
|
|
171
176
|
this.paramsSub?.unsubscribe();
|
|
172
177
|
}
|
|
@@ -174,7 +179,8 @@ export class PropertyEditorDatasourceComponent {
|
|
|
174
179
|
if (!this.discoveryAdapter)
|
|
175
180
|
return;
|
|
176
181
|
this.isLoadingEntities.set(true);
|
|
177
|
-
this.
|
|
182
|
+
this.entitiesSub?.unsubscribe();
|
|
183
|
+
this.entitiesSub = this.discoveryAdapter.getEntities().subscribe({
|
|
178
184
|
next: (entities) => {
|
|
179
185
|
this.allEntities.set(entities);
|
|
180
186
|
this.isLoadingEntities.set(false);
|
|
@@ -616,4 +622,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
616
622
|
RptSearchableSelectComponent,
|
|
617
623
|
], changeDetection: ChangeDetectionStrategy.OnPush, template: " <div class=\"property-group\">\n <!-- 1. Header -->\n <div class=\"datasource-header-bar\">\n <div class=\"group-title\">Options Data Source</div>\n </div>\n\n <!-- 2. Source Type Segmented Switcher -->\n <div class=\"source-type-switcher\">\n <button\n type=\"button\"\n class=\"source-tab-btn\"\n [class.active]=\"currentSourceType() === 'table'\"\n (click)=\"setSourceType('table')\"\n >\n <rpt-icon name=\"table\" [size]=\"12\" />\n <span>Table / View</span>\n </button>\n <button\n type=\"button\"\n class=\"source-tab-btn\"\n [class.active]=\"currentSourceType() === 'procedure'\"\n (click)=\"setSourceType('procedure')\"\n >\n <rpt-icon name=\"code\" [size]=\"12\" />\n <span>Stored Proc</span>\n </button>\n <button\n type=\"button\"\n class=\"source-tab-btn\"\n [class.active]=\"currentSourceType() === 'api'\"\n (click)=\"setSourceType('api')\"\n >\n <rpt-icon name=\"globe\" [size]=\"12\" />\n <span>REST API</span>\n </button>\n <button\n type=\"button\"\n class=\"source-tab-btn\"\n [class.active]=\"currentSourceType() === 'static'\"\n (click)=\"setSourceType('static')\"\n >\n <rpt-icon name=\"edit\" [size]=\"12\" />\n <span>Static List</span>\n </button>\n </div>\n\n <!-- 3A. DATABASE TABLE / VIEW CONFIGURATION -->\n @if (currentSourceType() === 'table') {\n <div class=\"field-row\">\n <div class=\"field-label-row\">\n <label class=\"field-label\">Database Table / View</label>\n <button\n type=\"button\"\n class=\"btn-refresh-entities\"\n (click)=\"loadEntities()\"\n title=\"Refresh available tables from backend\"\n >\n <rpt-icon name=\"refresh\" [size]=\"11\" />\n <span>Refresh</span>\n </button>\n </div>\n <rpt-searchable-select\n [options]=\"tableSelectOptions()\"\n [ngModel]=\"selectedEntity()\"\n (ngModelChange)=\"onEntitySelected($event)\"\n [disabled]=\"isLoadingEntities()\"\n [loading]=\"isLoadingEntities()\"\n [loadingText]=\"'Loading tables from database...'\"\n [placeholder]=\"availableTables().length === 0 ? '-- No tables found (Click Refresh) --' : '-- Choose Data Table --'\"\n searchPlaceholder=\"Search tables & views...\"\n />\n </div>\n\n @if (selectedEntity()) {\n <!-- Display Field (Visible text) -->\n <div class=\"field-row\">\n <div class=\"field-label-row\">\n <label class=\"field-label\">Display Field (Visible Text)</label>\n </div>\n <rpt-searchable-select\n [options]=\"displayFieldSelectOptions()\"\n [ngModel]=\"selectedDisplayField()\"\n (ngModelChange)=\"onDisplayFieldChanged($event)\"\n placeholder=\"-- Select Display Column --\"\n searchPlaceholder=\"Search columns...\"\n />\n </div>\n\n <!-- Value Field (Stored key) -->\n <div class=\"field-row\">\n <div class=\"field-label-row\">\n <label class=\"field-label\">Value Field (Stored Key)</label>\n </div>\n <rpt-searchable-select\n [options]=\"valueFieldSelectOptions()\"\n [ngModel]=\"selectedValueField()\"\n (ngModelChange)=\"onValueFieldChanged($event)\"\n placeholder=\"-- Select Key Column --\"\n searchPlaceholder=\"Search columns...\"\n />\n </div>\n\n <!-- Cascading Dropdown Dependency -->\n <div class=\"field-row\">\n <label class=\"field-label\">Dependent On (Cascading Parent Field)</label>\n <rpt-searchable-select\n [options]=\"parentFieldSelectOptions()\"\n [ngModel]=\"selectedDependsOn()\"\n (ngModelChange)=\"onDependsOnChanged($event)\"\n placeholder=\"-- None (Independent) --\"\n searchPlaceholder=\"Search canvas fields...\"\n />\n <span class=\"field-hint\">\n Automatically re-queries options when parent field changes.\n </span>\n </div>\n }\n }\n\n <!-- 3B. STORED PROCEDURE CONFIGURATION -->\n @if (currentSourceType() === 'procedure') {\n <div class=\"field-row\">\n <div class=\"field-label-row\">\n <label class=\"field-label\">Stored Procedure</label>\n <button\n type=\"button\"\n class=\"btn-refresh-entities\"\n (click)=\"loadEntities()\"\n title=\"Refresh available procedures from backend\"\n >\n <rpt-icon name=\"refresh\" [size]=\"11\" />\n <span>Refresh</span>\n </button>\n </div>\n <rpt-searchable-select\n [options]=\"procedureSelectOptions()\"\n [ngModel]=\"selectedEntity()\"\n (ngModelChange)=\"onEntitySelected($event)\"\n [disabled]=\"isLoadingEntities()\"\n [loading]=\"isLoadingEntities()\"\n [loadingText]=\"'Loading stored procedures from database...'\"\n [placeholder]=\"availableProcedures().length === 0 ? '-- No stored procedures found (Click Refresh) --' : '-- Choose Data Query / SP --'\"\n searchPlaceholder=\"Search stored procedures...\"\n />\n </div>\n\n @if (selectedEntity()) {\n <!-- Visual Parameter Linkers -->\n @if (procedureParameters().length > 0) {\n <div class=\"sp-params-group\">\n <div class=\"params-header-row\">\n <label class=\"field-label\">Procedure Input Parameters</label>\n <button\n type=\"button\"\n class=\"btn-auto-params\"\n (click)=\"autoWireAllParameters()\"\n title=\"Auto-detect session parameters and add missing filter controls to the canvas\"\n >\n <rpt-icon name=\"check\" [size]=\"11\" />\n <span>Auto-Wire Canvas Inputs</span>\n </button>\n </div>\n\n @for (param of procedureParameters(); track param.name) {\n <rpt-parameter-binding-editor\n [param]=\"param\"\n [currentValue]=\"getParamValue(param.name)\"\n [allComponents]=\"allComponents()\"\n [currentComponentId]=\"comp().id\"\n [isAdvancedMode]=\"true\"\n (valueChange)=\"setParamValue(param.name, $event)\"\n (linkedFieldChange)=\"onParamLinkedFieldChange($event)\"\n />\n }\n </div>\n }\n\n <!-- Display Field (Visible text) -->\n <div class=\"field-row\">\n <div class=\"field-label-row\">\n <label class=\"field-label\">Display Field (from SP result)</label>\n </div>\n @if (entityColumns().length > 0) {\n <rpt-searchable-select\n [options]=\"displayFieldSelectOptions()\"\n [ngModel]=\"selectedDisplayField()\"\n (ngModelChange)=\"onDisplayFieldChanged($event)\"\n placeholder=\"-- Select Display Column --\"\n searchPlaceholder=\"Search columns...\"\n />\n } @else {\n <input\n type=\"text\"\n class=\"field-input\"\n placeholder=\"Column name (leave blank for auto)\"\n [ngModel]=\"selectedDisplayField()\"\n (ngModelChange)=\"onDisplayFieldChanged($event)\"\n />\n }\n </div>\n\n <!-- Value Field (Stored key) -->\n <div class=\"field-row\">\n <div class=\"field-label-row\">\n <label class=\"field-label\">Value Field (from SP result)</label>\n </div>\n @if (entityColumns().length > 0) {\n <rpt-searchable-select\n [options]=\"valueFieldSelectOptions()\"\n [ngModel]=\"selectedValueField()\"\n (ngModelChange)=\"onValueFieldChanged($event)\"\n placeholder=\"-- Select Key Column --\"\n searchPlaceholder=\"Search columns...\"\n />\n } @else {\n <input\n type=\"text\"\n class=\"field-input\"\n placeholder=\"Column name (leave blank for auto)\"\n [ngModel]=\"selectedValueField()\"\n (ngModelChange)=\"onValueFieldChanged($event)\"\n />\n }\n </div>\n }\n }\n\n <!-- 3B. REST API CONFIGURATION -->\n @if (currentSourceType() === 'api') {\n <div class=\"field-row\">\n <label class=\"field-label\">API Endpoint URL</label>\n @if (registeredApis().length > 0) {\n <div style=\"margin-bottom: 6px;\">\n <rpt-searchable-select\n [options]=\"registeredApis()\"\n [ngModel]=\"selectedApiEndpoint()\"\n (ngModelChange)=\"onApiEndpointSelected($event)\"\n placeholder=\"-- Select Registered Endpoint or type below --\"\n searchPlaceholder=\"Search registered APIs...\"\n />\n </div>\n }\n <input\n type=\"text\"\n class=\"field-input\"\n placeholder=\"e.g. /api/v1/customers or https://api.service.com/lookup\"\n [ngModel]=\"selectedApiEndpoint()\"\n (ngModelChange)=\"onApiEndpointSelected($event)\"\n />\n <span style=\"font-size: 11px; color: var(--rpt-color-text-muted, #64748b); margin-top: 4px; display: block;\">\n Direct HTTP call or backend proxy. Use <code>:param</code> for route tokens.\n </span>\n </div>\n\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 8px;\">\n <div class=\"field-row\" style=\"margin-bottom: 0;\">\n <label class=\"field-label\">HTTP Method</label>\n <select\n class=\"field-input\"\n [ngModel]=\"selectedApiMethod()\"\n (ngModelChange)=\"onApiMethodChanged($event)\"\n >\n <option value=\"GET\">GET</option>\n <option value=\"POST\">POST</option>\n </select>\n </div>\n <div class=\"field-row\" style=\"margin-bottom: 0;\">\n <label class=\"field-label\">Response Data Path</label>\n <input\n type=\"text\"\n class=\"field-input\"\n placeholder=\"e.g. data.items, rows\"\n [ngModel]=\"selectedDataPath()\"\n (ngModelChange)=\"onDataPathChanged($event)\"\n />\n </div>\n </div>\n\n <div class=\"field-row\" style=\"margin-bottom: 10px;\">\n <label style=\"display: flex; align-items: center; gap: 6px; font-size: 12px; cursor: pointer;\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedUseProxy()\"\n (change)=\"onUseProxyChanged($any($event.target).checked)\"\n />\n <span>Route through backend proxy</span>\n </label>\n </div>\n\n <div class=\"field-row\" style=\"margin-bottom: 12px;\">\n <button\n type=\"button\"\n class=\"btn-refresh-entities\"\n style=\"width: 100%; justify-content: center; padding: 6px 12px; background: var(--rpt-color-primary, #3b82f6); color: #fff; border-radius: 6px;\"\n [disabled]=\"!selectedApiEndpoint() || isTestingApi()\"\n (click)=\"testAndDetectApiColumns()\"\n >\n <rpt-icon name=\"refresh\" [size]=\"12\" />\n <span>{{ isTestingApi() ? 'Testing Connection...' : 'Test & Detect Fields' }}</span>\n </button>\n @if (apiTestStatus(); as status) {\n <div\n style=\"margin-top: 6px; font-size: 11px; padding: 4px 8px; border-radius: 4px;\"\n [style.background]=\"status.kind === 'success' ? '#ecfdf5' : '#fef2f2'\"\n [style.color]=\"status.kind === 'success' ? '#065f46' : '#991b1b'\"\n >\n {{ status.message }}\n </div>\n }\n </div>\n\n <!-- Display Field (Visible text) -->\n <div class=\"field-row\">\n <label class=\"field-label\">Display Field (Visible Text)</label>\n @if (entityColumns().length > 0) {\n <rpt-searchable-select\n [options]=\"displayFieldSelectOptions()\"\n [ngModel]=\"selectedDisplayField()\"\n (ngModelChange)=\"onDisplayFieldChanged($event)\"\n placeholder=\"-- Select Display Column --\"\n searchPlaceholder=\"Search fields...\"\n />\n } @else {\n <input\n type=\"text\"\n class=\"field-input\"\n placeholder=\"Field name in API item (e.g. name, title)\"\n [ngModel]=\"selectedDisplayField()\"\n (ngModelChange)=\"onDisplayFieldChanged($event)\"\n />\n }\n </div>\n\n <!-- Value Field (Stored key) -->\n <div class=\"field-row\">\n <label class=\"field-label\">Value Field (Stored Key)</label>\n @if (entityColumns().length > 0) {\n <rpt-searchable-select\n [options]=\"valueFieldSelectOptions()\"\n [ngModel]=\"selectedValueField()\"\n (ngModelChange)=\"onValueFieldChanged($event)\"\n placeholder=\"-- Select Key Column --\"\n searchPlaceholder=\"Search fields...\"\n />\n } @else {\n <input\n type=\"text\"\n class=\"field-input\"\n placeholder=\"Field name in API item (e.g. id, code)\"\n [ngModel]=\"selectedValueField()\"\n (ngModelChange)=\"onValueFieldChanged($event)\"\n />\n }\n </div>\n\n <!-- Cascading Dependency -->\n <div class=\"field-row\">\n <label class=\"field-label\">Dependent On (Cascading Parent Field)</label>\n <rpt-searchable-select\n [options]=\"parentFieldSelectOptions()\"\n [ngModel]=\"selectedDependsOn()\"\n (ngModelChange)=\"onDependsOnChanged($event)\"\n placeholder=\"-- Independent (Runs on load) --\"\n searchPlaceholder=\"Search canvas components...\"\n />\n </div>\n }\n\n <!-- 3C. STATIC OPTIONS EDITOR -->\n @if (currentSourceType() === 'static') {\n <div class=\"static-options-wrapper\">\n <div class=\"static-options-header\">\n <span class=\"field-label\">Static Options</span>\n <button type=\"button\" class=\"btn-add-option\" (click)=\"addStaticOption()\">\n <rpt-icon name=\"plus\" [size]=\"11\" />\n <span>Add Option</span>\n </button>\n </div>\n\n <div class=\"static-options-list\">\n @for (opt of staticOptions(); track $index) {\n <div class=\"static-option-row\">\n <input\n type=\"text\"\n class=\"field-input opt-key\"\n placeholder=\"Key\"\n [ngModel]=\"opt.key\"\n (ngModelChange)=\"updateStaticOption($index, 'key', $event)\"\n />\n <input\n type=\"text\"\n class=\"field-input opt-label\"\n placeholder=\"Label\"\n [ngModel]=\"opt.label\"\n (ngModelChange)=\"updateStaticOption($index, 'label', $event)\"\n />\n <button\n type=\"button\"\n class=\"btn-remove-option\"\n (click)=\"removeStaticOption($index)\"\n title=\"Remove option\"\n >\n <rpt-icon name=\"trash\" [size]=\"12\" />\n </button>\n </div>\n }\n </div>\n </div>\n }\n </div>", styles: [".property-group{display:flex;flex-direction:column;gap:12px}.group-title{font-size:.7rem;font-weight:700;color:var(--rpt-color-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em;line-height:1.2}.field-row{display:flex;flex-direction:column;gap:4px}.field-label-row{display:flex;align-items:center;justify-content:space-between}.field-badge-val{font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:9999px}.field-label{font-size:.7rem;font-weight:600;color:var(--rpt-color-text, #0f172a)}.field-input,.field-select,.field-textarea{width:100%;box-sizing:border-box;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-sm, 4px);padding:6px 10px;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text, #0f172a);background:#fff;outline:none;transition:all var(--rpt-transition-speed, .15s) ease}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button,.field-input[type=number]::-webkit-inner-spin-button,.field-input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number],.field-input[type=number]{-moz-appearance:textfield;appearance:textfield}.field-select{appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 10px center;background-size:13px 13px;padding-right:28px;cursor:pointer}.field-input:focus,.field-select:focus,.field-textarea:focus{border-color:var(--rpt-color-primary, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.checkbox-toggle{display:inline-flex;align-items:center;gap:8px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text, #0f172a);cursor:pointer}.preset-pill-group{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.preset-pill{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:2px 8px;font-size:.65rem;font-weight:600;color:#475569;cursor:pointer;transition:all .12s ease}.preset-pill:hover{background:#e2e8f0;color:#0f172a;border-color:#cbd5e1}.preset-pill-active{background:var(--rpt-color-primary, #2563eb)!important;color:#fff!important;border-color:var(--rpt-color-primary, #2563eb)!important}.preset-pill-reset{color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border-color:#bfdbfe}.preset-pill-reset:hover{background:#dbeafe;color:#1d4ed8;border-color:#93c5fd}\n", ".datasource-header-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.mode-toggle-pill{display:inline-flex;background:#e2e8f0;border-radius:12px;padding:2px;gap:2px}.pill-btn{border:none;background:transparent;padding:2px 8px;font-size:.65rem;font-weight:500;color:#64748b;border-radius:10px;cursor:pointer;transition:all .12s ease}.pill-btn:hover{color:#0f172a}.pill-btn.active{background:#fff;color:var(--rpt-color-primary, #2563eb);font-weight:700;box-shadow:0 1px 2px #00000014}.datasource-guidance-card{display:flex;align-items:center;gap:6px;background:#eff6ff;border:1px solid #bfdbfe;color:#1e40af;font-size:.675rem;padding:6px 8px;border-radius:6px;margin-bottom:8px;line-height:1.35}.source-type-switcher{display:flex;background:#f1f5f9;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:6px;padding:2px;gap:2px;margin-bottom:6px}.source-tab-btn{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:6px 4px;font-size:.7rem;font-weight:600;color:var(--rpt-color-text-muted, #64748b);background:transparent;border:none;border-radius:4px;cursor:pointer;transition:all .12s ease}.source-tab-btn:hover{color:var(--rpt-color-text, #0f172a)}.source-tab-btn.active{background:#fff;color:var(--rpt-color-primary, #2563eb);box-shadow:0 1px 2px #0000000d}.btn-refresh-entities{display:inline-flex;align-items:center;gap:4px;border:none;background:transparent;color:var(--rpt-color-primary, #2563eb);font-size:.65rem;font-weight:600;cursor:pointer;padding:0}.btn-refresh-entities:hover{text-decoration:underline}.btn-auto-params{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;font-size:.65rem;font-weight:600;color:#2563eb;background:#eff6ff;border:1px solid #bfdbfe;border-radius:4px;cursor:pointer;transition:all .12s ease}.btn-auto-params:hover{background:#2563eb;color:#fff}.auto-badge{font-size:.62rem;font-weight:600;background:#dcfce7;color:#166534;padding:1px 5px;border-radius:4px}.field-hint{font-size:.65rem;color:var(--rpt-color-text-muted, #94a3b8);margin-top:2px}.sp-params-group{display:flex;flex-direction:column;gap:8px;background:transparent;padding:0;border:none;margin-bottom:12px}.params-header-row{display:flex;align-items:center;justify-content:space-between;padding-bottom:4px;border-bottom:1px solid #e2e8f0;margin-bottom:2px}.params-hint{font-size:.64rem;color:#64748b;font-style:italic}.static-options-wrapper{display:flex;flex-direction:column;gap:8px}.static-options-header{display:flex;align-items:center;justify-content:space-between}.btn-add-option{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;border-radius:4px;padding:3px 8px;font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);cursor:pointer;transition:all .12s ease}.btn-add-option:hover{background:#eff6ff}.static-options-list{display:flex;flex-direction:column;gap:6px}.static-option-row{display:flex;align-items:center;gap:6px}.opt-key{flex:1}.opt-label{flex:1.5}.btn-remove-option{width:24px;height:24px;border:none;background:transparent;color:#94a3b8;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;padding:0;transition:all .12s ease}.btn-remove-option:hover{background:#fee2e2;color:#ef4444}.field-input{width:100%;padding:6px 8px;font-size:.75rem;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-surface, #ffffff);color:var(--rpt-color-text, #0f172a);box-sizing:border-box;outline:none;transition:border-color .12s ease}.field-input:focus{border-color:var(--rpt-color-primary, #2563eb)}\n"] }]
|
|
618
624
|
}], ctorParameters: () => [] });
|
|
619
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZWRpdG9yLWRhdGFzb3VyY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvY29tcG9uZW50cy9wcm9wZXJ0eS1lZGl0b3IvcHJvcGVydHktZWRpdG9yLWRhdGFzb3VyY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvY29tcG9uZW50cy9wcm9wZXJ0eS1lZGl0b3IvcHJvcGVydHktZWRpdG9yLWRhdGFzb3VyY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPN0MsT0FBTyxFQUlMLDRCQUE0QixHQUM3QixNQUFNLDZEQUE2RCxDQUFDO0FBQ3JFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixHQUNuQixNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN2RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrREFBa0QsQ0FB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LEdBQVc7UUFDbkUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFhO1FBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7d0dBeHBCVSxpQ0FBaUM7NEZBQWpDLGlDQUFpQywrYkMvRDlDLHE0Z0JBeVpVLDZ6TURwV04sWUFBWSw4QkFDWixXQUFXLDBnQ0FDWCxnQkFBZ0IsdUdBQ2hCLCtCQUErQixvTkFDL0IsNEJBQTRCOzs0RkFNbkIsaUNBQWlDO2tCQWQ3QyxTQUFTOytCQUNFLGdDQUFnQyxjQUM5QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsK0JBQStCO3dCQUMvQiw0QkFBNEI7cUJBQzdCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDb21wb25lbnREYXRhU291cmNlRGVmaW5pdGlvbixcbiAgRHJvcGRvd25Tb3VyY2VUeXBlLFxuICBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uLFxufSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7XG4gIERhdGFiYXNlRW50aXR5TWV0YWRhdGEsXG4gIEVudGl0eUNvbHVtbk1ldGFkYXRhLFxuICBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YSxcbiAgUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3NjaGVtYS1kaXNjb3ZlcnkuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgZGV0ZWN0RGVmYXVsdERpc3BsYXlGaWVsZCxcbiAgZGV0ZWN0RGVmYXVsdFZhbHVlRmllbGQsXG4gIGh1bWFuaXplSWRlbnRpZmllcixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9pZGVudGlmaWVyLWh1bWFuaXplcic7XG5pbXBvcnQgeyB0b0ZpZWxkS2V5IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9yZXBvcnQtcGFyYW1ldGVyLnV0aWwnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YURpc2NvdmVyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1kYXRhLWRpc2NvdmVyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9lbmRwb2ludC10b2tlbnMnO1xuaW1wb3J0IHsgRGVzaWduZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kZXNpZ25lci1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgUnB0U2VhcmNoYWJsZVNlbGVjdENvbXBvbmVudCxcbiAgU2VhcmNoYWJsZVNlbGVjdE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzJztcbmltcG9ydCB7IFBhcmFtZXRlckJpbmRpbmdFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL3BhcmFtZXRlci1iaW5kaW5nLWVkaXRvci5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY09wdGlvbkl0ZW0ge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LXByb3BlcnR5LWVkaXRvci1kYXRhc291cmNlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBScHRJY29uQ29tcG9uZW50LFxuICAgIFBhcmFtZXRlckJpbmRpbmdFZGl0b3JDb21wb25lbnQsXG4gICAgUnB0U2VhcmNoYWJsZVNlbGVjdENvbXBvbmVudCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9wZXJ0eS1lZGl0b3ItZGF0YXNvdXJjZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb3BlcnR5LWVkaXRvci5jb21tb24uY3NzJywgJy4vcHJvcGVydHktZWRpdG9yLWRhdGFzb3VyY2UuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUVkaXRvckRhdGFzb3VyY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzY292ZXJ5QWRhcHRlciA9IGluamVjdChSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXNpZ25lclN0YXRlID0gaW5qZWN0KERlc2lnbmVyU3RhdGVTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFEaXNjb3ZlcnkgPSBpbmplY3QoUmVwb3J0RGF0YURpc2NvdmVyeVNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzID0gaW5qZWN0KEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSBsYXN0TG9hZGVkS2V5ID0gJyc7XG4gIHByaXZhdGUgY29sdW1uc1N1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwYXJhbXNTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgcmVhZG9ubHkgY29tcCA9IGlucHV0LnJlcXVpcmVkPFJlcG9ydENvbXBvbmVudERlZmluaXRpb24+KCk7XG4gIHJlYWRvbmx5IGFsbENvbXBvbmVudHMgPSBpbnB1dDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uW10+KFtdKTtcblxuICByZWFkb25seSB1cGRhdGVEYXRhU291cmNlID0gb3V0cHV0PENvbXBvbmVudERhdGFTb3VyY2VEZWZpbml0aW9uPigpO1xuICByZWFkb25seSB1cGRhdGVQcm9wZXJ0eSA9IG91dHB1dDx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9PigpO1xuXG4gIHJlYWRvbmx5IGlzQWR2YW5jZWRNb2RlID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBpc0xvYWRpbmdFbnRpdGllcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzVGVzdGluZ0FwaSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGFwaVRlc3RTdGF0dXMgPSBzaWduYWw8eyBtZXNzYWdlOiBzdHJpbmc7IGtpbmQ6ICdzdWNjZXNzJyB8ICdlcnJvcicgfSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGFsbEVudGl0aWVzID0gc2lnbmFsPERhdGFiYXNlRW50aXR5TWV0YWRhdGFbXT4oW10pO1xuICByZWFkb25seSBlbnRpdHlDb2x1bW5zID0gc2lnbmFsPEVudGl0eUNvbHVtbk1ldGFkYXRhW10+KFtdKTtcbiAgcmVhZG9ubHkgcHJvY2VkdXJlUGFyYW1ldGVycyA9IHNpZ25hbDxQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdPihbXSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNvdXJjZVR5cGUgPSBjb21wdXRlZDxEcm9wZG93blNvdXJjZVR5cGU+KCgpID0+IHtcbiAgICBjb25zdCBkcyA9IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U7XG4gICAgaWYgKGRzPy5zb3VyY2VUeXBlKSByZXR1cm4gZHMuc291cmNlVHlwZTtcbiAgICBpZiAoZHM/LmFwaUVuZHBvaW50KSByZXR1cm4gJ2FwaSc7XG4gICAgaWYgKGRzPy5lbnRpdHlOYW1lKSByZXR1cm4gJ3RhYmxlJztcbiAgICByZXR1cm4gJ3N0YXRpYyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkRW50aXR5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8uZW50aXR5TmFtZSB8fCAnJyk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkQXBpRW5kcG9pbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy5hcGlFbmRwb2ludCB8fCAnJyk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkQXBpTWV0aG9kID0gY29tcHV0ZWQ8J0dFVCcgfCAnUE9TVCc+KCgpID0+IHtcbiAgICBjb25zdCBtID0gKHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LmFwaU1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gbSA9PT0gJ1BPU1QnID8gJ1BPU1QnIDogJ0dFVCc7XG4gIH0pO1xuICByZWFkb25seSBzZWxlY3RlZERhdGFQYXRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8uZGF0YVBhdGggfHwgJycpO1xuICByZWFkb25seSBzZWxlY3RlZFVzZVByb3h5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8udXNlUHJveHkgPT09IHRydWUpO1xuXG4gIHJlYWRvbmx5IHJlZ2lzdGVyZWRBcGlzID0gY29tcHV0ZWQ8U2VhcmNoYWJsZVNlbGVjdE9wdGlvbltdPigoKSA9PiB7XG4gICAgY29uc3QgYXBpcyA9IHRoaXMuZW5kcG9pbnRzPy5hcGlFbmRwb2ludHMgfHwgW107XG4gICAgcmV0dXJuIGFwaXMubWFwKChhcGkpID0+IHtcbiAgICAgIGNvbnN0IGVwID0gYXBpLmVuZHBvaW50IHx8IGFwaS51cmwgfHwgJyc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogZXAsXG4gICAgICAgIGxhYmVsOiBhcGkubmFtZSB8fCBlcCxcbiAgICAgICAgc3VibGFiZWw6IGAke2FwaS5tZXRob2QgfHwgJ0dFVCd9ICR7ZXB9YCxcbiAgICAgICAgYmFkZ2U6IGFwaS5jYXRlZ29yeSB8fCAnQVBJJyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkVmFsdWVGaWVsZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LnZhbHVlRmllbGQgfHwgJycpO1xuICByZWFkb25seSBzZWxlY3RlZERpc3BsYXlGaWVsZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LmRpc3BsYXlGaWVsZCB8fCAnJyk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRGVwZW5kc09uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8uZGVwZW5kc09uPy5bMF0gfHwgJycpO1xuXG4gIHJlYWRvbmx5IGF2YWlsYWJsZVRhYmxlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbnRpdGllcygpXG4gICAgICAuZmlsdGVyKChlKSA9PiB7XG4gICAgICAgIGNvbnN0IHQgPSAoZS50eXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gdCA9PT0gJ3RhYmxlJyB8fCB0ID09PSAndmlldyc7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZSkgPT4gKHtcbiAgICAgICAgLi4uZSxcbiAgICAgICAgZGlzcGxheU5hbWU6IGUuZnJpZW5kbHlOYW1lIHx8IGh1bWFuaXplSWRlbnRpZmllcihlLm5hbWUpLFxuICAgICAgfSkpO1xuICB9KTtcblxuICByZWFkb25seSBhdmFpbGFibGVQcm9jZWR1cmVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbEVudGl0aWVzKClcbiAgICAgIC5maWx0ZXIoKGUpID0+IHtcbiAgICAgICAgY29uc3QgdCA9IChlLnR5cGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB0ID09PSAnc3RvcmVkX3Byb2NlZHVyZScgfHwgdCA9PT0gJ3Byb2NlZHVyZScgfHwgdC5pbmNsdWRlcygncHJvY2VkdXJlJyk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZSkgPT4gKHtcbiAgICAgICAgLi4uZSxcbiAgICAgICAgZGlzcGxheU5hbWU6IGUuZnJpZW5kbHlOYW1lIHx8IGh1bWFuaXplSWRlbnRpZmllcihlLm5hbWUpLFxuICAgICAgfSkpO1xuICB9KTtcblxuICByZWFkb25seSBhdmFpbGFibGVQYXJlbnRGaWVsZHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsQ29tcG9uZW50cygpLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gdGhpcy5jb21wKCkuaWQpO1xuICB9KTtcblxuICByZWFkb25seSBzdGF0aWNPcHRpb25zID0gY29tcHV0ZWQ8U3RhdGljT3B0aW9uSXRlbVtdPigoKSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuY29tcCgpLnByb3BlcnRpZXM/Llsnb3B0aW9ucyddO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMpKSB7XG4gICAgICByZXR1cm4gb3B0cy5tYXAoKG8pID0+ICh7IGtleTogU3RyaW5nKG8ua2V5ID8/IG8udmFsdWUgPz8gJycpLCBsYWJlbDogU3RyaW5nKG8ubGFiZWwgPz8gJycpIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHsga2V5OiAnMScsIGxhYmVsOiAnT3B0aW9uIDEnIH0sXG4gICAgICB7IGtleTogJzInLCBsYWJlbDogJ09wdGlvbiAyJyB9LFxuICAgIF07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHByb2NlZHVyZVNlbGVjdE9wdGlvbnMgPSBjb21wdXRlZDxTZWFyY2hhYmxlU2VsZWN0T3B0aW9uW10+KCgpID0+IHtcbiAgICBjb25zdCBpc0FkdiA9IHRoaXMuaXNBZHZhbmNlZE1vZGUoKTtcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVQcm9jZWR1cmVzKCkubWFwKChzcCkgPT4gKHtcbiAgICAgIHZhbHVlOiBzcC5uYW1lLFxuICAgICAgbGFiZWw6IGlzQWR2ID8gYCR7c3Auc2NoZW1hIHx8ICdkYm8nfS4ke3NwLm5hbWV9YCA6IHNwLmRpc3BsYXlOYW1lLFxuICAgICAgc3VibGFiZWw6IGlzQWR2ID8gKHNwLmRpc3BsYXlOYW1lICE9PSBzcC5uYW1lID8gc3AuZGlzcGxheU5hbWUgOiB1bmRlZmluZWQpIDogYCR7c3Auc2NoZW1hIHx8ICdkYm8nfS4ke3NwLm5hbWV9YCxcbiAgICAgIGJhZGdlOiBzcC5jYXRlZ29yeSB8fCAnU1AnLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdGFibGVTZWxlY3RPcHRpb25zID0gY29tcHV0ZWQ8U2VhcmNoYWJsZVNlbGVjdE9wdGlvbltdPigoKSA9PiB7XG4gICAgY29uc3QgaXNBZHYgPSB0aGlzLmlzQWR2YW5jZWRNb2RlKCk7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlVGFibGVzKCkubWFwKCh0YmwpID0+ICh7XG4gICAgICB2YWx1ZTogdGJsLm5hbWUsXG4gICAgICBsYWJlbDogaXNBZHYgPyBgJHt0Ymwuc2NoZW1hIHx8ICdkYm8nfS4ke3RibC5uYW1lfWAgOiB0YmwuZGlzcGxheU5hbWUsXG4gICAgICBzdWJsYWJlbDogaXNBZHYgPyAodGJsLmRpc3BsYXlOYW1lICE9PSB0YmwubmFtZSA/IHRibC5kaXNwbGF5TmFtZSA6IHVuZGVmaW5lZCkgOiBgJHt0Ymwuc2NoZW1hIHx8ICdkYm8nfS4ke3RibC5uYW1lfWAsXG4gICAgICBiYWRnZTogdGJsLnR5cGUgfHwgJ1RhYmxlJyxcbiAgICB9KSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGRpc3BsYXlGaWVsZFNlbGVjdE9wdGlvbnMgPSBjb21wdXRlZDxTZWFyY2hhYmxlU2VsZWN0T3B0aW9uW10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdHlDb2x1bW5zKCkubWFwKChjb2wpID0+ICh7XG4gICAgICB2YWx1ZTogY29sLmZpZWxkLFxuICAgICAgbGFiZWw6IGNvbC5sYWJlbCB8fCBjb2wuZmllbGQsXG4gICAgICBzdWJsYWJlbDogY29sLmZpZWxkICE9PSBjb2wubGFiZWwgPyBjb2wuZmllbGQgOiB1bmRlZmluZWQsXG4gICAgICBiYWRnZTogY29sLmRhdGFUeXBlIHx8IHVuZGVmaW5lZCxcbiAgICB9KSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHZhbHVlRmllbGRTZWxlY3RPcHRpb25zID0gY29tcHV0ZWQ8U2VhcmNoYWJsZVNlbGVjdE9wdGlvbltdPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5Q29sdW1ucygpLm1hcCgoY29sKSA9PiAoe1xuICAgICAgdmFsdWU6IGNvbC5maWVsZCxcbiAgICAgIGxhYmVsOiBjb2wubGFiZWwgfHwgY29sLmZpZWxkLFxuICAgICAgc3VibGFiZWw6IGNvbC5maWVsZCAhPT0gY29sLmxhYmVsID8gY29sLmZpZWxkIDogdW5kZWZpbmVkLFxuICAgICAgYmFkZ2U6IGNvbC5kYXRhVHlwZSB8fCB1bmRlZmluZWQsXG4gICAgfSkpO1xuICB9KTtcblxuICByZWFkb25seSBwYXJlbnRGaWVsZFNlbGVjdE9wdGlvbnMgPSBjb21wdXRlZDxTZWFyY2hhYmxlU2VsZWN0T3B0aW9uW10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVQYXJlbnRGaWVsZHMoKS5tYXAoKGMpID0+ICh7XG4gICAgICB2YWx1ZTogYy5rZXkgfHwgYy5pZCxcbiAgICAgIGxhYmVsOiBjLmxhYmVsIHx8IGMua2V5IHx8IGMuaWQsXG4gICAgICBzdWJsYWJlbDogYy5rZXkgfHwgYy5pZCxcbiAgICAgIGJhZGdlOiBjLnR5cGUsXG4gICAgfSkpO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuc2VsZWN0ZWRFbnRpdHkoKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuY3VycmVudFNvdXJjZVR5cGUoKTtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7dHlwZX06JHtlbnRpdHl9YDtcbiAgICAgICAgaWYgKGVudGl0eSAmJiAodHlwZSA9PT0gJ3RhYmxlJyB8fCB0eXBlID09PSAncHJvY2VkdXJlJykpIHtcbiAgICAgICAgICBpZiAodGhpcy5sYXN0TG9hZGVkS2V5ICE9PSBrZXkpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdExvYWRlZEtleSA9IGtleTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmxvYWRFbnRpdHlEZXRhaWxzKGVudGl0eSwgdHlwZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxhc3RMb2FkZWRLZXkgPSAnJztcbiAgICAgICAgICB0aGlzLmNvbHVtbnNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5wYXJhbXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5lbnRpdHlDb2x1bW5zLnNldChbXSk7XG4gICAgICAgICAgdGhpcy5wcm9jZWR1cmVQYXJhbWV0ZXJzLnNldChbXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRW50aXRpZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnBhcmFtc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGxvYWRFbnRpdGllcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzY292ZXJ5QWRhcHRlcikgcmV0dXJuO1xuICAgIHRoaXMuaXNMb2FkaW5nRW50aXRpZXMuc2V0KHRydWUpO1xuICAgIHRoaXMuZGlzY292ZXJ5QWRhcHRlci5nZXRFbnRpdGllcygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZW50aXRpZXMpID0+IHtcbiAgICAgICAgdGhpcy5hbGxFbnRpdGllcy5zZXQoZW50aXRpZXMpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ0VudGl0aWVzLnNldChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1Byb3BlcnR5RWRpdG9yRGF0YXNvdXJjZV0gRmFpbGVkIHRvIGxvYWQgZW50aXRpZXM6JywgZXJyKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdFbnRpdGllcy5zZXQoZmFsc2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRFbnRpdHlEZXRhaWxzKGVudGl0eU5hbWU6IHN0cmluZywgdHlwZTogRHJvcGRvd25Tb3VyY2VUeXBlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2NvdmVyeUFkYXB0ZXIpIHJldHVybjtcblxuICAgIHRoaXMuY29sdW1uc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnBhcmFtc1N1Yj8udW5zdWJzY3JpYmUoKTtcblxuICAgIGNvbnN0IGRiVHlwZSA9IHR5cGUgPT09ICdwcm9jZWR1cmUnID8gJ3N0b3JlZF9wcm9jZWR1cmUnIDogJ3RhYmxlJztcbiAgICB0aGlzLmNvbHVtbnNTdWIgPSB0aGlzLmRpc2NvdmVyeUFkYXB0ZXIuZ2V0Q29sdW1ucyhlbnRpdHlOYW1lLCAnZGJvJywgZGJUeXBlKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGNvbHMpID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNvbHMgPSBjb2xzIHx8IFtdO1xuICAgICAgICB0aGlzLmVudGl0eUNvbHVtbnMuc2V0KHNhZmVDb2xzKTtcblxuICAgICAgICAvLyBBdXRvLWRldGVjdCBkZWZhdWx0IHZhbHVlRmllbGQgYW5kIGRpc3BsYXlGaWVsZCBpZiBub3QgeWV0IHNldFxuICAgICAgICBjb25zdCBjdXJyZW50VmFsID0gdGhpcy5zZWxlY3RlZFZhbHVlRmllbGQoKTtcbiAgICAgICAgY29uc3QgY3VycmVudERpc3AgPSB0aGlzLnNlbGVjdGVkRGlzcGxheUZpZWxkKCk7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3RlZFZhbCA9IGRldGVjdERlZmF1bHRWYWx1ZUZpZWxkKHNhZmVDb2xzKTtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGVkRGlzcCA9IGRldGVjdERlZmF1bHREaXNwbGF5RmllbGQoc2FmZUNvbHMpO1xuXG4gICAgICAgIGNvbnN0IG5leHRWYWwgPSBjdXJyZW50VmFsIHx8IHN1Z2dlc3RlZFZhbCB8fCBzYWZlQ29sc1swXT8uZmllbGQgfHwgJyc7XG4gICAgICAgIGNvbnN0IG5leHREaXNwID0gY3VycmVudERpc3AgfHwgc3VnZ2VzdGVkRGlzcCB8fCBzYWZlQ29sc1sxXT8uZmllbGQgfHwgc2FmZUNvbHNbMF0/LmZpZWxkIHx8ICcnO1xuXG4gICAgICAgIC8vIE9ubHkgZW1pdCBpZiB3ZSBhY3R1YWxseSBkZXRlY3RlZCBhIG5vbi1lbXB0eSBmaWVsZCB0aGF0IGRpZmZlcnMgZnJvbSBjdXJyZW50IHN0YXRlXG4gICAgICAgIGlmICgobmV4dFZhbCAhPT0gY3VycmVudFZhbCB8fCBuZXh0RGlzcCAhPT0gY3VycmVudERpc3ApICYmIChuZXh0VmFsIHx8IG5leHREaXNwKSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRGF0YVNvdXJjZS5lbWl0KHtcbiAgICAgICAgICAgIC4uLih0aGlzLmNvbXAoKS5kYXRhU291cmNlID8/IHsgZGlzcGxheUZpZWxkOiAnJywgdmFsdWVGaWVsZDogJycgfSksXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiB0eXBlLFxuICAgICAgICAgICAgZW50aXR5TmFtZSxcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IG5leHRWYWwsXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IG5leHREaXNwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoYFtQcm9wZXJ0eUVkaXRvckRhdGFzb3VyY2VdIEZhaWxlZCB0byBsb2FkIGNvbHVtbnMgZm9yICR7ZW50aXR5TmFtZX06YCwgZXJyKSxcbiAgICB9KTtcblxuICAgIGlmICh0eXBlID09PSAncHJvY2VkdXJlJykge1xuICAgICAgdGhpcy5wYXJhbXNTdWIgPSB0aGlzLmRpc2NvdmVyeUFkYXB0ZXIuZ2V0UGFyYW1ldGVycyhlbnRpdHlOYW1lLCAnZGJvJykuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHBhcmFtcykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNhZmVQYXJhbXMgPSBwYXJhbXMgfHwgW107XG4gICAgICAgICAgdGhpcy5wcm9jZWR1cmVQYXJhbWV0ZXJzLnNldChzYWZlUGFyYW1zKTtcbiAgICAgICAgICAvLyBPbmx5IGF1dG8tbGluayB0byBleGlzdGluZyBzZXNzaW9uIG9yIGV4aXN0aW5nIGNhbnZhcyBmaWVsZHMuXG4gICAgICAgICAgLy8gTkVWRVIgbXV0YXRlIGNhbnZhcyBvciBjcmVhdGUgbmV3IGNvbXBvbmVudHMgYXV0b21hdGljYWxseSFcbiAgICAgICAgICB0aGlzLmF1dG9MaW5rRXhpc3RpbmdQYXJhbWV0ZXJzKHNhZmVQYXJhbXMpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcihgW1Byb3BlcnR5RWRpdG9yRGF0YXNvdXJjZV0gRmFpbGVkIHRvIGxvYWQgcGFyYW1zIGZvciAke2VudGl0eU5hbWV9OmAsIGVyciksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm9uLWRlc3RydWN0aXZlIGxpbmtpbmc6IGJpbmRzIHBhcmFtZXRlcnMgdG8gc2Vzc2lvbiBvciBhbHJlYWR5LWV4aXN0aW5nIGNhbnZhcyBmaWVsZHMuXG4gICAqIE5ldmVyIG11dGF0ZXMgb3IgYWRkcyBuZXcgY29tcG9uZW50cyB0byB0aGUgY2FudmFzLlxuICAgKi9cbiAgYXV0b0xpbmtFeGlzdGluZ1BhcmFtZXRlcnMocGFyYW1zTGlzdD86IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXMgPSBwYXJhbXNMaXN0IHx8IHRoaXMucHJvY2VkdXJlUGFyYW1ldGVycygpO1xuICAgIGlmICghcGFyYW1zIHx8IHBhcmFtcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuICAgICAgY29uc3QgY2xlYW4gPSBwYXJhbS5uYW1lLnJlcGxhY2UoL15ALywgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBhbGxvd2VkLmFkZChjbGVhbik7XG4gICAgICBhbGxvd2VkLmFkZChgQCR7Y2xlYW59YCk7XG4gICAgICBhbGxvd2VkLmFkZChwYXJhbS5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRNYXBwaW5ncyA9IHsgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LnBhcmFtZXRlck1hcHBpbmdzID8/IHt9KSB9O1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAvLyBQcnVuZSBvcnBoYW5lZCBrZXlzIHRoYXQgZG8gbm90IGJlbG9uZyB0byB0aGlzIHN0b3JlZCBwcm9jZWR1cmVcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjdXJyZW50TWFwcGluZ3MpKSB7XG4gICAgICBpZiAoIWFsbG93ZWQuaGFzKGtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICBkZWxldGUgY3VycmVudE1hcHBpbmdzW2tleV07XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICBjb25zdCBjbGVhbiA9IHBhcmFtLm5hbWUucmVwbGFjZSgvXkAvLCAnJyk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGN1cnJlbnRNYXBwaW5nc1twYXJhbS5uYW1lXSA/PyBjdXJyZW50TWFwcGluZ3NbY2xlYW5dO1xuICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09ICcnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyAxLiBTZXNzaW9uIG1hdGNoIChlLmcuIGNvbXBhbnlJZCwgYnJhbmNoSWQsIHVzZXJJZClcbiAgICAgIGNvbnN0IHNlc3Npb25NYXRjaCA9XG4gICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2U/Lm1hdGNoUGFyYW1ldGVyKGNsZWFuKSA/PyB0aGlzLnNlc3Npb25TZXJ2aWNlPy5tYXRjaFBhcmFtZXRlcihwYXJhbS5uYW1lKTtcbiAgICAgIGlmIChzZXNzaW9uTWF0Y2gpIHtcbiAgICAgICAgY3VycmVudE1hcHBpbmdzW3BhcmFtLm5hbWVdID0gYHt7c2Vzc2lvbi4ke3Nlc3Npb25NYXRjaC5zZXNzaW9uS2V5fX19YDtcbiAgICAgICAgY3VycmVudE1hcHBpbmdzW2NsZWFuXSA9IGB7e3Nlc3Npb24uJHtzZXNzaW9uTWF0Y2guc2Vzc2lvbktleX19fWA7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gRXhpc3RpbmcgY2FudmFzIGZpZWxkIG1hdGNoXG4gICAgICBjb25zdCBtYXRjaGVkQ29tcCA9IHRoaXMuYWxsQ29tcG9uZW50cygpLmZpbmQoKGMpID0+IHtcbiAgICAgICAgaWYgKGMuaWQgPT09IHRoaXMuY29tcCgpLmlkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNrID0gKGMua2V5IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjbCA9IGNsZWFuLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBjayA9PT0gY2wgfHwgY2sgPT09IHRvRmllbGRLZXkoY2wpO1xuICAgICAgfSk7XG4gICAgICBpZiAobWF0Y2hlZENvbXApIHtcbiAgICAgICAgY3VycmVudE1hcHBpbmdzW3BhcmFtLm5hbWVdID0gYHt7JHttYXRjaGVkQ29tcC5rZXl9fX1gO1xuICAgICAgICBjdXJyZW50TWFwcGluZ3NbY2xlYW5dID0gYHt7JHttYXRjaGVkQ29tcC5rZXl9fX1gO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWFwcGluZ3MgPSB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy5wYXJhbWV0ZXJNYXBwaW5ncyA/PyB7fTtcbiAgICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMoY3VycmVudE1hcHBpbmdzKTtcbiAgICAgIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMoZXhpc3RpbmdNYXBwaW5ncyk7XG4gICAgICBjb25zdCBpc0RpZmZlcmVudCA9XG4gICAgICAgIGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoIHx8XG4gICAgICAgIGtleXNBLnNvbWUoKGspID0+IGN1cnJlbnRNYXBwaW5nc1trXSAhPT0gZXhpc3RpbmdNYXBwaW5nc1trXSk7XG5cbiAgICAgIGlmIChpc0RpZmZlcmVudCkge1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAgICAgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2UgPz8geyBkaXNwbGF5RmllbGQ6ICcnLCB2YWx1ZUZpZWxkOiAnJyB9KSxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nczogY3VycmVudE1hcHBpbmdzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwbGljaXQgdXNlci1pbml0aWF0ZWQgYWN0aW9uOiBsaW5rcyBleGlzdGluZyBmaWVsZHMsIGFuZCBjcmVhdGVzIG1pc3NpbmcgZmlsdGVyIGlucHV0cyBvbiBjYW52YXMuXG4gICAqIFJlc3RvcmVzIHNlbGVjdGlvbiB0byB0aGUgY3VycmVudCBkcm9wZG93biBjb21wb25lbnQgc28gdGhlIHVzZXIgc3RheXMgaW4gdGhpcyBwcm9wZXJ0eSBlZGl0b3IuXG4gICAqL1xuICBhdXRvV2lyZUFsbFBhcmFtZXRlcnMocGFyYW1zTGlzdD86IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXMgPSBwYXJhbXNMaXN0IHx8IHRoaXMucHJvY2VkdXJlUGFyYW1ldGVycygpO1xuICAgIGlmICghcGFyYW1zIHx8IHBhcmFtcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuICAgICAgY29uc3QgY2xlYW4gPSBwYXJhbS5uYW1lLnJlcGxhY2UoL15ALywgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBhbGxvd2VkLmFkZChjbGVhbik7XG4gICAgICBhbGxvd2VkLmFkZChgQCR7Y2xlYW59YCk7XG4gICAgICBhbGxvd2VkLmFkZChwYXJhbS5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRNYXBwaW5ncyA9IHsgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LnBhcmFtZXRlck1hcHBpbmdzID8/IHt9KSB9O1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAvLyBQcnVuZSBvcnBoYW5lZCBrZXlzIHRoYXQgZG8gbm90IGJlbG9uZyB0byB0aGlzIHN0b3JlZCBwcm9jZWR1cmVcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjdXJyZW50TWFwcGluZ3MpKSB7XG4gICAgICBpZiAoIWFsbG93ZWQuaGFzKGtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICBkZWxldGUgY3VycmVudE1hcHBpbmdzW2tleV07XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICBjb25zdCBjbGVhbiA9IHBhcmFtLm5hbWUucmVwbGFjZSgvXkAvLCAnJyk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGN1cnJlbnRNYXBwaW5nc1twYXJhbS5uYW1lXSA/PyBjdXJyZW50TWFwcGluZ3NbY2xlYW5dO1xuICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09ICcnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyAxLiBTZXNzaW9uIG1hdGNoIChlLmcuIGNvbXBhbnlJZCwgYnJhbmNoSWQsIHVzZXJJZClcbiAgICAgIGNvbnN0IHNlc3Npb25NYXRjaCA9XG4gICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2U/Lm1hdGNoUGFyYW1ldGVyKGNsZWFuKSA/PyB0aGlzLnNlc3Npb25TZXJ2aWNlPy5tYXRjaFBhcmFtZXRlcihwYXJhbS5uYW1lKTtcbiAgICAgIGlmIChzZXNzaW9uTWF0Y2gpIHtcbiAgICAgICAgY3VycmVudE1hcHBpbmdzW3BhcmFtLm5hbWVdID0gYHt7c2Vzc2lvbi4ke3Nlc3Npb25NYXRjaC5zZXNzaW9uS2V5fX19YDtcbiAgICAgICAgY3VycmVudE1hcHBpbmdzW2NsZWFuXSA9IGB7e3Nlc3Npb24uJHtzZXNzaW9uTWF0Y2guc2Vzc2lvbktleX19fWA7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gRXhpc3RpbmcgY2FudmFzIGZpZWxkIG1hdGNoXG4gICAgICBjb25zdCBtYXRjaGVkQ29tcCA9IHRoaXMuYWxsQ29tcG9uZW50cygpLmZpbmQoKGMpID0+IHtcbiAgICAgICAgaWYgKGMuaWQgPT09IHRoaXMuY29tcCgpLmlkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNrID0gKGMua2V5IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjbCA9IGNsZWFuLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBjayA9PT0gY2wgfHwgY2sgPT09IHRvRmllbGRLZXkoY2wpO1xuICAgICAgfSk7XG4gICAgICBpZiAobWF0Y2hlZENvbXApIHtcbiAgICAgICAgY3VycmVudE1hcHBpbmdzW3BhcmFtLm5hbWVdID0gYHt7JHttYXRjaGVkQ29tcC5rZXl9fX1gO1xuICAgICAgICBjdXJyZW50TWFwcGluZ3NbY2xlYW5dID0gYHt7JHttYXRjaGVkQ29tcC5rZXl9fX1gO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIDMuIEF1dG8tY3JlYXRlIG1pc3NpbmcgY2FudmFzIGZpZWxkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgYnkgdXNlclxuICAgICAgaWYgKHRoaXMuZGVzaWduZXJTdGF0ZSkge1xuICAgICAgICBjb25zdCBsb3dlciA9IGNsZWFuLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBjb21wVHlwZSA9ICdpbnB1dCc7XG4gICAgICAgIGlmIChsb3dlci5pbmNsdWRlcygnZGF0ZScpIHx8IGxvd2VyLmluY2x1ZGVzKCd0aW1lJykgfHwgcGFyYW0uZGF0YVR5cGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgICAgIGNvbXBUeXBlID0gJ2RhdGUnO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHBhcmFtLmRhdGFUeXBlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpbnQnKSB8fFxuICAgICAgICAgIHBhcmFtLmRhdGFUeXBlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdkZWNpbWFsJykgfHxcbiAgICAgICAgICBwYXJhbS5kYXRhVHlwZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnbnVtZXJpYycpIHx8XG4gICAgICAgICAgcGFyYW0uZGF0YVR5cGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Zsb2F0JykgfHxcbiAgICAgICAgICBsb3dlci5pbmNsdWRlcygnbm8nKSB8fFxuICAgICAgICAgIGxvd2VyLmluY2x1ZGVzKCdpZCcpIHx8XG4gICAgICAgICAgbG93ZXIuaW5jbHVkZXMoJ2Ftb3VudCcpIHx8XG4gICAgICAgICAgbG93ZXIuaW5jbHVkZXMoJ3JhdGUnKSB8fFxuICAgICAgICAgIGxvd2VyLmluY2x1ZGVzKCdxdHknKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb21wVHlwZSA9ICdudW1iZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gdG9GaWVsZEtleShjbGVhbik7XG4gICAgICAgIGNvbnN0IG5ld0xhYmVsID0gaHVtYW5pemVJZGVudGlmaWVyKGNsZWFuKTtcbiAgICAgICAgY29uc3QgY3JlYXRlZCA9IHRoaXMuZGVzaWduZXJTdGF0ZS5hZGRDb21wb25lbnQoY29tcFR5cGUsIHVuZGVmaW5lZCwge1xuICAgICAgICAgIGtleTogbmV3S2V5LFxuICAgICAgICAgIGxhYmVsOiBuZXdMYWJlbCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBjb21wVHlwZSA9PT0gJ2RhdGUnID8geyBwbGFjZWhvbGRlcjogJ1NlbGVjdCAnICsgbmV3TGFiZWwgfSA6IHt9LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY3JlYXRlZCkge1xuICAgICAgICAgIGN1cnJlbnRNYXBwaW5nc1twYXJhbS5uYW1lXSA9IGB7eyR7Y3JlYXRlZC5rZXl9fX1gO1xuICAgICAgICAgIGN1cnJlbnRNYXBwaW5nc1tjbGVhbl0gPSBge3ske2NyZWF0ZWQua2V5fX19YDtcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgc2VsZWN0aW9uIHRvIGN1cnJlbnQgZHJvcGRvd24gc28gdXNlciBpcyBub3QgbmF2aWdhdGVkIGF3YXlcbiAgICBpZiAodGhpcy5kZXNpZ25lclN0YXRlKSB7XG4gICAgICB0aGlzLmRlc2lnbmVyU3RhdGUuc2VsZWN0Q29tcG9uZW50KHRoaXMuY29tcCgpLmlkKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgICAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZSA/PyB7IGRpc3BsYXlGaWVsZDogJycsIHZhbHVlRmllbGQ6ICcnIH0pLFxuICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nczogY3VycmVudE1hcHBpbmdzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0U291cmNlVHlwZSh0eXBlOiBEcm9wZG93blNvdXJjZVR5cGUpOiB2b2lkIHtcbiAgICBpZiAodHlwZSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIHRoaXMubGFzdExvYWRlZEtleSA9ICcnO1xuICAgICAgdGhpcy5jb2x1bW5zU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5wYXJhbXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmVudGl0eUNvbHVtbnMuc2V0KFtdKTtcbiAgICAgIHRoaXMucHJvY2VkdXJlUGFyYW1ldGVycy5zZXQoW10pO1xuICAgICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgICBzb3VyY2VUeXBlOiAnc3RhdGljJyxcbiAgICAgICAgZGlzcGxheUZpZWxkOiAnJyxcbiAgICAgICAgdmFsdWVGaWVsZDogJycsXG4gICAgICAgIHBhcmFtZXRlck1hcHBpbmdzOiB7fSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXBpJykge1xuICAgICAgdGhpcy5sYXN0TG9hZGVkS2V5ID0gJyc7XG4gICAgICB0aGlzLmNvbHVtbnNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnBhcmFtc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMudXBkYXRlRGF0YVNvdXJjZS5lbWl0KHtcbiAgICAgICAgc291cmNlVHlwZTogJ2FwaScsXG4gICAgICAgIGFwaUVuZHBvaW50OiB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy5hcGlFbmRwb2ludCB8fCAnJyxcbiAgICAgICAgYXBpTWV0aG9kOiB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy5hcGlNZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy5kYXRhUGF0aCB8fCAnJyxcbiAgICAgICAgdXNlUHJveHk6IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LnVzZVByb3h5IHx8IGZhbHNlLFxuICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LmRpc3BsYXlGaWVsZCB8fCAnJyxcbiAgICAgICAgdmFsdWVGaWVsZDogdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8udmFsdWVGaWVsZCB8fCAnJyxcbiAgICAgICAgcGFyYW1ldGVyTWFwcGluZ3M6IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LnBhcmFtZXRlck1hcHBpbmdzID8/IHt9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWxsRW50aXRpZXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubG9hZEVudGl0aWVzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEVudGl0eSA9IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LmVudGl0eU5hbWU7XG4gICAgY29uc3QgaXNWYWxpZEZvclR5cGUgPVxuICAgICAgdHlwZSA9PT0gJ3RhYmxlJ1xuICAgICAgICA/IHRoaXMuYXZhaWxhYmxlVGFibGVzKCkuc29tZSgodCkgPT4gdC5uYW1lID09PSBjdXJyZW50RW50aXR5KVxuICAgICAgICA6IHRoaXMuYXZhaWxhYmxlUHJvY2VkdXJlcygpLnNvbWUoKHApID0+IHAubmFtZSA9PT0gY3VycmVudEVudGl0eSk7XG5cbiAgICB0aGlzLmxhc3RMb2FkZWRLZXkgPSAnJztcbiAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICBzb3VyY2VUeXBlOiB0eXBlLFxuICAgICAgZW50aXR5TmFtZTogaXNWYWxpZEZvclR5cGUgPyAoY3VycmVudEVudGl0eSB8fCAnJykgOiAnJyxcbiAgICAgIHNjaGVtYTogJ2RibycsXG4gICAgICBkaXNwbGF5RmllbGQ6ICcnLFxuICAgICAgdmFsdWVGaWVsZDogJycsXG4gICAgICBwYXJhbWV0ZXJNYXBwaW5nczogaXNWYWxpZEZvclR5cGUgPyAodGhpcy5jb21wKCkuZGF0YVNvdXJjZT8ucGFyYW1ldGVyTWFwcGluZ3MgPz8ge30pIDoge30sXG4gICAgfSk7XG4gIH1cblxuICBvbkFwaUVuZHBvaW50U2VsZWN0ZWQoZW5kcG9pbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRGF0YVNvdXJjZS5lbWl0KHtcbiAgICAgIC4uLih0aGlzLmNvbXAoKS5kYXRhU291cmNlID8/IHsgZGlzcGxheUZpZWxkOiAnJywgdmFsdWVGaWVsZDogJycgfSksXG4gICAgICBzb3VyY2VUeXBlOiAnYXBpJyxcbiAgICAgIGFwaUVuZHBvaW50OiBlbmRwb2ludC50cmltKCksXG4gICAgICBhcGlNZXRob2Q6IHRoaXMuc2VsZWN0ZWRBcGlNZXRob2QoKSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uQXBpTWV0aG9kQ2hhbmdlZChtZXRob2Q6ICdHRVQnIHwgJ1BPU1QnKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2UgPz8geyBkaXNwbGF5RmllbGQ6ICcnLCB2YWx1ZUZpZWxkOiAnJyB9KSxcbiAgICAgIGFwaU1ldGhvZDogbWV0aG9kLFxuICAgIH0pO1xuICB9XG5cbiAgb25EYXRhUGF0aENoYW5nZWQoZGF0YVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRGF0YVNvdXJjZS5lbWl0KHtcbiAgICAgIC4uLih0aGlzLmNvbXAoKS5kYXRhU291cmNlID8/IHsgZGlzcGxheUZpZWxkOiAnJywgdmFsdWVGaWVsZDogJycgfSksXG4gICAgICBkYXRhUGF0aDogZGF0YVBhdGgudHJpbSgpLFxuICAgIH0pO1xuICB9XG5cbiAgb25Vc2VQcm94eUNoYW5nZWQodXNlUHJveHk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZSA/PyB7IGRpc3BsYXlGaWVsZDogJycsIHZhbHVlRmllbGQ6ICcnIH0pLFxuICAgICAgdXNlUHJveHksXG4gICAgfSk7XG4gIH1cblxuICB0ZXN0QW5kRGV0ZWN0QXBpQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuc2VsZWN0ZWRBcGlFbmRwb2ludCgpO1xuICAgIGlmICghZW5kcG9pbnQgfHwgIXRoaXMuZGF0YURpc2NvdmVyeSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1Rlc3RpbmdBcGkuc2V0KHRydWUpO1xuICAgIHRoaXMuYXBpVGVzdFN0YXR1cy5zZXQobnVsbCk7XG5cbiAgICBjb25zdCBkcyA9IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U7XG4gICAgdGhpcy5kYXRhRGlzY292ZXJ5XG4gICAgICAuYXV0b0RldGVjdEFwaUNvbHVtbnMoXG4gICAgICAgIHtcbiAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICBtZXRob2Q6IHRoaXMuc2VsZWN0ZWRBcGlNZXRob2QoKSxcbiAgICAgICAgICBkYXRhUGF0aDogdGhpcy5zZWxlY3RlZERhdGFQYXRoKCksXG4gICAgICAgICAgdXNlUHJveHk6IHRoaXMuc2VsZWN0ZWRVc2VQcm94eSgpLFxuICAgICAgICB9LFxuICAgICAgICBkcz8ucGFyYW1ldGVyTWFwcGluZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoY29scykgPT4ge1xuICAgICAgICAgIHRoaXMuaXNUZXN0aW5nQXBpLnNldChmYWxzZSk7XG4gICAgICAgICAgY29uc3Qgc2FmZUNvbHM6IEVudGl0eUNvbHVtbk1ldGFkYXRhW10gPSBjb2xzLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgbGV0IGR0OiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2RhdGUnIHwgJ2Jvb2xlYW4nID0gJ3N0cmluZyc7XG4gICAgICAgICAgICBpZiAoYy5kYXRhVHlwZSA9PT0gJ251bWJlcicgfHwgKGMuZGF0YVR5cGUgYXMgc3RyaW5nKSA9PT0gJ2N1cnJlbmN5JykgZHQgPSAnbnVtYmVyJztcbiAgICAgICAgICAgIGVsc2UgaWYgKGMuZGF0YVR5cGUgPT09ICdib29sZWFuJykgZHQgPSAnYm9vbGVhbic7XG4gICAgICAgICAgICBlbHNlIGlmIChjLmRhdGFUeXBlID09PSAnZGF0ZScpIGR0ID0gJ2RhdGUnO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZmllbGQ6IGMuZmllbGQsXG4gICAgICAgICAgICAgIGxhYmVsOiBjLmxhYmVsIHx8IGMuZmllbGQsXG4gICAgICAgICAgICAgIGRhdGFUeXBlOiBkdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5lbnRpdHlDb2x1bW5zLnNldChzYWZlQ29scyk7XG5cbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsID0gdGhpcy5zZWxlY3RlZFZhbHVlRmllbGQoKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGlzcCA9IHRoaXMuc2VsZWN0ZWREaXNwbGF5RmllbGQoKTtcbiAgICAgICAgICBjb25zdCBzdWdnZXN0ZWRWYWwgPSBkZXRlY3REZWZhdWx0VmFsdWVGaWVsZChzYWZlQ29scyk7XG4gICAgICAgICAgY29uc3Qgc3VnZ2VzdGVkRGlzcCA9IGRldGVjdERlZmF1bHREaXNwbGF5RmllbGQoc2FmZUNvbHMpO1xuXG4gICAgICAgICAgY29uc3QgbmV4dFZhbCA9IGN1cnJlbnRWYWwgfHwgc3VnZ2VzdGVkVmFsIHx8IHNhZmVDb2xzWzBdPy5maWVsZCB8fCAnJztcbiAgICAgICAgICBjb25zdCBuZXh0RGlzcCA9IGN1cnJlbnREaXNwIHx8IHN1Z2dlc3RlZERpc3AgfHwgc2FmZUNvbHNbMV0/LmZpZWxkIHx8IHNhZmVDb2xzWzBdPy5maWVsZCB8fCAnJztcblxuICAgICAgICAgIGlmICgobmV4dFZhbCAhPT0gY3VycmVudFZhbCB8fCBuZXh0RGlzcCAhPT0gY3VycmVudERpc3ApICYmIChuZXh0VmFsIHx8IG5leHREaXNwKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgICAgICAgICAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZSA/PyB7IGRpc3BsYXlGaWVsZDogJycsIHZhbHVlRmllbGQ6ICcnIH0pLFxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiBuZXh0VmFsLFxuICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6IG5leHREaXNwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5hcGlUZXN0U3RhdHVzLnNldCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgQ29ubmVjdGVkIHN1Y2Nlc3NmdWxseSEgRm91bmQgJHtzYWZlQ29scy5sZW5ndGh9IGZpZWxkKHMpLmAsXG4gICAgICAgICAgICBraW5kOiAnc3VjY2VzcycsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1Rlc3RpbmdBcGkuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmFwaVRlc3RTdGF0dXMuc2V0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGZldGNoIGZyb20gQVBJJyxcbiAgICAgICAgICAgIGtpbmQ6ICdlcnJvcicsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9uRW50aXR5U2VsZWN0ZWQoZW50aXR5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaXNEaWZmZXJlbnQgPSBlbnRpdHlOYW1lICE9PSB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy5lbnRpdHlOYW1lO1xuICAgIGlmIChpc0RpZmZlcmVudCkge1xuICAgICAgdGhpcy5sYXN0TG9hZGVkS2V5ID0gJyc7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRGF0YVNvdXJjZS5lbWl0KHtcbiAgICAgIC4uLih0aGlzLmNvbXAoKS5kYXRhU291cmNlID8/IHsgZGlzcGxheUZpZWxkOiAnJywgdmFsdWVGaWVsZDogJycgfSksXG4gICAgICBzb3VyY2VUeXBlOiB0aGlzLmN1cnJlbnRTb3VyY2VUeXBlKCksXG4gICAgICBlbnRpdHlOYW1lLFxuICAgICAgc2NoZW1hOiAnZGJvJyxcbiAgICAgIHZhbHVlRmllbGQ6ICcnLFxuICAgICAgZGlzcGxheUZpZWxkOiAnJyxcbiAgICAgIHBhcmFtZXRlck1hcHBpbmdzOiBpc0RpZmZlcmVudCA/IHt9IDogKHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LnBhcmFtZXRlck1hcHBpbmdzID8/IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uVmFsdWVGaWVsZENoYW5nZWQodmFsdWVGaWVsZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2UgPz8geyBkaXNwbGF5RmllbGQ6ICcnLCB2YWx1ZUZpZWxkOiAnJyB9KSxcbiAgICAgIHZhbHVlRmllbGQsXG4gICAgfSk7XG4gIH1cblxuICBvbkRpc3BsYXlGaWVsZENoYW5nZWQoZGlzcGxheUZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZSA/PyB7IGRpc3BsYXlGaWVsZDogJycsIHZhbHVlRmllbGQ6ICcnIH0pLFxuICAgICAgZGlzcGxheUZpZWxkLFxuICAgIH0pO1xuICB9XG5cbiAgb25EZXBlbmRzT25DaGFuZ2VkKHBhcmVudEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2UgPz8geyBkaXNwbGF5RmllbGQ6ICcnLCB2YWx1ZUZpZWxkOiAnJyB9KSxcbiAgICAgIGRlcGVuZHNPbjogcGFyZW50S2V5ID8gW3BhcmVudEtleV0gOiBbXSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBhcmFtVmFsdWUocGFyYW1OYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHtcbiAgICBjb25zdCBjbGVhbiA9IHBhcmFtTmFtZS5yZXBsYWNlKC9eQC8sICcnKTtcbiAgICBjb25zdCBtYXBwaW5ncyA9IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LnBhcmFtZXRlck1hcHBpbmdzID8/IHt9O1xuICAgIHJldHVybiAoXG4gICAgICBtYXBwaW5nc1twYXJhbU5hbWVdID8/XG4gICAgICBtYXBwaW5nc1tjbGVhbl0gPz9cbiAgICAgIG1hcHBpbmdzW2BAJHtjbGVhbn1gXSA/P1xuICAgICAgJydcbiAgICApO1xuICB9XG5cbiAgc2V0UGFyYW1WYWx1ZShwYXJhbU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBjbGVhbiA9IHBhcmFtTmFtZS5yZXBsYWNlKC9eQC8sICcnKTtcbiAgICBjb25zdCBleGlzdGluZyA9IHsgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LnBhcmFtZXRlck1hcHBpbmdzID8/IHt9KSB9O1xuICAgIGV4aXN0aW5nW3BhcmFtTmFtZV0gPSB2YWx1ZTtcbiAgICBleGlzdGluZ1tjbGVhbl0gPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZSA/PyB7IGRpc3BsYXlGaWVsZDogJycsIHZhbHVlRmllbGQ6ICcnIH0pLFxuICAgICAgcGFyYW1ldGVyTWFwcGluZ3M6IGV4aXN0aW5nLFxuICAgIH0pO1xuICB9XG5cbiAgb25QYXJhbUxpbmtlZEZpZWxkQ2hhbmdlKGV2dDogeyBwYXJhbU5hbWU6IHN0cmluZzsgZmllbGRLZXk6IHN0cmluZzsgaXNMaW5rZWQ6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnREZXBlbmRzT24gPSBbLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LmRlcGVuZHNPbiA/PyBbXSldO1xuICAgIGlmIChldnQuaXNMaW5rZWQgJiYgZXZ0LmZpZWxkS2V5KSB7XG4gICAgICBpZiAoIWN1cnJlbnREZXBlbmRzT24uaW5jbHVkZXMoZXZ0LmZpZWxkS2V5KSkge1xuICAgICAgICBjdXJyZW50RGVwZW5kc09uLnB1c2goZXZ0LmZpZWxkS2V5KTtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgICAgIC4uLih0aGlzLmNvbXAoKS5kYXRhU291cmNlID8/IHsgZGlzcGxheUZpZWxkOiAnJywgdmFsdWVGaWVsZDogJycgfSksXG4gICAgICAgICAgZGVwZW5kc09uOiBjdXJyZW50RGVwZW5kc09uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNPcHRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IFsuLi50aGlzLnN0YXRpY09wdGlvbnMoKV07XG4gICAgY29uc3QgbmV4dElkeCA9IGN1cnJlbnQubGVuZ3RoICsgMTtcbiAgICBjdXJyZW50LnB1c2goeyBrZXk6IFN0cmluZyhuZXh0SWR4KSwgbGFiZWw6IGBPcHRpb24gJHtuZXh0SWR4fWAgfSk7XG4gICAgdGhpcy51cGRhdGVQcm9wZXJ0eS5lbWl0KHsga2V5OiAnb3B0aW9ucycsIHZhbHVlOiBjdXJyZW50IH0pO1xuICB9XG5cbiAgdXBkYXRlU3RhdGljT3B0aW9uKGluZGV4OiBudW1iZXIsIGZpZWxkOiAna2V5JyB8ICdsYWJlbCcsIHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IFsuLi50aGlzLnN0YXRpY09wdGlvbnMoKV07XG4gICAgaWYgKGN1cnJlbnRbaW5kZXhdKSB7XG4gICAgICBjdXJyZW50W2luZGV4XSA9IHsgLi4uY3VycmVudFtpbmRleF0sIFtmaWVsZF06IHZhbCB9O1xuICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0eS5lbWl0KHsga2V5OiAnb3B0aW9ucycsIHZhbHVlOiBjdXJyZW50IH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVN0YXRpY09wdGlvbihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhdGljT3B0aW9ucygpLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgIHRoaXMudXBkYXRlUHJvcGVydHkuZW1pdCh7IGtleTogJ29wdGlvbnMnLCB2YWx1ZTogY3VycmVudCB9KTtcbiAgfVxufVxuXG4iLCIgICAgPGRpdiBjbGFzcz1cInByb3BlcnR5LWdyb3VwXCI+XG4gICAgICA8IS0tIDEuIEhlYWRlciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhc291cmNlLWhlYWRlci1iYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLXRpdGxlXCI+T3B0aW9ucyBEYXRhIFNvdXJjZTwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gMi4gU291cmNlIFR5cGUgU2VnbWVudGVkIFN3aXRjaGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNvdXJjZS10eXBlLXN3aXRjaGVyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNvdXJjZS10YWItYnRuXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRTb3VyY2VUeXBlKCkgPT09ICd0YWJsZSdcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRTb3VyY2VUeXBlKCd0YWJsZScpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwidGFibGVcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgPHNwYW4+VGFibGUgLyBWaWV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic291cmNlLXRhYi1idG5cIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFNvdXJjZVR5cGUoKSA9PT0gJ3Byb2NlZHVyZSdcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRTb3VyY2VUeXBlKCdwcm9jZWR1cmUnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNvZGVcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgPHNwYW4+U3RvcmVkIFByb2M8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzb3VyY2UtdGFiLWJ0blwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50U291cmNlVHlwZSgpID09PSAnYXBpJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNldFNvdXJjZVR5cGUoJ2FwaScpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZ2xvYmVcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgPHNwYW4+UkVTVCBBUEk8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzb3VyY2UtdGFiLWJ0blwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50U291cmNlVHlwZSgpID09PSAnc3RhdGljJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNldFNvdXJjZVR5cGUoJ3N0YXRpYycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZWRpdFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICA8c3Bhbj5TdGF0aWMgTGlzdDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSAzQS4gREFUQUJBU0UgVEFCTEUgLyBWSUVXIENPTkZJR1VSQVRJT04gLS0+XG4gICAgICBAaWYgKGN1cnJlbnRTb3VyY2VUeXBlKCkgPT09ICd0YWJsZScpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1sYWJlbC1yb3dcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+RGF0YWJhc2UgVGFibGUgLyBWaWV3PC9sYWJlbD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLXJlZnJlc2gtZW50aXRpZXNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZEVudGl0aWVzKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIlJlZnJlc2ggYXZhaWxhYmxlIHRhYmxlcyBmcm9tIGJhY2tlbmRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInJlZnJlc2hcIiBbc2l6ZV09XCIxMVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPlJlZnJlc2g8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cnB0LXNlYXJjaGFibGUtc2VsZWN0XG4gICAgICAgICAgICBbb3B0aW9uc109XCJ0YWJsZVNlbGVjdE9wdGlvbnMoKVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEVudGl0eSgpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRW50aXR5U2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nRW50aXRpZXMoKVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdFbnRpdGllcygpXCJcbiAgICAgICAgICAgIFtsb2FkaW5nVGV4dF09XCInTG9hZGluZyB0YWJsZXMgZnJvbSBkYXRhYmFzZS4uLidcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImF2YWlsYWJsZVRhYmxlcygpLmxlbmd0aCA9PT0gMCA/ICctLSBObyB0YWJsZXMgZm91bmQgKENsaWNrIFJlZnJlc2gpIC0tJyA6ICctLSBDaG9vc2UgRGF0YSBUYWJsZSAtLSdcIlxuICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2ggdGFibGVzICYgdmlld3MuLi5cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAoc2VsZWN0ZWRFbnRpdHkoKSkge1xuICAgICAgICAgIDwhLS0gRGlzcGxheSBGaWVsZCAoVmlzaWJsZSB0ZXh0KSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtbGFiZWwtcm93XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+RGlzcGxheSBGaWVsZCAoVmlzaWJsZSBUZXh0KTwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxycHQtc2VhcmNoYWJsZS1zZWxlY3RcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZGlzcGxheUZpZWxkU2VsZWN0T3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWREaXNwbGF5RmllbGQoKVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRGlzcGxheUZpZWxkQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLSBTZWxlY3QgRGlzcGxheSBDb2x1bW4gLS1cIlxuICAgICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj1cIlNlYXJjaCBjb2x1bW5zLi4uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFZhbHVlIEZpZWxkIChTdG9yZWQga2V5KSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtbGFiZWwtcm93XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+VmFsdWUgRmllbGQgKFN0b3JlZCBLZXkpPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHJwdC1zZWFyY2hhYmxlLXNlbGVjdFxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJ2YWx1ZUZpZWxkU2VsZWN0T3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRWYWx1ZUZpZWxkKClcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblZhbHVlRmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tIFNlbGVjdCBLZXkgQ29sdW1uIC0tXCJcbiAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2ggY29sdW1ucy4uLlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBDYXNjYWRpbmcgRHJvcGRvd24gRGVwZW5kZW5jeSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPkRlcGVuZGVudCBPbiAoQ2FzY2FkaW5nIFBhcmVudCBGaWVsZCk8L2xhYmVsPlxuICAgICAgICAgICAgPHJwdC1zZWFyY2hhYmxlLXNlbGVjdFxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJwYXJlbnRGaWVsZFNlbGVjdE9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkRGVwZW5kc09uKClcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRlcGVuZHNPbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0gTm9uZSAoSW5kZXBlbmRlbnQpIC0tXCJcbiAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2ggY2FudmFzIGZpZWxkcy4uLlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1oaW50XCI+XG4gICAgICAgICAgICAgIEF1dG9tYXRpY2FsbHkgcmUtcXVlcmllcyBvcHRpb25zIHdoZW4gcGFyZW50IGZpZWxkIGNoYW5nZXMuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPCEtLSAzQi4gU1RPUkVEIFBST0NFRFVSRSBDT05GSUdVUkFUSU9OIC0tPlxuICAgICAgQGlmIChjdXJyZW50U291cmNlVHlwZSgpID09PSAncHJvY2VkdXJlJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWxhYmVsLXJvd1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5TdG9yZWQgUHJvY2VkdXJlPC9sYWJlbD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLXJlZnJlc2gtZW50aXRpZXNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZEVudGl0aWVzKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIlJlZnJlc2ggYXZhaWxhYmxlIHByb2NlZHVyZXMgZnJvbSBiYWNrZW5kXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJyZWZyZXNoXCIgW3NpemVdPVwiMTFcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj5SZWZyZXNoPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHJwdC1zZWFyY2hhYmxlLXNlbGVjdFxuICAgICAgICAgICAgW29wdGlvbnNdPVwicHJvY2VkdXJlU2VsZWN0T3B0aW9ucygpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkRW50aXR5KClcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25FbnRpdHlTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdFbnRpdGllcygpXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ0VudGl0aWVzKClcIlxuICAgICAgICAgICAgW2xvYWRpbmdUZXh0XT1cIidMb2FkaW5nIHN0b3JlZCBwcm9jZWR1cmVzIGZyb20gZGF0YWJhc2UuLi4nXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJhdmFpbGFibGVQcm9jZWR1cmVzKCkubGVuZ3RoID09PSAwID8gJy0tIE5vIHN0b3JlZCBwcm9jZWR1cmVzIGZvdW5kIChDbGljayBSZWZyZXNoKSAtLScgOiAnLS0gQ2hvb3NlIERhdGEgUXVlcnkgLyBTUCAtLSdcIlxuICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2ggc3RvcmVkIHByb2NlZHVyZXMuLi5cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAoc2VsZWN0ZWRFbnRpdHkoKSkge1xuICAgICAgICAgIDwhLS0gVmlzdWFsIFBhcmFtZXRlciBMaW5rZXJzIC0tPlxuICAgICAgICAgIEBpZiAocHJvY2VkdXJlUGFyYW1ldGVycygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcC1wYXJhbXMtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcmFtcy1oZWFkZXItcm93XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5Qcm9jZWR1cmUgSW5wdXQgUGFyYW1ldGVyczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1hdXRvLXBhcmFtc1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXV0b1dpcmVBbGxQYXJhbWV0ZXJzKClcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBdXRvLWRldGVjdCBzZXNzaW9uIHBhcmFtZXRlcnMgYW5kIGFkZCBtaXNzaW5nIGZpbHRlciBjb250cm9scyB0byB0aGUgY2FudmFzXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTFcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+QXV0by1XaXJlIENhbnZhcyBJbnB1dHM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIEBmb3IgKHBhcmFtIG9mIHByb2NlZHVyZVBhcmFtZXRlcnMoKTsgdHJhY2sgcGFyYW0ubmFtZSkge1xuICAgICAgICAgICAgICAgIDxycHQtcGFyYW1ldGVyLWJpbmRpbmctZWRpdG9yXG4gICAgICAgICAgICAgICAgICBbcGFyYW1dPVwicGFyYW1cIlxuICAgICAgICAgICAgICAgICAgW2N1cnJlbnRWYWx1ZV09XCJnZXRQYXJhbVZhbHVlKHBhcmFtLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgIFthbGxDb21wb25lbnRzXT1cImFsbENvbXBvbmVudHMoKVwiXG4gICAgICAgICAgICAgICAgICBbY3VycmVudENvbXBvbmVudElkXT1cImNvbXAoKS5pZFwiXG4gICAgICAgICAgICAgICAgICBbaXNBZHZhbmNlZE1vZGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2V0UGFyYW1WYWx1ZShwYXJhbS5uYW1lLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChsaW5rZWRGaWVsZENoYW5nZSk9XCJvblBhcmFtTGlua2VkRmllbGRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBEaXNwbGF5IEZpZWxkIChWaXNpYmxlIHRleHQpIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1sYWJlbC1yb3dcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5EaXNwbGF5IEZpZWxkIChmcm9tIFNQIHJlc3VsdCk8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGVudGl0eUNvbHVtbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxycHQtc2VhcmNoYWJsZS1zZWxlY3RcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJkaXNwbGF5RmllbGRTZWxlY3RPcHRpb25zKClcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkRGlzcGxheUZpZWxkKClcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRGlzcGxheUZpZWxkQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tIFNlbGVjdCBEaXNwbGF5IENvbHVtbiAtLVwiXG4gICAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2ggY29sdW1ucy4uLlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtaW5wdXRcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ29sdW1uIG5hbWUgKGxlYXZlIGJsYW5rIGZvciBhdXRvKVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWREaXNwbGF5RmllbGQoKVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EaXNwbGF5RmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBWYWx1ZSBGaWVsZCAoU3RvcmVkIGtleSkgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWxhYmVsLXJvd1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPlZhbHVlIEZpZWxkIChmcm9tIFNQIHJlc3VsdCk8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGVudGl0eUNvbHVtbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxycHQtc2VhcmNoYWJsZS1zZWxlY3RcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ2YWx1ZUZpZWxkU2VsZWN0T3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFZhbHVlRmllbGQoKVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUZpZWxkQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tIFNlbGVjdCBLZXkgQ29sdW1uIC0tXCJcbiAgICAgICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj1cIlNlYXJjaCBjb2x1bW5zLi4uXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDb2x1bW4gbmFtZSAobGVhdmUgYmxhbmsgZm9yIGF1dG8pXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFZhbHVlRmllbGQoKVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUZpZWxkQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA8IS0tIDNCLiBSRVNUIEFQSSBDT05GSUdVUkFUSU9OIC0tPlxuICAgICAgQGlmIChjdXJyZW50U291cmNlVHlwZSgpID09PSAnYXBpJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5BUEkgRW5kcG9pbnQgVVJMPC9sYWJlbD5cbiAgICAgICAgICBAaWYgKHJlZ2lzdGVyZWRBcGlzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDZweDtcIj5cbiAgICAgICAgICAgICAgPHJwdC1zZWFyY2hhYmxlLXNlbGVjdFxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInJlZ2lzdGVyZWRBcGlzKClcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkQXBpRW5kcG9pbnQoKVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25BcGlFbmRwb2ludFNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0gU2VsZWN0IFJlZ2lzdGVyZWQgRW5kcG9pbnQgb3IgdHlwZSBiZWxvdyAtLVwiXG4gICAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2ggcmVnaXN0ZXJlZCBBUElzLi4uXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtaW5wdXRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIC9hcGkvdjEvY3VzdG9tZXJzIG9yIGh0dHBzOi8vYXBpLnNlcnZpY2UuY29tL2xvb2t1cFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEFwaUVuZHBvaW50KClcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25BcGlFbmRwb2ludFNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDExcHg7IGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7IG1hcmdpbi10b3A6IDRweDsgZGlzcGxheTogYmxvY2s7XCI+XG4gICAgICAgICAgICBEaXJlY3QgSFRUUCBjYWxsIG9yIGJhY2tlbmQgcHJveHkuIFVzZSA8Y29kZT46cGFyYW08L2NvZGU+IGZvciByb3V0ZSB0b2tlbnMuXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDhweDsgbWFyZ2luLWJvdHRvbTogOHB4O1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDA7XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPkhUVFAgTWV0aG9kPC9sYWJlbD5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dFwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkQXBpTWV0aG9kKClcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkFwaU1ldGhvZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJHRVRcIj5HRVQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBPU1RcIj5QT1NUPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAwO1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5SZXNwb25zZSBEYXRhIFBhdGg8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBkYXRhLml0ZW1zLCByb3dzXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWREYXRhUGF0aCgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EYXRhUGF0aENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxMHB4O1wiPlxuICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBmb250LXNpemU6IDEycHg7IGN1cnNvcjogcG9pbnRlcjtcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFVzZVByb3h5KClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVXNlUHJveHlDaGFuZ2VkKCRhbnkoJGV2ZW50LnRhcmdldCkuY2hlY2tlZClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPlJvdXRlIHRocm91Z2ggYmFja2VuZCBwcm94eTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxMnB4O1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4tcmVmcmVzaC1lbnRpdGllc1wiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgcGFkZGluZzogNnB4IDEycHg7IGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjM2I4MmY2KTsgY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDZweDtcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZEFwaUVuZHBvaW50KCkgfHwgaXNUZXN0aW5nQXBpKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRlc3RBbmREZXRlY3RBcGlDb2x1bW5zKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwicmVmcmVzaFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPnt7IGlzVGVzdGluZ0FwaSgpID8gJ1Rlc3RpbmcgQ29ubmVjdGlvbi4uLicgOiAnVGVzdCAmIERldGVjdCBGaWVsZHMnIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIEBpZiAoYXBpVGVzdFN0YXR1cygpOyBhcyBzdGF0dXMpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOiA2cHg7IGZvbnQtc2l6ZTogMTFweDsgcGFkZGluZzogNHB4IDhweDsgYm9yZGVyLXJhZGl1czogNHB4O1wiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInN0YXR1cy5raW5kID09PSAnc3VjY2VzcycgPyAnI2VjZmRmNScgOiAnI2ZlZjJmMidcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwic3RhdHVzLmtpbmQgPT09ICdzdWNjZXNzJyA/ICcjMDY1ZjQ2JyA6ICcjOTkxYjFiJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHN0YXR1cy5tZXNzYWdlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRGlzcGxheSBGaWVsZCAoVmlzaWJsZSB0ZXh0KSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXJvd1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+RGlzcGxheSBGaWVsZCAoVmlzaWJsZSBUZXh0KTwvbGFiZWw+XG4gICAgICAgICAgQGlmIChlbnRpdHlDb2x1bW5zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPHJwdC1zZWFyY2hhYmxlLXNlbGVjdFxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJkaXNwbGF5RmllbGRTZWxlY3RPcHRpb25zKClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZERpc3BsYXlGaWVsZCgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EaXNwbGF5RmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tIFNlbGVjdCBEaXNwbGF5IENvbHVtbiAtLVwiXG4gICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyPVwiU2VhcmNoIGZpZWxkcy4uLlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmllbGQgbmFtZSBpbiBBUEkgaXRlbSAoZS5nLiBuYW1lLCB0aXRsZSlcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZERpc3BsYXlGaWVsZCgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EaXNwbGF5RmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVmFsdWUgRmllbGQgKFN0b3JlZCBrZXkpIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5WYWx1ZSBGaWVsZCAoU3RvcmVkIEtleSk8L2xhYmVsPlxuICAgICAgICAgIEBpZiAoZW50aXR5Q29sdW1ucygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxycHQtc2VhcmNoYWJsZS1zZWxlY3RcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwidmFsdWVGaWVsZFNlbGVjdE9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkVmFsdWVGaWVsZCgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUZpZWxkQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLSBTZWxlY3QgS2V5IENvbHVtbiAtLVwiXG4gICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyPVwiU2VhcmNoIGZpZWxkcy4uLlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmllbGQgbmFtZSBpbiBBUEkgaXRlbSAoZS5nLiBpZCwgY29kZSlcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFZhbHVlRmllbGQoKVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmFsdWVGaWVsZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDYXNjYWRpbmcgRGVwZW5kZW5jeSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXJvd1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+RGVwZW5kZW50IE9uIChDYXNjYWRpbmcgUGFyZW50IEZpZWxkKTwvbGFiZWw+XG4gICAgICAgICAgPHJwdC1zZWFyY2hhYmxlLXNlbGVjdFxuICAgICAgICAgICAgW29wdGlvbnNdPVwicGFyZW50RmllbGRTZWxlY3RPcHRpb25zKClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWREZXBlbmRzT24oKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRlcGVuZHNPbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tIEluZGVwZW5kZW50IChSdW5zIG9uIGxvYWQpIC0tXCJcbiAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyPVwiU2VhcmNoIGNhbnZhcyBjb21wb25lbnRzLi4uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPCEtLSAzQy4gU1RBVElDIE9QVElPTlMgRURJVE9SIC0tPlxuICAgICAgQGlmIChjdXJyZW50U291cmNlVHlwZSgpID09PSAnc3RhdGljJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdGljLW9wdGlvbnMtd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0aWMtb3B0aW9ucy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5TdGF0aWMgT3B0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWFkZC1vcHRpb25cIiAoY2xpY2spPVwiYWRkU3RhdGljT3B0aW9uKClcIj5cbiAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJwbHVzXCIgW3NpemVdPVwiMTFcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj5BZGQgT3B0aW9uPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdGljLW9wdGlvbnMtbGlzdFwiPlxuICAgICAgICAgICAgQGZvciAob3B0IG9mIHN0YXRpY09wdGlvbnMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0aWMtb3B0aW9uLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dCBvcHQta2V5XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiS2V5XCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdC5rZXlcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlU3RhdGljT3B0aW9uKCRpbmRleCwgJ2tleScsICRldmVudClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLWlucHV0IG9wdC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVTdGF0aWNPcHRpb24oJGluZGV4LCAnbGFiZWwnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tcmVtb3ZlLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlU3RhdGljT3B0aW9uKCRpbmRleClcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmUgb3B0aW9uXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInRyYXNoXCIgW3NpemVdPVwiMTJcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+Il19
|
|
625
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZWRpdG9yLWRhdGFzb3VyY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvY29tcG9uZW50cy9wcm9wZXJ0eS1lZGl0b3IvcHJvcGVydHktZWRpdG9yLWRhdGFzb3VyY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvY29tcG9uZW50cy9wcm9wZXJ0eS1lZGl0b3IvcHJvcGVydHktZWRpdG9yLWRhdGFzb3VyY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPN0MsT0FBTyxFQUlMLDRCQUE0QixHQUM3QixNQUFNLDZEQUE2RCxDQUFDO0FBQ3JFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixHQUNuQixNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN2RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5REFBeUQsQ0FB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LEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7d0dBNXBCVSxpQ0FBaUM7NEZBQWpDLGlDQUFpQywrYkMvRDlDLHE0Z0JBeVpVLDZ6TURwV04sWUFBWSw4QkFDWixXQUFXLDBnQ0FDWCxnQkFBZ0IsdUdBQ2hCLCtCQUErQixvTkFDL0IsNEJBQTRCOzs0RkFNbkIsaUNBQWlDO2tCQWQ3QyxTQUFTOytCQUNFLGdDQUFnQyxjQUM5QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsK0JBQStCO3dCQUMvQiw0QkFBNEI7cUJBQzdCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzaWduZXJFbmRwb2ludHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGVzaWduZXItZW5kcG9pbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGF0YVNvdXJjZURlZmluaXRpb24sXG4gIERyb3Bkb3duU291cmNlVHlwZSxcbiAgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQge1xuICBEYXRhYmFzZUVudGl0eU1ldGFkYXRhLFxuICBFbnRpdHlDb2x1bW5NZXRhZGF0YSxcbiAgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEsXG4gIFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG59IGZyb20gJy4uLy4uLy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7XG4gIGRldGVjdERlZmF1bHREaXNwbGF5RmllbGQsXG4gIGRldGVjdERlZmF1bHRWYWx1ZUZpZWxkLFxuICBodW1hbml6ZUlkZW50aWZpZXIsXG59IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvaWRlbnRpZmllci1odW1hbml6ZXInO1xuaW1wb3J0IHsgdG9GaWVsZEtleSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvcmVwb3J0LXBhcmFtZXRlci51dGlsJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydERhdGFEaXNjb3ZlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtZGF0YS1kaXNjb3Zlcnkuc2VydmljZSc7XG5pbXBvcnQgeyBCV0FZU19SRVBPUlRfRU5EUE9JTlRTIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtdG9rZW5zJztcbmltcG9ydCB7IERlc2lnbmVyU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGVzaWduZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFJwdFNlYXJjaGFibGVTZWxlY3RDb21wb25lbnQsXG4gIFNlYXJjaGFibGVTZWxlY3RPcHRpb24sXG59IGZyb20gJy4uLy4uLy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJCaW5kaW5nRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9wYXJhbWV0ZXItYmluZGluZy1lZGl0b3IuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNPcHRpb25JdGVtIHtcbiAga2V5OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1wcm9wZXJ0eS1lZGl0b3ItZGF0YXNvdXJjZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUnB0SWNvbkNvbXBvbmVudCxcbiAgICBQYXJhbWV0ZXJCaW5kaW5nRWRpdG9yQ29tcG9uZW50LFxuICAgIFJwdFNlYXJjaGFibGVTZWxlY3RDb21wb25lbnQsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvcGVydHktZWRpdG9yLWRhdGFzb3VyY2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9wZXJ0eS1lZGl0b3IuY29tbW9uLmNzcycsICcuL3Byb3BlcnR5LWVkaXRvci1kYXRhc291cmNlLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvcGVydHlFZGl0b3JEYXRhc291cmNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludFNjb3BlID0gaW5qZWN0KERlc2lnbmVyRW5kcG9pbnRzU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBlbnRpdGllc1N1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNjb3ZlcnlBZGFwdGVyID0gaW5qZWN0KFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc2lnbmVyU3RhdGUgPSBpbmplY3QoRGVzaWduZXJTdGF0ZVNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YURpc2NvdmVyeSA9IGluamVjdChSZXBvcnREYXRhRGlzY292ZXJ5U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBpbmplY3QoQldBWVNfUkVQT1JUX0VORFBPSU5UUywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwcml2YXRlIGxhc3RMb2FkZWRLZXkgPSAnJztcbiAgcHJpdmF0ZSBjb2x1bW5zU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBhcmFtc1N1Yj86IFN1YnNjcmlwdGlvbjtcblxuICByZWFkb25seSBjb21wID0gaW5wdXQucmVxdWlyZWQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgYWxsQ29tcG9uZW50cyA9IGlucHV0PFJlcG9ydENvbXBvbmVudERlZmluaXRpb25bXT4oW10pO1xuXG4gIHJlYWRvbmx5IHVwZGF0ZURhdGFTb3VyY2UgPSBvdXRwdXQ8Q29tcG9uZW50RGF0YVNvdXJjZURlZmluaXRpb24+KCk7XG4gIHJlYWRvbmx5IHVwZGF0ZVByb3BlcnR5ID0gb3V0cHV0PHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0+KCk7XG5cbiAgcmVhZG9ubHkgaXNBZHZhbmNlZE1vZGUgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGlzTG9hZGluZ0VudGl0aWVzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNUZXN0aW5nQXBpID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgYXBpVGVzdFN0YXR1cyA9IHNpZ25hbDx7IG1lc3NhZ2U6IHN0cmluZzsga2luZDogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB9IHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgYWxsRW50aXRpZXMgPSBzaWduYWw8RGF0YWJhc2VFbnRpdHlNZXRhZGF0YVtdPihbXSk7XG4gIHJlYWRvbmx5IGVudGl0eUNvbHVtbnMgPSBzaWduYWw8RW50aXR5Q29sdW1uTWV0YWRhdGFbXT4oW10pO1xuICByZWFkb25seSBwcm9jZWR1cmVQYXJhbWV0ZXJzID0gc2lnbmFsPFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10+KFtdKTtcblxuICByZWFkb25seSBjdXJyZW50U291cmNlVHlwZSA9IGNvbXB1dGVkPERyb3Bkb3duU291cmNlVHlwZT4oKCkgPT4ge1xuICAgIGNvbnN0IGRzID0gdGhpcy5jb21wKCkuZGF0YVNvdXJjZTtcbiAgICBpZiAoZHM/LnNvdXJjZVR5cGUpIHJldHVybiBkcy5zb3VyY2VUeXBlO1xuICAgIGlmIChkcz8uYXBpRW5kcG9pbnQpIHJldHVybiAnYXBpJztcbiAgICBpZiAoZHM/LmVudGl0eU5hbWUpIHJldHVybiAndGFibGUnO1xuICAgIHJldHVybiAnc3RhdGljJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRFbnRpdHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy5lbnRpdHlOYW1lIHx8ICcnKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRBcGlFbmRwb2ludCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LmFwaUVuZHBvaW50IHx8ICcnKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRBcGlNZXRob2QgPSBjb21wdXRlZDwnR0VUJyB8ICdQT1NUJz4oKCkgPT4ge1xuICAgIGNvbnN0IG0gPSAodGhpcy5jb21wKCkuZGF0YVNvdXJjZT8uYXBpTWV0aG9kIHx8ICdHRVQnKS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiBtID09PSAnUE9TVCcgPyAnUE9TVCcgOiAnR0VUJztcbiAgfSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0YVBhdGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy5kYXRhUGF0aCB8fCAnJyk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkVXNlUHJveHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy51c2VQcm94eSA9PT0gdHJ1ZSk7XG5cbiAgcmVhZG9ubHkgcmVnaXN0ZXJlZEFwaXMgPSBjb21wdXRlZDxTZWFyY2hhYmxlU2VsZWN0T3B0aW9uW10+KCgpID0+IHtcbiAgICBjb25zdCBhcGlzID0gdGhpcy5lbmRwb2ludHM/LmFwaUVuZHBvaW50cyB8fCBbXTtcbiAgICByZXR1cm4gYXBpcy5tYXAoKGFwaSkgPT4ge1xuICAgICAgY29uc3QgZXAgPSBhcGkuZW5kcG9pbnQgfHwgYXBpLnVybCB8fCAnJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBlcCxcbiAgICAgICAgbGFiZWw6IGFwaS5uYW1lIHx8IGVwLFxuICAgICAgICBzdWJsYWJlbDogYCR7YXBpLm1ldGhvZCB8fCAnR0VUJ30gJHtlcH1gLFxuICAgICAgICBiYWRnZTogYXBpLmNhdGVnb3J5IHx8ICdBUEknLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRWYWx1ZUZpZWxkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8udmFsdWVGaWVsZCB8fCAnJyk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRGlzcGxheUZpZWxkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8uZGlzcGxheUZpZWxkIHx8ICcnKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWREZXBlbmRzT24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy5kZXBlbmRzT24/LlswXSB8fCAnJyk7XG5cbiAgcmVhZG9ubHkgYXZhaWxhYmxlVGFibGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbEVudGl0aWVzKClcbiAgICAgIC5maWx0ZXIoKGUpID0+IHtcbiAgICAgICAgY29uc3QgdCA9IChlLnR5cGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB0ID09PSAndGFibGUnIHx8IHQgPT09ICd2aWV3JztcbiAgICAgIH0pXG4gICAgICAubWFwKChlKSA9PiAoe1xuICAgICAgICAuLi5lLFxuICAgICAgICBkaXNwbGF5TmFtZTogZS5mcmllbmRseU5hbWUgfHwgaHVtYW5pemVJZGVudGlmaWVyKGUubmFtZSksXG4gICAgICB9KSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGF2YWlsYWJsZVByb2NlZHVyZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW50aXRpZXMoKVxuICAgICAgLmZpbHRlcigoZSkgPT4ge1xuICAgICAgICBjb25zdCB0ID0gKGUudHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHQgPT09ICdzdG9yZWRfcHJvY2VkdXJlJyB8fCB0ID09PSAncHJvY2VkdXJlJyB8fCB0LmluY2x1ZGVzKCdwcm9jZWR1cmUnKTtcbiAgICAgIH0pXG4gICAgICAubWFwKChlKSA9PiAoe1xuICAgICAgICAuLi5lLFxuICAgICAgICBkaXNwbGF5TmFtZTogZS5mcmllbmRseU5hbWUgfHwgaHVtYW5pemVJZGVudGlmaWVyKGUubmFtZSksXG4gICAgICB9KSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGF2YWlsYWJsZVBhcmVudEZpZWxkcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5hbGxDb21wb25lbnRzKCkuZmlsdGVyKChjKSA9PiBjLmlkICE9PSB0aGlzLmNvbXAoKS5pZCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHN0YXRpY09wdGlvbnMgPSBjb21wdXRlZDxTdGF0aWNPcHRpb25JdGVtW10+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5jb21wKCkucHJvcGVydGllcz8uWydvcHRpb25zJ107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0cykpIHtcbiAgICAgIHJldHVybiBvcHRzLm1hcCgobykgPT4gKHsga2V5OiBTdHJpbmcoby5rZXkgPz8gby52YWx1ZSA/PyAnJyksIGxhYmVsOiBTdHJpbmcoby5sYWJlbCA/PyAnJykgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgeyBrZXk6ICcxJywgbGFiZWw6ICdPcHRpb24gMScgfSxcbiAgICAgIHsga2V5OiAnMicsIGxhYmVsOiAnT3B0aW9uIDInIH0sXG4gICAgXTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcHJvY2VkdXJlU2VsZWN0T3B0aW9ucyA9IGNvbXB1dGVkPFNlYXJjaGFibGVTZWxlY3RPcHRpb25bXT4oKCkgPT4ge1xuICAgIGNvbnN0IGlzQWR2ID0gdGhpcy5pc0FkdmFuY2VkTW9kZSgpO1xuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZVByb2NlZHVyZXMoKS5tYXAoKHNwKSA9PiAoe1xuICAgICAgdmFsdWU6IHNwLm5hbWUsXG4gICAgICBsYWJlbDogaXNBZHYgPyBgJHtzcC5zY2hlbWEgfHwgJ2Ribyd9LiR7c3AubmFtZX1gIDogc3AuZGlzcGxheU5hbWUsXG4gICAgICBzdWJsYWJlbDogaXNBZHYgPyAoc3AuZGlzcGxheU5hbWUgIT09IHNwLm5hbWUgPyBzcC5kaXNwbGF5TmFtZSA6IHVuZGVmaW5lZCkgOiBgJHtzcC5zY2hlbWEgfHwgJ2Ribyd9LiR7c3AubmFtZX1gLFxuICAgICAgYmFkZ2U6IHNwLmNhdGVnb3J5IHx8ICdTUCcsXG4gICAgfSkpO1xuICB9KTtcblxuICByZWFkb25seSB0YWJsZVNlbGVjdE9wdGlvbnMgPSBjb21wdXRlZDxTZWFyY2hhYmxlU2VsZWN0T3B0aW9uW10+KCgpID0+IHtcbiAgICBjb25zdCBpc0FkdiA9IHRoaXMuaXNBZHZhbmNlZE1vZGUoKTtcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVUYWJsZXMoKS5tYXAoKHRibCkgPT4gKHtcbiAgICAgIHZhbHVlOiB0YmwubmFtZSxcbiAgICAgIGxhYmVsOiBpc0FkdiA/IGAke3RibC5zY2hlbWEgfHwgJ2Ribyd9LiR7dGJsLm5hbWV9YCA6IHRibC5kaXNwbGF5TmFtZSxcbiAgICAgIHN1YmxhYmVsOiBpc0FkdiA/ICh0YmwuZGlzcGxheU5hbWUgIT09IHRibC5uYW1lID8gdGJsLmRpc3BsYXlOYW1lIDogdW5kZWZpbmVkKSA6IGAke3RibC5zY2hlbWEgfHwgJ2Ribyd9LiR7dGJsLm5hbWV9YCxcbiAgICAgIGJhZGdlOiB0YmwudHlwZSB8fCAnVGFibGUnLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZGlzcGxheUZpZWxkU2VsZWN0T3B0aW9ucyA9IGNvbXB1dGVkPFNlYXJjaGFibGVTZWxlY3RPcHRpb25bXT4oKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0eUNvbHVtbnMoKS5tYXAoKGNvbCkgPT4gKHtcbiAgICAgIHZhbHVlOiBjb2wuZmllbGQsXG4gICAgICBsYWJlbDogY29sLmxhYmVsIHx8IGNvbC5maWVsZCxcbiAgICAgIHN1YmxhYmVsOiBjb2wuZmllbGQgIT09IGNvbC5sYWJlbCA/IGNvbC5maWVsZCA6IHVuZGVmaW5lZCxcbiAgICAgIGJhZGdlOiBjb2wuZGF0YVR5cGUgfHwgdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdmFsdWVGaWVsZFNlbGVjdE9wdGlvbnMgPSBjb21wdXRlZDxTZWFyY2hhYmxlU2VsZWN0T3B0aW9uW10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdHlDb2x1bW5zKCkubWFwKChjb2wpID0+ICh7XG4gICAgICB2YWx1ZTogY29sLmZpZWxkLFxuICAgICAgbGFiZWw6IGNvbC5sYWJlbCB8fCBjb2wuZmllbGQsXG4gICAgICBzdWJsYWJlbDogY29sLmZpZWxkICE9PSBjb2wubGFiZWwgPyBjb2wuZmllbGQgOiB1bmRlZmluZWQsXG4gICAgICBiYWRnZTogY29sLmRhdGFUeXBlIHx8IHVuZGVmaW5lZCxcbiAgICB9KSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhcmVudEZpZWxkU2VsZWN0T3B0aW9ucyA9IGNvbXB1dGVkPFNlYXJjaGFibGVTZWxlY3RPcHRpb25bXT4oKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZVBhcmVudEZpZWxkcygpLm1hcCgoYykgPT4gKHtcbiAgICAgIHZhbHVlOiBjLmtleSB8fCBjLmlkLFxuICAgICAgbGFiZWw6IGMubGFiZWwgfHwgYy5rZXkgfHwgYy5pZCxcbiAgICAgIHN1YmxhYmVsOiBjLmtleSB8fCBjLmlkLFxuICAgICAgYmFkZ2U6IGMudHlwZSxcbiAgICB9KSk7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLmVuZHBvaW50U2NvcGU/LnJldmlzaW9uKCk7XG4gICAgICB0aGlzLmxvYWRFbnRpdGllcygpO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLnNlbGVjdGVkRW50aXR5KCk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmN1cnJlbnRTb3VyY2VUeXBlKCk7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke3R5cGV9OiR7ZW50aXR5fToke3RoaXMuZW5kcG9pbnRTY29wZT8ucmV2aXNpb24oKSA/PyAwfWA7XG4gICAgICAgIGlmIChlbnRpdHkgJiYgKHR5cGUgPT09ICd0YWJsZScgfHwgdHlwZSA9PT0gJ3Byb2NlZHVyZScpKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGFzdExvYWRlZEtleSAhPT0ga2V5KSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RMb2FkZWRLZXkgPSBrZXk7XG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5sb2FkRW50aXR5RGV0YWlscyhlbnRpdHksIHR5cGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sYXN0TG9hZGVkS2V5ID0gJyc7XG4gICAgICAgICAgdGhpcy5jb2x1bW5zU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMucGFyYW1zU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMuZW50aXR5Q29sdW1ucy5zZXQoW10pO1xuICAgICAgICAgIHRoaXMucHJvY2VkdXJlUGFyYW1ldGVycy5zZXQoW10pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZW50aXRpZXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jb2x1bW5zU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucGFyYW1zU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbG9hZEVudGl0aWVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNjb3ZlcnlBZGFwdGVyKSByZXR1cm47XG4gICAgdGhpcy5pc0xvYWRpbmdFbnRpdGllcy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5lbnRpdGllc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmVudGl0aWVzU3ViID0gdGhpcy5kaXNjb3ZlcnlBZGFwdGVyLmdldEVudGl0aWVzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChlbnRpdGllcykgPT4ge1xuICAgICAgICB0aGlzLmFsbEVudGl0aWVzLnNldChlbnRpdGllcyk7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRW50aXRpZXMuc2V0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbUHJvcGVydHlFZGl0b3JEYXRhc291cmNlXSBGYWlsZWQgdG8gbG9hZCBlbnRpdGllczonLCBlcnIpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ0VudGl0aWVzLnNldChmYWxzZSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgbG9hZEVudGl0eURldGFpbHMoZW50aXR5TmFtZTogc3RyaW5nLCB0eXBlOiBEcm9wZG93blNvdXJjZVR5cGUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzY292ZXJ5QWRhcHRlcikgcmV0dXJuO1xuXG4gICAgdGhpcy5jb2x1bW5zU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucGFyYW1zU3ViPy51bnN1YnNjcmliZSgpO1xuXG4gICAgY29uc3QgZGJUeXBlID0gdHlwZSA9PT0gJ3Byb2NlZHVyZScgPyAnc3RvcmVkX3Byb2NlZHVyZScgOiAndGFibGUnO1xuICAgIHRoaXMuY29sdW1uc1N1YiA9IHRoaXMuZGlzY292ZXJ5QWRhcHRlci5nZXRDb2x1bW5zKGVudGl0eU5hbWUsICdkYm8nLCBkYlR5cGUpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoY29scykgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ29scyA9IGNvbHMgfHwgW107XG4gICAgICAgIHRoaXMuZW50aXR5Q29sdW1ucy5zZXQoc2FmZUNvbHMpO1xuXG4gICAgICAgIC8vIEF1dG8tZGV0ZWN0IGRlZmF1bHQgdmFsdWVGaWVsZCBhbmQgZGlzcGxheUZpZWxkIGlmIG5vdCB5ZXQgc2V0XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWwgPSB0aGlzLnNlbGVjdGVkVmFsdWVGaWVsZCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50RGlzcCA9IHRoaXMuc2VsZWN0ZWREaXNwbGF5RmllbGQoKTtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGVkVmFsID0gZGV0ZWN0RGVmYXVsdFZhbHVlRmllbGQoc2FmZUNvbHMpO1xuICAgICAgICBjb25zdCBzdWdnZXN0ZWREaXNwID0gZGV0ZWN0RGVmYXVsdERpc3BsYXlGaWVsZChzYWZlQ29scyk7XG5cbiAgICAgICAgY29uc3QgbmV4dFZhbCA9IGN1cnJlbnRWYWwgfHwgc3VnZ2VzdGVkVmFsIHx8IHNhZmVDb2xzWzBdPy5maWVsZCB8fCAnJztcbiAgICAgICAgY29uc3QgbmV4dERpc3AgPSBjdXJyZW50RGlzcCB8fCBzdWdnZXN0ZWREaXNwIHx8IHNhZmVDb2xzWzFdPy5maWVsZCB8fCBzYWZlQ29sc1swXT8uZmllbGQgfHwgJyc7XG5cbiAgICAgICAgLy8gT25seSBlbWl0IGlmIHdlIGFjdHVhbGx5IGRldGVjdGVkIGEgbm9uLWVtcHR5IGZpZWxkIHRoYXQgZGlmZmVycyBmcm9tIGN1cnJlbnQgc3RhdGVcbiAgICAgICAgaWYgKChuZXh0VmFsICE9PSBjdXJyZW50VmFsIHx8IG5leHREaXNwICE9PSBjdXJyZW50RGlzcCkgJiYgKG5leHRWYWwgfHwgbmV4dERpc3ApKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgICAgICAgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2UgPz8geyBkaXNwbGF5RmllbGQ6ICcnLCB2YWx1ZUZpZWxkOiAnJyB9KSxcbiAgICAgICAgICAgIHNvdXJjZVR5cGU6IHR5cGUsXG4gICAgICAgICAgICBlbnRpdHlOYW1lLFxuICAgICAgICAgICAgdmFsdWVGaWVsZDogbmV4dFZhbCxcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogbmV4dERpc3AsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcihgW1Byb3BlcnR5RWRpdG9yRGF0YXNvdXJjZV0gRmFpbGVkIHRvIGxvYWQgY29sdW1ucyBmb3IgJHtlbnRpdHlOYW1lfTpgLCBlcnIpLFxuICAgIH0pO1xuXG4gICAgaWYgKHR5cGUgPT09ICdwcm9jZWR1cmUnKSB7XG4gICAgICB0aGlzLnBhcmFtc1N1YiA9IHRoaXMuZGlzY292ZXJ5QWRhcHRlci5nZXRQYXJhbWV0ZXJzKGVudGl0eU5hbWUsICdkYm8nKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocGFyYW1zKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2FmZVBhcmFtcyA9IHBhcmFtcyB8fCBbXTtcbiAgICAgICAgICB0aGlzLnByb2NlZHVyZVBhcmFtZXRlcnMuc2V0KHNhZmVQYXJhbXMpO1xuICAgICAgICAgIC8vIE9ubHkgYXV0by1saW5rIHRvIGV4aXN0aW5nIHNlc3Npb24gb3IgZXhpc3RpbmcgY2FudmFzIGZpZWxkcy5cbiAgICAgICAgICAvLyBORVZFUiBtdXRhdGUgY2FudmFzIG9yIGNyZWF0ZSBuZXcgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5IVxuICAgICAgICAgIHRoaXMuYXV0b0xpbmtFeGlzdGluZ1BhcmFtZXRlcnMoc2FmZVBhcmFtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKGBbUHJvcGVydHlFZGl0b3JEYXRhc291cmNlXSBGYWlsZWQgdG8gbG9hZCBwYXJhbXMgZm9yICR7ZW50aXR5TmFtZX06YCwgZXJyKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb24tZGVzdHJ1Y3RpdmUgbGlua2luZzogYmluZHMgcGFyYW1ldGVycyB0byBzZXNzaW9uIG9yIGFscmVhZHktZXhpc3RpbmcgY2FudmFzIGZpZWxkcy5cbiAgICogTmV2ZXIgbXV0YXRlcyBvciBhZGRzIG5ldyBjb21wb25lbnRzIHRvIHRoZSBjYW52YXMuXG4gICAqL1xuICBhdXRvTGlua0V4aXN0aW5nUGFyYW1ldGVycyhwYXJhbXNMaXN0PzogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtcyA9IHBhcmFtc0xpc3QgfHwgdGhpcy5wcm9jZWR1cmVQYXJhbWV0ZXJzKCk7XG4gICAgaWYgKCFwYXJhbXMgfHwgcGFyYW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgYWxsb3dlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICBjb25zdCBjbGVhbiA9IHBhcmFtLm5hbWUucmVwbGFjZSgvXkAvLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIGFsbG93ZWQuYWRkKGNsZWFuKTtcbiAgICAgIGFsbG93ZWQuYWRkKGBAJHtjbGVhbn1gKTtcbiAgICAgIGFsbG93ZWQuYWRkKHBhcmFtLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudE1hcHBpbmdzID0geyAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZT8ucGFyYW1ldGVyTWFwcGluZ3MgPz8ge30pIH07XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICAgIC8vIFBydW5lIG9ycGhhbmVkIGtleXMgdGhhdCBkbyBub3QgYmVsb25nIHRvIHRoaXMgc3RvcmVkIHByb2NlZHVyZVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGN1cnJlbnRNYXBwaW5ncykpIHtcbiAgICAgIGlmICghYWxsb3dlZC5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIGRlbGV0ZSBjdXJyZW50TWFwcGluZ3Nba2V5XTtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBwYXJhbXMpIHtcbiAgICAgIGNvbnN0IGNsZWFuID0gcGFyYW0ubmFtZS5yZXBsYWNlKC9eQC8sICcnKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gY3VycmVudE1hcHBpbmdzW3BhcmFtLm5hbWVdID8/IGN1cnJlbnRNYXBwaW5nc1tjbGVhbl07XG4gICAgICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCAmJiBleGlzdGluZyAhPT0gJycpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIDEuIFNlc3Npb24gbWF0Y2ggKGUuZy4gY29tcGFueUlkLCBicmFuY2hJZCwgdXNlcklkKVxuICAgICAgY29uc3Qgc2Vzc2lvbk1hdGNoID1cbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZT8ubWF0Y2hQYXJhbWV0ZXIoY2xlYW4pID8/IHRoaXMuc2Vzc2lvblNlcnZpY2U/Lm1hdGNoUGFyYW1ldGVyKHBhcmFtLm5hbWUpO1xuICAgICAgaWYgKHNlc3Npb25NYXRjaCkge1xuICAgICAgICBjdXJyZW50TWFwcGluZ3NbcGFyYW0ubmFtZV0gPSBge3tzZXNzaW9uLiR7c2Vzc2lvbk1hdGNoLnNlc3Npb25LZXl9fX1gO1xuICAgICAgICBjdXJyZW50TWFwcGluZ3NbY2xlYW5dID0gYHt7c2Vzc2lvbi4ke3Nlc3Npb25NYXRjaC5zZXNzaW9uS2V5fX19YDtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBFeGlzdGluZyBjYW52YXMgZmllbGQgbWF0Y2hcbiAgICAgIGNvbnN0IG1hdGNoZWRDb21wID0gdGhpcy5hbGxDb21wb25lbnRzKCkuZmluZCgoYykgPT4ge1xuICAgICAgICBpZiAoYy5pZCA9PT0gdGhpcy5jb21wKCkuaWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgY2sgPSAoYy5rZXkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNsID0gY2xlYW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGNrID09PSBjbCB8fCBjayA9PT0gdG9GaWVsZEtleShjbCk7XG4gICAgICB9KTtcbiAgICAgIGlmIChtYXRjaGVkQ29tcCkge1xuICAgICAgICBjdXJyZW50TWFwcGluZ3NbcGFyYW0ubmFtZV0gPSBge3ske21hdGNoZWRDb21wLmtleX19fWA7XG4gICAgICAgIGN1cnJlbnRNYXBwaW5nc1tjbGVhbl0gPSBge3ske21hdGNoZWRDb21wLmtleX19fWA7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdNYXBwaW5ncyA9IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LnBhcmFtZXRlck1hcHBpbmdzID8/IHt9O1xuICAgICAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhjdXJyZW50TWFwcGluZ3MpO1xuICAgICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhleGlzdGluZ01hcHBpbmdzKTtcbiAgICAgIGNvbnN0IGlzRGlmZmVyZW50ID1cbiAgICAgICAga2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGggfHxcbiAgICAgICAga2V5c0Euc29tZSgoaykgPT4gY3VycmVudE1hcHBpbmdzW2tdICE9PSBleGlzdGluZ01hcHBpbmdzW2tdKTtcblxuICAgICAgaWYgKGlzRGlmZmVyZW50KSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVNvdXJjZS5lbWl0KHtcbiAgICAgICAgICAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZSA/PyB7IGRpc3BsYXlGaWVsZDogJycsIHZhbHVlRmllbGQ6ICcnIH0pLFxuICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmdzOiBjdXJyZW50TWFwcGluZ3MsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsaWNpdCB1c2VyLWluaXRpYXRlZCBhY3Rpb246IGxpbmtzIGV4aXN0aW5nIGZpZWxkcywgYW5kIGNyZWF0ZXMgbWlzc2luZyBmaWx0ZXIgaW5wdXRzIG9uIGNhbnZhcy5cbiAgICogUmVzdG9yZXMgc2VsZWN0aW9uIHRvIHRoZSBjdXJyZW50IGRyb3Bkb3duIGNvbXBvbmVudCBzbyB0aGUgdXNlciBzdGF5cyBpbiB0aGlzIHByb3BlcnR5IGVkaXRvci5cbiAgICovXG4gIGF1dG9XaXJlQWxsUGFyYW1ldGVycyhwYXJhbXNMaXN0PzogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtcyA9IHBhcmFtc0xpc3QgfHwgdGhpcy5wcm9jZWR1cmVQYXJhbWV0ZXJzKCk7XG4gICAgaWYgKCFwYXJhbXMgfHwgcGFyYW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgYWxsb3dlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICBjb25zdCBjbGVhbiA9IHBhcmFtLm5hbWUucmVwbGFjZSgvXkAvLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIGFsbG93ZWQuYWRkKGNsZWFuKTtcbiAgICAgIGFsbG93ZWQuYWRkKGBAJHtjbGVhbn1gKTtcbiAgICAgIGFsbG93ZWQuYWRkKHBhcmFtLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudE1hcHBpbmdzID0geyAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZT8ucGFyYW1ldGVyTWFwcGluZ3MgPz8ge30pIH07XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICAgIC8vIFBydW5lIG9ycGhhbmVkIGtleXMgdGhhdCBkbyBub3QgYmVsb25nIHRvIHRoaXMgc3RvcmVkIHByb2NlZHVyZVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGN1cnJlbnRNYXBwaW5ncykpIHtcbiAgICAgIGlmICghYWxsb3dlZC5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIGRlbGV0ZSBjdXJyZW50TWFwcGluZ3Nba2V5XTtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBwYXJhbXMpIHtcbiAgICAgIGNvbnN0IGNsZWFuID0gcGFyYW0ubmFtZS5yZXBsYWNlKC9eQC8sICcnKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gY3VycmVudE1hcHBpbmdzW3BhcmFtLm5hbWVdID8/IGN1cnJlbnRNYXBwaW5nc1tjbGVhbl07XG4gICAgICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCAmJiBleGlzdGluZyAhPT0gJycpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIDEuIFNlc3Npb24gbWF0Y2ggKGUuZy4gY29tcGFueUlkLCBicmFuY2hJZCwgdXNlcklkKVxuICAgICAgY29uc3Qgc2Vzc2lvbk1hdGNoID1cbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZT8ubWF0Y2hQYXJhbWV0ZXIoY2xlYW4pID8/IHRoaXMuc2Vzc2lvblNlcnZpY2U/Lm1hdGNoUGFyYW1ldGVyKHBhcmFtLm5hbWUpO1xuICAgICAgaWYgKHNlc3Npb25NYXRjaCkge1xuICAgICAgICBjdXJyZW50TWFwcGluZ3NbcGFyYW0ubmFtZV0gPSBge3tzZXNzaW9uLiR7c2Vzc2lvbk1hdGNoLnNlc3Npb25LZXl9fX1gO1xuICAgICAgICBjdXJyZW50TWFwcGluZ3NbY2xlYW5dID0gYHt7c2Vzc2lvbi4ke3Nlc3Npb25NYXRjaC5zZXNzaW9uS2V5fX19YDtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBFeGlzdGluZyBjYW52YXMgZmllbGQgbWF0Y2hcbiAgICAgIGNvbnN0IG1hdGNoZWRDb21wID0gdGhpcy5hbGxDb21wb25lbnRzKCkuZmluZCgoYykgPT4ge1xuICAgICAgICBpZiAoYy5pZCA9PT0gdGhpcy5jb21wKCkuaWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgY2sgPSAoYy5rZXkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNsID0gY2xlYW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGNrID09PSBjbCB8fCBjayA9PT0gdG9GaWVsZEtleShjbCk7XG4gICAgICB9KTtcbiAgICAgIGlmIChtYXRjaGVkQ29tcCkge1xuICAgICAgICBjdXJyZW50TWFwcGluZ3NbcGFyYW0ubmFtZV0gPSBge3ske21hdGNoZWRDb21wLmtleX19fWA7XG4gICAgICAgIGN1cnJlbnRNYXBwaW5nc1tjbGVhbl0gPSBge3ske21hdGNoZWRDb21wLmtleX19fWA7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gMy4gQXV0by1jcmVhdGUgbWlzc2luZyBjYW52YXMgZmllbGQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZCBieSB1c2VyXG4gICAgICBpZiAodGhpcy5kZXNpZ25lclN0YXRlKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyID0gY2xlYW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBUeXBlID0gJ2lucHV0JztcbiAgICAgICAgaWYgKGxvd2VyLmluY2x1ZGVzKCdkYXRlJykgfHwgbG93ZXIuaW5jbHVkZXMoJ3RpbWUnKSB8fCBwYXJhbS5kYXRhVHlwZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZGF0ZScpKSB7XG4gICAgICAgICAgY29tcFR5cGUgPSAnZGF0ZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgcGFyYW0uZGF0YVR5cGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2ludCcpIHx8XG4gICAgICAgICAgcGFyYW0uZGF0YVR5cGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2RlY2ltYWwnKSB8fFxuICAgICAgICAgIHBhcmFtLmRhdGFUeXBlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdudW1lcmljJykgfHxcbiAgICAgICAgICBwYXJhbS5kYXRhVHlwZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZmxvYXQnKSB8fFxuICAgICAgICAgIGxvd2VyLmluY2x1ZGVzKCdubycpIHx8XG4gICAgICAgICAgbG93ZXIuaW5jbHVkZXMoJ2lkJykgfHxcbiAgICAgICAgICBsb3dlci5pbmNsdWRlcygnYW1vdW50JykgfHxcbiAgICAgICAgICBsb3dlci5pbmNsdWRlcygncmF0ZScpIHx8XG4gICAgICAgICAgbG93ZXIuaW5jbHVkZXMoJ3F0eScpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbXBUeXBlID0gJ251bWJlcic7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdLZXkgPSB0b0ZpZWxkS2V5KGNsZWFuKTtcbiAgICAgICAgY29uc3QgbmV3TGFiZWwgPSBodW1hbml6ZUlkZW50aWZpZXIoY2xlYW4pO1xuICAgICAgICBjb25zdCBjcmVhdGVkID0gdGhpcy5kZXNpZ25lclN0YXRlLmFkZENvbXBvbmVudChjb21wVHlwZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAga2V5OiBuZXdLZXksXG4gICAgICAgICAgbGFiZWw6IG5ld0xhYmVsLFxuICAgICAgICAgIHByb3BlcnRpZXM6IGNvbXBUeXBlID09PSAnZGF0ZScgPyB7IHBsYWNlaG9sZGVyOiAnU2VsZWN0ICcgKyBuZXdMYWJlbCB9IDoge30sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjcmVhdGVkKSB7XG4gICAgICAgICAgY3VycmVudE1hcHBpbmdzW3BhcmFtLm5hbWVdID0gYHt7JHtjcmVhdGVkLmtleX19fWA7XG4gICAgICAgICAgY3VycmVudE1hcHBpbmdzW2NsZWFuXSA9IGB7eyR7Y3JlYXRlZC5rZXl9fX1gO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBzZWxlY3Rpb24gdG8gY3VycmVudCBkcm9wZG93biBzbyB1c2VyIGlzIG5vdCBuYXZpZ2F0ZWQgYXdheVxuICAgIGlmICh0aGlzLmRlc2lnbmVyU3RhdGUpIHtcbiAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5zZWxlY3RDb21wb25lbnQodGhpcy5jb21wKCkuaWQpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAgIC4uLih0aGlzLmNvbXAoKS5kYXRhU291cmNlID8/IHsgZGlzcGxheUZpZWxkOiAnJywgdmFsdWVGaWVsZDogJycgfSksXG4gICAgICAgIHBhcmFtZXRlck1hcHBpbmdzOiBjdXJyZW50TWFwcGluZ3MsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRTb3VyY2VUeXBlKHR5cGU6IERyb3Bkb3duU291cmNlVHlwZSk6IHZvaWQge1xuICAgIGlmICh0eXBlID09PSAnc3RhdGljJykge1xuICAgICAgdGhpcy5sYXN0TG9hZGVkS2V5ID0gJyc7XG4gICAgICB0aGlzLmNvbHVtbnNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnBhcmFtc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuZW50aXR5Q29sdW1ucy5zZXQoW10pO1xuICAgICAgdGhpcy5wcm9jZWR1cmVQYXJhbWV0ZXJzLnNldChbXSk7XG4gICAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAgIHNvdXJjZVR5cGU6ICdzdGF0aWMnLFxuICAgICAgICBkaXNwbGF5RmllbGQ6ICcnLFxuICAgICAgICB2YWx1ZUZpZWxkOiAnJyxcbiAgICAgICAgcGFyYW1ldGVyTWFwcGluZ3M6IHt9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdhcGknKSB7XG4gICAgICB0aGlzLmxhc3RMb2FkZWRLZXkgPSAnJztcbiAgICAgIHRoaXMuY29sdW1uc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMucGFyYW1zU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgICBzb3VyY2VUeXBlOiAnYXBpJyxcbiAgICAgICAgYXBpRW5kcG9pbnQ6IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LmFwaUVuZHBvaW50IHx8ICcnLFxuICAgICAgICBhcGlNZXRob2Q6IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LmFwaU1ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LmRhdGFQYXRoIHx8ICcnLFxuICAgICAgICB1c2VQcm94eTogdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8udXNlUHJveHkgfHwgZmFsc2UsXG4gICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8uZGlzcGxheUZpZWxkIHx8ICcnLFxuICAgICAgICB2YWx1ZUZpZWxkOiB0aGlzLmNvbXAoKS5kYXRhU291cmNlPy52YWx1ZUZpZWxkIHx8ICcnLFxuICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nczogdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8ucGFyYW1ldGVyTWFwcGluZ3MgPz8ge30sXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbGxFbnRpdGllcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5sb2FkRW50aXRpZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50RW50aXR5ID0gdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8uZW50aXR5TmFtZTtcbiAgICBjb25zdCBpc1ZhbGlkRm9yVHlwZSA9XG4gICAgICB0eXBlID09PSAndGFibGUnXG4gICAgICAgID8gdGhpcy5hdmFpbGFibGVUYWJsZXMoKS5zb21lKCh0KSA9PiB0Lm5hbWUgPT09IGN1cnJlbnRFbnRpdHkpXG4gICAgICAgIDogdGhpcy5hdmFpbGFibGVQcm9jZWR1cmVzKCkuc29tZSgocCkgPT4gcC5uYW1lID09PSBjdXJyZW50RW50aXR5KTtcblxuICAgIHRoaXMubGFzdExvYWRlZEtleSA9ICcnO1xuICAgIHRoaXMudXBkYXRlRGF0YVNvdXJjZS5lbWl0KHtcbiAgICAgIHNvdXJjZVR5cGU6IHR5cGUsXG4gICAgICBlbnRpdHlOYW1lOiBpc1ZhbGlkRm9yVHlwZSA/IChjdXJyZW50RW50aXR5IHx8ICcnKSA6ICcnLFxuICAgICAgc2NoZW1hOiAnZGJvJyxcbiAgICAgIGRpc3BsYXlGaWVsZDogJycsXG4gICAgICB2YWx1ZUZpZWxkOiAnJyxcbiAgICAgIHBhcmFtZXRlck1hcHBpbmdzOiBpc1ZhbGlkRm9yVHlwZSA/ICh0aGlzLmNvbXAoKS5kYXRhU291cmNlPy5wYXJhbWV0ZXJNYXBwaW5ncyA/PyB7fSkgOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uQXBpRW5kcG9pbnRTZWxlY3RlZChlbmRwb2ludDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2UgPz8geyBkaXNwbGF5RmllbGQ6ICcnLCB2YWx1ZUZpZWxkOiAnJyB9KSxcbiAgICAgIHNvdXJjZVR5cGU6ICdhcGknLFxuICAgICAgYXBpRW5kcG9pbnQ6IGVuZHBvaW50LnRyaW0oKSxcbiAgICAgIGFwaU1ldGhvZDogdGhpcy5zZWxlY3RlZEFwaU1ldGhvZCgpLFxuICAgIH0pO1xuICB9XG5cbiAgb25BcGlNZXRob2RDaGFuZ2VkKG1ldGhvZDogJ0dFVCcgfCAnUE9TVCcpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZSA/PyB7IGRpc3BsYXlGaWVsZDogJycsIHZhbHVlRmllbGQ6ICcnIH0pLFxuICAgICAgYXBpTWV0aG9kOiBtZXRob2QsXG4gICAgfSk7XG4gIH1cblxuICBvbkRhdGFQYXRoQ2hhbmdlZChkYXRhUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2UgPz8geyBkaXNwbGF5RmllbGQ6ICcnLCB2YWx1ZUZpZWxkOiAnJyB9KSxcbiAgICAgIGRhdGFQYXRoOiBkYXRhUGF0aC50cmltKCksXG4gICAgfSk7XG4gIH1cblxuICBvblVzZVByb3h5Q2hhbmdlZCh1c2VQcm94eTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRGF0YVNvdXJjZS5lbWl0KHtcbiAgICAgIC4uLih0aGlzLmNvbXAoKS5kYXRhU291cmNlID8/IHsgZGlzcGxheUZpZWxkOiAnJywgdmFsdWVGaWVsZDogJycgfSksXG4gICAgICB1c2VQcm94eSxcbiAgICB9KTtcbiAgfVxuXG4gIHRlc3RBbmREZXRlY3RBcGlDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5zZWxlY3RlZEFwaUVuZHBvaW50KCk7XG4gICAgaWYgKCFlbmRwb2ludCB8fCAhdGhpcy5kYXRhRGlzY292ZXJ5KSByZXR1cm47XG5cbiAgICB0aGlzLmlzVGVzdGluZ0FwaS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5hcGlUZXN0U3RhdHVzLnNldChudWxsKTtcblxuICAgIGNvbnN0IGRzID0gdGhpcy5jb21wKCkuZGF0YVNvdXJjZTtcbiAgICB0aGlzLmRhdGFEaXNjb3ZlcnlcbiAgICAgIC5hdXRvRGV0ZWN0QXBpQ29sdW1ucyhcbiAgICAgICAge1xuICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgIG1ldGhvZDogdGhpcy5zZWxlY3RlZEFwaU1ldGhvZCgpLFxuICAgICAgICAgIGRhdGFQYXRoOiB0aGlzLnNlbGVjdGVkRGF0YVBhdGgoKSxcbiAgICAgICAgICB1c2VQcm94eTogdGhpcy5zZWxlY3RlZFVzZVByb3h5KCksXG4gICAgICAgIH0sXG4gICAgICAgIGRzPy5wYXJhbWV0ZXJNYXBwaW5ncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChjb2xzKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1Rlc3RpbmdBcGkuc2V0KGZhbHNlKTtcbiAgICAgICAgICBjb25zdCBzYWZlQ29sczogRW50aXR5Q29sdW1uTWV0YWRhdGFbXSA9IGNvbHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgICBsZXQgZHQ6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnZGF0ZScgfCAnYm9vbGVhbicgPSAnc3RyaW5nJztcbiAgICAgICAgICAgIGlmIChjLmRhdGFUeXBlID09PSAnbnVtYmVyJyB8fCAoYy5kYXRhVHlwZSBhcyBzdHJpbmcpID09PSAnY3VycmVuY3knKSBkdCA9ICdudW1iZXInO1xuICAgICAgICAgICAgZWxzZSBpZiAoYy5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nKSBkdCA9ICdib29sZWFuJztcbiAgICAgICAgICAgIGVsc2UgaWYgKGMuZGF0YVR5cGUgPT09ICdkYXRlJykgZHQgPSAnZGF0ZSc7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBmaWVsZDogYy5maWVsZCxcbiAgICAgICAgICAgICAgbGFiZWw6IGMubGFiZWwgfHwgYy5maWVsZCxcbiAgICAgICAgICAgICAgZGF0YVR5cGU6IGR0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmVudGl0eUNvbHVtbnMuc2V0KHNhZmVDb2xzKTtcblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWwgPSB0aGlzLnNlbGVjdGVkVmFsdWVGaWVsZCgpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnREaXNwID0gdGhpcy5zZWxlY3RlZERpc3BsYXlGaWVsZCgpO1xuICAgICAgICAgIGNvbnN0IHN1Z2dlc3RlZFZhbCA9IGRldGVjdERlZmF1bHRWYWx1ZUZpZWxkKHNhZmVDb2xzKTtcbiAgICAgICAgICBjb25zdCBzdWdnZXN0ZWREaXNwID0gZGV0ZWN0RGVmYXVsdERpc3BsYXlGaWVsZChzYWZlQ29scyk7XG5cbiAgICAgICAgICBjb25zdCBuZXh0VmFsID0gY3VycmVudFZhbCB8fCBzdWdnZXN0ZWRWYWwgfHwgc2FmZUNvbHNbMF0/LmZpZWxkIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IG5leHREaXNwID0gY3VycmVudERpc3AgfHwgc3VnZ2VzdGVkRGlzcCB8fCBzYWZlQ29sc1sxXT8uZmllbGQgfHwgc2FmZUNvbHNbMF0/LmZpZWxkIHx8ICcnO1xuXG4gICAgICAgICAgaWYgKChuZXh0VmFsICE9PSBjdXJyZW50VmFsIHx8IG5leHREaXNwICE9PSBjdXJyZW50RGlzcCkgJiYgKG5leHRWYWwgfHwgbmV4dERpc3ApKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAgICAgICAgIC4uLih0aGlzLmNvbXAoKS5kYXRhU291cmNlID8/IHsgZGlzcGxheUZpZWxkOiAnJywgdmFsdWVGaWVsZDogJycgfSksXG4gICAgICAgICAgICAgIHZhbHVlRmllbGQ6IG5leHRWYWwsXG4gICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogbmV4dERpc3AsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmFwaVRlc3RTdGF0dXMuc2V0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBDb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5ISBGb3VuZCAke3NhZmVDb2xzLmxlbmd0aH0gZmllbGQocykuYCxcbiAgICAgICAgICAgIGtpbmQ6ICdzdWNjZXNzJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVGVzdGluZ0FwaS5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXBpVGVzdFN0YXR1cy5zZXQoe1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZmV0Y2ggZnJvbSBBUEknLFxuICAgICAgICAgICAga2luZDogJ2Vycm9yJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgb25FbnRpdHlTZWxlY3RlZChlbnRpdHlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpc0RpZmZlcmVudCA9IGVudGl0eU5hbWUgIT09IHRoaXMuY29tcCgpLmRhdGFTb3VyY2U/LmVudGl0eU5hbWU7XG4gICAgaWYgKGlzRGlmZmVyZW50KSB7XG4gICAgICB0aGlzLmxhc3RMb2FkZWRLZXkgPSAnJztcbiAgICB9XG4gICAgdGhpcy51cGRhdGVEYXRhU291cmNlLmVtaXQoe1xuICAgICAgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2UgPz8geyBkaXNwbGF5RmllbGQ6ICcnLCB2YWx1ZUZpZWxkOiAnJyB9KSxcbiAgICAgIHNvdXJjZVR5cGU6IHRoaXMuY3VycmVudFNvdXJjZVR5cGUoKSxcbiAgICAgIGVudGl0eU5hbWUsXG4gICAgICBzY2hlbWE6ICdkYm8nLFxuICAgICAgdmFsdWVGaWVsZDogJycsXG4gICAgICBkaXNwbGF5RmllbGQ6ICcnLFxuICAgICAgcGFyYW1ldGVyTWFwcGluZ3M6IGlzRGlmZmVyZW50ID8ge30gOiAodGhpcy5jb21wKCkuZGF0YVNvdXJjZT8ucGFyYW1ldGVyTWFwcGluZ3MgPz8ge30pLFxuICAgIH0pO1xuICB9XG5cbiAgb25WYWx1ZUZpZWxkQ2hhbmdlZCh2YWx1ZUZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZSA/PyB7IGRpc3BsYXlGaWVsZDogJycsIHZhbHVlRmllbGQ6ICcnIH0pLFxuICAgICAgdmFsdWVGaWVsZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGlzcGxheUZpZWxkQ2hhbmdlZChkaXNwbGF5RmllbGQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRGF0YVNvdXJjZS5lbWl0KHtcbiAgICAgIC4uLih0aGlzLmNvbXAoKS5kYXRhU291cmNlID8/IHsgZGlzcGxheUZpZWxkOiAnJywgdmFsdWVGaWVsZDogJycgfSksXG4gICAgICBkaXNwbGF5RmllbGQsXG4gICAgfSk7XG4gIH1cblxuICBvbkRlcGVuZHNPbkNoYW5nZWQocGFyZW50S2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZSA/PyB7IGRpc3BsYXlGaWVsZDogJycsIHZhbHVlRmllbGQ6ICcnIH0pLFxuICAgICAgZGVwZW5kc09uOiBwYXJlbnRLZXkgPyBbcGFyZW50S2V5XSA6IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGFyYW1WYWx1ZShwYXJhbU5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsZWFuID0gcGFyYW1OYW1lLnJlcGxhY2UoL15ALywgJycpO1xuICAgIGNvbnN0IG1hcHBpbmdzID0gdGhpcy5jb21wKCkuZGF0YVNvdXJjZT8ucGFyYW1ldGVyTWFwcGluZ3MgPz8ge307XG4gICAgcmV0dXJuIChcbiAgICAgIG1hcHBpbmdzW3BhcmFtTmFtZV0gPz9cbiAgICAgIG1hcHBpbmdzW2NsZWFuXSA/P1xuICAgICAgbWFwcGluZ3NbYEAke2NsZWFufWBdID8/XG4gICAgICAnJ1xuICAgICk7XG4gIH1cblxuICBzZXRQYXJhbVZhbHVlKHBhcmFtTmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGNsZWFuID0gcGFyYW1OYW1lLnJlcGxhY2UoL15ALywgJycpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0geyAuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZT8ucGFyYW1ldGVyTWFwcGluZ3MgPz8ge30pIH07XG4gICAgZXhpc3RpbmdbcGFyYW1OYW1lXSA9IHZhbHVlO1xuICAgIGV4aXN0aW5nW2NsZWFuXSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlRGF0YVNvdXJjZS5lbWl0KHtcbiAgICAgIC4uLih0aGlzLmNvbXAoKS5kYXRhU291cmNlID8/IHsgZGlzcGxheUZpZWxkOiAnJywgdmFsdWVGaWVsZDogJycgfSksXG4gICAgICBwYXJhbWV0ZXJNYXBwaW5nczogZXhpc3RpbmcsXG4gICAgfSk7XG4gIH1cblxuICBvblBhcmFtTGlua2VkRmllbGRDaGFuZ2UoZXZ0OiB7IHBhcmFtTmFtZTogc3RyaW5nOyBmaWVsZEtleTogc3RyaW5nOyBpc0xpbmtlZDogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudERlcGVuZHNPbiA9IFsuLi4odGhpcy5jb21wKCkuZGF0YVNvdXJjZT8uZGVwZW5kc09uID8/IFtdKV07XG4gICAgaWYgKGV2dC5pc0xpbmtlZCAmJiBldnQuZmllbGRLZXkpIHtcbiAgICAgIGlmICghY3VycmVudERlcGVuZHNPbi5pbmNsdWRlcyhldnQuZmllbGRLZXkpKSB7XG4gICAgICAgIGN1cnJlbnREZXBlbmRzT24ucHVzaChldnQuZmllbGRLZXkpO1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGFTb3VyY2UuZW1pdCh7XG4gICAgICAgICAgLi4uKHRoaXMuY29tcCgpLmRhdGFTb3VyY2UgPz8geyBkaXNwbGF5RmllbGQ6ICcnLCB2YWx1ZUZpZWxkOiAnJyB9KSxcbiAgICAgICAgICBkZXBlbmRzT246IGN1cnJlbnREZXBlbmRzT24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY09wdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gWy4uLnRoaXMuc3RhdGljT3B0aW9ucygpXTtcbiAgICBjb25zdCBuZXh0SWR4ID0gY3VycmVudC5sZW5ndGggKyAxO1xuICAgIGN1cnJlbnQucHVzaCh7IGtleTogU3RyaW5nKG5leHRJZHgpLCBsYWJlbDogYE9wdGlvbiAke25leHRJZHh9YCB9KTtcbiAgICB0aGlzLnVwZGF0ZVByb3BlcnR5LmVtaXQoeyBrZXk6ICdvcHRpb25zJywgdmFsdWU6IGN1cnJlbnQgfSk7XG4gIH1cblxuICB1cGRhdGVTdGF0aWNPcHRpb24oaW5kZXg6IG51bWJlciwgZmllbGQ6ICdrZXknIHwgJ2xhYmVsJywgdmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gWy4uLnRoaXMuc3RhdGljT3B0aW9ucygpXTtcbiAgICBpZiAoY3VycmVudFtpbmRleF0pIHtcbiAgICAgIGN1cnJlbnRbaW5kZXhdID0geyAuLi5jdXJyZW50W2luZGV4XSwgW2ZpZWxkXTogdmFsIH07XG4gICAgICB0aGlzLnVwZGF0ZVByb3BlcnR5LmVtaXQoeyBrZXk6ICdvcHRpb25zJywgdmFsdWU6IGN1cnJlbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlU3RhdGljT3B0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdGF0aWNPcHRpb25zKCkuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgdGhpcy51cGRhdGVQcm9wZXJ0eS5lbWl0KHsga2V5OiAnb3B0aW9ucycsIHZhbHVlOiBjdXJyZW50IH0pO1xuICB9XG59XG5cbiIsIiAgICA8ZGl2IGNsYXNzPVwicHJvcGVydHktZ3JvdXBcIj5cbiAgICAgIDwhLS0gMS4gSGVhZGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGFzb3VyY2UtaGVhZGVyLWJhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj5PcHRpb25zIERhdGEgU291cmNlPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSAyLiBTb3VyY2UgVHlwZSBTZWdtZW50ZWQgU3dpdGNoZXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic291cmNlLXR5cGUtc3dpdGNoZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic291cmNlLXRhYi1idG5cIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFNvdXJjZVR5cGUoKSA9PT0gJ3RhYmxlJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNldFNvdXJjZVR5cGUoJ3RhYmxlJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJ0YWJsZVwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICA8c3Bhbj5UYWJsZSAvIFZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzb3VyY2UtdGFiLWJ0blwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50U291cmNlVHlwZSgpID09PSAncHJvY2VkdXJlJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNldFNvdXJjZVR5cGUoJ3Byb2NlZHVyZScpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY29kZVwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICA8c3Bhbj5TdG9yZWQgUHJvYzwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNvdXJjZS10YWItYnRuXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRTb3VyY2VUeXBlKCkgPT09ICdhcGknXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0U291cmNlVHlwZSgnYXBpJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJnbG9iZVwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICA8c3Bhbj5SRVNUIEFQSTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNvdXJjZS10YWItYnRuXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRTb3VyY2VUeXBlKCkgPT09ICdzdGF0aWMnXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0U291cmNlVHlwZSgnc3RhdGljJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJlZGl0XCIgW3NpemVdPVwiMTJcIiAvPlxuICAgICAgICAgIDxzcGFuPlN0YXRpYyBMaXN0PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIDNBLiBEQVRBQkFTRSBUQUJMRSAvIFZJRVcgQ09ORklHVVJBVElPTiAtLT5cbiAgICAgIEBpZiAoY3VycmVudFNvdXJjZVR5cGUoKSA9PT0gJ3RhYmxlJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWxhYmVsLXJvd1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5EYXRhYmFzZSBUYWJsZSAvIFZpZXc8L2xhYmVsPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4tcmVmcmVzaC1lbnRpdGllc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJsb2FkRW50aXRpZXMoKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiUmVmcmVzaCBhdmFpbGFibGUgdGFibGVzIGZyb20gYmFja2VuZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwicmVmcmVzaFwiIFtzaXplXT1cIjExXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+UmVmcmVzaDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxycHQtc2VhcmNoYWJsZS1zZWxlY3RcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInRhYmxlU2VsZWN0T3B0aW9ucygpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkRW50aXR5KClcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25FbnRpdHlTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdFbnRpdGllcygpXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ0VudGl0aWVzKClcIlxuICAgICAgICAgICAgW2xvYWRpbmdUZXh0XT1cIidMb2FkaW5nIHRhYmxlcyBmcm9tIGRhdGFiYXNlLi4uJ1wiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiYXZhaWxhYmxlVGFibGVzKCkubGVuZ3RoID09PSAwID8gJy0tIE5vIHRhYmxlcyBmb3VuZCAoQ2xpY2sgUmVmcmVzaCkgLS0nIDogJy0tIENob29zZSBEYXRhIFRhYmxlIC0tJ1wiXG4gICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj1cIlNlYXJjaCB0YWJsZXMgJiB2aWV3cy4uLlwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChzZWxlY3RlZEVudGl0eSgpKSB7XG4gICAgICAgICAgPCEtLSBEaXNwbGF5IEZpZWxkIChWaXNpYmxlIHRleHQpIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1sYWJlbC1yb3dcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5EaXNwbGF5IEZpZWxkIChWaXNpYmxlIFRleHQpPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHJwdC1zZWFyY2hhYmxlLXNlbGVjdFxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJkaXNwbGF5RmllbGRTZWxlY3RPcHRpb25zKClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZERpc3BsYXlGaWVsZCgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EaXNwbGF5RmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tIFNlbGVjdCBEaXNwbGF5IENvbHVtbiAtLVwiXG4gICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbHVtbnMuLi5cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVmFsdWUgRmllbGQgKFN0b3JlZCBrZXkpIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1sYWJlbC1yb3dcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5WYWx1ZSBGaWVsZCAoU3RvcmVkIEtleSk8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8cnB0LXNlYXJjaGFibGUtc2VsZWN0XG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cInZhbHVlRmllbGRTZWxlY3RPcHRpb25zKClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFZhbHVlRmllbGQoKVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmFsdWVGaWVsZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0gU2VsZWN0IEtleSBDb2x1bW4gLS1cIlxuICAgICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj1cIlNlYXJjaCBjb2x1bW5zLi4uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIENhc2NhZGluZyBEcm9wZG93biBEZXBlbmRlbmN5IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+RGVwZW5kZW50IE9uIChDYXNjYWRpbmcgUGFyZW50IEZpZWxkKTwvbGFiZWw+XG4gICAgICAgICAgICA8cnB0LXNlYXJjaGFibGUtc2VsZWN0XG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cInBhcmVudEZpZWxkU2VsZWN0T3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWREZXBlbmRzT24oKVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRGVwZW5kc09uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLSBOb25lIChJbmRlcGVuZGVudCkgLS1cIlxuICAgICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj1cIlNlYXJjaCBjYW52YXMgZmllbGRzLi4uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWhpbnRcIj5cbiAgICAgICAgICAgICAgQXV0b21hdGljYWxseSByZS1xdWVyaWVzIG9wdGlvbnMgd2hlbiBwYXJlbnQgZmllbGQgY2hhbmdlcy5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA8IS0tIDNCLiBTVE9SRUQgUFJPQ0VEVVJFIENPTkZJR1VSQVRJT04gLS0+XG4gICAgICBAaWYgKGN1cnJlbnRTb3VyY2VUeXBlKCkgPT09ICdwcm9jZWR1cmUnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtbGFiZWwtcm93XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPlN0b3JlZCBQcm9jZWR1cmU8L2xhYmVsPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4tcmVmcmVzaC1lbnRpdGllc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJsb2FkRW50aXRpZXMoKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiUmVmcmVzaCBhdmFpbGFibGUgcHJvY2VkdXJlcyBmcm9tIGJhY2tlbmRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInJlZnJlc2hcIiBbc2l6ZV09XCIxMVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPlJlZnJlc2g8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cnB0LXNlYXJjaGFibGUtc2VsZWN0XG4gICAgICAgICAgICBbb3B0aW9uc109XCJwcm9jZWR1cmVTZWxlY3RPcHRpb25zKClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRFbnRpdHkoKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkVudGl0eVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ0VudGl0aWVzKClcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nRW50aXRpZXMoKVwiXG4gICAgICAgICAgICBbbG9hZGluZ1RleHRdPVwiJ0xvYWRpbmcgc3RvcmVkIHByb2NlZHVyZXMgZnJvbSBkYXRhYmFzZS4uLidcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImF2YWlsYWJsZVByb2NlZHVyZXMoKS5sZW5ndGggPT09IDAgPyAnLS0gTm8gc3RvcmVkIHByb2NlZHVyZXMgZm91bmQgKENsaWNrIFJlZnJlc2gpIC0tJyA6ICctLSBDaG9vc2UgRGF0YSBRdWVyeSAvIFNQIC0tJ1wiXG4gICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj1cIlNlYXJjaCBzdG9yZWQgcHJvY2VkdXJlcy4uLlwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChzZWxlY3RlZEVudGl0eSgpKSB7XG4gICAgICAgICAgPCEtLSBWaXN1YWwgUGFyYW1ldGVyIExpbmtlcnMgLS0+XG4gICAgICAgICAgQGlmIChwcm9jZWR1cmVQYXJhbWV0ZXJzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwLXBhcmFtcy1ncm91cFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFyYW1zLWhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPlByb2NlZHVyZSBJbnB1dCBQYXJhbWV0ZXJzPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWF1dG8tcGFyYW1zXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhdXRvV2lyZUFsbFBhcmFtZXRlcnMoKVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkF1dG8tZGV0ZWN0IHNlc3Npb24gcGFyYW1ldGVycyBhbmQgYWRkIG1pc3NpbmcgZmlsdGVyIGNvbnRyb2xzIHRvIHRoZSBjYW52YXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY2hlY2tcIiBbc2l6ZV09XCIxMVwiIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5BdXRvLVdpcmUgQ2FudmFzIElucHV0czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgQGZvciAocGFyYW0gb2YgcHJvY2VkdXJlUGFyYW1ldGVycygpOyB0cmFjayBwYXJhbS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgPHJwdC1wYXJhbWV0ZXItYmluZGluZy1lZGl0b3JcbiAgICAgICAgICAgICAgICAgIFtwYXJhbV09XCJwYXJhbVwiXG4gICAgICAgICAgICAgICAgICBbY3VycmVudFZhbHVlXT1cImdldFBhcmFtVmFsdWUocGFyYW0ubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgW2FsbENvbXBvbmVudHNdPVwiYWxsQ29tcG9uZW50cygpXCJcbiAgICAgICAgICAgICAgICAgIFtjdXJyZW50Q29tcG9uZW50SWRdPVwiY29tcCgpLmlkXCJcbiAgICAgICAgICAgICAgICAgIFtpc0FkdmFuY2VkTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZXRQYXJhbVZhbHVlKHBhcmFtLm5hbWUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGxpbmtlZEZpZWxkQ2hhbmdlKT1cIm9uUGFyYW1MaW5rZWRGaWVsZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIERpc3BsYXkgRmllbGQgKFZpc2libGUgdGV4dCkgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWxhYmVsLXJvd1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPkRpc3BsYXkgRmllbGQgKGZyb20gU1AgcmVzdWx0KTwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZW50aXR5Q29sdW1ucygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgPHJwdC1zZWFyY2hhYmxlLXNlbGVjdFxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImRpc3BsYXlGaWVsZFNlbGVjdE9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWREaXNwbGF5RmllbGQoKVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EaXNwbGF5RmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0gU2VsZWN0IERpc3BsYXkgQ29sdW1uIC0tXCJcbiAgICAgICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj1cIlNlYXJjaCBjb2x1bW5zLi4uXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDb2x1bW4gbmFtZSAobGVhdmUgYmxhbmsgZm9yIGF1dG8pXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZERpc3BsYXlGaWVsZCgpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRpc3BsYXlGaWVsZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFZhbHVlIEZpZWxkIChTdG9yZWQga2V5KSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtbGFiZWwtcm93XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+VmFsdWUgRmllbGQgKGZyb20gU1AgcmVzdWx0KTwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZW50aXR5Q29sdW1ucygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgPHJwdC1zZWFyY2hhYmxlLXNlbGVjdFxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInZhbHVlRmllbGRTZWxlY3RPcHRpb25zKClcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkVmFsdWVGaWVsZCgpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblZhbHVlRmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0gU2VsZWN0IEtleSBDb2x1bW4gLS1cIlxuICAgICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbHVtbnMuLi5cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNvbHVtbiBuYW1lIChsZWF2ZSBibGFuayBmb3IgYXV0bylcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkVmFsdWVGaWVsZCgpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblZhbHVlRmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIDwhLS0gM0IuIFJFU1QgQVBJIENPTkZJR1VSQVRJT04gLS0+XG4gICAgICBAaWYgKGN1cnJlbnRTb3VyY2VUeXBlKCkgPT09ICdhcGknKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPkFQSSBFbmRwb2ludCBVUkw8L2xhYmVsPlxuICAgICAgICAgIEBpZiAocmVnaXN0ZXJlZEFwaXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogNnB4O1wiPlxuICAgICAgICAgICAgICA8cnB0LXNlYXJjaGFibGUtc2VsZWN0XG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicmVnaXN0ZXJlZEFwaXMoKVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRBcGlFbmRwb2ludCgpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkFwaUVuZHBvaW50U2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLSBTZWxlY3QgUmVnaXN0ZXJlZCBFbmRwb2ludCBvciB0eXBlIGJlbG93IC0tXCJcbiAgICAgICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj1cIlNlYXJjaCByZWdpc3RlcmVkIEFQSXMuLi5cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gL2FwaS92MS9jdXN0b21lcnMgb3IgaHR0cHM6Ly9hcGkuc2VydmljZS5jb20vbG9va3VwXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkQXBpRW5kcG9pbnQoKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkFwaUVuZHBvaW50U2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMTFweDsgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTsgbWFyZ2luLXRvcDogNHB4OyBkaXNwbGF5OiBibG9jaztcIj5cbiAgICAgICAgICAgIERpcmVjdCBIVFRQIGNhbGwgb3IgYmFja2VuZCBwcm94eS4gVXNlIDxjb2RlPjpwYXJhbTwvY29kZT4gZm9yIHJvdXRlIHRva2Vucy5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IGdhcDogOHB4OyBtYXJnaW4tYm90dG9tOiA4cHg7XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXJvd1wiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+SFRUUCBNZXRob2Q8L2xhYmVsPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRBcGlNZXRob2QoKVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQXBpTWV0aG9kQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkdFVFwiPkdFVDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE9TVFwiPlBPU1Q8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDA7XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPlJlc3BvbnNlIERhdGEgUGF0aDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIGRhdGEuaXRlbXMsIHJvd3NcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZERhdGFQYXRoKClcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRhdGFQYXRoQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDEwcHg7XCI+XG4gICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IGZvbnQtc2l6ZTogMTJweDsgY3Vyc29yOiBwb2ludGVyO1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVXNlUHJveHkoKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Vc2VQcm94eUNoYW5nZWQoJGFueSgkZXZlbnQudGFyZ2V0KS5jaGVja2VkKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+Um91dGUgdGhyb3VnaCBiYWNrZW5kIHByb3h5PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDEycHg7XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1yZWZyZXNoLWVudGl0aWVzXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBwYWRkaW5nOiA2cHggMTJweDsgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMzYjgyZjYpOyBjb2xvcjogI2ZmZjsgYm9yZGVyLXJhZGl1czogNnB4O1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkQXBpRW5kcG9pbnQoKSB8fCBpc1Rlc3RpbmdBcGkoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidGVzdEFuZERldGVjdEFwaUNvbHVtbnMoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJyZWZyZXNoXCIgW3NpemVdPVwiMTJcIiAvPlxuICAgICAgICAgICAgPHNwYW4+e3sgaXNUZXN0aW5nQXBpKCkgPyAnVGVzdGluZyBDb25uZWN0aW9uLi4uJyA6ICdUZXN0ICYgRGV0ZWN0IEZpZWxkcycgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgQGlmIChhcGlUZXN0U3RhdHVzKCk7IGFzIHN0YXR1cykge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDZweDsgZm9udC1zaXplOiAxMXB4OyBwYWRkaW5nOiA0cHggOHB4OyBib3JkZXItcmFkaXVzOiA0cHg7XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwic3RhdHVzLmtpbmQgPT09ICdzdWNjZXNzJyA/ICcjZWNmZGY1JyA6ICcjZmVmMmYyJ1wiXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJzdGF0dXMua2luZCA9PT0gJ3N1Y2Nlc3MnID8gJyMwNjVmNDYnIDogJyM5OTFiMWInXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgc3RhdHVzLm1lc3NhZ2UgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBEaXNwbGF5IEZpZWxkIChWaXNpYmxlIHRleHQpIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5EaXNwbGF5IEZpZWxkIChWaXNpYmxlIFRleHQpPC9sYWJlbD5cbiAgICAgICAgICBAaWYgKGVudGl0eUNvbHVtbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8cnB0LXNlYXJjaGFibGUtc2VsZWN0XG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cImRpc3BsYXlGaWVsZFNlbGVjdE9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkRGlzcGxheUZpZWxkKClcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRpc3BsYXlGaWVsZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0gU2VsZWN0IERpc3BsYXkgQ29sdW1uIC0tXCJcbiAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2ggZmllbGRzLi4uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWVsZCBuYW1lIGluIEFQSSBpdGVtIChlLmcuIG5hbWUsIHRpdGxlKVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkRGlzcGxheUZpZWxkKClcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRpc3BsYXlGaWVsZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBWYWx1ZSBGaWVsZCAoU3RvcmVkIGtleSkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPlZhbHVlIEZpZWxkIChTdG9yZWQgS2V5KTwvbGFiZWw+XG4gICAgICAgICAgQGlmIChlbnRpdHlDb2x1bW5zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPHJwdC1zZWFyY2hhYmxlLXNlbGVjdFxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJ2YWx1ZUZpZWxkU2VsZWN0T3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRWYWx1ZUZpZWxkKClcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblZhbHVlRmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tIFNlbGVjdCBLZXkgQ29sdW1uIC0tXCJcbiAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2ggZmllbGRzLi4uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWVsZCBuYW1lIGluIEFQSSBpdGVtIChlLmcuIGlkLCBjb2RlKVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkVmFsdWVGaWVsZCgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUZpZWxkQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIENhc2NhZGluZyBEZXBlbmRlbmN5IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtcm93XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj5EZXBlbmRlbnQgT24gKENhc2NhZGluZyBQYXJlbnQgRmllbGQpPC9sYWJlbD5cbiAgICAgICAgICA8cnB0LXNlYXJjaGFibGUtc2VsZWN0XG4gICAgICAgICAgICBbb3B0aW9uc109XCJwYXJlbnRGaWVsZFNlbGVjdE9wdGlvbnMoKVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZERlcGVuZHNPbigpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRGVwZW5kc09uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0gSW5kZXBlbmRlbnQgKFJ1bnMgb24gbG9hZCkgLS1cIlxuICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2ggY2FudmFzIGNvbXBvbmVudHMuLi5cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIDNDLiBTVEFUSUMgT1BUSU9OUyBFRElUT1IgLS0+XG4gICAgICBAaWYgKGN1cnJlbnRTb3VyY2VUeXBlKCkgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0aWMtb3B0aW9ucy13cmFwcGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRpYy1vcHRpb25zLWhlYWRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1sYWJlbFwiPlN0YXRpYyBPcHRpb25zPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tYWRkLW9wdGlvblwiIChjbGljayk9XCJhZGRTdGF0aWNPcHRpb24oKVwiPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInBsdXNcIiBbc2l6ZV09XCIxMVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkFkZCBPcHRpb248L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0aWMtb3B0aW9ucy1saXN0XCI+XG4gICAgICAgICAgICBAZm9yIChvcHQgb2Ygc3RhdGljT3B0aW9ucygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRpYy1vcHRpb24tcm93XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLWlucHV0IG9wdC1rZXlcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJLZXlcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0LmtleVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVTdGF0aWNPcHRpb24oJGluZGV4LCAna2V5JywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtaW5wdXQgb3B0LWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVN0YXRpY09wdGlvbigkaW5kZXgsICdsYWJlbCcsICRldmVudClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1yZW1vdmUtb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVTdGF0aWNPcHRpb24oJGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlJlbW92ZSBvcHRpb25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwidHJhc2hcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj4iXX0=
|