bways-report 0.1.6 → 0.1.7
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 +293 -464
- package/esm2022/lib/core/config/bways-report-config.mjs +83 -0
- package/esm2022/lib/core/index.mjs +2 -1
- package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
- package/esm2022/lib/core/services/report-data-discovery.service.mjs +6 -3
- package/esm2022/lib/core/services/report-session-context.service.mjs +11 -7
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
- package/esm2022/lib/core/utils/data-normalization.util.mjs +87 -1
- package/esm2022/lib/core/utils/report-parameter.util.mjs +119 -3
- package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +69 -0
- package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +98 -0
- package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +57 -0
- package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +85 -0
- package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +163 -0
- package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +12 -0
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +4 -23
- package/esm2022/lib/data-access/adapters/index.mjs +8 -1
- package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
- package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +12 -2
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +5 -5
- package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +407 -0
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +109 -60
- package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +110 -20
- package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +60 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +11 -5
- package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +15 -3
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +204 -10
- package/esm2022/lib/features/designer/designer.component.mjs +43 -2
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +9 -2
- package/esm2022/lib/features/embed/bways-report-builder.component.mjs +207 -0
- package/esm2022/lib/features/embed/bways-report-menu.component.mjs +433 -0
- package/esm2022/lib/features/embed/bways-report-page.component.mjs +204 -0
- package/esm2022/lib/features/embed/index.mjs +5 -0
- package/esm2022/lib/features/embed/inject-report-menu.mjs +99 -0
- package/esm2022/lib/features/index.mjs +2 -1
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +43 -5
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +4 -4
- package/esm2022/lib/features/routing/index.mjs +2 -2
- package/esm2022/lib/features/routing/models/report-route.models.mjs +1 -1
- package/esm2022/lib/features/routing/report-routes.mjs +42 -1
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +6 -8
- package/esm2022/lib/features/routing/services/report-menu.service.mjs +14 -4
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +22 -3
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +16 -2
- package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +28 -5
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +86 -19
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
- package/esm2022/lib/primitives/components/index.mjs +2 -1
- package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +9 -3
- package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +386 -0
- package/esm2022/lib/provide-reporting.mjs +137 -7
- package/fesm2022/bways-report.mjs +4053 -840
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/config/bways-report-config.d.ts +161 -0
- package/lib/core/index.d.ts +1 -0
- package/lib/core/models/report-definition.model.d.ts +16 -0
- package/lib/core/services/report-session-context.service.d.ts +1 -0
- package/lib/core/tokens/reporting-config.token.d.ts +16 -0
- package/lib/core/utils/data-normalization.util.d.ts +10 -0
- package/lib/core/utils/report-parameter.util.d.ts +18 -1
- package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +13 -0
- package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +14 -0
- package/lib/data-access/adapters/endpoint-masterdata.adapter.d.ts +11 -0
- package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +15 -0
- package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +21 -0
- package/lib/data-access/adapters/endpoint-tokens.d.ts +21 -0
- package/lib/data-access/adapters/index.d.ts +7 -0
- package/lib/data-access/contracts/lookup.contract.d.ts +2 -2
- package/lib/features/designer/components/component-palette/component-palette.component.d.ts +1 -0
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +1 -1
- package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +34 -0
- package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +1 -0
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +12 -2
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +10 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +13 -1
- package/lib/features/designer/designer.component.d.ts +4 -0
- package/lib/features/embed/bways-report-builder.component.d.ts +48 -0
- package/lib/features/embed/bways-report-menu.component.d.ts +40 -0
- package/lib/features/embed/bways-report-page.component.d.ts +61 -0
- package/lib/features/embed/index.d.ts +4 -0
- package/lib/features/embed/inject-report-menu.d.ts +44 -0
- package/lib/features/index.d.ts +1 -0
- package/lib/features/persistence/services/report-store.service.d.ts +5 -0
- package/lib/features/routing/index.d.ts +1 -1
- package/lib/features/routing/models/report-route.models.d.ts +3 -0
- package/lib/features/routing/report-routes.d.ts +40 -0
- package/lib/features/routing/resolvers/report.resolver.d.ts +1 -1
- package/lib/features/runtime/dynamic-renderer.component.d.ts +1 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +1 -1
- package/lib/primitives/components/button/rpt-button.component.d.ts +3 -0
- package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +16 -3
- package/lib/primitives/components/index.d.ts +2 -0
- package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +89 -0
- package/lib/provide-reporting.d.ts +22 -6
- package/package.json +1 -1
|
@@ -62,6 +62,9 @@ export class RptGridOutletDirective {
|
|
|
62
62
|
if (this.appliedInputs.get(key) === value) {
|
|
63
63
|
continue;
|
|
64
64
|
}
|
|
65
|
+
if (!this.canAcceptInput(key)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
65
68
|
try {
|
|
66
69
|
this.compRef.setInput(key, value);
|
|
67
70
|
this.appliedInputs.set(key, value);
|
|
@@ -70,6 +73,15 @@ export class RptGridOutletDirective {
|
|
|
70
73
|
}
|
|
71
74
|
});
|
|
72
75
|
}
|
|
76
|
+
canAcceptInput(key) {
|
|
77
|
+
if (!this.compRef)
|
|
78
|
+
return false;
|
|
79
|
+
const cmpDef = this.compRef.componentType?.['ɵcmp'];
|
|
80
|
+
if (cmpDef && cmpDef.inputs) {
|
|
81
|
+
return key in cmpDef.inputs || Object.values(cmpDef.inputs).includes(key);
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
73
85
|
isReportStateMatching(a, b) {
|
|
74
86
|
if (a === b)
|
|
75
87
|
return true;
|
|
@@ -158,6 +170,9 @@ export class RptGridOutletDirective {
|
|
|
158
170
|
}
|
|
159
171
|
const currentInputs = this.inputs();
|
|
160
172
|
for (const [key, value] of Object.entries(currentInputs)) {
|
|
173
|
+
if (!this.canAcceptInput(key)) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
161
176
|
try {
|
|
162
177
|
this.compRef.setInput(key, value);
|
|
163
178
|
this.appliedInputs.set(key, value);
|
|
@@ -355,7 +370,6 @@ export class ReportGridBridgeComponent {
|
|
|
355
370
|
reportState: this.gridReportState(),
|
|
356
371
|
pagination: this.gridDefinition().options?.pagination !== false,
|
|
357
372
|
pageSize: this.gridDefinition().options?.pageSize ?? 10,
|
|
358
|
-
rowSelection: this.effectiveRowSelection(),
|
|
359
373
|
}));
|
|
360
374
|
showRowNumbers = computed(() => {
|
|
361
375
|
return !!this.gridDefinition().options?.showRowNumbers;
|
|
@@ -895,4 +909,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
895
909
|
</div>
|
|
896
910
|
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;margin-top:16px;font-family:var(--rpt-font-family, inherit)}.rpt-grid-container{width:100%;min-height:480px;display:flex;flex-direction:column}:host ::ng-deep bways-grid{display:block;width:100%;height:480px;min-height:480px;--ug-footer-bg: var(--rpt-color-surface, #f8fafc);--ug-footer-color: var(--rpt-color-text-secondary, #334155);--ug-header-color: var(--rpt-color-text, #0f172a);--ug-border-color: var(--rpt-color-border, #cbd5e1);--ug-font-family: var(--rpt-font-family, inherit);--ug-font-size: var(--rpt-font-size-sm, .75rem);--ug-header-font-weight: 600}:host ::ng-deep .ug-wrapper{height:100%!important;min-height:480px!important}:host ::ng-deep .ug-viewport{min-height:350px!important}:host ::ng-deep .ug-bottom-bar,:host ::ng-deep ug-pagination{background-color:var(--rpt-color-surface, #f8fafc)!important;border-top:1px solid var(--rpt-color-border, #cbd5e1)!important;color:var(--rpt-color-text-muted, #64748b)!important;font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important}:host ::ng-deep .ug-status-bar-content,:host ::ng-deep .ug-pagination-info,:host ::ng-deep .ug-page-info{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:500!important;color:var(--rpt-color-text-muted, #64748b)!important;font-variant-numeric:tabular-nums!important}:host ::ng-deep .ug-page-size{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:500!important;color:var(--rpt-color-text-muted, #64748b)!important}:host ::ng-deep .ug-page-size select{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;color:var(--rpt-color-text, #0f172a)!important;border-color:var(--rpt-color-border, #cbd5e1)!important;background-color:var(--rpt-color-surface, #ffffff)!important;border-radius:var(--rpt-border-radius-sm, 4px)!important}:host ::ng-deep .ug-total-row{background-color:var(--rpt-color-surface, #f8fafc)!important;border-top:1px solid var(--rpt-color-border, #cbd5e1)!important;border-bottom:2px solid var(--rpt-color-border, #cbd5e1)!important;font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:600!important;color:var(--rpt-color-text, #0f172a)!important;font-variant-numeric:tabular-nums!important}:host ::ng-deep .ug-total-row-label{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-xs, .6875rem)!important;font-weight:600!important;text-transform:uppercase!important;letter-spacing:.05em!important;color:var(--rpt-color-text-muted, #64748b)!important;background-color:var(--rpt-color-surface, #f8fafc)!important}:host ::ng-deep .ug-total-cell{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:600!important;color:var(--rpt-color-text, #0f172a)!important;font-variant-numeric:tabular-nums!important}.rpt-table-card{background:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:var(--rpt-box-shadow, 0 1px 3px rgba(0, 0, 0, .05));overflow:hidden}.rpt-table-toolbar{padding:12px 16px;background-color:var(--rpt-color-surface, #f8fafc);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);display:flex;align-items:center;justify-content:space-between}.rpt-table-title{font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;color:var(--rpt-color-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-table-responsive{width:100%;overflow-x:auto}.rpt-table{width:100%;border-collapse:collapse;font-size:var(--rpt-font-size-base, .875rem);text-align:left}.rpt-th{background-color:var(--rpt-color-surface, #f8fafc);padding:10px 14px;font-weight:600;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #475569);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);white-space:nowrap;-webkit-user-select:none;user-select:none}.rpt-th.sortable{cursor:pointer}.rpt-th.sortable:hover{background-color:var(--rpt-color-surface-hover, #f1f5f9)}.rpt-th-content{display:flex;align-items:center;gap:4px}.rpt-sort-indicator{display:inline-flex;align-items:center;color:var(--rpt-color-primary, #2563eb)}.rpt-th-num,.rpt-td-num{width:48px;text-align:center;color:var(--rpt-color-text-muted, #94a3b8);font-size:var(--rpt-font-size-sm, .75rem)}.rpt-th-cb,.rpt-td-cb{width:42px;min-width:42px;max-width:42px;text-align:center;padding:8px 10px}.rpt-checkbox{width:15px;height:15px;cursor:pointer;accent-color:var(--rpt-color-primary, #2563eb);border-radius:4px;vertical-align:middle;margin:0}.rpt-td{padding:10px 14px;border-bottom:1px solid var(--rpt-color-border, #e2e8f0);color:var(--rpt-color-text, #1e293b)}.rpt-tr:hover{background-color:var(--rpt-color-surface-hover, #f8fafc)}.rpt-tr.is-selected{background-color:#eff6ff}.rpt-tr.is-selected:hover{background-color:#dbeafe}.rpt-tr.is-clickable{cursor:pointer}.rpt-tr.is-clickable:hover{background-color:#f1f5f9}.rpt-td.is-clickable-cell{cursor:pointer}.rpt-cell-action-link{color:var(--rpt-color-primary, #2563eb);font-weight:600;text-decoration:underline;text-underline-offset:2px;cursor:pointer;transition:color .15s ease}.rpt-cell-action-link:hover{color:var(--rpt-color-primary-hover, #1d4ed8)}.rpt-empty-message{text-align:center;padding:40px 20px;color:var(--rpt-color-text-muted, #94a3b8);font-style:italic}.rpt-tfoot-row{background-color:var(--rpt-color-surface, #f8fafc);border-top:1px solid var(--rpt-color-border, #cbd5e1);border-bottom:2px solid var(--rpt-color-border, #cbd5e1)}.rpt-td-aggregate{padding:8px 14px;color:var(--rpt-color-text, #0f172a);font-size:var(--rpt-font-size-sm, .75rem);line-height:1.4}.rpt-aggregate-wrap{display:inline-flex;align-items:baseline;gap:6px}.rpt-aggregate-wrap.is-right{justify-content:flex-end;width:100%}.rpt-aggregate-wrap.is-center{justify-content:center;width:100%}.rpt-aggregate-label{font-size:var(--rpt-font-size-xs, .6875rem);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--rpt-color-text-muted, #64748b)}.rpt-aggregate-value{font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;color:var(--rpt-color-text, #0f172a);font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\"}.rpt-pagination-bar{display:flex;justify-content:space-between;align-items:center;padding:10px 16px;border-top:1px solid var(--rpt-color-border-subtle, #e2e8f0);background-color:var(--rpt-color-surface, #f8fafc)}.rpt-page-info{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-muted, #64748b);font-variant-numeric:tabular-nums}.rpt-page-buttons{display:flex;gap:8px}.rpt-page-btn{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-secondary, #334155);background-color:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-sm, 4px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.rpt-page-btn:hover:not(:disabled){background-color:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.rpt-page-btn:disabled{opacity:.5;cursor:not-allowed}\n"] }]
|
|
897
911
|
}], ctorParameters: () => [] });
|
|
898
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3J1bnRpbWUvcmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBTTNFLE1BQU0sT0FBTyxzQkFBc0I7SUFDaEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBNkIsSUFBSSxDQUFDO0lBQ3pDLElBQUksR0FBbUIsRUFBRSxDQUFDO0lBQzFCLHNCQUFzQixHQUFRLElBQUksQ0FBQztJQUNuQyxxQkFBcUIsR0FBUSxJQUFJLENBQUM7SUFDekIsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFFL0MsYUFBYSxHQUFHLEtBQUssQ0FBbUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUUsTUFBTSxHQUFHLEtBQUssQ0FBMEIsRUFBRSxDQUFDLENBQUM7SUFDNUMsZUFBZSxH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QUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7d0dBcFpVLHlCQUF5Qjs0RkFBekIseUJBQXlCLCtlQXZjMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtLVCw4ek9BbktTLFlBQVksK0JBQUUsZ0JBQWdCLHVHQXRNN0Isc0JBQXNCOzs0RkE4b0J0Qix5QkFBeUI7a0JBM2NyQyxTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxZQUN2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0tULG1CQW1TZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgY29tcHV0ZWQsXG4gIERpcmVjdGl2ZSxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkRlc3Ryb3ksXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBUeXBlLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdSSURfQ09NUE9ORU5UIH0gZnJvbSAnLi4vLi4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBSZXBvcnRTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGVmaW5pdGlvbiwgUmVwb3J0R3JpZERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IGh1bWFuaXplSWRlbnRpZmllciB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvaWRlbnRpZmllci1odW1hbml6ZXInO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbcnB0R3JpZE91dGxldF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBScHRHcmlkT3V0bGV0RGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSB2Y3IgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgY29tcFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIGxhc3RFbWl0dGVkUmVwb3J0U3RhdGU6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRDb2x1bW5EZWZzOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcGxpZWRJbnB1dHMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuXG4gIHJlYWRvbmx5IGNvbXBvbmVudFR5cGUgPSBpbnB1dDxUeXBlPGFueT4gfCBudWxsPihudWxsLCB7IGFsaWFzOiAncnB0R3JpZE91dGxldCcgfSk7XG4gIHJlYWRvbmx5IGlucHV0cyA9IGlucHV0PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7fSk7XG4gIHJlYWRvbmx5IGdyaWRTdGF0ZUNoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IGNvbHVtbkRlZnNDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSByb3dDbGljayA9IG91dHB1dDx7IHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGNvbHVtbj86IGFueTsgZXZlbnQ/OiBhbnkgfT4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PGFueVtdPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy5jb21wb25lbnRUeXBlKCk7XG4gICAgICB0aGlzLnJlY3JlYXRlQ29tcG9uZW50KHR5cGUpO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuICAgICAgaWYgKCF0aGlzLmNvbXBSZWYpIHJldHVybjtcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3VycmVudElucHV0cykpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3JlcG9ydFN0YXRlJykge1xuICAgICAgICAgIC8vIFN1cHByZXNzIGNpcmN1bGFyIGlucHV0IGVjaG86IGlmIGluY29taW5nIHJlcG9ydFN0YXRlIG1hdGNoZXMgd2hhdCB0aGlzIGdyaWQgaW5zdGFuY2VcbiAgICAgICAgICAvLyBqdXN0IGVtaXR0ZWQsIHNraXAgc2V0SW5wdXQuIFJlLWFwcGx5aW5nIHJlcG9ydFN0YXRlIGNhdXNlcyBuZ09uQ2hhbmdlcyAtPiBhcHBseUltcG9ydGVkRmlsdGVycyxcbiAgICAgICAgICAvLyB3aGljaCBkZXN0cm95cyBjb2x1bW5zIGFuZCBkaXNtaXNzZXMgYWN0aXZlIGZpbHRlciBwb3BvdmVycy9pbnB1dHMuXG4gICAgICAgICAgaWYgKHRoaXMubGFzdEVtaXR0ZWRSZXBvcnRTdGF0ZSAmJiB0aGlzLmlzUmVwb3J0U3RhdGVNYXRjaGluZyh0aGlzLmxhc3RFbWl0dGVkUmVwb3J0U3RhdGUsIHZhbHVlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmFwcGxpZWRJbnB1dHMuaGFzKCdyZXBvcnRTdGF0ZScpICYmIHRoaXMuaXNSZXBvcnRTdGF0ZU1hdGNoaW5nKHRoaXMuYXBwbGllZElucHV0cy5nZXQoJ3JlcG9ydFN0YXRlJyksIHZhbHVlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2NvbHVtbnMnIHx8IGtleSA9PT0gJ2NvbHVtbkRlZnMnKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGFzdEVtaXR0ZWRDb2x1bW5EZWZzICYmIHRoaXMuaXNDb2x1bW5EZWZzTWF0Y2hpbmcodGhpcy5sYXN0RW1pdHRlZENvbHVtbkRlZnMsIHZhbHVlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmFwcGxpZWRJbnB1dHMuaGFzKGtleSkgJiYgdGhpcy5pc0NvbHVtbkRlZnNNYXRjaGluZyh0aGlzLmFwcGxpZWRJbnB1dHMuZ2V0KGtleSksIHZhbHVlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2NvbmZpZycpIHtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy5hcHBsaWVkSW5wdXRzLmdldCgnY29uZmlnJyk7XG4gICAgICAgICAgaWYgKHByZXYgJiYgSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ3Jvd0RhdGEnKSB7XG4gICAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuYXBwbGllZElucHV0cy5nZXQoJ3Jvd0RhdGEnKTtcbiAgICAgICAgICBpZiAocHJldiA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFwcGxpZWRJbnB1dHMuZ2V0KGtleSkgPT09IHZhbHVlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY29tcFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmFwcGxpZWRJbnB1dHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVwb3J0U3RhdGVNYXRjaGluZyhhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBhID09PSBiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnZXRDb21wYXJhYmxlID0gKHM6IGFueSkgPT4gKHtcbiAgICAgICAgYWN0aXZlRmlsdGVyczogcy5hY3RpdmVGaWx0ZXJzLFxuICAgICAgICBjb25kaXRpb25GaWx0ZXJzOiBzLmNvbmRpdGlvbkZpbHRlcnMsXG4gICAgICAgIHNvcnRNb2RlbDogcy5zb3J0TW9kZWwsXG4gICAgICAgIGdyb3VwTW9kZWw6IHMuZ3JvdXBNb2RlbCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYSkpID09PSBKU09OLnN0cmluZ2lmeShnZXRDb21wYXJhYmxlKGIpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzQ29sdW1uRGVmc01hdGNoaW5nKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSB8fCAhQXJyYXkuaXNBcnJheShiKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ2V0Q29tcGFyYWJsZSA9IChjb2xzOiBhbnlbXSkgPT5cbiAgICAgICAgY29scy5tYXAoKGM6IGFueSkgPT4gKHtcbiAgICAgICAgICBmaWVsZDogYy5maWVsZCxcbiAgICAgICAgICB3aWR0aDogYy53aWR0aCxcbiAgICAgICAgICBoaWRlOiBjLmhpZGUsXG4gICAgICAgICAgcGlubmVkOiBjLnBpbm5lZCxcbiAgICAgICAgfSkpO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYSkpID09PSBKU09OLnN0cmluZ2lmeShnZXRDb21wYXJhYmxlKGIpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlY3JlYXRlQ29tcG9uZW50KHR5cGU6IFR5cGU8YW55PiB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgaWYgKCF0eXBlKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5jb21wUmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KHR5cGUpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBSZWYuaW5zdGFuY2UgYXMgYW55O1xuXG4gICAgICBpZiAoaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZCAmJiB0eXBlb2YgaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZC5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMubGFzdEVtaXR0ZWRSZXBvcnRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgdGhpcy5ncmlkU3RhdGVDaGFuZ2UuZW1pdChzdGF0ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YW5jZS5yZXBvcnRTdGF0ZUNoYW5nZSAmJiB0eXBlb2YgaW5zdGFuY2UucmVwb3J0U3RhdGVDaGFuZ2Uuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKFxuICAgICAgICAgIGluc3RhbmNlLnJlcG9ydFN0YXRlQ2hhbmdlLnN1YnNjcmliZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLmdyaWRTdGF0ZUNoYW5nZS5lbWl0KHN0YXRlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLmNvbHVtbkRlZnNDaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5jb2x1bW5EZWZzQ2hhbmdlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UuY29sdW1uRGVmc0NoYW5nZWQuc3Vic2NyaWJlKChkZWZzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMubGFzdEVtaXR0ZWRDb2x1bW5EZWZzID0gZGVmcztcbiAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmc0NoYW5nZS5lbWl0KGRlZnMpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVtaXRSb3cgPSAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IGRhdGE/LmRhdGEgPz8gZGF0YT8ucm93ID8/IGRhdGE7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRhdGE/LmNvbERlZiA/PyBkYXRhPy5jb2x1bW47XG4gICAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgY29sdW1uOiBjb2wsIGV2ZW50OiBkYXRhPy5ldmVudCB9KTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChpbnN0YW5jZS5yb3dDbGlja2VkICYmIHR5cGVvZiBpbnN0YW5jZS5yb3dDbGlja2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5yb3dDbGlja2VkLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLnJvd0NsaWNrICYmIHR5cGVvZiBpbnN0YW5jZS5yb3dDbGljay5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5zdGFuY2Uucm93Q2xpY2suc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UuY2VsbENsaWNrZWQgJiYgdHlwZW9mIGluc3RhbmNlLmNlbGxDbGlja2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5jZWxsQ2xpY2tlZC5zdWJzY3JpYmUoZW1pdFJvdykpO1xuICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZS5jZWxsQ2xpY2sgJiYgdHlwZW9mIGluc3RhbmNlLmNlbGxDbGljay5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5zdGFuY2UuY2VsbENsaWNrLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSgoc2VsZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5pc0FycmF5KHNlbGVjdGlvbikgPyBzZWxlY3Rpb24gOiAoc2VsZWN0aW9uID8gW3NlbGVjdGlvbl0gOiBbXSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHJvd3MpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRJbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3VycmVudElucHV0cykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmNvbXBSZWYuc2V0SW5wdXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5hcHBsaWVkSW5wdXRzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbUnB0R3JpZE91dGxldERpcmVjdGl2ZV0gRmFpbGVkIHRvIGNyZWF0ZSBjdXN0b20gZ3JpZCBjb21wb25lbnQ6JywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vicy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuc3VicyA9IFtdO1xuICAgIHRoaXMubGFzdEVtaXR0ZWRSZXBvcnRTdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5sYXN0RW1pdHRlZENvbHVtbkRlZnMgPSBudWxsO1xuICAgIHRoaXMuYXBwbGllZElucHV0cy5jbGVhcigpO1xuICAgIGlmICh0aGlzLmNvbXBSZWYpIHtcbiAgICAgIHRoaXMuY29tcFJlZi5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNvbXBSZWYgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnZjci5jbGVhcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1ncmlkLWJyaWRnZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJwdEljb25Db21wb25lbnQsIFJwdEdyaWRPdXRsZXREaXJlY3RpdmVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJycHQtZ3JpZC1jb250YWluZXJcIj5cbiAgICAgIEBpZiAoY3VzdG9tR3JpZENvbXBvbmVudCgpKSB7XG4gICAgICAgIDwhLS0gSG9zdC1wcm92aWRlZCBncmlkIGNvbXBvbmVudCAoZS5nLiBCV2F5cy1ncmlkIFVsdHJhR3JpZENvbXBvbmVudCkgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbcnB0R3JpZE91dGxldF09XCJjdXN0b21HcmlkQ29tcG9uZW50KClcIlxuICAgICAgICAgIFtpbnB1dHNdPVwiZ3JpZElucHV0cygpXCJcbiAgICAgICAgICAoZ3JpZFN0YXRlQ2hhbmdlKT1cImdyaWRTdGF0ZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChjb2x1bW5EZWZzQ2hhbmdlKT1cImNvbHVtbkRlZnNDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAocm93Q2xpY2spPVwicm93Q2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gQnVpbHQtaW4gZmFsbGJhY2sgdGFibGUgd2hlbiBubyBleHRlcm5hbCBncmlkIGlzIHByb3ZpZGVkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXRhYmxlLXRpdGxlXCI+UmVzdWx0cyAoe3sgZGF0YSgpLmxlbmd0aCB9fSByb3dzKTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwicnB0LXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1udW1cIj4jPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1jYlwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgIT09ICdzaW5nbGUnICYmIGlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzUGFydGlhbGx5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlNlbGVjdCBhbGwgcm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGggfHwgJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGFibGVdPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRoLWNvbnRlbnRcIiBbc3R5bGUuanVzdGlmeS1jb250ZW50XT1cImdldEp1c3RpZnlDb250ZW50KGNvbC5hbGlnbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLnNvcnRhYmxlICE9PSBmYWxzZSAmJiBzb3J0Q29sdW1uKCkgPT09IGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1zb3J0LWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJzb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnID8gJ2NoZXZyb24tdXAnIDogJ2NoZXZyb24tZG93bidcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGlmIChwYWdpbmF0ZWREYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbFNwYW4oKVwiIGNsYXNzPVwicnB0LWVtcHR5LW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICBObyBkYXRhIGZvdW5kIG1hdGNoaW5nIGNyaXRlcmlhXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQGZvciAocm93IG9mIHBhZ2luYXRlZERhdGEoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtY2xpY2thYmxlXT1cImhhc1Jvd0NsaWNrQWN0aW9uKCkgfHwgaXNTZWxlY3Rpb25FbmFibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZCBycHQtdGQtbnVtXCI+e3sgKGN1cnJlbnRQYWdlKCkgLSAxKSAqIHBhZ2VTaXplKCkgKyAkaW5kZXggKyAxIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkIHJwdC10ZC1jYlwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgPT09ICdzaW5nbGUnID8gJ3JhZGlvJyA6ICdjaGVja2JveCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJycHQtZmFsbGJhY2stc2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zKCk7IHRyYWNrIGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sLmFsaWduIHx8ICdsZWZ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1jbGlja2FibGUtY2VsbF09XCIhIWNvbC5hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DZWxsQ2xpY2socm93LCBjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1jZWxsLWFjdGlvbi1saW5rXCI+e3sgZm9ybWF0VmFsdWUocm93W2NvbC5maWVsZF0sIGNvbCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdFZhbHVlKHJvd1tjb2wuZmllbGRdLCBjb2wpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgQGlmIChoYXNBZ2dyZWdhdGVzKCkpIHtcbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJycHQtdGZvb3Qtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Jvd051bWJlcnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZC1udW1cIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQtY2JcIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQtYWdncmVnYXRlXCIgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sLmFsaWduIHx8ICdsZWZ0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wuYWdncmVnYXRlICYmIGNvbC5hZ2dyZWdhdGUgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS13cmFwXCIgW2NsYXNzLmlzLXJpZ2h0XT1cImNvbC5hbGlnbiA9PT0gJ3JpZ2h0J1wiIFtjbGFzcy5pcy1jZW50ZXJdPVwiY29sLmFsaWduID09PSAnY2VudGVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS1sYWJlbFwiPnt7IGNvbC5hZ2dyZWdhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYWdncmVnYXRlLXZhbHVlXCI+e3sgY29tcHV0ZUFnZ3JlZ2F0ZShjb2wpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGZvb3Q+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKGlzUGFnaW5hdGlvbkVuYWJsZWQoKSAmJiB0b3RhbFBhZ2VzKCkgPiAxKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXBhZ2luYXRpb24tYmFyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXBhZ2UtaW5mb1wiPlxuICAgICAgICAgICAgICAgIFBhZ2Uge3sgY3VycmVudFBhZ2UoKSB9fSBvZiB7eyB0b3RhbFBhZ2VzKCkgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXBhZ2UtYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcGFnZS1idG5cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlKCkgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZQYWdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctbGVmdFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlByZXZpb3VzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcGFnZS1idG5cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlKCkgPT09IHRvdGFsUGFnZXMoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TmV4dDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctcmlnaHRcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1jb250YWluZXIge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgYndheXMtZ3JpZCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiA0ODBweDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgLS11Zy1mb290ZXItYmc6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIC0tdWctZm9vdGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgLS11Zy1oZWFkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIC0tdWctYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIC0tdWctZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICAtLXVnLWZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICAtLXVnLWhlYWRlci1mb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXdyYXBwZXIge1xuICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXZpZXdwb3J0IHtcbiAgICAgIG1pbi1oZWlnaHQ6IDM1MHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctYm90dG9tLWJhcixcbiAgICA6aG9zdCA6Om5nLWRlZXAgdWctcGFnaW5hdGlvbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYykgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKSAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1zdGF0dXMtYmFyLWNvbnRlbnQsXG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdpbmF0aW9uLWluZm8sXG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLWluZm8ge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLXNpemUge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLXNpemUgc2VsZWN0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZikgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLXNtLCA0cHgpICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtcm93IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtcm93LWxhYmVsIHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteHMsIDAuNjg3NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW0gIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXRvdGFsLWNlbGwge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnJwdC10YWJsZS1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3csIDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDUpKTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuICAgIC5ycHQtdGFibGUtdG9vbGJhciB7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG4gICAgLnJwdC10YWJsZS10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG4gICAgLnJwdC10YWJsZS1yZXNwb25zaXZlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICB9XG4gICAgLnJwdC10YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NzVyZW0pO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG4gICAgLnJwdC10aCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzQ3NTU2OSk7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuICAgIC5ycHQtdGguc29ydGFibGUge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucnB0LXRoLnNvcnRhYmxlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICB9XG4gICAgLnJwdC10aC1jb250ZW50IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgfVxuICAgIC5ycHQtc29ydC1pbmRpY2F0b3Ige1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICB9XG4gICAgLnJwdC10aC1udW0sIC5ycHQtdGQtbnVtIHtcbiAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgfVxuICAgIC5ycHQtdGgtY2IsIC5ycHQtdGQtY2Ige1xuICAgICAgd2lkdGg6IDQycHg7XG4gICAgICBtaW4td2lkdGg6IDQycHg7XG4gICAgICBtYXgtd2lkdGg6IDQycHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgICB9XG4gICAgLnJwdC1jaGVja2JveCB7XG4gICAgICB3aWR0aDogMTVweDtcbiAgICAgIGhlaWdodDogMTVweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGFjY2VudC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gICAgLnJwdC10ZCB7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMxZTI5M2IpO1xuICAgIH1cbiAgICAucnB0LXRyOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjhmYWZjKTtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1zZWxlY3RlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmNmZmO1xuICAgIH1cbiAgICAucnB0LXRyLmlzLXNlbGVjdGVkOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkYmVhZmU7XG4gICAgfVxuICAgIC5ycHQtdHIuaXMtY2xpY2thYmxlIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1jbGlja2FibGU6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICB9XG4gICAgLnJwdC10ZC5pcy1jbGlja2FibGUtY2VsbCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgIC5ycHQtY2VsbC1hY3Rpb24tbGluayB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAxNTBtcyBlYXNlO1xuICAgIH1cbiAgICAucnB0LWNlbGwtYWN0aW9uLWxpbms6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG4gICAgLnJwdC1lbXB0eS1tZXNzYWdlIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDQwcHggMjBweDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzk0YTNiOCk7XG4gICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgfVxuICAgIC5ycHQtdGZvb3Qtcm93IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC10ZC1hZ2dyZWdhdGUge1xuICAgICAgcGFkZGluZzogOHB4IDE0cHg7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgICBnYXA6IDZweDtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtd3JhcC5pcy1yaWdodCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAuaXMtY2VudGVyIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS14cywgMC42ODc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXZhbHVlIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICd0bnVtJztcbiAgICB9XG4gICAgLnJwdC1wYWdpbmF0aW9uLWJhciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLXN1YnRsZSwgI2UyZThmMCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1pbmZvIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1idXR0b25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDhweDtcbiAgICB9XG4gICAgLnJwdC1wYWdlLWJ0biB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDVweDtcbiAgICAgIHBhZGRpbmc6IDRweCAxMHB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtc2Vjb25kYXJ5LCAjMzM0MTU1KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtc20sIDRweCk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1ob3ZlciwgIzk0YTNiOCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuOmRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydEdyaWRCcmlkZ2VDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGluamVjdGVkR3JpZCA9IGluamVjdChHUklEX0NPTVBPTkVOVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlID0gaW5qZWN0KFJlcG9ydFN0b3JhZ2VTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICh0aGlzLnN0b3JhZ2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeURlZmF1bHQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYndheXNfZ3JpZF9yZXBvcnRfc3RhdGVfZGVmYXVsdCcpO1xuICAgICAgICBpZiAobGVnYWN5RGVmYXVsdCAmJiAhbGVnYWN5RGVmYXVsdC5pbmNsdWRlcygnX3ZlcnNpb25fJykpIHtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnYndheXNfZ3JpZF9yZXBvcnRfc3RhdGVfZGVmYXVsdCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIHJlc3RyaWN0ZWQgc3RvcmFnZSBlbnZpcm9ubWVudHMgKGUuZy4gc2FuZGJveGVkIGlmcmFtZXMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgZ3JpZERlZmluaXRpb24gPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnRHcmlkRGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgZGF0YSA9IGlucHV0PHVua25vd25bXT4oW10pO1xuXG4gIHJlYWRvbmx5IGdyaWRTdGF0ZUNoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IGNvbHVtbkRlZnNDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSByb3dDbGljayA9IG91dHB1dDx7IHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGNvbHVtbj86IEdyaWRDb2x1bW5EZWZpbml0aW9uOyBldmVudD86IE1vdXNlRXZlbnQgfT4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PGFueVtdPigpO1xuXG4gIHJlYWRvbmx5IGN1c3RvbUdyaWRDb21wb25lbnQgPSBjb21wdXRlZDxUeXBlPHVua25vd24+IHwgbnVsbD4oKCkgPT4gdGhpcy5pbmplY3RlZEdyaWQgPz8gbnVsbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkUm93cyA9IHNpZ25hbDxhbnlbXT4oW10pO1xuXG4gIHJlYWRvbmx5IGhhc1Jvd0NsaWNrQWN0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuZ3JpZERlZmluaXRpb24oKTtcbiAgICByZXR1cm4gISEoXG4gICAgICBkZWY/LnJvd0NsaWNrQWN0aW9uIHx8XG4gICAgICBkZWY/Lm9wdGlvbnM/LnJvd0NsaWNrQWN0aW9uIHx8XG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gISFjLmFjdGlvbilcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBpc0NoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIGlmIChvcHRzPy5jaGVja2JveFNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb3B0cy5jaGVja2JveFNlbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKG9wdHM/LnNlbGVjdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucygpLnNvbWUoKGMpID0+IGMuY2hlY2tib3hTZWxlY3Rpb24pO1xuICB9KTtcblxuICByZWFkb25seSBlZmZlY3RpdmVSb3dTZWxlY3Rpb24gPSBjb21wdXRlZDwnc2luZ2xlJyB8ICdtdWx0aXBsZSc+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIHJldHVybiBvcHRzPy5zZWxlY3Rpb25Nb2RlIHx8IG9wdHM/LnJvd1NlbGVjdGlvbiB8fCAnbXVsdGlwbGUnO1xuICB9KTtcblxuICByZWFkb25seSBpc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBpZiAodGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucztcbiAgICBpZiAob3B0cz8uaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG9wdHMuaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzU2VsZWN0aW9uRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIHJldHVybiAhIShvcHRzPy5zZWxlY3RhYmxlIHx8IG9wdHM/LmNoZWNrYm94U2VsZWN0aW9uIHx8IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmNoZWNrYm94U2VsZWN0aW9uKSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvcnRDb2x1bW4gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNvcnREaXJlY3Rpb24gPSBzaWduYWw8J2FzYycgfCAnZGVzYyc+KCdhc2MnKTtcbiAgcmVhZG9ubHkgY3VycmVudFBhZ2UgPSBzaWduYWw8bnVtYmVyPigxKTtcbiAgcmVhZG9ubHkgdmlzaWJsZUNvbHVtbnMgPSBjb21wdXRlZDxHcmlkQ29sdW1uRGVmaW5pdGlvbltdPigoKSA9PiB7XG4gICAgY29uc3QgZGVmaW5lZCA9ICh0aGlzLmdyaWREZWZpbml0aW9uKCk/LmNvbHVtbnMgPz8gW10pLmZpbHRlcigoYykgPT4gYy52aXNpYmxlICE9PSBmYWxzZSk7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuZGF0YSgpO1xuICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoID4gMCAmJiB0eXBlb2Ygcm93c1swXSA9PT0gJ29iamVjdCcgJiYgcm93c1swXSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZmlyc3RSb3cgPSByb3dzWzBdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpcnN0Um93KTtcbiAgICAgIGNvbnN0IG1hdGNoZXNBbnkgPSBkZWZpbmVkLnNvbWUoKGMpID0+IGtleXMuaW5jbHVkZXMoYy5maWVsZCkpO1xuICAgICAgLy8gSWYgbm8gY29sdW1ucyBhcmUgZGVmaW5lZCwgb3IgdGhlIGRlZmluZWQgY29sdW1ucyBkb24ndCBtYXRjaCBhbnkgZmllbGQgaW4gdGhlIGRhdGEgKGUuZy4gZHVtbXkgaWQvbmFtZSBkZWZhdWx0cyk6XG4gICAgICBpZiAoZGVmaW5lZC5sZW5ndGggPT09IDAgfHwgIW1hdGNoZXNBbnkpIHtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKChrKSA9PiAoe1xuICAgICAgICAgIGZpZWxkOiBrLFxuICAgICAgICAgIGxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoayksXG4gICAgICAgICAgZGF0YVR5cGU6IHR5cGVvZiBmaXJzdFJvd1trXSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6IHR5cGVvZiBmaXJzdFJvd1trXSA9PT0gJ2Jvb2xlYW4nID8gJ2Jvb2xlYW4nIDogJ3N0cmluZycsXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmaW5lZDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYnJpZGdlZENvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXNHcmlkQ2hlY2tib3ggPSB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaXNHcmlkSGVhZGVyQ2hlY2tib3ggPSB0aGlzLmlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaGFzRXhwbGljaXRDb2xDaGVja2JveCA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmNoZWNrYm94U2VsZWN0aW9uKTtcblxuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zKCkubWFwKChjb2wsIGlkeCkgPT4ge1xuICAgICAgbGV0IHdpZHRoTnVtOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIGNvbC53aWR0aCA9PT0gJ3N0cmluZycgJiYgY29sLndpZHRoLmVuZHNXaXRoKCdweCcpKSB7XG4gICAgICAgIHdpZHRoTnVtID0gcGFyc2VJbnQoY29sLndpZHRoLCAxMCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiAoY29sLndpZHRoIGFzIHVua25vd24pID09PSAnbnVtYmVyJykge1xuICAgICAgICB3aWR0aE51bSA9IGNvbC53aWR0aCBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICAgIH1cblxuICAgICAgbGV0IGNvbENoZWNrYm94U2VsZWN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY29sLmNoZWNrYm94U2VsZWN0aW9uO1xuICAgICAgbGV0IGNvbEhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY29sLmhlYWRlckNoZWNrYm94U2VsZWN0aW9uO1xuXG4gICAgICBpZiAoIWhhc0V4cGxpY2l0Q29sQ2hlY2tib3ggJiYgaXNHcmlkQ2hlY2tib3ggJiYgaWR4ID09PSAwKSB7XG4gICAgICAgIGNvbENoZWNrYm94U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29sSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gPSBpc0dyaWRIZWFkZXJDaGVja2JveDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBoZWFkZXJOYW1lOiBjb2wubGFiZWwsIC8vIEJXYXlzLWdyaWQgLyBBRyBHcmlkIHN0YW5kYXJkXG4gICAgICAgIGhlYWRlcjogY29sLmxhYmVsLFxuICAgICAgICB0aXRsZTogY29sLmxhYmVsLFxuICAgICAgICBoaWRlOiBjb2wudmlzaWJsZSA9PT0gZmFsc2UsXG4gICAgICAgIHdpZHRoOiB3aWR0aE51bSxcbiAgICAgICAgYWdnRnVuYzogY29sLmFnZ3JlZ2F0ZSAmJiBjb2wuYWdncmVnYXRlICE9PSAnbm9uZScgPyBjb2wuYWdncmVnYXRlIDogdW5kZWZpbmVkLFxuICAgICAgICBjaGVja2JveFNlbGVjdGlvbjogY29sQ2hlY2tib3hTZWxlY3Rpb24sXG4gICAgICAgIGhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBjb2xIZWFkZXJDaGVja2JveFNlbGVjdGlvbixcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRJbnN0YW5jZUtleSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkcyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8uZGF0YVNvdXJjZUlkIHx8ICdjdXN0b20nO1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLnZpc2libGVDb2x1bW5zKCkubWFwKChjKSA9PiBjLmZpZWxkKS5qb2luKCdfJyk7XG4gICAgcmV0dXJuIGAke2RzfV8ke2NvbHN9YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZFN0YXRlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5kYXRhU291cmNlSWQgfHwgJ2N1c3RvbSc7XG4gICAgY29uc3QgY29scyA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGMpID0+IGMuZmllbGQpLnNsaWNlKDAsIDUpLmpvaW4oJ18nKTtcbiAgICByZXR1cm4gYHJwdF8ke2RzfV8ke2NvbHMgfHwgJ2dyaWQnfWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCByb3dTZWwgPSB0aGlzLmVmZmVjdGl2ZVJvd1NlbGVjdGlvbigpO1xuICAgIGNvbnN0IGhhc0NoZWNrYm94ID0gdGhpcy5pc0NoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCgpO1xuICAgIGNvbnN0IGhhc0hlYWRlckNoZWNrYm94ID0gdGhpcy5pc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZGVCYXI6IG9wdHMuc2lkZUJhciAhPT0gdW5kZWZpbmVkID8gb3B0cy5zaWRlQmFyIDogdHJ1ZSxcbiAgICAgIHN0YXR1c0Jhcjogb3B0cy5zdGF0dXNCYXIgIT09IHVuZGVmaW5lZCA/IG9wdHMuc3RhdHVzQmFyIDogdHJ1ZSxcbiAgICAgIGdsb2JhbFNlYXJjaDogb3B0cy5nbG9iYWxTZWFyY2ggIT09IHVuZGVmaW5lZCA/IG9wdHMuZ2xvYmFsU2VhcmNoIDogdHJ1ZSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICByb3dTZWxlY3Rpb246IHJvd1NlbCxcbiAgICAgIHNlbGVjdGlvbk1vZGU6IHJvd1NlbCxcbiAgICAgIGNoZWNrYm94U2VsZWN0aW9uOiBoYXNDaGVja2JveCxcbiAgICAgIGhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBoYXNIZWFkZXJDaGVja2JveCxcbiAgICAgIHN0YXRlS2V5OiB0aGlzLmdyaWRTdGF0ZUtleSgpLFxuICAgIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRSZXBvcnRTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gKG9wdHM/LnJlcG9ydFN0YXRlIGFzIGFueSkgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbkdyb3VwRGVmczogZXhpc3RpbmcuY29sdW1uR3JvdXBEZWZzID8/IG51bGwsXG4gICAgICBjb2x1bW5EZWZzOiB0aGlzLmJyaWRnZWRDb2x1bW5zKCksXG4gICAgICBzb3J0TW9kZWw6IChvcHRzPy5zb3J0TW9kZWwgYXMgYW55KSB8fCBleGlzdGluZy5zb3J0TW9kZWwgfHwgW10sXG4gICAgICBncm91cE1vZGVsOiBvcHRzPy5ncm91cE1vZGVsIHx8IGV4aXN0aW5nLmdyb3VwTW9kZWwgfHwgW10sXG4gICAgICBhY3RpdmVGaWx0ZXJzOiBleGlzdGluZy5hY3RpdmVGaWx0ZXJzIHx8IHt9LFxuICAgICAgY29uZGl0aW9uRmlsdGVyczogZXhpc3RpbmcuY29uZGl0aW9uRmlsdGVycyB8fCB7fSxcbiAgICAgIGhpZ2hsaWdodFJ1bGVzOiBleGlzdGluZy5oaWdobGlnaHRSdWxlcyB8fCBbXSxcbiAgICAgIC4uLmV4aXN0aW5nLFxuICAgIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRJbnB1dHMgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIGNvbHVtbnM6IHRoaXMuYnJpZGdlZENvbHVtbnMoKSxcbiAgICBjb2x1bW5EZWZzOiB0aGlzLmJyaWRnZWRDb2x1bW5zKCksXG4gICAgcm93RGF0YTogdGhpcy5kYXRhKCksXG4gICAgY29uZmlnOiB0aGlzLmdyaWRDb25maWcoKSxcbiAgICByZXBvcnRTdGF0ZTogdGhpcy5ncmlkUmVwb3J0U3RhdGUoKSxcbiAgICBwYWdpbmF0aW9uOiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnaW5hdGlvbiAhPT0gZmFsc2UsXG4gICAgcGFnZVNpemU6IHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdlU2l6ZSA/PyAxMCxcbiAgICByb3dTZWxlY3Rpb246IHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCksXG4gIH0pKTtcblxuICByZWFkb25seSBzaG93Um93TnVtYmVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gISF0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8uc2hvd1Jvd051bWJlcnM7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzUGFnaW5hdGlvbkVuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdpbmF0aW9uICE9PSBmYWxzZTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcGFnZVNpemUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdlU2l6ZSA/PyAxMDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29sU3BhbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucygpLmxlbmd0aCArICh0aGlzLnNob3dSb3dOdW1iZXJzKCkgPyAxIDogMCkgKyAodGhpcy5pc1NlbGVjdGlvbkVuYWJsZWQoKSA/IDEgOiAwKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGFzQWdncmVnYXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnNob3dGb290ZXIgJiZcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmFnZ3JlZ2F0ZSAmJiBjLmFnZ3JlZ2F0ZSAhPT0gJ25vbmUnKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvcnRlZERhdGEgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPigoKSA9PiB7XG4gICAgY29uc3QgcmF3ID0gKHRoaXMuZGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10pIHx8IFtdO1xuICAgIGNvbnN0IGNvbCA9IHRoaXMuc29ydENvbHVtbigpO1xuICAgIGNvbnN0IGRpciA9IHRoaXMuc29ydERpcmVjdGlvbigpO1xuXG4gICAgaWYgKCFjb2wpIHJldHVybiByYXc7XG5cbiAgICByZXR1cm4gWy4uLnJhd10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdmFsQSA9IGFbY29sXTtcbiAgICAgIGNvbnN0IHZhbEIgPSBiW2NvbF07XG4gICAgICBpZiAodmFsQSA9PSBudWxsICYmIHZhbEIgPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgICBpZiAodmFsQSA9PSBudWxsKSByZXR1cm4gMTtcbiAgICAgIGlmICh2YWxCID09IG51bGwpIHJldHVybiAtMTtcbiAgICAgIGlmICh2YWxBIDwgdmFsQikgcmV0dXJuIGRpciA9PT0gJ2FzYycgPyAtMSA6IDE7XG4gICAgICBpZiAodmFsQSA+IHZhbEIpIHJldHVybiBkaXIgPT09ICdhc2MnID8gMSA6IC0xO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsUGFnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbkVuYWJsZWQoKSkgcmV0dXJuIDE7XG4gICAgY29uc3QgbGVuID0gdGhpcy5zb3J0ZWREYXRhKCkubGVuZ3RoO1xuICAgIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmNlaWwobGVuIC8gdGhpcy5wYWdlU2l6ZSgpKSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2luYXRlZERhdGEgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPigoKSA9PiB7XG4gICAgY29uc3Qgc29ydGVkID0gdGhpcy5zb3J0ZWREYXRhKCk7XG4gICAgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbkVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHNvcnRlZDtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSgpIC0gMSkgKiB0aGlzLnBhZ2VTaXplKCk7XG4gICAgcmV0dXJuIHNvcnRlZC5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLnBhZ2VTaXplKCkpO1xuICB9KTtcblxuICBnZXRKdXN0aWZ5Q29udGVudChhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jyk6IHN0cmluZyB7XG4gICAgaWYgKGFsaWduID09PSAncmlnaHQnKSByZXR1cm4gJ2ZsZXgtZW5kJztcbiAgICBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSByZXR1cm4gJ2NlbnRlcic7XG4gICAgcmV0dXJuICdmbGV4LXN0YXJ0JztcbiAgfVxuXG4gIHRvZ2dsZVNvcnQoY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGlmIChjb2wuc29ydGFibGUgPT09IGZhbHNlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuc29ydENvbHVtbigpID09PSBjb2wuZmllbGQpIHtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbi5zZXQodGhpcy5zb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNvcnRDb2x1bW4uc2V0KGNvbC5maWVsZCk7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24uc2V0KCdhc2MnKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZS5zZXQoMSk7XG4gIH1cblxuICBwcmV2UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpID4gMSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS51cGRhdGUoKHApID0+IHAgLSAxKTtcbiAgICB9XG4gIH1cblxuICBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpIDwgdGhpcy50b3RhbFBhZ2VzKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudXBkYXRlKChwKSA9PiBwICsgMSk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0VmFsdWUodmFsdWU6IHVua25vd24sIGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgaWYgKGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5Jykge1xuICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gU3RyaW5nKHZhbHVlKSA6IGAkJHtudW0udG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMiwgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pfWA7XG4gICAgfVxuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyBTdHJpbmcodmFsdWUpIDogbnVtLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKGQuZ2V0VGltZSgpKSA/IFN0cmluZyh2YWx1ZSkgOiBkLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIGNvbXB1dGVBZ2dyZWdhdGUoY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc29ydGVkRGF0YSgpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcwJztcblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnY291bnQnKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGRhdGEubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjb25zdCBudW1iZXJzID0gZGF0YVxuICAgICAgLm1hcCgocm93KSA9PiBOdW1iZXIocm93W2NvbC5maWVsZF0pKVxuICAgICAgLmZpbHRlcigobikgPT4gIWlzTmFOKG4pKTtcblxuICAgIGlmIChudW1iZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcwJztcblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnc3VtJykge1xuICAgICAgY29uc3Qgc3VtID0gbnVtYmVycy5yZWR1Y2UoKGFjYywgbikgPT4gYWNjICsgbiwgMCk7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke3N1bS50b0ZpeGVkKDIpfWAgOiBzdW0udG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ2F2ZycpIHtcbiAgICAgIGNvbnN0IGF2ZyA9IG51bWJlcnMucmVkdWNlKChhY2MsIG4pID0+IGFjYyArIG4sIDApIC8gbnVtYmVycy5sZW5ndGg7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke2F2Zy50b0ZpeGVkKDIpfWAgOiBhdmcudG9GaXhlZCgyKTtcbiAgICB9XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ21pbicpIHtcbiAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLm51bWJlcnMpO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHttaW4udG9GaXhlZCgyKX1gIDogU3RyaW5nKG1pbik7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdtYXgnKSB7XG4gICAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5udW1iZXJzKTtcbiAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgPyBgJCR7bWF4LnRvRml4ZWQoMil9YCA6IFN0cmluZyhtYXgpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCByb3dzID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgPyBzZWxlY3RlZCA6IChzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSk7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KHJvd3MpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93cyk7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGVkKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MoKS5pbmNsdWRlcyhyb3cpO1xuICB9XG5cbiAgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wYWdpbmF0ZWREYXRhKCk7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGRhdGEuZXZlcnkoKHIpID0+IHRoaXMuaXNSb3dTZWxlY3RlZChyKSk7XG4gIH1cblxuICBpc1BhcnRpYWxseVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnBhZ2luYXRlZERhdGEoKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb3VudCA9IGRhdGEuZmlsdGVyKChyKSA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocikpLmxlbmd0aDtcbiAgICByZXR1cm4gY291bnQgPiAwICYmIGNvdW50IDwgZGF0YS5sZW5ndGg7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICBjb25zdCBwYWdlUm93cyA9IHRoaXMucGFnaW5hdGVkRGF0YSgpO1xuICAgIGxldCBuZXh0OiBhbnlbXTtcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldChbLi4uY3VycmVudCwgLi4ucGFnZVJvd3NdKTtcbiAgICAgIG5leHQgPSBBcnJheS5mcm9tKHNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQgPSBjdXJyZW50LmZpbHRlcigocikgPT4gIXBhZ2VSb3dzLmluY2x1ZGVzKHIpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KG5leHQpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV4dCk7XG4gIH1cblxuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICBjb25zdCBtb2RlID0gdGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKTtcbiAgICBsZXQgbmV4dDogYW55W107XG4gICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBuZXh0ID0gY2hlY2tlZCA/IFtyb3ddIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIG5leHQgPSBjdXJyZW50LmluY2x1ZGVzKHJvdykgPyBjdXJyZW50IDogWy4uLmN1cnJlbnQsIHJvd107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5maWx0ZXIoKHIpID0+IHIgIT09IHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgb25Sb3dDbGljayhyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmVmZmVjdGl2ZVJvd1NlbGVjdGlvbigpO1xuICAgICAgbGV0IG5leHQ6IGFueVtdO1xuICAgICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIG5leHQgPSBbcm93XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQgPSBjdXJyZW50LmluY2x1ZGVzKHJvdykgPyBjdXJyZW50LmZpbHRlcigocikgPT4gciAhPT0gcm93KSA6IFsuLi5jdXJyZW50LCByb3ddO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KG5leHQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXh0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzUm93Q2xpY2tBY3Rpb24oKSkge1xuICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBldmVudCB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNlbGxDbGljayhyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb2w6IEdyaWRDb2x1bW5EZWZpbml0aW9uLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChjb2wuYWN0aW9uKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgY29sdW1uOiBjb2wsIGV2ZW50IH0pO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
912
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3J1bnRpbWUvcmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBTTNFLE1BQU0sT0FBTyxzQkFBc0I7SUFDaEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBNkIsSUFBSSxDQUFDO0lBQ3pDLElBQUksR0FBbUIsRUFBRSxDQUFDO0lBQzFCLHNCQUFzQixHQUFRLElBQUksQ0FBQztJQUNuQyxxQkFBcUIsR0FBUSxJQUFJLENBQUM7SUFDekIsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFFL0MsYUFBYSxHQUFHLEtBQUssQ0FBbUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUUsTUFBTSxHQUFHLEtBQUssQ0FBMEIsRUFBRSxDQUFDLENBQUM7SUFDNUMsZUFBZSxH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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrS1QsbUJBbVNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBjb21wdXRlZCxcbiAgRGlyZWN0aXZlLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR1JJRF9DT01QT05FTlQgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EZWZpbml0aW9uLCBSZXBvcnRHcmlkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgaHVtYW5pemVJZGVudGlmaWVyIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pZGVudGlmaWVyLWh1bWFuaXplcic7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tycHRHcmlkT3V0bGV0XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFJwdEdyaWRPdXRsZXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHZjciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSBjb21wUmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRSZXBvcnRTdGF0ZTogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZENvbHVtbkRlZnM6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwbGllZElucHV0cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgcmVhZG9ubHkgY29tcG9uZW50VHlwZSA9IGlucHV0PFR5cGU8YW55PiB8IG51bGw+KG51bGwsIHsgYWxpYXM6ICdycHRHcmlkT3V0bGV0JyB9KTtcbiAgcmVhZG9ubHkgaW5wdXRzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHt9KTtcbiAgcmVhZG9ubHkgZ3JpZFN0YXRlQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgY29sdW1uRGVmc0NoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IHJvd0NsaWNrID0gb3V0cHV0PHsgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgY29sdW1uPzogYW55OyBldmVudD86IGFueSB9PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmNvbXBvbmVudFR5cGUoKTtcbiAgICAgIHRoaXMucmVjcmVhdGVDb21wb25lbnQodHlwZSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XG4gICAgICBpZiAoIXRoaXMuY29tcFJlZikgcmV0dXJuO1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjdXJyZW50SW5wdXRzKSkge1xuICAgICAgICBpZiAoa2V5ID09PSAncmVwb3J0U3RhdGUnKSB7XG4gICAgICAgICAgLy8gU3VwcHJlc3MgY2lyY3VsYXIgaW5wdXQgZWNobzogaWYgaW5jb21pbmcgcmVwb3J0U3RhdGUgbWF0Y2hlcyB3aGF0IHRoaXMgZ3JpZCBpbnN0YW5jZVxuICAgICAgICAgIC8vIGp1c3QgZW1pdHRlZCwgc2tpcCBzZXRJbnB1dC4gUmUtYXBwbHlpbmcgcmVwb3J0U3RhdGUgY2F1c2VzIG5nT25DaGFuZ2VzIC0+IGFwcGx5SW1wb3J0ZWRGaWx0ZXJzLFxuICAgICAgICAgIC8vIHdoaWNoIGRlc3Ryb3lzIGNvbHVtbnMgYW5kIGRpc21pc3NlcyBhY3RpdmUgZmlsdGVyIHBvcG92ZXJzL2lucHV0cy5cbiAgICAgICAgICBpZiAodGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlICYmIHRoaXMuaXNSZXBvcnRTdGF0ZU1hdGNoaW5nKHRoaXMubGFzdEVtaXR0ZWRSZXBvcnRTdGF0ZSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuYXBwbGllZElucHV0cy5oYXMoJ3JlcG9ydFN0YXRlJykgJiYgdGhpcy5pc1JlcG9ydFN0YXRlTWF0Y2hpbmcodGhpcy5hcHBsaWVkSW5wdXRzLmdldCgncmVwb3J0U3RhdGUnKSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnY29sdW1ucycgfHwga2V5ID09PSAnY29sdW1uRGVmcycpIHtcbiAgICAgICAgICBpZiAodGhpcy5sYXN0RW1pdHRlZENvbHVtbkRlZnMgJiYgdGhpcy5pc0NvbHVtbkRlZnNNYXRjaGluZyh0aGlzLmxhc3RFbWl0dGVkQ29sdW1uRGVmcywgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuYXBwbGllZElucHV0cy5oYXMoa2V5KSAmJiB0aGlzLmlzQ29sdW1uRGVmc01hdGNoaW5nKHRoaXMuYXBwbGllZElucHV0cy5nZXQoa2V5KSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnY29uZmlnJykge1xuICAgICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmFwcGxpZWRJbnB1dHMuZ2V0KCdjb25maWcnKTtcbiAgICAgICAgICBpZiAocHJldiAmJiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAncm93RGF0YScpIHtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy5hcHBsaWVkSW5wdXRzLmdldCgncm93RGF0YScpO1xuICAgICAgICAgIGlmIChwcmV2ID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXBwbGllZElucHV0cy5nZXQoa2V5KSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jYW5BY2NlcHRJbnB1dChrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY29tcFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmFwcGxpZWRJbnB1dHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbkFjY2VwdElucHV0KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbXBSZWYpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjbXBEZWYgPSAodGhpcy5jb21wUmVmLmNvbXBvbmVudFR5cGUgYXMgYW55KT8uWyfJtWNtcCddO1xuICAgIGlmIChjbXBEZWYgJiYgY21wRGVmLmlucHV0cykge1xuICAgICAgcmV0dXJuIGtleSBpbiBjbXBEZWYuaW5wdXRzIHx8IE9iamVjdC52YWx1ZXMoY21wRGVmLmlucHV0cykuaW5jbHVkZXMoa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGlzUmVwb3J0U3RhdGVNYXRjaGluZyhhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBhID09PSBiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnZXRDb21wYXJhYmxlID0gKHM6IGFueSkgPT4gKHtcbiAgICAgICAgYWN0aXZlRmlsdGVyczogcy5hY3RpdmVGaWx0ZXJzLFxuICAgICAgICBjb25kaXRpb25GaWx0ZXJzOiBzLmNvbmRpdGlvbkZpbHRlcnMsXG4gICAgICAgIHNvcnRNb2RlbDogcy5zb3J0TW9kZWwsXG4gICAgICAgIGdyb3VwTW9kZWw6IHMuZ3JvdXBNb2RlbCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYSkpID09PSBKU09OLnN0cmluZ2lmeShnZXRDb21wYXJhYmxlKGIpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzQ29sdW1uRGVmc01hdGNoaW5nKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSB8fCAhQXJyYXkuaXNBcnJheShiKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ2V0Q29tcGFyYWJsZSA9IChjb2xzOiBhbnlbXSkgPT5cbiAgICAgICAgY29scy5tYXAoKGM6IGFueSkgPT4gKHtcbiAgICAgICAgICBmaWVsZDogYy5maWVsZCxcbiAgICAgICAgICB3aWR0aDogYy53aWR0aCxcbiAgICAgICAgICBoaWRlOiBjLmhpZGUsXG4gICAgICAgICAgcGlubmVkOiBjLnBpbm5lZCxcbiAgICAgICAgfSkpO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYSkpID09PSBKU09OLnN0cmluZ2lmeShnZXRDb21wYXJhYmxlKGIpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlY3JlYXRlQ29tcG9uZW50KHR5cGU6IFR5cGU8YW55PiB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgaWYgKCF0eXBlKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5jb21wUmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KHR5cGUpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBSZWYuaW5zdGFuY2UgYXMgYW55O1xuXG4gICAgICBpZiAoaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZCAmJiB0eXBlb2YgaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZC5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMubGFzdEVtaXR0ZWRSZXBvcnRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgdGhpcy5ncmlkU3RhdGVDaGFuZ2UuZW1pdChzdGF0ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YW5jZS5yZXBvcnRTdGF0ZUNoYW5nZSAmJiB0eXBlb2YgaW5zdGFuY2UucmVwb3J0U3RhdGVDaGFuZ2Uuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKFxuICAgICAgICAgIGluc3RhbmNlLnJlcG9ydFN0YXRlQ2hhbmdlLnN1YnNjcmliZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLmdyaWRTdGF0ZUNoYW5nZS5lbWl0KHN0YXRlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLmNvbHVtbkRlZnNDaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5jb2x1bW5EZWZzQ2hhbmdlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UuY29sdW1uRGVmc0NoYW5nZWQuc3Vic2NyaWJlKChkZWZzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMubGFzdEVtaXR0ZWRDb2x1bW5EZWZzID0gZGVmcztcbiAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmc0NoYW5nZS5lbWl0KGRlZnMpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVtaXRSb3cgPSAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IGRhdGE/LmRhdGEgPz8gZGF0YT8ucm93ID8/IGRhdGE7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRhdGE/LmNvbERlZiA/PyBkYXRhPy5jb2x1bW47XG4gICAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgY29sdW1uOiBjb2wsIGV2ZW50OiBkYXRhPy5ldmVudCB9KTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChpbnN0YW5jZS5yb3dDbGlja2VkICYmIHR5cGVvZiBpbnN0YW5jZS5yb3dDbGlja2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5yb3dDbGlja2VkLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLnJvd0NsaWNrICYmIHR5cGVvZiBpbnN0YW5jZS5yb3dDbGljay5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5zdGFuY2Uucm93Q2xpY2suc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UuY2VsbENsaWNrZWQgJiYgdHlwZW9mIGluc3RhbmNlLmNlbGxDbGlja2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5jZWxsQ2xpY2tlZC5zdWJzY3JpYmUoZW1pdFJvdykpO1xuICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZS5jZWxsQ2xpY2sgJiYgdHlwZW9mIGluc3RhbmNlLmNlbGxDbGljay5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5zdGFuY2UuY2VsbENsaWNrLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSgoc2VsZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5pc0FycmF5KHNlbGVjdGlvbikgPyBzZWxlY3Rpb24gOiAoc2VsZWN0aW9uID8gW3NlbGVjdGlvbl0gOiBbXSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHJvd3MpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRJbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3VycmVudElucHV0cykpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkFjY2VwdElucHV0KGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY29tcFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmFwcGxpZWRJbnB1dHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tScHRHcmlkT3V0bGV0RGlyZWN0aXZlXSBGYWlsZWQgdG8gY3JlYXRlIGN1c3RvbSBncmlkIGNvbXBvbmVudDonLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5zdWJzID0gW107XG4gICAgdGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFbWl0dGVkQ29sdW1uRGVmcyA9IG51bGw7XG4gICAgdGhpcy5hcHBsaWVkSW5wdXRzLmNsZWFyKCk7XG4gICAgaWYgKHRoaXMuY29tcFJlZikge1xuICAgICAgdGhpcy5jb21wUmVmLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuY29tcFJlZiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMudmNyLmNsZWFyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWdyaWQtYnJpZGdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUnB0SWNvbkNvbXBvbmVudCwgUnB0R3JpZE91dGxldERpcmVjdGl2ZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1ncmlkLWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChjdXN0b21HcmlkQ29tcG9uZW50KCkpIHtcbiAgICAgICAgPCEtLSBIb3N0LXByb3ZpZGVkIGdyaWQgY29tcG9uZW50IChlLmcuIEJXYXlzLWdyaWQgVWx0cmFHcmlkQ29tcG9uZW50KSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtycHRHcmlkT3V0bGV0XT1cImN1c3RvbUdyaWRDb21wb25lbnQoKVwiXG4gICAgICAgICAgW2lucHV0c109XCJncmlkSW5wdXRzKClcIlxuICAgICAgICAgIChncmlkU3RhdGVDaGFuZ2UpPVwiZ3JpZFN0YXRlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNvbHVtbkRlZnNDaGFuZ2UpPVwiY29sdW1uRGVmc0NoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChyb3dDbGljayk9XCJyb3dDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBCdWlsdC1pbiBmYWxsYmFjayB0YWJsZSB3aGVuIG5vIGV4dGVybmFsIGdyaWQgaXMgcHJvdmlkZWQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGFibGUtY2FyZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGFibGUtdG9vbGJhclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtdGFibGUtdGl0bGVcIj5SZXN1bHRzICh7eyBkYXRhKCkubGVuZ3RoIH19IHJvd3MpPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC10YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJycHQtdGFibGVcIj5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Jvd051bWJlcnMoKSkge1xuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJycHQtdGggcnB0LXRoLW51bVwiPiM8L3RoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJycHQtdGggcnB0LXRoLWNiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChlZmZlY3RpdmVSb3dTZWxlY3Rpb24oKSAhPT0gJ3NpbmdsZScgJiYgaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNQYXJ0aWFsbHlTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiU2VsZWN0IGFsbCByb3dzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zKCk7IHRyYWNrIGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC10aFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aCB8fCAnYXV0bydcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbC5hbGlnbiB8fCAnbGVmdCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zb3J0YWJsZV09XCJjb2wuc29ydGFibGUgIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU29ydChjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGgtY29udGVudFwiIFtzdHlsZS5qdXN0aWZ5LWNvbnRlbnRdPVwiZ2V0SnVzdGlmeUNvbnRlbnQoY29sLmFsaWduKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wuc29ydGFibGUgIT09IGZhbHNlICYmIHNvcnRDb2x1bW4oKSA9PT0gY29sLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXNvcnQtaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cInNvcnREaXJlY3Rpb24oKSA9PT0gJ2FzYycgPyAnY2hldnJvbi11cCcgOiAnY2hldnJvbi1kb3duJ1wiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICBAaWYgKHBhZ2luYXRlZERhdGEoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sU3BhbigpXCIgY2xhc3M9XCJycHQtZW1wdHktbWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIE5vIGRhdGEgZm91bmQgbWF0Y2hpbmcgY3JpdGVyaWFcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICBAZm9yIChyb3cgb2YgcGFnaW5hdGVkRGF0YSgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdHJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1jbGlja2FibGVdPVwiaGFzUm93Q2xpY2tBY3Rpb24oKSB8fCBpc1NlbGVjdGlvbkVuYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Jvd051bWJlcnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkIHJwdC10ZC1udW1cIj57eyAoY3VycmVudFBhZ2UoKSAtIDEpICogcGFnZVNpemUoKSArICRpbmRleCArIDEgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzU2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQgcnB0LXRkLWNiXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJlZmZlY3RpdmVSb3dTZWxlY3Rpb24oKSA9PT0gJ3NpbmdsZScgPyAncmFkaW8nIDogJ2NoZWNrYm94J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJwdC1mYWxsYmFjay1zZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2wgb2YgdmlzaWJsZUNvbHVtbnMoKTsgdHJhY2sgY29sLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWNsaWNrYWJsZS1jZWxsXT1cIiEhY29sLmFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNlbGxDbGljayhyb3csIGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWNlbGwtYWN0aW9uLWxpbmtcIj57eyBmb3JtYXRWYWx1ZShyb3dbY29sLmZpZWxkXSwgY29sKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0VmFsdWUocm93W2NvbC5maWVsZF0sIGNvbCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICBAaWYgKGhhc0FnZ3JlZ2F0ZXMoKSkge1xuICAgICAgICAgICAgICAgIDx0Zm9vdD5cbiAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInJwdC10Zm9vdC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93Um93TnVtYmVycygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkLW51bVwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZC1jYlwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zKCk7IHRyYWNrIGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZC1hZ2dyZWdhdGVcIiBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5hZ2dyZWdhdGUgJiYgY29sLmFnZ3JlZ2F0ZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYWdncmVnYXRlLXdyYXBcIiBbY2xhc3MuaXMtcmlnaHRdPVwiY29sLmFsaWduID09PSAncmlnaHQnXCIgW2NsYXNzLmlzLWNlbnRlcl09XCJjb2wuYWxpZ24gPT09ICdjZW50ZXInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYWdncmVnYXRlLWxhYmVsXCI+e3sgY29sLmFnZ3JlZ2F0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1hZ2dyZWdhdGUtdmFsdWVcIj57eyBjb21wdXRlQWdncmVnYXRlKGNvbCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Zm9vdD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIEBpZiAoaXNQYWdpbmF0aW9uRW5hYmxlZCgpICYmIHRvdGFsUGFnZXMoKSA+IDEpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcGFnaW5hdGlvbi1iYXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtcGFnZS1pbmZvXCI+XG4gICAgICAgICAgICAgICAgUGFnZSB7eyBjdXJyZW50UGFnZSgpIH19IG9mIHt7IHRvdGFsUGFnZXMoKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcGFnZS1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1wYWdlLWJ0blwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UoKSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldlBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJhcnJvdy1sZWZ0XCIgW3NpemVdPVwiMTJcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+UHJldmlvdXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1wYWdlLWJ0blwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UoKSA9PT0gdG90YWxQYWdlcygpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5OZXh0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJhcnJvdy1yaWdodFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICB9XG4gICAgLnJwdC1ncmlkLWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCBid2F5cy1ncmlkIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDQ4MHB4O1xuICAgICAgbWluLWhlaWdodDogNDgwcHg7XG4gICAgICAtLXVnLWZvb3Rlci1iZzogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgLS11Zy1mb290ZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzMzNDE1NSk7XG4gICAgICAtLXVnLWhlYWRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgLS11Zy1ib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgLS11Zy1mb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICAgIC0tdWctZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIC0tdWctaGVhZGVyLWZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctd3JhcHBlciB7XG4gICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdmlld3BvcnQge1xuICAgICAgbWluLWhlaWdodDogMzUwcHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1ib3R0b20tYmFyLFxuICAgIDpob3N0IDo6bmctZGVlcCB1Zy1wYWdpbmF0aW9uIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXN0YXR1cy1iYXItY29udGVudCxcbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXBhZ2luYXRpb24taW5mbyxcbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXBhZ2UtaW5mbyB7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMCAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcyAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXBhZ2Utc2l6ZSB7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMCAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXBhZ2Utc2l6ZSBzZWxlY3Qge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSkgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSkgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtc20sIDRweCkgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy10b3RhbC1yb3cge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSkgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy10b3RhbC1yb3ctbGFiZWwge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS14cywgMC42ODc1cmVtKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSAhaW1wb3J0YW50O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbSAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtY2VsbCB7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcyAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAucnB0LXRhYmxlLWNhcmQge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLWJnLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtbGcsIDhweCk7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdywgMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNSkpO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLnJwdC10YWJsZS10b29sYmFyIHtcbiAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIH1cbiAgICAucnB0LXRhYmxlLXRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIH1cbiAgICAucnB0LXRhYmxlLXJlc3BvbnNpdmUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIH1cbiAgICAucnB0LXRhYmxlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1iYXNlLCAwLjg3NXJlbSk7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cbiAgICAucnB0LXRoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNDc1NTY5KTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG4gICAgLnJwdC10aC5zb3J0YWJsZSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgIC5ycHQtdGguc29ydGFibGU6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmMWY1ZjkpO1xuICAgIH1cbiAgICAucnB0LXRoLWNvbnRlbnQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDRweDtcbiAgICB9XG4gICAgLnJwdC1zb3J0LWluZGljYXRvciB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgIH1cbiAgICAucnB0LXRoLW51bSwgLnJwdC10ZC1udW0ge1xuICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM5NGEzYjgpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICB9XG4gICAgLnJwdC10aC1jYiwgLnJwdC10ZC1jYiB7XG4gICAgICB3aWR0aDogNDJweDtcbiAgICAgIG1pbi13aWR0aDogNDJweDtcbiAgICAgIG1heC13aWR0aDogNDJweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgIH1cbiAgICAucnB0LWNoZWNrYm94IHtcbiAgICAgIHdpZHRoOiAxNXB4O1xuICAgICAgaGVpZ2h0OiAxNXB4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYWNjZW50LWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAucnB0LXRkIHtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjZTJlOGYwKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzFlMjkzYik7XG4gICAgfVxuICAgIC5ycHQtdHI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmOGZhZmMpO1xuICAgIH1cbiAgICAucnB0LXRyLmlzLXNlbGVjdGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZmY2ZmY7XG4gICAgfVxuICAgIC5ycHQtdHIuaXMtc2VsZWN0ZWQ6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RiZWFmZTtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1jbGlja2FibGUge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucnB0LXRyLmlzLWNsaWNrYWJsZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNWY5O1xuICAgIH1cbiAgICAucnB0LXRkLmlzLWNsaWNrYWJsZS1jZWxsIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgLnJwdC1jZWxsLWFjdGlvbi1saW5rIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDJweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2U7XG4gICAgfVxuICAgIC5ycHQtY2VsbC1hY3Rpb24tbGluazpob3ZlciB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cbiAgICAucnB0LWVtcHR5LW1lc3NhZ2Uge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgcGFkZGluZzogNDBweCAyMHB4O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9XG4gICAgLnJwdC10Zm9vdC1yb3cge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgIH1cbiAgICAucnB0LXRkLWFnZ3JlZ2F0ZSB7XG4gICAgICBwYWRkaW5nOiA4cHggMTRweDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtd3JhcCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgIGdhcDogNnB4O1xuICAgIH1cbiAgICAucnB0LWFnZ3JlZ2F0ZS13cmFwLmlzLXJpZ2h0IHtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtd3JhcC5pcy1jZW50ZXIge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtbGFiZWwge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXhzLCAwLjY4NzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtdmFsdWUge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ3RudW0nO1xuICAgIH1cbiAgICAucnB0LXBhZ2luYXRpb24tYmFyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgcGFkZGluZzogMTBweCAxNnB4O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXItc3VidGxlLCAjZTJlOGYwKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICB9XG4gICAgLnJwdC1wYWdlLWluZm8ge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB9XG4gICAgLnJwdC1wYWdlLWJ1dHRvbnMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGdhcDogOHB4O1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgcGFkZGluZzogNHB4IDEwcHg7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1zbSwgNHB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1idG46aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmMWY1ZjkpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLWhvdmVyLCAjOTRhM2I4KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1idG46ZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0R3JpZEJyaWRnZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0ZWRHcmlkID0gaW5qZWN0KEdSSURfQ09NUE9ORU5ULCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2UgPSBpbmplY3QoUmVwb3J0U3RvcmFnZVNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuc3RvcmFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVnYWN5RGVmYXVsdCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdid2F5c19ncmlkX3JlcG9ydF9zdGF0ZV9kZWZhdWx0Jyk7XG4gICAgICAgIGlmIChsZWdhY3lEZWZhdWx0ICYmICFsZWdhY3lEZWZhdWx0LmluY2x1ZGVzKCdfdmVyc2lvbl8nKSkge1xuICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKCdid2F5c19ncmlkX3JlcG9ydF9zdGF0ZV9kZWZhdWx0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgcmVzdHJpY3RlZCBzdG9yYWdlIGVudmlyb25tZW50cyAoZS5nLiBzYW5kYm94ZWQgaWZyYW1lcylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWFkb25seSBncmlkRGVmaW5pdGlvbiA9IGlucHV0LnJlcXVpcmVkPFJlcG9ydEdyaWREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBkYXRhID0gaW5wdXQ8dW5rbm93bltdPihbXSk7XG5cbiAgcmVhZG9ubHkgZ3JpZFN0YXRlQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgY29sdW1uRGVmc0NoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IHJvd0NsaWNrID0gb3V0cHV0PHsgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgY29sdW1uPzogR3JpZENvbHVtbkRlZmluaXRpb247IGV2ZW50PzogTW91c2VFdmVudCB9PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG5cbiAgcmVhZG9ubHkgY3VzdG9tR3JpZENvbXBvbmVudCA9IGNvbXB1dGVkPFR5cGU8dW5rbm93bj4gfCBudWxsPigoKSA9PiB0aGlzLmluamVjdGVkR3JpZCA/PyBudWxsKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRSb3dzID0gc2lnbmFsPGFueVtdPihbXSk7XG5cbiAgcmVhZG9ubHkgaGFzUm93Q2xpY2tBY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGVmID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpO1xuICAgIHJldHVybiAhIShcbiAgICAgIGRlZj8ucm93Q2xpY2tBY3Rpb24gfHxcbiAgICAgIGRlZj8ub3B0aW9ucz8ucm93Q2xpY2tBY3Rpb24gfHxcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiAhIWMuYWN0aW9uKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgaWYgKG9wdHM/LmNoZWNrYm94U2VsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvcHRzLmNoZWNrYm94U2VsZWN0aW9uO1xuICAgIH1cbiAgICBpZiAob3B0cz8uc2VsZWN0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gYy5jaGVja2JveFNlbGVjdGlvbik7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZVJvd1NlbGVjdGlvbiA9IGNvbXB1dGVkPCdzaW5nbGUnIHwgJ211bHRpcGxlJz4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgcmV0dXJuIG9wdHM/LnNlbGVjdGlvbk1vZGUgfHwgb3B0cz8ucm93U2VsZWN0aW9uIHx8ICdtdWx0aXBsZSc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmVmZmVjdGl2ZVJvd1NlbGVjdGlvbigpID09PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIGlmIChvcHRzPy5oZWFkZXJDaGVja2JveFNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb3B0cy5oZWFkZXJDaGVja2JveFNlbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNTZWxlY3Rpb25FbmFibGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgcmV0dXJuICEhKG9wdHM/LnNlbGVjdGFibGUgfHwgb3B0cz8uY2hlY2tib3hTZWxlY3Rpb24gfHwgdGhpcy52aXNpYmxlQ29sdW1ucygpLnNvbWUoKGMpID0+IGMuY2hlY2tib3hTZWxlY3Rpb24pKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc29ydENvbHVtbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgc29ydERpcmVjdGlvbiA9IHNpZ25hbDwnYXNjJyB8ICdkZXNjJz4oJ2FzYycpO1xuICByZWFkb25seSBjdXJyZW50UGFnZSA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICByZWFkb25seSB2aXNpYmxlQ29sdW1ucyA9IGNvbXB1dGVkPEdyaWRDb2x1bW5EZWZpbml0aW9uW10+KCgpID0+IHtcbiAgICBjb25zdCBkZWZpbmVkID0gKHRoaXMuZ3JpZERlZmluaXRpb24oKT8uY29sdW1ucyA/PyBbXSkuZmlsdGVyKChjKSA9PiBjLnZpc2libGUgIT09IGZhbHNlKTtcbiAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhKCk7XG4gICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGggPiAwICYmIHR5cGVvZiByb3dzWzBdID09PSAnb2JqZWN0JyAmJiByb3dzWzBdICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmaXJzdFJvdyA9IHJvd3NbMF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmlyc3RSb3cpO1xuICAgICAgY29uc3QgbWF0Y2hlc0FueSA9IGRlZmluZWQuc29tZSgoYykgPT4ga2V5cy5pbmNsdWRlcyhjLmZpZWxkKSk7XG4gICAgICAvLyBJZiBubyBjb2x1bW5zIGFyZSBkZWZpbmVkLCBvciB0aGUgZGVmaW5lZCBjb2x1bW5zIGRvbid0IG1hdGNoIGFueSBmaWVsZCBpbiB0aGUgZGF0YSAoZS5nLiBkdW1teSBpZC9uYW1lIGRlZmF1bHRzKTpcbiAgICAgIGlmIChkZWZpbmVkLmxlbmd0aCA9PT0gMCB8fCAhbWF0Y2hlc0FueSkge1xuICAgICAgICByZXR1cm4ga2V5cy5tYXAoKGspID0+ICh7XG4gICAgICAgICAgZmllbGQ6IGssXG4gICAgICAgICAgbGFiZWw6IGh1bWFuaXplSWRlbnRpZmllcihrKSxcbiAgICAgICAgICBkYXRhVHlwZTogdHlwZW9mIGZpcnN0Um93W2tdID09PSAnbnVtYmVyJyA/ICdudW1iZXInIDogdHlwZW9mIGZpcnN0Um93W2tdID09PSAnYm9vbGVhbicgPyAnYm9vbGVhbicgOiAnc3RyaW5nJyxcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWZpbmVkO1xuICB9KTtcblxuICByZWFkb25seSBicmlkZ2VkQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpc0dyaWRDaGVja2JveCA9IHRoaXMuaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgICBjb25zdCBpc0dyaWRIZWFkZXJDaGVja2JveCA9IHRoaXMuaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgICBjb25zdCBoYXNFeHBsaWNpdENvbENoZWNrYm94ID0gdGhpcy52aXNpYmxlQ29sdW1ucygpLnNvbWUoKGMpID0+IGMuY2hlY2tib3hTZWxlY3Rpb24pO1xuXG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGNvbCwgaWR4KSA9PiB7XG4gICAgICBsZXQgd2lkdGhOdW06IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0eXBlb2YgY29sLndpZHRoID09PSAnc3RyaW5nJyAmJiBjb2wud2lkdGguZW5kc1dpdGgoJ3B4JykpIHtcbiAgICAgICAgd2lkdGhOdW0gPSBwYXJzZUludChjb2wud2lkdGgsIDEwKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIChjb2wud2lkdGggYXMgdW5rbm93bikgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHdpZHRoTnVtID0gY29sLndpZHRoIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgICAgfVxuXG4gICAgICBsZXQgY29sQ2hlY2tib3hTZWxlY3Rpb246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBjb2wuY2hlY2tib3hTZWxlY3Rpb247XG4gICAgICBsZXQgY29sSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBjb2wuaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb247XG5cbiAgICAgIGlmICghaGFzRXhwbGljaXRDb2xDaGVja2JveCAmJiBpc0dyaWRDaGVja2JveCAmJiBpZHggPT09IDApIHtcbiAgICAgICAgY29sQ2hlY2tib3hTZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICBjb2xIZWFkZXJDaGVja2JveFNlbGVjdGlvbiA9IGlzR3JpZEhlYWRlckNoZWNrYm94O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIGhlYWRlck5hbWU6IGNvbC5sYWJlbCwgLy8gQldheXMtZ3JpZCAvIEFHIEdyaWQgc3RhbmRhcmRcbiAgICAgICAgaGVhZGVyOiBjb2wubGFiZWwsXG4gICAgICAgIHRpdGxlOiBjb2wubGFiZWwsXG4gICAgICAgIGhpZGU6IGNvbC52aXNpYmxlID09PSBmYWxzZSxcbiAgICAgICAgd2lkdGg6IHdpZHRoTnVtLFxuICAgICAgICBhZ2dGdW5jOiBjb2wuYWdncmVnYXRlICYmIGNvbC5hZ2dyZWdhdGUgIT09ICdub25lJyA/IGNvbC5hZ2dyZWdhdGUgOiB1bmRlZmluZWQsXG4gICAgICAgIGNoZWNrYm94U2VsZWN0aW9uOiBjb2xDaGVja2JveFNlbGVjdGlvbixcbiAgICAgICAgaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGNvbEhlYWRlckNoZWNrYm94U2VsZWN0aW9uLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZEluc3RhbmNlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5kYXRhU291cmNlSWQgfHwgJ2N1c3RvbSc7XG4gICAgY29uc3QgY29scyA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGMpID0+IGMuZmllbGQpLmpvaW4oJ18nKTtcbiAgICByZXR1cm4gYCR7ZHN9XyR7Y29sc31gO1xuICB9KTtcblxuICByZWFkb25seSBncmlkU3RhdGVLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/LmRhdGFTb3VyY2VJZCB8fCAnY3VzdG9tJztcbiAgICBjb25zdCBjb2xzID0gdGhpcy52aXNpYmxlQ29sdW1ucygpLm1hcCgoYykgPT4gYy5maWVsZCkuc2xpY2UoMCwgNSkuam9pbignXycpO1xuICAgIHJldHVybiBgcnB0XyR7ZHN9XyR7Y29scyB8fCAnZ3JpZCd9YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZENvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHJvd1NlbCA9IHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCk7XG4gICAgY29uc3QgaGFzQ2hlY2tib3ggPSB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaGFzSGVhZGVyQ2hlY2tib3ggPSB0aGlzLmlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2lkZUJhcjogb3B0cy5zaWRlQmFyICE9PSB1bmRlZmluZWQgPyBvcHRzLnNpZGVCYXIgOiB0cnVlLFxuICAgICAgc3RhdHVzQmFyOiBvcHRzLnN0YXR1c0JhciAhPT0gdW5kZWZpbmVkID8gb3B0cy5zdGF0dXNCYXIgOiB0cnVlLFxuICAgICAgZ2xvYmFsU2VhcmNoOiBvcHRzLmdsb2JhbFNlYXJjaCAhPT0gdW5kZWZpbmVkID8gb3B0cy5nbG9iYWxTZWFyY2ggOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIHJvd1NlbGVjdGlvbjogcm93U2VsLFxuICAgICAgc2VsZWN0aW9uTW9kZTogcm93U2VsLFxuICAgICAgY2hlY2tib3hTZWxlY3Rpb246IGhhc0NoZWNrYm94LFxuICAgICAgaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGhhc0hlYWRlckNoZWNrYm94LFxuICAgICAgc3RhdGVLZXk6IHRoaXMuZ3JpZFN0YXRlS2V5KCksXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZFJlcG9ydFN0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgY29uc3QgZXhpc3RpbmcgPSAob3B0cz8ucmVwb3J0U3RhdGUgYXMgYW55KSB8fCB7fTtcbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uR3JvdXBEZWZzOiBleGlzdGluZy5jb2x1bW5Hcm91cERlZnMgPz8gbnVsbCxcbiAgICAgIGNvbHVtbkRlZnM6IHRoaXMuYnJpZGdlZENvbHVtbnMoKSxcbiAgICAgIHNvcnRNb2RlbDogKG9wdHM/LnNvcnRNb2RlbCBhcyBhbnkpIHx8IGV4aXN0aW5nLnNvcnRNb2RlbCB8fCBbXSxcbiAgICAgIGdyb3VwTW9kZWw6IG9wdHM/Lmdyb3VwTW9kZWwgfHwgZXhpc3RpbmcuZ3JvdXBNb2RlbCB8fCBbXSxcbiAgICAgIGFjdGl2ZUZpbHRlcnM6IGV4aXN0aW5nLmFjdGl2ZUZpbHRlcnMgfHwge30sXG4gICAgICBjb25kaXRpb25GaWx0ZXJzOiBleGlzdGluZy5jb25kaXRpb25GaWx0ZXJzIHx8IHt9LFxuICAgICAgaGlnaGxpZ2h0UnVsZXM6IGV4aXN0aW5nLmhpZ2hsaWdodFJ1bGVzIHx8IFtdLFxuICAgICAgLi4uZXhpc3RpbmcsXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZElucHV0cyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgY29sdW1uczogdGhpcy5icmlkZ2VkQ29sdW1ucygpLFxuICAgIGNvbHVtbkRlZnM6IHRoaXMuYnJpZGdlZENvbHVtbnMoKSxcbiAgICByb3dEYXRhOiB0aGlzLmRhdGEoKSxcbiAgICBjb25maWc6IHRoaXMuZ3JpZENvbmZpZygpLFxuICAgIHJlcG9ydFN0YXRlOiB0aGlzLmdyaWRSZXBvcnRTdGF0ZSgpLFxuICAgIHBhZ2luYXRpb246IHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdpbmF0aW9uICE9PSBmYWxzZSxcbiAgICBwYWdlU2l6ZTogdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnBhZ2VTaXplID8/IDEwLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgc2hvd1Jvd051bWJlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICEhdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnNob3dSb3dOdW1iZXJzO1xuICB9KTtcblxuICByZWFkb25seSBpc1BhZ2luYXRpb25FbmFibGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2VTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnZVNpemUgPz8gMTA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNvbFNwYW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggKyAodGhpcy5zaG93Um93TnVtYmVycygpID8gMSA6IDApICsgKHRoaXMuaXNTZWxlY3Rpb25FbmFibGVkKCkgPyAxIDogMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhhc0FnZ3JlZ2F0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5zaG93Rm9vdGVyICYmXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gYy5hZ2dyZWdhdGUgJiYgYy5hZ2dyZWdhdGUgIT09ICdub25lJylcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzb3J0ZWREYXRhID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHJhdyA9ICh0aGlzLmRhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdKSB8fCBbXTtcbiAgICBjb25zdCBjb2wgPSB0aGlzLnNvcnRDb2x1bW4oKTtcbiAgICBjb25zdCBkaXIgPSB0aGlzLnNvcnREaXJlY3Rpb24oKTtcblxuICAgIGlmICghY29sKSByZXR1cm4gcmF3O1xuXG4gICAgcmV0dXJuIFsuLi5yYXddLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHZhbEEgPSBhW2NvbF07XG4gICAgICBjb25zdCB2YWxCID0gYltjb2xdO1xuICAgICAgaWYgKHZhbEEgPT0gbnVsbCAmJiB2YWxCID09IG51bGwpIHJldHVybiAwO1xuICAgICAgaWYgKHZhbEEgPT0gbnVsbCkgcmV0dXJuIDE7XG4gICAgICBpZiAodmFsQiA9PSBudWxsKSByZXR1cm4gLTE7XG4gICAgICBpZiAodmFsQSA8IHZhbEIpIHJldHVybiBkaXIgPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgaWYgKHZhbEEgPiB2YWxCKSByZXR1cm4gZGlyID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbFBhZ2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkKCkpIHJldHVybiAxO1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuc29ydGVkRGF0YSgpLmxlbmd0aDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKGxlbiAvIHRoaXMucGFnZVNpemUoKSkpO1xuICB9KTtcblxuICByZWFkb25seSBwYWdpbmF0ZWREYXRhID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHNvcnRlZCA9IHRoaXMuc29ydGVkRGF0YSgpO1xuICAgIGlmICghdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBzb3J0ZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMuY3VycmVudFBhZ2UoKSAtIDEpICogdGhpcy5wYWdlU2l6ZSgpO1xuICAgIHJldHVybiBzb3J0ZWQuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZSgpKTtcbiAgfSk7XG5cbiAgZ2V0SnVzdGlmeUNvbnRlbnQoYWxpZ24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiBzdHJpbmcge1xuICAgIGlmIChhbGlnbiA9PT0gJ3JpZ2h0JykgcmV0dXJuICdmbGV4LWVuZCc7XG4gICAgaWYgKGFsaWduID09PSAnY2VudGVyJykgcmV0dXJuICdjZW50ZXInO1xuICAgIHJldHVybiAnZmxleC1zdGFydCc7XG4gIH1cblxuICB0b2dnbGVTb3J0KGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiB2b2lkIHtcbiAgICBpZiAoY29sLnNvcnRhYmxlID09PSBmYWxzZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNvcnRDb2x1bW4oKSA9PT0gY29sLmZpZWxkKSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24uc2V0KHRoaXMuc29ydERpcmVjdGlvbigpID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uLnNldChjb2wuZmllbGQpO1xuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uLnNldCgnYXNjJyk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KDEpO1xuICB9XG5cbiAgcHJldlBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA+IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudXBkYXRlKChwKSA9PiBwIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgbmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA8IHRoaXMudG90YWxQYWdlcygpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnVwZGF0ZSgocCkgPT4gcCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFZhbHVlKHZhbHVlOiB1bmtub3duLCBjb2w6IEdyaWRDb2x1bW5EZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IFN0cmluZyh2YWx1ZSkgOiBgJCR7bnVtLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIsIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMiB9KX1gO1xuICAgIH1cbiAgICBpZiAoY29sLmRhdGFUeXBlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gU3RyaW5nKHZhbHVlKSA6IG51bS50b0xvY2FsZVN0cmluZygpO1xuICAgIH1cbiAgICBpZiAoY29sLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihkLmdldFRpbWUoKSkgPyBTdHJpbmcodmFsdWUpIDogZC50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBjb21wdXRlQWdncmVnYXRlKGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNvcnRlZERhdGEoKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiAnMCc7XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ2NvdW50Jykge1xuICAgICAgcmV0dXJuIFN0cmluZyhkYXRhLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgbnVtYmVycyA9IGRhdGFcbiAgICAgIC5tYXAoKHJvdykgPT4gTnVtYmVyKHJvd1tjb2wuZmllbGRdKSlcbiAgICAgIC5maWx0ZXIoKG4pID0+ICFpc05hTihuKSk7XG5cbiAgICBpZiAobnVtYmVycy5sZW5ndGggPT09IDApIHJldHVybiAnMCc7XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ3N1bScpIHtcbiAgICAgIGNvbnN0IHN1bSA9IG51bWJlcnMucmVkdWNlKChhY2MsIG4pID0+IGFjYyArIG4sIDApO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHtzdW0udG9GaXhlZCgyKX1gIDogc3VtLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdhdmcnKSB7XG4gICAgICBjb25zdCBhdmcgPSBudW1iZXJzLnJlZHVjZSgoYWNjLCBuKSA9PiBhY2MgKyBuLCAwKSAvIG51bWJlcnMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHthdmcudG9GaXhlZCgyKX1gIDogYXZnLnRvRml4ZWQoMik7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdtaW4nKSB7XG4gICAgICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi5udW1iZXJzKTtcbiAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgPyBgJCR7bWluLnRvRml4ZWQoMil9YCA6IFN0cmluZyhtaW4pO1xuICAgIH1cblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnbWF4Jykge1xuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4ubnVtYmVycyk7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke21heC50b0ZpeGVkKDIpfWAgOiBTdHJpbmcobWF4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpID8gc2VsZWN0ZWQgOiAoc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW10pO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChyb3dzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHJvd3MpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzKCkuaW5jbHVkZXMocm93KTtcbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucGFnaW5hdGVkRGF0YSgpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkYXRhLmV2ZXJ5KChyKSA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocikpO1xuICB9XG5cbiAgaXNQYXJ0aWFsbHlTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wYWdpbmF0ZWREYXRhKCk7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY291bnQgPSBkYXRhLmZpbHRlcigocikgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHIpKS5sZW5ndGg7XG4gICAgcmV0dXJuIGNvdW50ID4gMCAmJiBjb3VudCA8IGRhdGEubGVuZ3RoO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0QWxsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgY29uc3QgcGFnZVJvd3MgPSB0aGlzLnBhZ2luYXRlZERhdGEoKTtcbiAgICBsZXQgbmV4dDogYW55W107XG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoWy4uLmN1cnJlbnQsIC4uLnBhZ2VSb3dzXSk7XG4gICAgICBuZXh0ID0gQXJyYXkuZnJvbShzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0ID0gY3VycmVudC5maWx0ZXIoKHIpID0+ICFwYWdlUm93cy5pbmNsdWRlcyhyKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgdG9nZ2xlUm93U2VsZWN0aW9uKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgY29uc3QgbW9kZSA9IHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCk7XG4gICAgbGV0IG5leHQ6IGFueVtdO1xuICAgIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgbmV4dCA9IGNoZWNrZWQgPyBbcm93XSA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5pbmNsdWRlcyhyb3cpID8gY3VycmVudCA6IFsuLi5jdXJyZW50LCByb3ddO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dCA9IGN1cnJlbnQuZmlsdGVyKChyKSA9PiByICE9PSByb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQobmV4dCk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxuXG4gIG9uUm93Q2xpY2socm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKTtcbiAgICAgIGxldCBuZXh0OiBhbnlbXTtcbiAgICAgIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICBuZXh0ID0gW3Jvd107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5pbmNsdWRlcyhyb3cpID8gY3VycmVudC5maWx0ZXIoKHIpID0+IHIgIT09IHJvdykgOiBbLi4uY3VycmVudCwgcm93XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV4dCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1Jvd0NsaWNrQWN0aW9uKCkpIHtcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgZXZlbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DZWxsQ2xpY2socm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbiwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoY29sLmFjdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoeyByb3csIGNvbHVtbjogY29sLCBldmVudCB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -7,6 +7,19 @@ export class RptButtonComponent {
|
|
|
7
7
|
onAction = input();
|
|
8
8
|
actionTriggered = output();
|
|
9
9
|
elementId = computed(() => this.config().id);
|
|
10
|
+
showFieldLabel = computed(() => {
|
|
11
|
+
return this.config().properties?.['showLabel'] === true && !!this.config().properties?.['fieldLabel'];
|
|
12
|
+
});
|
|
13
|
+
fieldLabel = computed(() => {
|
|
14
|
+
return this.config().properties?.['fieldLabel'] || '';
|
|
15
|
+
});
|
|
16
|
+
hasLabelSpacer = computed(() => {
|
|
17
|
+
if (this.showFieldLabel())
|
|
18
|
+
return false;
|
|
19
|
+
if (this.config().properties?.['alignWithInputs'] === false)
|
|
20
|
+
return false;
|
|
21
|
+
return true;
|
|
22
|
+
});
|
|
10
23
|
buttonLabel = computed(() => this.config().label || this.config().properties?.['text'] || 'Submit');
|
|
11
24
|
buttonHtmlType = computed(() => {
|
|
12
25
|
const action = this.config().properties?.['action'];
|
|
@@ -61,7 +74,12 @@ export class RptButtonComponent {
|
|
|
61
74
|
}
|
|
62
75
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
63
76
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RptButtonComponent, isStandalone: true, selector: "rpt-button", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, onAction: { classPropertyName: "onAction", publicName: "onAction", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionTriggered: "actionTriggered" }, ngImport: i0, template: `
|
|
64
|
-
<div class="rpt-button-container">
|
|
77
|
+
<div class="rpt-button-container" [class.has-label-spacer]="hasLabelSpacer()">
|
|
78
|
+
@if (showFieldLabel()) {
|
|
79
|
+
<label [for]="elementId()" class="rpt-label">{{ fieldLabel() }}</label>
|
|
80
|
+
} @else if (hasLabelSpacer()) {
|
|
81
|
+
<div class="rpt-button-label-spacer" aria-hidden="true"> </div>
|
|
82
|
+
}
|
|
65
83
|
<button
|
|
66
84
|
[id]="elementId()"
|
|
67
85
|
[type]="buttonHtmlType()"
|
|
@@ -78,12 +96,17 @@ export class RptButtonComponent {
|
|
|
78
96
|
<span>{{ buttonLabel() }}</span>
|
|
79
97
|
</button>
|
|
80
98
|
</div>
|
|
81
|
-
`, isInline: true, styles: [":host{display:block;width:100%;
|
|
99
|
+
`, isInline: true, styles: [":host{display:block;width:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-button-container{display:flex;flex-direction:column;justify-content:flex-start;width:100%;box-sizing:border-box}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0;line-height:1.3;margin-bottom:4px}.rpt-button-label-spacer{height:16px;margin-bottom:4px;font-size:var(--rpt-font-size-sm, .75rem);line-height:1.3;-webkit-user-select:none;user-select:none;visibility:hidden;flex-shrink:0}.rpt-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:38px;width:auto;max-width:100%;box-sizing:border-box;padding:0 20px;font-size:var(--rpt-font-size-base, .875rem);font-weight:500;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.rpt-btn:focus-visible{outline:none;box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-btn:disabled{opacity:.6;cursor:not-allowed}.rpt-btn-primary{background-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-text-inverse, #ffffff);border-color:var(--rpt-color-primary, #2563eb)}.rpt-btn-primary:hover:not(:disabled){background-color:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.rpt-btn-secondary{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border, #cbd5e1)}.rpt-btn-secondary:hover:not(:disabled){background-color:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-btn-outline{background-color:transparent;color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb)}.rpt-btn-outline:hover:not(:disabled){background-color:var(--rpt-color-primary-focus, rgba(37, 99, 235, .1))}.rpt-btn-danger{background-color:var(--rpt-color-danger, #ef4444);color:var(--rpt-color-text-inverse, #ffffff);border-color:var(--rpt-color-danger, #ef4444)}.rpt-btn-danger:hover:not(:disabled){background-color:#dc2626;border-color:#dc2626}.rpt-btn.rpt-btn-full{width:100%}.rpt-btn-icon{display:flex;align-items:center}\n"], dependencies: [{ kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
82
100
|
}
|
|
83
101
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptButtonComponent, decorators: [{
|
|
84
102
|
type: Component,
|
|
85
103
|
args: [{ selector: 'rpt-button', standalone: true, imports: [RptIconComponent], template: `
|
|
86
|
-
<div class="rpt-button-container">
|
|
104
|
+
<div class="rpt-button-container" [class.has-label-spacer]="hasLabelSpacer()">
|
|
105
|
+
@if (showFieldLabel()) {
|
|
106
|
+
<label [for]="elementId()" class="rpt-label">{{ fieldLabel() }}</label>
|
|
107
|
+
} @else if (hasLabelSpacer()) {
|
|
108
|
+
<div class="rpt-button-label-spacer" aria-hidden="true"> </div>
|
|
109
|
+
}
|
|
87
110
|
<button
|
|
88
111
|
[id]="elementId()"
|
|
89
112
|
[type]="buttonHtmlType()"
|
|
@@ -100,6 +123,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
100
123
|
<span>{{ buttonLabel() }}</span>
|
|
101
124
|
</button>
|
|
102
125
|
</div>
|
|
103
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;
|
|
126
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-button-container{display:flex;flex-direction:column;justify-content:flex-start;width:100%;box-sizing:border-box}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0;line-height:1.3;margin-bottom:4px}.rpt-button-label-spacer{height:16px;margin-bottom:4px;font-size:var(--rpt-font-size-sm, .75rem);line-height:1.3;-webkit-user-select:none;user-select:none;visibility:hidden;flex-shrink:0}.rpt-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:38px;width:auto;max-width:100%;box-sizing:border-box;padding:0 20px;font-size:var(--rpt-font-size-base, .875rem);font-weight:500;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.rpt-btn:focus-visible{outline:none;box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-btn:disabled{opacity:.6;cursor:not-allowed}.rpt-btn-primary{background-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-text-inverse, #ffffff);border-color:var(--rpt-color-primary, #2563eb)}.rpt-btn-primary:hover:not(:disabled){background-color:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.rpt-btn-secondary{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border, #cbd5e1)}.rpt-btn-secondary:hover:not(:disabled){background-color:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-btn-outline{background-color:transparent;color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb)}.rpt-btn-outline:hover:not(:disabled){background-color:var(--rpt-color-primary-focus, rgba(37, 99, 235, .1))}.rpt-btn-danger{background-color:var(--rpt-color-danger, #ef4444);color:var(--rpt-color-text-inverse, #ffffff);border-color:var(--rpt-color-danger, #ef4444)}.rpt-btn-danger:hover:not(:disabled){background-color:#dc2626;border-color:#dc2626}.rpt-btn.rpt-btn-full{width:100%}.rpt-btn-icon{display:flex;align-items:center}\n"] }]
|
|
104
127
|
}] });
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvYnV0dG9uL3JwdC1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQW1IOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkIsQ0FBQztJQUNyRCxPQUFPLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQy9CLFFBQVEsR0FBRyxLQUFLLEVBQStDLENBQUM7SUFFaEUsZUFBZSxHQUFHLE1BQU0sRUFBNkIsQ0FBQztJQUV0RCxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxXQUFXLEdBQUcsUUFBUSxDQUM3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxJQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQVksSUFBSSxRQUFRLENBQ3hGLENBQUM7SUFDTyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFXLENBQUM7UUFDOUQsSUFBSSxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xFLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN2QixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDN0QsSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFZLElBQUksRUFBRSxDQUFDLENBQUM7SUFFNUUsYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDckMsTUFBTSxPQUFPLEdBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBWSxJQUFJLFNBQVMsQ0FBQztRQUMvRSxPQUFPLG1CQUFtQixPQUFPLEVBQUUsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ25DLE9BQU8sQ0FDTCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSTtZQUNoRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssS0FBSyxNQUFNLENBQ3ZDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVNLFlBQVksR0FBRyxRQUFRLENBQWdCLEdBQUcsRUFBRTtRQUNuRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVNLFdBQVcsR0FBRyxRQUFRLENBQWdCLEdBQUcsRUFBRTtRQUNsRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxLQUFpQjtRQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxFQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxhQUFhO1FBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDcEMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQzNELElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBWSxJQUFJLGdCQUFnQixDQUFDO1FBQ3hGLE1BQU0sTUFBTSxHQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxjQUFjLENBQTZCLElBQUksRUFBRSxDQUFDO1FBQzdGLE9BQU87WUFDTCxJQUFJLEVBQUUsVUFBVTtZQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDeEIsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO3dHQXJFVSxrQkFBa0I7NEZBQWxCLGtCQUFrQiw0ZkE3R25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQsbWdFQW5CUyxnQkFBZ0I7OzRGQThHZixrQkFBa0I7a0JBakg5QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUNqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULG1CQXlGZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9jb21wb25lbnQtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWJ1dHRvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtScHRJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2lkXT1cImVsZW1lbnRJZCgpXCJcbiAgICAgICAgW3R5cGVdPVwiYnV0dG9uSHRtbFR5cGUoKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc2VzKClcIlxuICAgICAgICBbY2xhc3MucnB0LWJ0bi1mdWxsXT1cImlzRnVsbFdpZHRoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJjdXN0b21IZWlnaHQoKVwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJjdXN0b21XaWR0aCgpXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoaWNvbigpKSB7XG4gICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImljb24oKVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8c3Bhbj57eyBidXR0b25MYWJlbCgpIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcGFkZGluZy1ib3R0b206IDJweDtcbiAgICB9XG4gICAgLnJwdC1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIGhlaWdodDogMzhweDtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1iYXNlLCAwLjg3NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICAgIC5ycHQtYnRuOmZvY3VzLXZpc2libGUge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXJwdC1ib3gtc2hhZG93LWZvY3VzLCAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4yNSkpO1xuICAgIH1cbiAgICAucnB0LWJ0bjpkaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgICAvKiBWYXJpYW50cyAqL1xuICAgIC5ycHQtYnRuLXByaW1hcnkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LWludmVyc2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtYnRuLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNlY29uZGFyeSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC1idG4tc2Vjb25kYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1ob3ZlciwgIzk0YTNiOCk7XG4gICAgfVxuICAgIC5ycHQtYnRuLW91dGxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtYnRuLW91dGxpbmU6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktZm9jdXMsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMSkpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1kYW5nZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtaW52ZXJzZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1kYW5nZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RjMjYyNjtcbiAgICAgIGJvcmRlci1jb2xvcjogI2RjMjYyNjtcbiAgICB9XG4gICAgLnJwdC1idG4ucnB0LWJ0bi1mdWxsIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAucnB0LWJ0bi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBScHRCdXR0b25Db21wb25lbnQge1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBjb250cm9sID0gaW5wdXQ8dW5rbm93bj4obnVsbCk7XG4gIHJlYWRvbmx5IG9uQWN0aW9uID0gaW5wdXQ8KGFjdGlvbjogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbikgPT4gdm9pZD4oKTtcblxuICByZWFkb25seSBhY3Rpb25UcmlnZ2VyZWQgPSBvdXRwdXQ8Q29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbj4oKTtcblxuICByZWFkb25seSBlbGVtZW50SWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmlkKTtcbiAgcmVhZG9ubHkgYnV0dG9uTGFiZWwgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmNvbmZpZygpLmxhYmVsIHx8ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsndGV4dCddIGFzIHN0cmluZykgfHwgJ1N1Ym1pdCdcbiAgKTtcbiAgcmVhZG9ubHkgYnV0dG9uSHRtbFR5cGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ2FjdGlvbiddIGFzIHN0cmluZztcbiAgICBpZiAoYWN0aW9uID09PSAnc3VibWl0JyB8fCBhY3Rpb24gPT09ICdleGVjdXRlLXJlcG9ydCcgfHwgIWFjdGlvbikge1xuICAgICAgcmV0dXJuICdzdWJtaXQnO1xuICAgIH1cbiAgICBpZiAoYWN0aW9uID09PSAncmVzZXQnKSB7XG4gICAgICByZXR1cm4gJ3Jlc2V0JztcbiAgICB9XG4gICAgcmV0dXJuICdidXR0b24nO1xuICB9KTtcbiAgcmVhZG9ubHkgaXNEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuZW5hYmxlZCA9PT0gZmFsc2UpO1xuICByZWFkb25seSBpY29uID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydpY29uJ10gYXMgc3RyaW5nKSB8fCAnJyk7XG5cbiAgcmVhZG9ubHkgYnV0dG9uQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YXJpYW50ID0gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWyd2YXJpYW50J10gYXMgc3RyaW5nKSB8fCAncHJpbWFyeSc7XG4gICAgcmV0dXJuIGBycHQtYnRuIHJwdC1idG4tJHt2YXJpYW50fWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzRnVsbFdpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnZnVsbFdpZHRoJ10gPT09IHRydWUgfHxcbiAgICAgIHRoaXMuY29uZmlnKCkubGF5b3V0Py53aWR0aCA9PT0gJzEwMCUnXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY3VzdG9tSGVpZ2h0ID0gY29tcHV0ZWQ8c3RyaW5nIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbmZpZygpLmxheW91dD8uaGVpZ2h0O1xuICAgIHJldHVybiBoICYmIGggIT09ICdhdXRvJyA/IGggOiBudWxsO1xuICB9KTtcblxuICByZWFkb25seSBjdXN0b21XaWR0aCA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCB3ID0gdGhpcy5jb25maWcoKS5sYXlvdXQ/LndpZHRoO1xuICAgIHJldHVybiB3ICYmIHcgIT09ICdhdXRvJyA/IHcgOiBudWxsO1xuICB9KTtcblxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYWN0aW9uRGVmID0gdGhpcy5yZXNvbHZlQWN0aW9uKCk7XG4gICAgaWYgKHRoaXMub25BY3Rpb24oKSkge1xuICAgICAgdGhpcy5vbkFjdGlvbigpIShhY3Rpb25EZWYpO1xuICAgIH1cbiAgICB0aGlzLmFjdGlvblRyaWdnZXJlZC5lbWl0KGFjdGlvbkRlZik7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVBY3Rpb24oKTogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZXZlbnRzID0gdGhpcy5jb25maWcoKS5ldmVudHM7XG4gICAgaWYgKGV2ZW50cyAmJiBldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2xpY2tFdmVudCA9IGV2ZW50cy5maW5kKChlKSA9PiBlLmV2ZW50ID09PSAnY2xpY2snKTtcbiAgICAgIGlmIChjbGlja0V2ZW50KSB7XG4gICAgICAgIHJldHVybiBjbGlja0V2ZW50LmFjdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWN0aW9uVHlwZSA9ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnYWN0aW9uJ10gYXMgc3RyaW5nKSB8fCAnZXhlY3V0ZS1yZXBvcnQnO1xuICAgIGNvbnN0IHBhcmFtcyA9ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnYWN0aW9uUGFyYW1zJ10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHx8IHt9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBhY3Rpb25UeXBlLFxuICAgICAgdGFyZ2V0OiB0aGlzLmNvbmZpZygpLmlkLFxuICAgICAgcGFyYW1zLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvYnV0dG9uL3JwdC1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQXVJOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkIsQ0FBQztJQUNyRCxPQUFPLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQy9CLFFBQVEsR0FBRyxLQUFLLEVBQStDLENBQUM7SUFFaEUsZUFBZSxHQUFHLE1BQU0sRUFBNkIsQ0FBQztJQUV0RCxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RyxDQUFDLENBQUMsQ0FBQztJQUNNLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ2xDLE9BQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFlBQVksQ0FBWSxJQUFJLEVBQUUsQ0FBQztJQUNwRSxD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LE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvY29tcG9uZW50LWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1idXR0b24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUnB0SWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1idXR0b24tY29udGFpbmVyXCIgW2NsYXNzLmhhcy1sYWJlbC1zcGFjZXJdPVwiaGFzTGFiZWxTcGFjZXIoKVwiPlxuICAgICAgQGlmIChzaG93RmllbGRMYWJlbCgpKSB7XG4gICAgICAgIDxsYWJlbCBbZm9yXT1cImVsZW1lbnRJZCgpXCIgY2xhc3M9XCJycHQtbGFiZWxcIj57eyBmaWVsZExhYmVsKCkgfX08L2xhYmVsPlxuICAgICAgfSBAZWxzZSBpZiAoaGFzTGFiZWxTcGFjZXIoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWJ1dHRvbi1sYWJlbC1zcGFjZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj4mbmJzcDs8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2lkXT1cImVsZW1lbnRJZCgpXCJcbiAgICAgICAgW3R5cGVdPVwiYnV0dG9uSHRtbFR5cGUoKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc2VzKClcIlxuICAgICAgICBbY2xhc3MucnB0LWJ0bi1mdWxsXT1cImlzRnVsbFdpZHRoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJjdXN0b21IZWlnaHQoKVwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJjdXN0b21XaWR0aCgpXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoaWNvbigpKSB7XG4gICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImljb24oKVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8c3Bhbj57eyBidXR0b25MYWJlbCgpIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnJwdC1sYWJlbCB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgfVxuICAgIC5ycHQtYnV0dG9uLWxhYmVsLXNwYWNlciB7XG4gICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC5ycHQtYnRuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBoZWlnaHQ6IDM4cHg7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBwYWRkaW5nOiAwIDIwcHg7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbiAgICAucnB0LWJ0bjpmb2N1cy12aXNpYmxlIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy1mb2N1cywgMCAwIDAgM3B4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpKTtcbiAgICB9XG4gICAgLnJwdC1idG46ZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gICAgLyogVmFyaWFudHMgKi9cbiAgICAucnB0LWJ0bi1wcmltYXJ5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1pbnZlcnNlLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1wcmltYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1zZWNvbmRhcnkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNlY29uZGFyeTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1vdXRsaW5lIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1vdXRsaW5lOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWZvY3VzLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjEpKTtcbiAgICB9XG4gICAgLnJwdC1idG4tZGFuZ2VyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LWludmVyc2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICB9XG4gICAgLnJwdC1idG4tZGFuZ2VyOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkYzI2MjY7XG4gICAgICBib3JkZXItY29sb3I6ICNkYzI2MjY7XG4gICAgfVxuICAgIC5ycHQtYnRuLnJwdC1idG4tZnVsbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgLnJwdC1idG4taWNvbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUnB0QnV0dG9uQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQucmVxdWlyZWQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgY29udHJvbCA9IGlucHV0PHVua25vd24+KG51bGwpO1xuICByZWFkb25seSBvbkFjdGlvbiA9IGlucHV0PChhY3Rpb246IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24pID0+IHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgYWN0aW9uVHJpZ2dlcmVkID0gb3V0cHV0PENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24+KCk7XG5cbiAgcmVhZG9ubHkgZWxlbWVudElkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5pZCk7XG4gIHJlYWRvbmx5IHNob3dGaWVsZExhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/Llsnc2hvd0xhYmVsJ10gPT09IHRydWUgJiYgISF0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnZmllbGRMYWJlbCddO1xuICB9KTtcbiAgcmVhZG9ubHkgZmllbGRMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydmaWVsZExhYmVsJ10gYXMgc3RyaW5nKSB8fCAnJztcbiAgfSk7XG4gIHJlYWRvbmx5IGhhc0xhYmVsU3BhY2VyID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLnNob3dGaWVsZExhYmVsKCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ2FsaWduV2l0aElucHV0cyddID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbiAgcmVhZG9ubHkgYnV0dG9uTGFiZWwgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmNvbmZpZygpLmxhYmVsIHx8ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsndGV4dCddIGFzIHN0cmluZykgfHwgJ1N1Ym1pdCdcbiAgKTtcbiAgcmVhZG9ubHkgYnV0dG9uSHRtbFR5cGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ2FjdGlvbiddIGFzIHN0cmluZztcbiAgICBpZiAoYWN0aW9uID09PSAnc3VibWl0JyB8fCBhY3Rpb24gPT09ICdleGVjdXRlLXJlcG9ydCcgfHwgIWFjdGlvbikge1xuICAgICAgcmV0dXJuICdzdWJtaXQnO1xuICAgIH1cbiAgICBpZiAoYWN0aW9uID09PSAncmVzZXQnKSB7XG4gICAgICByZXR1cm4gJ3Jlc2V0JztcbiAgICB9XG4gICAgcmV0dXJuICdidXR0b24nO1xuICB9KTtcbiAgcmVhZG9ubHkgaXNEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuZW5hYmxlZCA9PT0gZmFsc2UpO1xuICByZWFkb25seSBpY29uID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydpY29uJ10gYXMgc3RyaW5nKSB8fCAnJyk7XG5cbiAgcmVhZG9ubHkgYnV0dG9uQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YXJpYW50ID0gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWyd2YXJpYW50J10gYXMgc3RyaW5nKSB8fCAncHJpbWFyeSc7XG4gICAgcmV0dXJuIGBycHQtYnRuIHJwdC1idG4tJHt2YXJpYW50fWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzRnVsbFdpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnZnVsbFdpZHRoJ10gPT09IHRydWUgfHxcbiAgICAgIHRoaXMuY29uZmlnKCkubGF5b3V0Py53aWR0aCA9PT0gJzEwMCUnXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY3VzdG9tSGVpZ2h0ID0gY29tcHV0ZWQ8c3RyaW5nIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbmZpZygpLmxheW91dD8uaGVpZ2h0O1xuICAgIHJldHVybiBoICYmIGggIT09ICdhdXRvJyA/IGggOiBudWxsO1xuICB9KTtcblxuICByZWFkb25seSBjdXN0b21XaWR0aCA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCB3ID0gdGhpcy5jb25maWcoKS5sYXlvdXQ/LndpZHRoO1xuICAgIHJldHVybiB3ICYmIHcgIT09ICdhdXRvJyA/IHcgOiBudWxsO1xuICB9KTtcblxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYWN0aW9uRGVmID0gdGhpcy5yZXNvbHZlQWN0aW9uKCk7XG4gICAgaWYgKHRoaXMub25BY3Rpb24oKSkge1xuICAgICAgdGhpcy5vbkFjdGlvbigpIShhY3Rpb25EZWYpO1xuICAgIH1cbiAgICB0aGlzLmFjdGlvblRyaWdnZXJlZC5lbWl0KGFjdGlvbkRlZik7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVBY3Rpb24oKTogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZXZlbnRzID0gdGhpcy5jb25maWcoKS5ldmVudHM7XG4gICAgaWYgKGV2ZW50cyAmJiBldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2xpY2tFdmVudCA9IGV2ZW50cy5maW5kKChlKSA9PiBlLmV2ZW50ID09PSAnY2xpY2snKTtcbiAgICAgIGlmIChjbGlja0V2ZW50KSB7XG4gICAgICAgIHJldHVybiBjbGlja0V2ZW50LmFjdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWN0aW9uVHlwZSA9ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnYWN0aW9uJ10gYXMgc3RyaW5nKSB8fCAnZXhlY3V0ZS1yZXBvcnQnO1xuICAgIGNvbnN0IHBhcmFtcyA9ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnYWN0aW9uUGFyYW1zJ10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHx8IHt9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBhY3Rpb25UeXBlLFxuICAgICAgdGFyZ2V0OiB0aGlzLmNvbmZpZygpLmlkLFxuICAgICAgcGFyYW1zLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|