bways-report 0.1.1 → 0.1.3
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 +153 -51
- package/esm2022/lib/core/errors/reporting-errors.mjs +2 -2
- package/esm2022/lib/core/index.mjs +3 -1
- package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
- package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
- package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
- package/esm2022/lib/core/services/report-session-context.service.mjs +50 -5
- package/esm2022/lib/core/utils/data-normalization.util.mjs +56 -0
- package/esm2022/lib/core/utils/report-parameter.util.mjs +180 -0
- package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +82 -0
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +34 -9
- package/esm2022/lib/data-access/adapters/http-masterdata.adapter.mjs +38 -0
- package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +217 -0
- package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +3 -1
- package/esm2022/lib/data-access/adapters/index.mjs +8 -3
- package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +167 -0
- package/esm2022/lib/data-access/adapters/mock-datasource.adapter.mjs +60 -0
- package/esm2022/lib/data-access/contracts/api-dtos.mjs +6 -0
- package/esm2022/lib/data-access/contracts/index.mjs +2 -1
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +665 -90
- package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +593 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +164 -23
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +458 -14
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +173 -2
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +182 -6
- package/esm2022/lib/features/designer/designer.component.mjs +101 -12
- package/esm2022/lib/features/designer/index.mjs +4 -1
- package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +102 -0
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +10 -9
- package/esm2022/lib/features/designer/services/report-template.service.mjs +318 -0
- package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +41 -9
- package/esm2022/lib/features/export/index.mjs +2 -2
- package/esm2022/lib/features/export/models/export.models.mjs +1 -1
- package/esm2022/lib/features/export/services/report-export.service.mjs +420 -5
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +2 -2
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +231 -33
- package/esm2022/lib/features/runtime/index.mjs +2 -1
- package/esm2022/lib/features/runtime/report-execution.service.mjs +64 -0
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +224 -26
- package/esm2022/lib/features/runtime/report-runtime.component.mjs +341 -7
- package/esm2022/lib/features/runtime/rpt-report.component.mjs +537 -0
- package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +26 -9
- package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +18 -7
- package/esm2022/lib/primitives/components/date-range/rpt-date-range.component.mjs +346 -0
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +727 -73
- 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/register-builtins.mjs +51 -2
- package/esm2022/lib/provide-reporting.mjs +145 -24
- package/fesm2022/bways-report.mjs +8051 -1672
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/index.d.ts +2 -0
- package/lib/core/models/report-datasource.model.d.ts +9 -0
- package/lib/core/models/report-definition.model.d.ts +2 -0
- package/lib/core/models/report-grid.model.d.ts +44 -0
- package/lib/core/services/report-session-context.service.d.ts +6 -1
- package/lib/core/utils/data-normalization.util.d.ts +15 -0
- package/lib/core/utils/report-parameter.util.d.ts +35 -0
- package/lib/data-access/adapters/http-datasource.adapter.d.ts +20 -0
- package/lib/data-access/adapters/http-lookup.adapter.d.ts +3 -0
- package/lib/data-access/adapters/http-masterdata.adapter.d.ts +13 -0
- package/lib/data-access/adapters/http-persistence.adapter.d.ts +27 -0
- package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +2 -0
- package/lib/data-access/adapters/index.d.ts +7 -2
- package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +19 -0
- package/lib/data-access/adapters/mock-datasource.adapter.d.ts +9 -0
- package/lib/data-access/contracts/api-dtos.d.ts +67 -0
- package/lib/data-access/contracts/index.d.ts +1 -0
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +24 -0
- package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +1 -1
- package/lib/features/designer/components/property-editor/property-editor-action.component.d.ts +33 -0
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -0
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +18 -2
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +7 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +9 -0
- package/lib/features/designer/designer.component.d.ts +5 -0
- package/lib/features/designer/index.d.ts +4 -0
- package/lib/features/designer/rpt-report-designer.component.d.ts +38 -0
- package/lib/features/designer/services/designer-state.service.d.ts +1 -1
- package/lib/features/designer/services/report-template.service.d.ts +32 -0
- package/lib/features/designer/utilities/canvas-layout.util.d.ts +4 -0
- package/lib/features/export/index.d.ts +2 -2
- package/lib/features/export/models/export.models.d.ts +23 -0
- package/lib/features/export/services/report-export.service.d.ts +31 -2
- package/lib/features/runtime/dynamic-renderer.component.d.ts +39 -2
- package/lib/features/runtime/index.d.ts +2 -0
- package/lib/features/runtime/report-execution.service.d.ts +16 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +129 -6
- package/lib/features/runtime/report-runtime.component.d.ts +83 -1
- package/lib/features/runtime/rpt-report.component.d.ts +66 -0
- package/lib/primitives/components/button/rpt-button.component.d.ts +5 -2
- package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +1 -0
- package/lib/primitives/components/date-range/rpt-date-range.component.d.ts +43 -0
- package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +55 -7
- package/lib/primitives/components/index.d.ts +2 -0
- package/lib/provide-reporting.d.ts +79 -26
- package/package.json +2 -1
- package/schematics/collection.json +10 -0
- package/schematics/ng-add/index.js +45 -0
- package/schematics/ng-add/schema.json +17 -0
|
@@ -3,12 +3,20 @@ import { RptIconComponent } from '../icon/rpt-icon.component';
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class RptButtonComponent {
|
|
5
5
|
config = input.required();
|
|
6
|
+
control = input(null);
|
|
7
|
+
onAction = input();
|
|
6
8
|
actionTriggered = output();
|
|
7
9
|
elementId = computed(() => this.config().id);
|
|
8
10
|
buttonLabel = computed(() => this.config().label || this.config().properties?.['text'] || 'Submit');
|
|
9
11
|
buttonHtmlType = computed(() => {
|
|
10
12
|
const action = this.config().properties?.['action'];
|
|
11
|
-
|
|
13
|
+
if (action === 'submit' || action === 'execute-report' || !action) {
|
|
14
|
+
return 'submit';
|
|
15
|
+
}
|
|
16
|
+
if (action === 'reset') {
|
|
17
|
+
return 'reset';
|
|
18
|
+
}
|
|
19
|
+
return 'button';
|
|
12
20
|
});
|
|
13
21
|
isDisabled = computed(() => this.config().enabled === false);
|
|
14
22
|
icon = computed(() => this.config().properties?.['icon'] || '');
|
|
@@ -29,21 +37,30 @@ export class RptButtonComponent {
|
|
|
29
37
|
return w && w !== 'auto' ? w : null;
|
|
30
38
|
});
|
|
31
39
|
onClick(event) {
|
|
40
|
+
const actionDef = this.resolveAction();
|
|
41
|
+
if (this.onAction()) {
|
|
42
|
+
this.onAction()(actionDef);
|
|
43
|
+
}
|
|
44
|
+
this.actionTriggered.emit(actionDef);
|
|
45
|
+
}
|
|
46
|
+
resolveAction() {
|
|
32
47
|
const events = this.config().events;
|
|
33
48
|
if (events && events.length > 0) {
|
|
34
49
|
const clickEvent = events.find((e) => e.event === 'click');
|
|
35
50
|
if (clickEvent) {
|
|
36
|
-
|
|
51
|
+
return clickEvent.action;
|
|
37
52
|
}
|
|
38
53
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
54
|
+
const actionType = this.config().properties?.['action'] || 'execute-report';
|
|
55
|
+
const params = this.config().properties?.['actionParams'] || {};
|
|
56
|
+
return {
|
|
57
|
+
type: actionType,
|
|
58
|
+
target: this.config().id,
|
|
59
|
+
params,
|
|
60
|
+
};
|
|
44
61
|
}
|
|
45
62
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
-
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 } }, outputs: { actionTriggered: "actionTriggered" }, ngImport: i0, template: `
|
|
63
|
+
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: `
|
|
47
64
|
<div class="rpt-button-container">
|
|
48
65
|
<button
|
|
49
66
|
[id]="elementId()"
|
|
@@ -85,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
85
102
|
</div>
|
|
86
103
|
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-button-container{display:flex;align-items:flex-end;height:100%;width:100%;box-sizing:border-box;padding-bottom:2px}.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"] }]
|
|
87
104
|
}] });
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvYnV0dG9uL3JwdC1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQW1IOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkIsQ0FBQztJQUVyRCxlQUFlLEdBQUcsTUFBTSxFQUE2QixDQUFDO0lBRXRELFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLFdBQVcsR0FBRyxRQUFRLENBQzdCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLElBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBWSxJQUFJLFFBQVEsQ0FDeEYsQ0FBQztJQUNPLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQVcsQ0FBQztRQUM5RCxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ00sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQzdELElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTVFLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sT0FBTyxHQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQVksSUFBSSxTQUFTLENBQUM7UUFDL0UsT0FBTyxtQkFBbUIsT0FBTyxFQUFFLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNuQyxPQUFPLENBQ0wsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUk7WUFDaEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEtBQUssTUFBTSxDQUN2QyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFTSxZQUFZLEdBQUcsUUFBUSxDQUFnQixHQUFHLEVBQUU7UUFDbkQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFTSxXQUFXLEdBQUcsUUFBUSxDQUFnQixHQUFHLEVBQUU7UUFDbEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsS0FBaUI7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7WUFDM0QsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sNkNBQTZDO1lBQzdDLE1BQU0sVUFBVSxHQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQVksSUFBSSxnQkFBZ0IsQ0FBQztZQUN4RixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO3dHQWxEVSxrQkFBa0I7NEZBQWxCLGtCQUFrQiw2UEE3R25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQsbWdFQW5CUyxnQkFBZ0I7OzRGQThHZixrQkFBa0I7a0JBakg5QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUNqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULG1CQXlGZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9jb21wb25lbnQtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWJ1dHRvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtScHRJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2lkXT1cImVsZW1lbnRJZCgpXCJcbiAgICAgICAgW3R5cGVdPVwiYnV0dG9uSHRtbFR5cGUoKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc2VzKClcIlxuICAgICAgICBbY2xhc3MucnB0LWJ0bi1mdWxsXT1cImlzRnVsbFdpZHRoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJjdXN0b21IZWlnaHQoKVwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJjdXN0b21XaWR0aCgpXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoaWNvbigpKSB7XG4gICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImljb24oKVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8c3Bhbj57eyBidXR0b25MYWJlbCgpIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcGFkZGluZy1ib3R0b206IDJweDtcbiAgICB9XG4gICAgLnJwdC1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIGhlaWdodDogMzhweDtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1iYXNlLCAwLjg3NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICAgIC5ycHQtYnRuOmZvY3VzLXZpc2libGUge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXJwdC1ib3gtc2hhZG93LWZvY3VzLCAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4yNSkpO1xuICAgIH1cbiAgICAucnB0LWJ0bjpkaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgICAvKiBWYXJpYW50cyAqL1xuICAgIC5ycHQtYnRuLXByaW1hcnkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LWludmVyc2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtYnRuLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNlY29uZGFyeSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC1idG4tc2Vjb25kYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1ob3ZlciwgIzk0YTNiOCk7XG4gICAgfVxuICAgIC5ycHQtYnRuLW91dGxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtYnRuLW91dGxpbmU6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktZm9jdXMsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMSkpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1kYW5nZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtaW52ZXJzZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1kYW5nZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RjMjYyNjtcbiAgICAgIGJvcmRlci1jb2xvcjogI2RjMjYyNjtcbiAgICB9XG4gICAgLnJwdC1idG4ucnB0LWJ0bi1mdWxsIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAucnB0LWJ0bi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBScHRCdXR0b25Db21wb25lbnQge1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPigpO1xuXG4gIHJlYWRvbmx5IGFjdGlvblRyaWdnZXJlZCA9IG91dHB1dDxDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uPigpO1xuXG4gIHJlYWRvbmx5IGVsZW1lbnRJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuaWQpO1xuICByZWFkb25seSBidXR0b25MYWJlbCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuY29uZmlnKCkubGFiZWwgfHwgKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWyd0ZXh0J10gYXMgc3RyaW5nKSB8fCAnU3VibWl0J1xuICApO1xuICByZWFkb25seSBidXR0b25IdG1sVHlwZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnYWN0aW9uJ10gYXMgc3RyaW5nO1xuICAgIHJldHVybiBhY3Rpb24gPT09ICdzdWJtaXQnID8gJ3N1Ym1pdCcgOiAnYnV0dG9uJztcbiAgfSk7XG4gIHJlYWRvbmx5IGlzRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmVuYWJsZWQgPT09IGZhbHNlKTtcbiAgcmVhZG9ubHkgaWNvbiA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnaWNvbiddIGFzIHN0cmluZykgfHwgJycpO1xuXG4gIHJlYWRvbmx5IGJ1dHRvbkNsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdmFyaWFudCA9ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsndmFyaWFudCddIGFzIHN0cmluZykgfHwgJ3ByaW1hcnknO1xuICAgIHJldHVybiBgcnB0LWJ0biBycHQtYnRuLSR7dmFyaWFudH1gO1xuICB9KTtcblxuICByZWFkb25seSBpc0Z1bGxXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ2Z1bGxXaWR0aCddID09PSB0cnVlIHx8XG4gICAgICB0aGlzLmNvbmZpZygpLmxheW91dD8ud2lkdGggPT09ICcxMDAlJ1xuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGN1c3RvbUhlaWdodCA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBoID0gdGhpcy5jb25maWcoKS5sYXlvdXQ/LmhlaWdodDtcbiAgICByZXR1cm4gaCAmJiBoICE9PSAnYXV0bycgPyBoIDogbnVsbDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY3VzdG9tV2lkdGggPSBjb21wdXRlZDxzdHJpbmcgfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgdyA9IHRoaXMuY29uZmlnKCkubGF5b3V0Py53aWR0aDtcbiAgICByZXR1cm4gdyAmJiB3ICE9PSAnYXV0bycgPyB3IDogbnVsbDtcbiAgfSk7XG5cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuY29uZmlnKCkuZXZlbnRzO1xuICAgIGlmIChldmVudHMgJiYgZXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNsaWNrRXZlbnQgPSBldmVudHMuZmluZCgoZSkgPT4gZS5ldmVudCA9PT0gJ2NsaWNrJyk7XG4gICAgICBpZiAoY2xpY2tFdmVudCkge1xuICAgICAgICB0aGlzLmFjdGlvblRyaWdnZXJlZC5lbWl0KGNsaWNrRXZlbnQuYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdCBhY3Rpb24gaWYgY29uZmlndXJlZCBpbiBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCBhY3Rpb25UeXBlID0gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydhY3Rpb24nXSBhcyBzdHJpbmcpIHx8ICdleGVjdXRlLXJlcG9ydCc7XG4gICAgICB0aGlzLmFjdGlvblRyaWdnZXJlZC5lbWl0KHsgdHlwZTogYWN0aW9uVHlwZSwgdGFyZ2V0OiB0aGlzLmNvbmZpZygpLmlkIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvYnV0dG9uL3JwdC1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQW1IOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkIsQ0FBQztJQUNyRCxPQUFPLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQy9CLFFBQVEsR0FBRyxLQUFLLEVBQStDLENBQUM7SUFFaEUsZUFBZSxHQUFHLE1BQU0sRUFBNkIsQ0FBQztJQUV0RCxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxXQUFXLEdBQUcsUUFBUSxDQUM3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxJQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQVksSUFBSSxRQUFRLENBQ3hGLENBQUM7SUFDTyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFXLENBQUM7UUFDOUQsSUFBSSxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxnQkFBZ0IsSUFBSSxDQUFD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QUFVLEVBQUUsQ0FBQyxjQUFjLENBQTZCLElBQUksRUFBRSxDQUFDO1FBQzdGLE9BQU87WUFDTCxJQUFJLEVBQUUsVUFBVTtZQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDeEIsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO3dHQXJFVSxrQkFBa0I7NEZBQWxCLGtCQUFrQiw0ZkE3R25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQsbWdFQW5CUyxnQkFBZ0I7OzRGQThHZixrQkFBa0I7a0JBakg5QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUNqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULG1CQXlGZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9jb21wb25lbnQtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWJ1dHRvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtScHRJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2lkXT1cImVsZW1lbnRJZCgpXCJcbiAgICAgICAgW3R5cGVdPVwiYnV0dG9uSHRtbFR5cGUoKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc2VzKClcIlxuICAgICAgICBbY2xhc3MucnB0LWJ0bi1mdWxsXT1cImlzRnVsbFdpZHRoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJjdXN0b21IZWlnaHQoKVwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJjdXN0b21XaWR0aCgpXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoaWNvbigpKSB7XG4gICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImljb24oKVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8c3Bhbj57eyBidXR0b25MYWJlbCgpIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcGFkZGluZy1ib3R0b206IDJweDtcbiAgICB9XG4gICAgLnJwdC1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIGhlaWdodDogMzhweDtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1iYXNlLCAwLjg3NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICAgIC5ycHQtYnRuOmZvY3VzLXZpc2libGUge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXJwdC1ib3gtc2hhZG93LWZvY3VzLCAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4yNSkpO1xuICAgIH1cbiAgICAucnB0LWJ0bjpkaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgICAvKiBWYXJpYW50cyAqL1xuICAgIC5ycHQtYnRuLXByaW1hcnkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LWludmVyc2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtYnRuLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNlY29uZGFyeSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC1idG4tc2Vjb25kYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1ob3ZlciwgIzk0YTNiOCk7XG4gICAgfVxuICAgIC5ycHQtYnRuLW91dGxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtYnRuLW91dGxpbmU6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktZm9jdXMsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMSkpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1kYW5nZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtaW52ZXJzZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1kYW5nZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RjMjYyNjtcbiAgICAgIGJvcmRlci1jb2xvcjogI2RjMjYyNjtcbiAgICB9XG4gICAgLnJwdC1idG4ucnB0LWJ0bi1mdWxsIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAucnB0LWJ0bi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBScHRCdXR0b25Db21wb25lbnQge1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBjb250cm9sID0gaW5wdXQ8dW5rbm93bj4obnVsbCk7XG4gIHJlYWRvbmx5IG9uQWN0aW9uID0gaW5wdXQ8KGFjdGlvbjogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbikgPT4gdm9pZD4oKTtcblxuICByZWFkb25seSBhY3Rpb25UcmlnZ2VyZWQgPSBvdXRwdXQ8Q29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbj4oKTtcblxuICByZWFkb25seSBlbGVtZW50SWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmlkKTtcbiAgcmVhZG9ubHkgYnV0dG9uTGFiZWwgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmNvbmZpZygpLmxhYmVsIHx8ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsndGV4dCddIGFzIHN0cmluZykgfHwgJ1N1Ym1pdCdcbiAgKTtcbiAgcmVhZG9ubHkgYnV0dG9uSHRtbFR5cGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ2FjdGlvbiddIGFzIHN0cmluZztcbiAgICBpZiAoYWN0aW9uID09PSAnc3VibWl0JyB8fCBhY3Rpb24gPT09ICdleGVjdXRlLXJlcG9ydCcgfHwgIWFjdGlvbikge1xuICAgICAgcmV0dXJuICdzdWJtaXQnO1xuICAgIH1cbiAgICBpZiAoYWN0aW9uID09PSAncmVzZXQnKSB7XG4gICAgICByZXR1cm4gJ3Jlc2V0JztcbiAgICB9XG4gICAgcmV0dXJuICdidXR0b24nO1xuICB9KTtcbiAgcmVhZG9ubHkgaXNEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuZW5hYmxlZCA9PT0gZmFsc2UpO1xuICByZWFkb25seSBpY29uID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydpY29uJ10gYXMgc3RyaW5nKSB8fCAnJyk7XG5cbiAgcmVhZG9ubHkgYnV0dG9uQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YXJpYW50ID0gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWyd2YXJpYW50J10gYXMgc3RyaW5nKSB8fCAncHJpbWFyeSc7XG4gICAgcmV0dXJuIGBycHQtYnRuIHJwdC1idG4tJHt2YXJpYW50fWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzRnVsbFdpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnZnVsbFdpZHRoJ10gPT09IHRydWUgfHxcbiAgICAgIHRoaXMuY29uZmlnKCkubGF5b3V0Py53aWR0aCA9PT0gJzEwMCUnXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY3VzdG9tSGVpZ2h0ID0gY29tcHV0ZWQ8c3RyaW5nIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbmZpZygpLmxheW91dD8uaGVpZ2h0O1xuICAgIHJldHVybiBoICYmIGggIT09ICdhdXRvJyA/IGggOiBudWxsO1xuICB9KTtcblxuICByZWFkb25seSBjdXN0b21XaWR0aCA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCB3ID0gdGhpcy5jb25maWcoKS5sYXlvdXQ/LndpZHRoO1xuICAgIHJldHVybiB3ICYmIHcgIT09ICdhdXRvJyA/IHcgOiBudWxsO1xuICB9KTtcblxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYWN0aW9uRGVmID0gdGhpcy5yZXNvbHZlQWN0aW9uKCk7XG4gICAgaWYgKHRoaXMub25BY3Rpb24oKSkge1xuICAgICAgdGhpcy5vbkFjdGlvbigpIShhY3Rpb25EZWYpO1xuICAgIH1cbiAgICB0aGlzLmFjdGlvblRyaWdnZXJlZC5lbWl0KGFjdGlvbkRlZik7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVBY3Rpb24oKTogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZXZlbnRzID0gdGhpcy5jb25maWcoKS5ldmVudHM7XG4gICAgaWYgKGV2ZW50cyAmJiBldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2xpY2tFdmVudCA9IGV2ZW50cy5maW5kKChlKSA9PiBlLmV2ZW50ID09PSAnY2xpY2snKTtcbiAgICAgIGlmIChjbGlja0V2ZW50KSB7XG4gICAgICAgIHJldHVybiBjbGlja0V2ZW50LmFjdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWN0aW9uVHlwZSA9ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnYWN0aW9uJ10gYXMgc3RyaW5nKSB8fCAnZXhlY3V0ZS1yZXBvcnQnO1xuICAgIGNvbnN0IHBhcmFtcyA9ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnYWN0aW9uUGFyYW1zJ10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHx8IHt9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBhY3Rpb25UeXBlLFxuICAgICAgdGFyZ2V0OiB0aGlzLmNvbmZpZygpLmlkLFxuICAgICAgcGFyYW1zLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -55,6 +55,15 @@ export class ReportChartBridgeComponent {
|
|
|
55
55
|
const max = this.maxValue();
|
|
56
56
|
return Math.round((value / max) * 100);
|
|
57
57
|
}
|
|
58
|
+
formatValue(val) {
|
|
59
|
+
if (val >= 1_000_000) {
|
|
60
|
+
return (val / 1_000_000).toFixed(1).replace(/\.0$/, '') + 'M';
|
|
61
|
+
}
|
|
62
|
+
if (val >= 1_000) {
|
|
63
|
+
return (val / 1_000).toFixed(1).replace(/\.0$/, '') + 'k';
|
|
64
|
+
}
|
|
65
|
+
return String(val);
|
|
66
|
+
}
|
|
58
67
|
donutSegments = computed(() => {
|
|
59
68
|
const items = this.data();
|
|
60
69
|
const total = this.totalValue();
|
|
@@ -125,7 +134,7 @@ export class ReportChartBridgeComponent {
|
|
|
125
134
|
<div class="rpt-chart-canvas-area">
|
|
126
135
|
@if (data().length === 0) {
|
|
127
136
|
<div class="rpt-chart-empty">No chart data available</div>
|
|
128
|
-
}
|
|
137
|
+
} @else if (chartType() === 'bar') {
|
|
129
138
|
<!-- Vertical Bar Chart -->
|
|
130
139
|
<div class="rpt-bar-chart">
|
|
131
140
|
@for (item of data(); track item.label) {
|
|
@@ -137,7 +146,8 @@ export class ReportChartBridgeComponent {
|
|
|
137
146
|
[style.background-color]="item.color || defaultColors[$index % defaultColors.length]"
|
|
138
147
|
[title]="item.label + ': ' + item.value"
|
|
139
148
|
>
|
|
140
|
-
<span class="rpt-bar-
|
|
149
|
+
<span class="rpt-bar-val-badge">{{ formatValue(item.value) }}</span>
|
|
150
|
+
<span class="rpt-bar-tooltip">{{ item.label }}: {{ item.value.toLocaleString() }}</span>
|
|
141
151
|
</div>
|
|
142
152
|
</div>
|
|
143
153
|
<span class="rpt-bar-label" [title]="item.label">{{ item.label }}</span>
|
|
@@ -226,7 +236,7 @@ export class ReportChartBridgeComponent {
|
|
|
226
236
|
</div>
|
|
227
237
|
}
|
|
228
238
|
</div>
|
|
229
|
-
`, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-chart-bridge-container{width:100
|
|
239
|
+
`, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-chart-bridge-container{width:100%;height:100%;min-height:220px;display:flex;flex-direction:column}.rpt-chart-fallback-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-lg, 12px);padding:var(--rpt-space-md, 20px);box-shadow:0 1px 3px #0000000d;display:flex;flex-direction:column;flex:1;height:100%;min-height:220px;box-sizing:border-box;gap:16px;overflow:hidden}.rpt-chart-fallback-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.rpt-chart-title{font-size:1rem;font-weight:600;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-chart-badge{font-size:.6875rem;font-weight:700;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b);letter-spacing:.05em}.rpt-chart-canvas-area{min-height:140px;height:100%;flex:1;display:flex;align-items:center;justify-content:center;overflow:visible}.rpt-chart-empty{color:var(--rpt-text-muted, #94a3b8);font-size:.875rem}.rpt-bar-chart{display:flex;align-items:flex-end;justify-content:space-around;gap:16px;width:100%;height:100%;min-height:150px;padding-top:24px;box-sizing:border-box}.rpt-bar-column{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;min-width:64px;max-width:140px}.rpt-bar-track{flex:1;width:38px;max-width:44px;margin:0 auto;background:var(--rpt-bg-subtle, #f8fafc);border-radius:6px 6px 0 0;display:flex;align-items:flex-end;position:relative}.rpt-bar-fill{position:relative;width:100%;min-height:4px;border-radius:6px 6px 0 0;transition:height .4s cubic-bezier(.16,1,.3,1);cursor:pointer;display:flex;justify-content:center}.rpt-bar-val-badge{position:absolute;top:-22px;font-size:.6875rem;font-weight:600;color:var(--rpt-text-muted, #64748b);white-space:nowrap;pointer-events:none}.rpt-bar-fill:hover .rpt-bar-val-badge{color:var(--rpt-text-color, #0f172a);font-weight:700}.rpt-bar-tooltip{position:absolute;top:-34px;left:50%;transform:translate(-50%);background:#0f172a;color:#fff;font-size:.6875rem;padding:3px 8px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;transition:all .15s ease;pointer-events:none;z-index:10;box-shadow:0 4px 6px -1px #0000001a}.rpt-bar-fill:hover .rpt-bar-tooltip{opacity:1;visibility:visible;transform:translate(-50%) translateY(-4px)}.rpt-bar-label{font-size:.75rem;color:var(--rpt-text-muted, #64748b);margin-top:10px;white-space:normal;line-height:1.25;text-align:center;word-break:break-word;max-width:100%}.rpt-donut-chart-container{display:flex;align-items:center;justify-content:center;gap:32px;width:100%;flex-wrap:wrap}.rpt-donut-svg{width:150px;height:150px;transform:rotate(-90deg)}.rpt-donut-total-val{transform:rotate(90deg);transform-origin:80px 80px;font-size:1.25rem;font-weight:700;fill:var(--rpt-text-color, #0f172a)}.rpt-donut-total-lbl{transform:rotate(90deg);transform-origin:80px 80px;font-size:.6875rem;fill:var(--rpt-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-chart-legend{display:flex;flex-direction:column;gap:8px;min-width:140px}.rpt-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem}.rpt-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.rpt-legend-label{flex:1;color:var(--rpt-text-color, #334155)}.rpt-legend-value{font-weight:600;color:var(--rpt-text-muted, #64748b)}.rpt-line-chart-container{width:100%;display:flex;flex-direction:column;gap:8px}.rpt-line-svg{width:100%;height:140px}.rpt-line-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--rpt-text-muted, #64748b);padding:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
230
240
|
}
|
|
231
241
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportChartBridgeComponent, decorators: [{
|
|
232
242
|
type: Component,
|
|
@@ -255,7 +265,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
255
265
|
<div class="rpt-chart-canvas-area">
|
|
256
266
|
@if (data().length === 0) {
|
|
257
267
|
<div class="rpt-chart-empty">No chart data available</div>
|
|
258
|
-
}
|
|
268
|
+
} @else if (chartType() === 'bar') {
|
|
259
269
|
<!-- Vertical Bar Chart -->
|
|
260
270
|
<div class="rpt-bar-chart">
|
|
261
271
|
@for (item of data(); track item.label) {
|
|
@@ -267,7 +277,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
267
277
|
[style.background-color]="item.color || defaultColors[$index % defaultColors.length]"
|
|
268
278
|
[title]="item.label + ': ' + item.value"
|
|
269
279
|
>
|
|
270
|
-
<span class="rpt-bar-
|
|
280
|
+
<span class="rpt-bar-val-badge">{{ formatValue(item.value) }}</span>
|
|
281
|
+
<span class="rpt-bar-tooltip">{{ item.label }}: {{ item.value.toLocaleString() }}</span>
|
|
271
282
|
</div>
|
|
272
283
|
</div>
|
|
273
284
|
<span class="rpt-bar-label" [title]="item.label">{{ item.label }}</span>
|
|
@@ -356,6 +367,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
356
367
|
</div>
|
|
357
368
|
}
|
|
358
369
|
</div>
|
|
359
|
-
`, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-chart-bridge-container{width:100
|
|
370
|
+
`, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-chart-bridge-container{width:100%;height:100%;min-height:220px;display:flex;flex-direction:column}.rpt-chart-fallback-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-lg, 12px);padding:var(--rpt-space-md, 20px);box-shadow:0 1px 3px #0000000d;display:flex;flex-direction:column;flex:1;height:100%;min-height:220px;box-sizing:border-box;gap:16px;overflow:hidden}.rpt-chart-fallback-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.rpt-chart-title{font-size:1rem;font-weight:600;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-chart-badge{font-size:.6875rem;font-weight:700;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b);letter-spacing:.05em}.rpt-chart-canvas-area{min-height:140px;height:100%;flex:1;display:flex;align-items:center;justify-content:center;overflow:visible}.rpt-chart-empty{color:var(--rpt-text-muted, #94a3b8);font-size:.875rem}.rpt-bar-chart{display:flex;align-items:flex-end;justify-content:space-around;gap:16px;width:100%;height:100%;min-height:150px;padding-top:24px;box-sizing:border-box}.rpt-bar-column{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;min-width:64px;max-width:140px}.rpt-bar-track{flex:1;width:38px;max-width:44px;margin:0 auto;background:var(--rpt-bg-subtle, #f8fafc);border-radius:6px 6px 0 0;display:flex;align-items:flex-end;position:relative}.rpt-bar-fill{position:relative;width:100%;min-height:4px;border-radius:6px 6px 0 0;transition:height .4s cubic-bezier(.16,1,.3,1);cursor:pointer;display:flex;justify-content:center}.rpt-bar-val-badge{position:absolute;top:-22px;font-size:.6875rem;font-weight:600;color:var(--rpt-text-muted, #64748b);white-space:nowrap;pointer-events:none}.rpt-bar-fill:hover .rpt-bar-val-badge{color:var(--rpt-text-color, #0f172a);font-weight:700}.rpt-bar-tooltip{position:absolute;top:-34px;left:50%;transform:translate(-50%);background:#0f172a;color:#fff;font-size:.6875rem;padding:3px 8px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;transition:all .15s ease;pointer-events:none;z-index:10;box-shadow:0 4px 6px -1px #0000001a}.rpt-bar-fill:hover .rpt-bar-tooltip{opacity:1;visibility:visible;transform:translate(-50%) translateY(-4px)}.rpt-bar-label{font-size:.75rem;color:var(--rpt-text-muted, #64748b);margin-top:10px;white-space:normal;line-height:1.25;text-align:center;word-break:break-word;max-width:100%}.rpt-donut-chart-container{display:flex;align-items:center;justify-content:center;gap:32px;width:100%;flex-wrap:wrap}.rpt-donut-svg{width:150px;height:150px;transform:rotate(-90deg)}.rpt-donut-total-val{transform:rotate(90deg);transform-origin:80px 80px;font-size:1.25rem;font-weight:700;fill:var(--rpt-text-color, #0f172a)}.rpt-donut-total-lbl{transform:rotate(90deg);transform-origin:80px 80px;font-size:.6875rem;fill:var(--rpt-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-chart-legend{display:flex;flex-direction:column;gap:8px;min-width:140px}.rpt-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem}.rpt-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.rpt-legend-label{flex:1;color:var(--rpt-text-color, #334155)}.rpt-legend-value{font-weight:600;color:var(--rpt-text-muted, #64748b)}.rpt-line-chart-container{width:100%;display:flex;flex-direction:column;gap:8px}.rpt-line-svg{width:100%;height:140px}.rpt-line-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--rpt-text-muted, #64748b);padding:0 8px}\n"] }]
|
|
360
371
|
}] });
|
|
361
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNoYXJ0LWJyaWRnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvY2hhcnQtYnJpZGdlL3JlcG9ydC1jaGFydC1icmlkZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQThXOUUsTUFBTSxPQUFPLDBCQUEwQjtJQUM1QixrQkFBa0IsR0FBeUIsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXZGLFVBQVUsR0FBRyxLQUFLLEVBQTZCLENBQUM7SUFDaEQsVUFBVSxHQUFHLEtBQUssQ0FBOEIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUUsZUFBZSxHQUFHLEtBQUssQ0FBd0IsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEYsV0FBVyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdkUsYUFBYSxHQUFHLEtBQUssQ0FBc0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFckUsYUFBYSxHQUFHO1FBQ3ZCLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNB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QUksQ0FBQztRQUV0RyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7d0dBckhRLDBCQUEwQjs0RkFBMUIsMEJBQTBCLDh2QkE5VjNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4SFQsNm9HQWhJUyxZQUFZOzs0RkFnV1gsMEJBQTBCO2tCQW5XdEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUNOLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThIVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDSEFSVF9DT01QT05FTlQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGFydERhdGFJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbiAgY29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENoYXJ0VHlwZSA9ICdiYXInIHwgJ2xpbmUnIHwgJ2RvbnV0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWNoYXJ0LWJyaWRnZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWJyaWRnZS1jb250YWluZXJcIj5cbiAgICAgIEBpZiAoaG9zdENoYXJ0Q29tcG9uZW50KSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJcbiAgICAgICAgICAgIGhvc3RDaGFydENvbXBvbmVudDtcbiAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICBkYXRhOiBkYXRhKCksXG4gICAgICAgICAgICAgIGNoYXJ0VHlwZTogY2hhcnRUeXBlKCksXG4gICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSgpLFxuICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIlxuICAgICAgICAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gQnVpbHQtaW4gZmFsbGJhY2sgU1ZHL0NTUyBjaGFydCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1mYWxsYmFjay1jYXJkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1mYWxsYmFjay1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cInJwdC1jaGFydC10aXRsZVwiPnt7IHRpdGxlKCkgfX08L2gzPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtY2hhcnQtYmFkZ2VcIj57eyBjaGFydFR5cGUoKSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtY2hhcnQtY2FudmFzLWFyZWFcIj5cbiAgICAgICAgICAgIEBpZiAoZGF0YSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWVtcHR5XCI+Tm8gY2hhcnQgZGF0YSBhdmFpbGFibGU8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKGNoYXJ0VHlwZSgpID09PSAnYmFyJykge1xuICAgICAgICAgICAgICA8IS0tIFZlcnRpY2FsIEJhciBDaGFydCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1iYXItY2hhcnRcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGRhdGEoKTsgdHJhY2sgaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1iYXItY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYmFyLXRyYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtYmFyLWZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC4lXT1cImdldEJhclBlcmNlbnRhZ2UoaXRlbS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXRlbS5jb2xvciB8fCBkZWZhdWx0Q29sb3JzWyRpbmRleCAlIGRlZmF1bHRDb2xvcnMubGVuZ3RoXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbS5sYWJlbCArICc6ICcgKyBpdGVtLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1iYXItdG9vbHRpcFwiPnt7IGl0ZW0udmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1iYXItbGFiZWxcIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoY2hhcnRUeXBlKCkgPT09ICdkb251dCcpIHtcbiAgICAgICAgICAgICAgPCEtLSBTVkcgRG9udXQgQ2hhcnQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZG9udXQtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1kb251dC1zdmdcIiB2aWV3Qm94PVwiMCAwIDE2MCAxNjBcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZG9udXRTZWdtZW50cygpOyB0cmFjayBzZWdtZW50LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBjeD1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICBjeT1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNjBcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlZ21lbnQuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlZ21lbnQuZGFzaEFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaG9mZnNldF09XCJzZWdtZW50LmRhc2hPZmZzZXRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPHRleHQgeD1cIjgwXCIgeT1cIjc2XCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBjbGFzcz1cInJwdC1kb251dC10b3RhbC12YWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdG90YWxWYWx1ZSgpIH19XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCB4PVwiODBcIiB5PVwiOTJcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGNsYXNzPVwicnB0LWRvbnV0LXRvdGFsLWxibFwiPlxuICAgICAgICAgICAgICAgICAgICBUb3RhbFxuICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1sZWdlbmRcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZGF0YSgpOyB0cmFjayBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtbGVnZW5kLWRvdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLmNvbG9yIHx8IGRlZmF1bHRDb2xvcnNbJGluZGV4ICUgZGVmYXVsdENvbG9ycy5sZW5ndGhdXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWxlZ2VuZC1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGVnZW5kLXZhbHVlXCI+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDwhLS0gU1ZHIExpbmUgLyBBcmVhIENoYXJ0IC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWxpbmUtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1saW5lLXN2Z1wiIHZpZXdCb3g9XCIwIDAgNDAwIDE2MFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicnB0TGluZUdyYWRcIiB4MT1cIjBcIiB5MT1cIjBcIiB4Mj1cIjBcIiB5Mj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwJVwiIHN0b3AtY29sb3I9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIiBzdG9wLW9wYWNpdHk9XCIwLjNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjEwMCVcIiBzdG9wLWNvbG9yPVwidmFyKC0tcnB0LXByaW1hcnksICMyNTYzZWIpXCIgc3RvcC1vcGFjaXR5PVwiMC4wXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmFyZWFQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwibGluZVBvaW50cygpLmFyZWFQYXRoXCIgZmlsbD1cInVybCgjcnB0TGluZUdyYWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmxpbmVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZF09XCJsaW5lUG9pbnRzKCkubGluZVBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHB0IG9mIGxpbmVQb2ludHMoKS5wb2ludHM7IHRyYWNrIHB0LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeF09XCJwdC54XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeV09XCJwdC55XCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cInZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1saW5lLWxhYmVsc1wiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGluZS1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtYnJpZGdlLWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWZhbGxiYWNrLWNhcmQge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtcmFkaXVzLWxnLCAxMnB4KTtcbiAgICAgIHBhZGRpbmc6IHZhcigtLXJwdC1zcGFjZS1tZCwgMjBweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGdhcDogMTZweDtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWZhbGxiYWNrLWhlYWRlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC1iYWRnZSB7XG4gICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBwYWRkaW5nOiAycHggOHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWJnLXN1YnRsZSwgI2YxZjVmOSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWNhbnZhcy1hcmVhIHtcbiAgICAgIG1pbi1oZWlnaHQ6IDE0MHB4O1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZmxleDogMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC1lbXB0eSB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM5NGEzYjgpO1xuICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICB9XG5cbiAgICAvKiBCYXIgQ2hhcnQgKi9cbiAgICAucnB0LWJhci1jaGFydCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICBnYXA6IDEycHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTgwcHg7XG4gICAgICBwYWRkaW5nLXRvcDogMjBweDtcbiAgICB9XG5cbiAgICAucnB0LWJhci1jb2x1bW4ge1xuICAgICAgZmxleDogMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1heC13aWR0aDogNDhweDtcbiAgICB9XG5cbiAgICAucnB0LWJhci10cmFjayB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDRweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwO1xuICAgICAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuNHMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbDpob3ZlciAucnB0LWJhci10b29sdGlwIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC04cHgpO1xuICAgIH1cblxuICAgIC5ycHQtYmFyLXRvb2x0aXAge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAtMjRweDtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIGJhY2tncm91bmQ6ICMwZjE3MmE7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgcGFkZGluZzogMnB4IDZweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHotaW5kZXg6IDEwO1xuICAgIH1cblxuICAgIC5ycHQtYmFyLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIC8qIERvbnV0IENoYXJ0ICovXG4gICAgLnJwdC1kb251dC1jaGFydC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGdhcDogMzJweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtc3ZnIHtcbiAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgIGhlaWdodDogMTUwcHg7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtdG90YWwtdmFsIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDgwcHggODBweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnJwdC1kb251dC10b3RhbC1sYmwge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogODBweCA4MHB4O1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWxlZ2VuZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgbWluLXdpZHRoOiAxNDBweDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1pdGVtIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1kb3Qge1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1sYWJlbCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMzM0MTU1KTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC12YWx1ZSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAvKiBMaW5lIENoYXJ0ICovXG4gICAgLnJwdC1saW5lLWNoYXJ0LWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLXN2ZyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLWxhYmVscyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIHBhZGRpbmc6IDAgOHB4O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0Q2hhcnRCcmlkZ2VDb21wb25lbnQge1xuICByZWFkb25seSBob3N0Q2hhcnRDb21wb25lbnQ6IFR5cGU8dW5rbm93bj4gfCBudWxsID0gaW5qZWN0KENIQVJUX0NPTVBPTkVOVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgY3VzdG9tRGF0YSA9IGlucHV0PENoYXJ0RGF0YUl0ZW1bXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnZGF0YScgfSk7XG4gIHJlYWRvbmx5IGN1c3RvbUNoYXJ0VHlwZSA9IGlucHV0PENoYXJ0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnY2hhcnRUeXBlJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tVGl0bGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RpdGxlJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tT3B0aW9ucyA9IGlucHV0PFJlY29yZDxzdHJpbmcsIGFueT4+KHt9LCB7IGFsaWFzOiAnb3B0aW9ucycgfSk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdENvbG9ycyA9IFtcbiAgICAnIzI1NjNlYicsXG4gICAgJyMxMGI5ODEnLFxuICAgICcjZjU5ZTBiJyxcbiAgICAnI2VmNDQ0NCcsXG4gICAgJyM4YjVjZjYnLFxuICAgICcjMDZiNmQ0JyxcbiAgICAnI2VjNDg5OSdcbiAgXTtcblxuICByZWFkb25seSB0aXRsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21UaXRsZSgpID8/XG4gICAgICAodGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsndGl0bGUnXSBhcyBzdHJpbmcpID8/XG4gICAgICB0aGlzLmRlZmluaXRpb24oKT8ubGFiZWwgPz9cbiAgICAgICdDaGFydCdcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBjaGFydFR5cGUgPSBjb21wdXRlZDxDaGFydFR5cGU+KCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21DaGFydFR5cGUoKSA/P1xuICAgICAgKHRoaXMuZGVmaW5pdGlvbigpPy5wcm9wZXJ0aWVzPy5bJ2NoYXJ0VHlwZSddIGFzIENoYXJ0VHlwZSkgPz9cbiAgICAgICdiYXInXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZGF0YSA9IGNvbXB1dGVkPENoYXJ0RGF0YUl0ZW1bXT4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmN1c3RvbURhdGEoKSAmJiB0aGlzLmN1c3RvbURhdGEoKSEubGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMuY3VzdG9tRGF0YSgpITtcbiAgICBjb25zdCBjb25maWdEYXRhID0gdGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsnZGF0YSddIGFzIENoYXJ0RGF0YUl0ZW1bXTtcbiAgICByZXR1cm4gY29uZmlnRGF0YSB8fCBbXTtcbiAgfSk7XG5cblxuICByZWFkb25seSBvcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4odGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXMgfHwge30pLFxuICAgICAgLi4udGhpcy5jdXN0b21PcHRpb25zKClcbiAgICB9O1xuICB9KTtcblxuXG4gIHJlYWRvbmx5IG1heFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5kYXRhKCk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLml0ZW1zLm1hcCgoZCkgPT4gZC52YWx1ZSksIDEpO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEoKS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci52YWx1ZSwgMCk7XG4gIH0pO1xuXG4gIGdldEJhclBlcmNlbnRhZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKCh2YWx1ZSAvIG1heCkgKiAxMDApO1xuICB9XG5cbiAgcmVhZG9ubHkgZG9udXRTZWdtZW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZGF0YSgpO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbFZhbHVlKCk7XG4gICAgaWYgKHRvdGFsID09PSAwKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gMiAqIE1hdGguUEkgKiA2MDsgLy8gcmFkaXVzID0gNjAgPT4gfjM3Ni45OVxuICAgIGxldCBhY2N1bXVsYXRlZCA9IDA7XG5cbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IHJhdGlvID0gaXRlbS52YWx1ZSAvIHRvdGFsO1xuICAgICAgY29uc3Qgc3Ryb2tlTGVuZ3RoID0gcmF0aW8gKiBjaXJjdW1mZXJlbmNlO1xuICAgICAgY29uc3QgZGFzaE9mZnNldCA9IC0oYWNjdW11bGF0ZWQgKiBjaXJjdW1mZXJlbmNlKTtcbiAgICAgIGFjY3VtdWxhdGVkICs9IHJhdGlvO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgY29sb3I6IGl0ZW0uY29sb3IgfHwgdGhpcy5kZWZhdWx0Q29sb3JzW2lkeCAlIHRoaXMuZGVmYXVsdENvbG9ycy5sZW5ndGhdLFxuICAgICAgICBkYXNoQXJyYXk6IGAke3N0cm9rZUxlbmd0aH0gJHtjaXJjdW1mZXJlbmNlfWAsXG4gICAgICAgIGRhc2hPZmZzZXRcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGxpbmVQb2ludHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmRhdGEoKTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4geyBsaW5lUGF0aDogJycsIGFyZWFQYXRoOiAnJywgcG9pbnRzOiBbXSB9O1xuXG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIGNvbnN0IHdpZHRoID0gNDAwO1xuICAgIGNvbnN0IGhlaWdodCA9IDE0MDtcbiAgICBjb25zdCBwYWRkaW5nID0gMjA7XG5cbiAgICBjb25zdCB1c2FibGVXaWR0aCA9IHdpZHRoIC0gcGFkZGluZyAqIDI7XG4gICAgY29uc3QgdXNhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gcGFkZGluZyAqIDI7XG4gICAgY29uc3Qgc3RlcCA9IGl0ZW1zLmxlbmd0aCA+IDEgPyB1c2FibGVXaWR0aCAvIChpdGVtcy5sZW5ndGggLSAxKSA6IDA7XG5cbiAgICBjb25zdCBwdHMgPSBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHBhZGRpbmcgKyBpZHggKiBzdGVwO1xuICAgICAgY29uc3QgeSA9IGhlaWdodCAtIHBhZGRpbmcgLSAoaXRlbS52YWx1ZSAvIG1heCkgKiB1c2FibGVIZWlnaHQ7XG4gICAgICByZXR1cm4geyB4LCB5LCBsYWJlbDogaXRlbS5sYWJlbCwgdmFsdWU6IGl0ZW0udmFsdWUgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpbmVQYXRoID0gcHRzLnJlZHVjZSgoYWNjLCBwdCwgaSkgPT4ge1xuICAgICAgcmV0dXJuIGkgPT09IDAgPyBgTSAke3B0Lnh9ICR7cHQueX1gIDogYCR7YWNjfSBMICR7cHQueH0gJHtwdC55fWA7XG4gICAgfSwgJycpO1xuXG4gICAgY29uc3QgZmlyc3RQdCA9IHB0c1swXTtcbiAgICBjb25zdCBsYXN0UHQgPSBwdHNbcHRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFyZWFQYXRoID0gYCR7bGluZVBhdGh9IEwgJHtsYXN0UHQueH0gJHtoZWlnaHQgLSBwYWRkaW5nfSBMICR7Zmlyc3RQdC54fSAke2hlaWdodCAtIHBhZGRpbmd9IFpgO1xuXG4gICAgcmV0dXJuIHsgbGluZVBhdGgsIGFyZWFQYXRoLCBwb2ludHM6IHB0cyB9O1xuICB9KTtcbn1cbiJdfQ==
|
|
372
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNoYXJ0LWJyaWRnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvY2hhcnQtYnJpZGdlL3JlcG9ydC1jaGFydC1icmlkZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQThZOUUsTUFBTSxPQUFPLDBCQUEwQjtJQUM1QixrQkFBa0IsR0FBeUIsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXZGLFVBQVUsR0FBRyxLQUFLLEVBQTZCLENBQUM7SUFDaEQsVUFBVSxHQUFHLEtBQUssQ0FBOEIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUUsZUFBZSxHQUFHLEtBQUssQ0FBd0IsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEYsV0FBVyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdkUsYUFBYSxHQUFHLEtBQUssQ0FBc0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFckUsYUFBYSxHQUFHO1FBQ3ZCLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNB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bnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIFR5cGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENIQVJUX0NPTVBPTkVOVCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0RGF0YUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICBjb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2hhcnRUeXBlID0gJ2JhcicgfCAnbGluZScgfCAnZG9udXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtY2hhcnQtYnJpZGdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJycHQtY2hhcnQtYnJpZGdlLWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChob3N0Q2hhcnRDb21wb25lbnQpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxuICAgICAgICAgICAgaG9zdENoYXJ0Q29tcG9uZW50O1xuICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgIGRhdGE6IGRhdGEoKSxcbiAgICAgICAgICAgICAgY2hhcnRUeXBlOiBjaGFydFR5cGUoKSxcbiAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlKCksXG4gICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBCdWlsdC1pbiBmYWxsYmFjayBTVkcvQ1NTIGNoYXJ0IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWZhbGxiYWNrLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWZhbGxiYWNrLWhlYWRlclwiPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwicnB0LWNoYXJ0LXRpdGxlXCI+e3sgdGl0bGUoKSB9fTwvaDM+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1jaGFydC1iYWRnZVwiPnt7IGNoYXJ0VHlwZSgpIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1jYW52YXMtYXJlYVwiPlxuICAgICAgICAgICAgQGlmIChkYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtY2hhcnQtZW1wdHlcIj5ObyBjaGFydCBkYXRhIGF2YWlsYWJsZTwvZGl2PlxuICAgICAgICAgICAgfSAgICAgICAgICAgIEBlbHNlIGlmIChjaGFydFR5cGUoKSA9PT0gJ2JhcicpIHtcbiAgICAgICAgICAgICAgPCEtLSBWZXJ0aWNhbCBCYXIgQ2hhcnQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYmFyLWNoYXJ0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYmFyLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWJhci10cmFja1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQuJV09XCJnZXRCYXJQZXJjZW50YWdlKGl0ZW0udmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0uY29sb3IgfHwgZGVmYXVsdENvbG9yc1skaW5kZXggJSBkZWZhdWx0Q29sb3JzLmxlbmd0aF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW0ubGFiZWwgKyAnOiAnICsgaXRlbS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYmFyLXZhbC1iYWRnZVwiPnt7IGZvcm1hdFZhbHVlKGl0ZW0udmFsdWUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYmFyLXRvb2x0aXBcIj57eyBpdGVtLmxhYmVsIH19OiB7eyBpdGVtLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1iYXItbGFiZWxcIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoY2hhcnRUeXBlKCkgPT09ICdkb251dCcpIHtcbiAgICAgICAgICAgICAgPCEtLSBTVkcgRG9udXQgQ2hhcnQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZG9udXQtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1kb251dC1zdmdcIiB2aWV3Qm94PVwiMCAwIDE2MCAxNjBcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZG9udXRTZWdtZW50cygpOyB0cmFjayBzZWdtZW50LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBjeD1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICBjeT1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNjBcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlZ21lbnQuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlZ21lbnQuZGFzaEFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaG9mZnNldF09XCJzZWdtZW50LmRhc2hPZmZzZXRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPHRleHQgeD1cIjgwXCIgeT1cIjc2XCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBjbGFzcz1cInJwdC1kb251dC10b3RhbC12YWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdG90YWxWYWx1ZSgpIH19XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCB4PVwiODBcIiB5PVwiOTJcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGNsYXNzPVwicnB0LWRvbnV0LXRvdGFsLWxibFwiPlxuICAgICAgICAgICAgICAgICAgICBUb3RhbFxuICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1sZWdlbmRcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZGF0YSgpOyB0cmFjayBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtbGVnZW5kLWRvdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLmNvbG9yIHx8IGRlZmF1bHRDb2xvcnNbJGluZGV4ICUgZGVmYXVsdENvbG9ycy5sZW5ndGhdXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWxlZ2VuZC1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGVnZW5kLXZhbHVlXCI+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDwhLS0gU1ZHIExpbmUgLyBBcmVhIENoYXJ0IC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWxpbmUtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1saW5lLXN2Z1wiIHZpZXdCb3g9XCIwIDAgNDAwIDE2MFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicnB0TGluZUdyYWRcIiB4MT1cIjBcIiB5MT1cIjBcIiB4Mj1cIjBcIiB5Mj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwJVwiIHN0b3AtY29sb3I9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIiBzdG9wLW9wYWNpdHk9XCIwLjNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjEwMCVcIiBzdG9wLWNvbG9yPVwidmFyKC0tcnB0LXByaW1hcnksICMyNTYzZWIpXCIgc3RvcC1vcGFjaXR5PVwiMC4wXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmFyZWFQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwibGluZVBvaW50cygpLmFyZWFQYXRoXCIgZmlsbD1cInVybCgjcnB0TGluZUdyYWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmxpbmVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZF09XCJsaW5lUG9pbnRzKCkubGluZVBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHB0IG9mIGxpbmVQb2ludHMoKS5wb2ludHM7IHRyYWNrIHB0LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeF09XCJwdC54XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeV09XCJwdC55XCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cInZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1saW5lLWxhYmVsc1wiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGluZS1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtYnJpZGdlLWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDIyMHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC1mYWxsYmFjay1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1zdXJmYWNlLWJnLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1ib3JkZXItY29sb3IsICNlMmU4ZjApO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LXJhZGl1cy1sZywgMTJweCk7XG4gICAgICBwYWRkaW5nOiB2YXIoLS1ycHQtc3BhY2UtbWQsIDIwcHgpO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAyMjBweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBnYXA6IDE2cHg7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtZmFsbGJhY2staGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWJhZGdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIHBhZGRpbmc6IDJweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjFmNWY5KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtY2FudmFzLWFyZWEge1xuICAgICAgbWluLWhlaWdodDogMTQwcHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBmbGV4OiAxO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtZW1wdHkge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgfVxuXG4gICAgLyogQmFyIENoYXJ0ICovXG4gICAgLnJwdC1iYXItY2hhcnQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICAgICAgZ2FwOiAxNnB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgICAgIHBhZGRpbmctdG9wOiAyNHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG5cbiAgICAucnB0LWJhci1jb2x1bW4ge1xuICAgICAgZmxleDogMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi13aWR0aDogNjRweDtcbiAgICAgIG1heC13aWR0aDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItdHJhY2sge1xuICAgICAgZmxleDogMTtcbiAgICAgIHdpZHRoOiAzOHB4O1xuICAgICAgbWF4LXdpZHRoOiA0NHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAucnB0LWJhci1maWxsIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogNHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4IDZweCAwIDA7XG4gICAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMC40cyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAucnB0LWJhci12YWwtYmFkZ2Uge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAtMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbDpob3ZlciAucnB0LWJhci12YWwtYmFkZ2Uge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItdG9vbHRpcCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC0zNHB4O1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgYmFja2dyb3VuZDogIzBmMTcyYTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBwYWRkaW5nOiAzcHggOHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbDpob3ZlciAucnB0LWJhci10b29sdGlwIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTRweCk7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItbGFiZWwge1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIC8qIERvbnV0IENoYXJ0ICovXG4gICAgLnJwdC1kb251dC1jaGFydC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGdhcDogMzJweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtc3ZnIHtcbiAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgIGhlaWdodDogMTUwcHg7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtdG90YWwtdmFsIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDgwcHggODBweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnJwdC1kb251dC10b3RhbC1sYmwge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogODBweCA4MHB4O1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWxlZ2VuZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgbWluLXdpZHRoOiAxNDBweDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1pdGVtIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1kb3Qge1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1sYWJlbCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMzM0MTU1KTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC12YWx1ZSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAvKiBMaW5lIENoYXJ0ICovXG4gICAgLnJwdC1saW5lLWNoYXJ0LWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLXN2ZyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLWxhYmVscyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIHBhZGRpbmc6IDAgOHB4O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0Q2hhcnRCcmlkZ2VDb21wb25lbnQge1xuICByZWFkb25seSBob3N0Q2hhcnRDb21wb25lbnQ6IFR5cGU8dW5rbm93bj4gfCBudWxsID0gaW5qZWN0KENIQVJUX0NPTVBPTkVOVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgY3VzdG9tRGF0YSA9IGlucHV0PENoYXJ0RGF0YUl0ZW1bXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnZGF0YScgfSk7XG4gIHJlYWRvbmx5IGN1c3RvbUNoYXJ0VHlwZSA9IGlucHV0PENoYXJ0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnY2hhcnRUeXBlJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tVGl0bGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RpdGxlJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tT3B0aW9ucyA9IGlucHV0PFJlY29yZDxzdHJpbmcsIGFueT4+KHt9LCB7IGFsaWFzOiAnb3B0aW9ucycgfSk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdENvbG9ycyA9IFtcbiAgICAnIzI1NjNlYicsXG4gICAgJyMxMGI5ODEnLFxuICAgICcjZjU5ZTBiJyxcbiAgICAnI2VmNDQ0NCcsXG4gICAgJyM4YjVjZjYnLFxuICAgICcjMDZiNmQ0JyxcbiAgICAnI2VjNDg5OSdcbiAgXTtcblxuICByZWFkb25seSB0aXRsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21UaXRsZSgpID8/XG4gICAgICAodGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsndGl0bGUnXSBhcyBzdHJpbmcpID8/XG4gICAgICB0aGlzLmRlZmluaXRpb24oKT8ubGFiZWwgPz9cbiAgICAgICdDaGFydCdcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBjaGFydFR5cGUgPSBjb21wdXRlZDxDaGFydFR5cGU+KCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21DaGFydFR5cGUoKSA/P1xuICAgICAgKHRoaXMuZGVmaW5pdGlvbigpPy5wcm9wZXJ0aWVzPy5bJ2NoYXJ0VHlwZSddIGFzIENoYXJ0VHlwZSkgPz9cbiAgICAgICdiYXInXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZGF0YSA9IGNvbXB1dGVkPENoYXJ0RGF0YUl0ZW1bXT4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmN1c3RvbURhdGEoKSAmJiB0aGlzLmN1c3RvbURhdGEoKSEubGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMuY3VzdG9tRGF0YSgpITtcbiAgICBjb25zdCBjb25maWdEYXRhID0gdGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsnZGF0YSddIGFzIENoYXJ0RGF0YUl0ZW1bXTtcbiAgICByZXR1cm4gY29uZmlnRGF0YSB8fCBbXTtcbiAgfSk7XG5cblxuICByZWFkb25seSBvcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4odGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXMgfHwge30pLFxuICAgICAgLi4udGhpcy5jdXN0b21PcHRpb25zKClcbiAgICB9O1xuICB9KTtcblxuXG4gIHJlYWRvbmx5IG1heFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5kYXRhKCk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLml0ZW1zLm1hcCgoZCkgPT4gZC52YWx1ZSksIDEpO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEoKS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci52YWx1ZSwgMCk7XG4gIH0pO1xuXG4gIGdldEJhclBlcmNlbnRhZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKCh2YWx1ZSAvIG1heCkgKiAxMDApO1xuICB9XG5cbiAgZm9ybWF0VmFsdWUodmFsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh2YWwgPj0gMV8wMDBfMDAwKSB7XG4gICAgICByZXR1cm4gKHZhbCAvIDFfMDAwXzAwMCkudG9GaXhlZCgxKS5yZXBsYWNlKC9cXC4wJC8sICcnKSArICdNJztcbiAgICB9XG4gICAgaWYgKHZhbCA+PSAxXzAwMCkge1xuICAgICAgcmV0dXJuICh2YWwgLyAxXzAwMCkudG9GaXhlZCgxKS5yZXBsYWNlKC9cXC4wJC8sICcnKSArICdrJztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWwpO1xuICB9XG5cbiAgcmVhZG9ubHkgZG9udXRTZWdtZW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZGF0YSgpO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbFZhbHVlKCk7XG4gICAgaWYgKHRvdGFsID09PSAwKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gMiAqIE1hdGguUEkgKiA2MDsgLy8gcmFkaXVzID0gNjAgPT4gfjM3Ni45OVxuICAgIGxldCBhY2N1bXVsYXRlZCA9IDA7XG5cbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IHJhdGlvID0gaXRlbS52YWx1ZSAvIHRvdGFsO1xuICAgICAgY29uc3Qgc3Ryb2tlTGVuZ3RoID0gcmF0aW8gKiBjaXJjdW1mZXJlbmNlO1xuICAgICAgY29uc3QgZGFzaE9mZnNldCA9IC0oYWNjdW11bGF0ZWQgKiBjaXJjdW1mZXJlbmNlKTtcbiAgICAgIGFjY3VtdWxhdGVkICs9IHJhdGlvO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgY29sb3I6IGl0ZW0uY29sb3IgfHwgdGhpcy5kZWZhdWx0Q29sb3JzW2lkeCAlIHRoaXMuZGVmYXVsdENvbG9ycy5sZW5ndGhdLFxuICAgICAgICBkYXNoQXJyYXk6IGAke3N0cm9rZUxlbmd0aH0gJHtjaXJjdW1mZXJlbmNlfWAsXG4gICAgICAgIGRhc2hPZmZzZXRcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGxpbmVQb2ludHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmRhdGEoKTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4geyBsaW5lUGF0aDogJycsIGFyZWFQYXRoOiAnJywgcG9pbnRzOiBbXSB9O1xuXG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIGNvbnN0IHdpZHRoID0gNDAwO1xuICAgIGNvbnN0IGhlaWdodCA9IDE0MDtcbiAgICBjb25zdCBwYWRkaW5nID0gMjA7XG5cbiAgICBjb25zdCB1c2FibGVXaWR0aCA9IHdpZHRoIC0gcGFkZGluZyAqIDI7XG4gICAgY29uc3QgdXNhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gcGFkZGluZyAqIDI7XG4gICAgY29uc3Qgc3RlcCA9IGl0ZW1zLmxlbmd0aCA+IDEgPyB1c2FibGVXaWR0aCAvIChpdGVtcy5sZW5ndGggLSAxKSA6IDA7XG5cbiAgICBjb25zdCBwdHMgPSBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHBhZGRpbmcgKyBpZHggKiBzdGVwO1xuICAgICAgY29uc3QgeSA9IGhlaWdodCAtIHBhZGRpbmcgLSAoaXRlbS52YWx1ZSAvIG1heCkgKiB1c2FibGVIZWlnaHQ7XG4gICAgICByZXR1cm4geyB4LCB5LCBsYWJlbDogaXRlbS5sYWJlbCwgdmFsdWU6IGl0ZW0udmFsdWUgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpbmVQYXRoID0gcHRzLnJlZHVjZSgoYWNjLCBwdCwgaSkgPT4ge1xuICAgICAgcmV0dXJuIGkgPT09IDAgPyBgTSAke3B0Lnh9ICR7cHQueX1gIDogYCR7YWNjfSBMICR7cHQueH0gJHtwdC55fWA7XG4gICAgfSwgJycpO1xuXG4gICAgY29uc3QgZmlyc3RQdCA9IHB0c1swXTtcbiAgICBjb25zdCBsYXN0UHQgPSBwdHNbcHRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFyZWFQYXRoID0gYCR7bGluZVBhdGh9IEwgJHtsYXN0UHQueH0gJHtoZWlnaHQgLSBwYWRkaW5nfSBMICR7Zmlyc3RQdC54fSAke2hlaWdodCAtIHBhZGRpbmd9IFpgO1xuXG4gICAgcmV0dXJuIHsgbGluZVBhdGgsIGFyZWFQYXRoLCBwb2ludHM6IHB0cyB9O1xuICB9KTtcbn1cbiJdfQ==
|