@firestitch/report 18.6.1 → 18.7.0
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/app/reports/components/component-chart/component-chart.component.d.ts +6 -7
- package/app/reports/components/component-kpi/component-kpi.component.d.ts +8 -9
- package/app/reports/components/component-list/component-list.component.d.ts +33 -10
- package/app/reports/components/report-canvas/report-canvas.component.d.ts +0 -1
- package/app/reports/components/report-component/report-component.component.d.ts +4 -2
- package/app/reports/data/report.data.d.ts +2 -1
- package/app/reports/dialogs/list-columns/list-columns.component.d.ts +23 -0
- package/app/reports/dialogs/report-settings/report-locale-patch.d.ts +5 -0
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +20 -1
- package/app/reports/enums/report-chart-color.enum.d.ts +12 -0
- package/app/reports/enums/report-chart-data-labels.enum.d.ts +6 -0
- package/app/reports/enums/report-chart-date-label.enum.d.ts +5 -0
- package/app/reports/enums/report-chart-line-style.enum.d.ts +5 -0
- package/app/reports/enums/report-chart-mark-stat.enum.d.ts +6 -0
- package/app/reports/enums/report-list-column-format.enum.d.ts +6 -0
- package/app/reports/enums/report-number-units.enum.d.ts +6 -0
- package/app/reports/enums/report-value-format.enum.d.ts +5 -0
- package/app/reports/export/offscreen-chart.d.ts +2 -2
- package/app/reports/export/report-export-collector.service.d.ts +12 -9
- package/app/reports/export/report-pdf.service.d.ts +1 -0
- package/app/reports/export/report-pptx.service.d.ts +17 -0
- package/app/reports/format.d.ts +38 -3
- package/app/reports/interfaces/report.interface.d.ts +81 -10
- package/app/reports/list-config.d.ts +9 -0
- package/app/reports/option-builder.d.ts +69 -9
- package/app/reports/pipes/report-date.pipe.d.ts +2 -1
- package/app/reports/pipes/report-number.pipe.d.ts +8 -0
- package/app/reports/report-filter-items.d.ts +5 -2
- package/app/reports/report-url-state.d.ts +4 -0
- package/app/reports/services/report-filter-state.service.d.ts +26 -2
- package/app/reports/theme/palette.d.ts +3 -0
- package/app/reports/theme/typography.d.ts +1 -0
- package/esm2022/app/reports/components/component-chart/component-chart.component.mjs +19 -20
- package/esm2022/app/reports/components/component-kpi/component-kpi.component.mjs +23 -29
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +158 -32
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +3 -8
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +81 -21
- package/esm2022/app/reports/data/report.data.mjs +17 -4
- package/esm2022/app/reports/dialogs/list-columns/list-columns.component.mjs +56 -0
- package/esm2022/app/reports/dialogs/report-settings/report-locale-patch.mjs +13 -0
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +137 -15
- package/esm2022/app/reports/enums/report-chart-color.enum.mjs +19 -0
- package/esm2022/app/reports/enums/report-chart-data-labels.enum.mjs +13 -0
- package/esm2022/app/reports/enums/report-chart-date-label.enum.mjs +13 -0
- package/esm2022/app/reports/enums/report-chart-line-style.enum.mjs +12 -0
- package/esm2022/app/reports/enums/report-chart-mark-stat.enum.mjs +12 -0
- package/esm2022/app/reports/enums/report-list-column-format.enum.mjs +14 -0
- package/esm2022/app/reports/enums/report-number-units.enum.mjs +14 -0
- package/esm2022/app/reports/enums/report-value-format.enum.mjs +13 -0
- package/esm2022/app/reports/export/offscreen-chart.mjs +5 -4
- package/esm2022/app/reports/export/report-export-collector.service.mjs +95 -40
- package/esm2022/app/reports/export/report-pdf.service.mjs +92 -36
- package/esm2022/app/reports/export/report-pptx.service.mjs +482 -86
- package/esm2022/app/reports/format.mjs +497 -58
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/list-config.mjs +74 -0
- package/esm2022/app/reports/option-builder.mjs +868 -98
- package/esm2022/app/reports/pipes/report-date.pipe.mjs +7 -6
- package/esm2022/app/reports/pipes/report-number.pipe.mjs +25 -0
- package/esm2022/app/reports/report-filter-items.mjs +28 -3
- package/esm2022/app/reports/report-url-state.mjs +56 -15
- package/esm2022/app/reports/services/report-filter-state.service.mjs +235 -20
- package/esm2022/app/reports/theme/echarts.mjs +8 -2
- package/esm2022/app/reports/theme/palette.mjs +19 -1
- package/esm2022/app/reports/theme/typography.mjs +4 -1
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +1 -1
- package/esm2022/public_api.mjs +9 -1
- package/fesm2022/{firestitch-report-echarts-Djtmaxj1.mjs → firestitch-report-echarts-u5ImuZT5.mjs} +9 -3
- package/fesm2022/firestitch-report-echarts-u5ImuZT5.mjs.map +1 -0
- package/fesm2022/{firestitch-report-firestitch-report-D3zseBZc.mjs → firestitch-report-firestitch-report-Cz-kA_id.mjs} +3221 -660
- package/fesm2022/firestitch-report-firestitch-report-Cz-kA_id.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +8 -0
- package/fesm2022/firestitch-report-echarts-Djtmaxj1.mjs.map +0 -1
- package/fesm2022/firestitch-report-firestitch-report-D3zseBZc.mjs.map +0 -1
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
// The canvas renderer (not SVG) is deliberate: chart.getDataURL() needs it for
|
|
7
7
|
// the high-res images the PPT/PDF exports will use.
|
|
8
8
|
import { BarChart, LineChart, PieChart } from 'echarts/charts';
|
|
9
|
-
import { DatasetComponent, GridComponent, LegendComponent, TooltipComponent, } from 'echarts/components';
|
|
9
|
+
import { DatasetComponent, GridComponent, LegendComponent, MarkAreaComponent, MarkLineComponent, TooltipComponent, } from 'echarts/components';
|
|
10
10
|
import * as echarts from 'echarts/core';
|
|
11
|
+
import { LabelLayout } from 'echarts/features';
|
|
11
12
|
import { CanvasRenderer } from 'echarts/renderers';
|
|
12
13
|
import { REPORT_CHART_COLORS_CSS } from './palette';
|
|
13
14
|
import { REPORT_AXIS_LABEL_FONT_SIZE, REPORT_CHART_FONT_FAMILY } from './typography';
|
|
@@ -19,6 +20,11 @@ echarts.use([
|
|
|
19
20
|
TooltipComponent,
|
|
20
21
|
LegendComponent,
|
|
21
22
|
DatasetComponent,
|
|
23
|
+
// Reference lines and statistic lines (markLine), reference bands
|
|
24
|
+
// (markArea), and the overlap hiding of 'auto' data labels (LabelLayout).
|
|
25
|
+
MarkLineComponent,
|
|
26
|
+
MarkAreaComponent,
|
|
27
|
+
LabelLayout,
|
|
22
28
|
CanvasRenderer,
|
|
23
29
|
]);
|
|
24
30
|
// The house theme — the single place report chart "standards" live (palette,
|
|
@@ -57,4 +63,4 @@ echarts.registerTheme('report', {
|
|
|
57
63
|
},
|
|
58
64
|
});
|
|
59
65
|
export default echarts;
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNoYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy90aGVtZS9lY2hhcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtFQUErRTtBQUMvRSw2RUFBNkU7QUFDN0UscUVBQXFFO0FBQ3JFLDJEQUEyRDtBQUMzRCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLG9EQUFvRDtBQUVwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckYsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNWLFFBQVE7SUFDUixTQUFTO0lBQ1QsUUFBUTtJQUNSLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixrRUFBa0U7SUFDbEUsMEVBQTBFO0lBQzFFLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsV0FBVztJQUNYLGNBQWM7Q0FDZixDQUFDLENBQUM7QUFFSCw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLFNBQVM7QUFDVCxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTtJQUM5QixLQUFLLEVBQUUsdUJBQXVCO0lBQzlCLFNBQVMsRUFBRTtRQUNULFVBQVUsRUFBRSx3QkFBd0I7S0FDckM7SUFDRCxLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRTtLQUMvRDtJQUNELE1BQU0sRUFBRTtRQUNOLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtLQUM5QztJQUNELE9BQU8sRUFBRTtRQUNQLGVBQWUsRUFBRSx3QkFBd0I7UUFDekMsV0FBVyxFQUFFLENBQUM7UUFDZCxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7S0FDM0M7SUFDRCxZQUFZLEVBQUU7UUFDWixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7UUFDN0MsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUN6QixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSwyQkFBMkIsRUFBRTtRQUN0RSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0tBQzNCO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUN6QixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSwyQkFBMkIsRUFBRTtRQUN0RSxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7S0FDL0M7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7UUFDN0MsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsMkJBQTJCLEVBQUU7S0FDdkU7Q0FDRixDQUFDLENBQUM7QUFFSCxlQUFlLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRyZWUtc2hha2VuIEVDaGFydHMgYnVpbGQgZm9yIHRoZSByZXBvcnRzIHJlbmRlcmVyOiBvbmx5IHRoZSBjaGFydCB0eXBlcyBhbmRcbi8vIGNvbXBvbmVudHMgdGhlIG9wdGlvbi1idWlsZGVyIGVtaXRzIGFyZSByZWdpc3RlcmVkLCBrZWVwaW5nIHRoZSBsYXp5IGNodW5rXG4vLyBsZWFuLiBMb2FkZWQgb24gZGVtYW5kIGJ5IG5neC1lY2hhcnRzIHZpYSBwcm92aWRlRWNoYXJ0c0NvcmUg4oCUIHNlZVxuLy8gUkVQT1JUX0VDSEFSVFNfUFJPVklERVJTIGluIHJlcG9ydHMtZWNoYXJ0cy5wcm92aWRlci50cy5cbi8vXG4vLyBUaGUgY2FudmFzIHJlbmRlcmVyIChub3QgU1ZHKSBpcyBkZWxpYmVyYXRlOiBjaGFydC5nZXREYXRhVVJMKCkgbmVlZHMgaXQgZm9yXG4vLyB0aGUgaGlnaC1yZXMgaW1hZ2VzIHRoZSBQUFQvUERGIGV4cG9ydHMgd2lsbCB1c2UuXG5cbmltcG9ydCB7IEJhckNoYXJ0LCBMaW5lQ2hhcnQsIFBpZUNoYXJ0IH0gZnJvbSAnZWNoYXJ0cy9jaGFydHMnO1xuaW1wb3J0IHtcbiAgRGF0YXNldENvbXBvbmVudCxcbiAgR3JpZENvbXBvbmVudCxcbiAgTGVnZW5kQ29tcG9uZW50LFxuICBNYXJrQXJlYUNvbXBvbmVudCxcbiAgTWFya0xpbmVDb21wb25lbnQsXG4gIFRvb2x0aXBDb21wb25lbnQsXG59IGZyb20gJ2VjaGFydHMvY29tcG9uZW50cyc7XG5pbXBvcnQgKiBhcyBlY2hhcnRzIGZyb20gJ2VjaGFydHMvY29yZSc7XG5pbXBvcnQgeyBMYWJlbExheW91dCB9IGZyb20gJ2VjaGFydHMvZmVhdHVyZXMnO1xuaW1wb3J0IHsgQ2FudmFzUmVuZGVyZXIgfSBmcm9tICdlY2hhcnRzL3JlbmRlcmVycyc7XG5cbmltcG9ydCB7IFJFUE9SVF9DSEFSVF9DT0xPUlNfQ1NTIH0gZnJvbSAnLi9wYWxldHRlJztcbmltcG9ydCB7IFJFUE9SVF9BWElTX0xBQkVMX0ZPTlRfU0laRSwgUkVQT1JUX0NIQVJUX0ZPTlRfRkFNSUxZIH0gZnJvbSAnLi90eXBvZ3JhcGh5JztcblxuZWNoYXJ0cy51c2UoW1xuICBCYXJDaGFydCxcbiAgTGluZUNoYXJ0LFxuICBQaWVDaGFydCxcbiAgR3JpZENvbXBvbmVudCxcbiAgVG9vbHRpcENvbXBvbmVudCxcbiAgTGVnZW5kQ29tcG9uZW50LFxuICBEYXRhc2V0Q29tcG9uZW50LFxuICAvLyBSZWZlcmVuY2UgbGluZXMgYW5kIHN0YXRpc3RpYyBsaW5lcyAobWFya0xpbmUpLCByZWZlcmVuY2UgYmFuZHNcbiAgLy8gKG1hcmtBcmVhKSwgYW5kIHRoZSBvdmVybGFwIGhpZGluZyBvZiAnYXV0bycgZGF0YSBsYWJlbHMgKExhYmVsTGF5b3V0KS5cbiAgTWFya0xpbmVDb21wb25lbnQsXG4gIE1hcmtBcmVhQ29tcG9uZW50LFxuICBMYWJlbExheW91dCxcbiAgQ2FudmFzUmVuZGVyZXIsXG5dKTtcblxuLy8gVGhlIGhvdXNlIHRoZW1lIOKAlCB0aGUgc2luZ2xlIHBsYWNlIHJlcG9ydCBjaGFydCBcInN0YW5kYXJkc1wiIGxpdmUgKHBhbGV0dGUsXG4vLyB0eXBvZ3JhcGh5LCB0b29sdGlwIHN0eWxpbmcpLiBQb2xpc2hlZCBkZWZhdWx0cyBub3c7IHJlZmluZWQgaW4gdGhlIHBvbGlzaFxuLy8gcGhhc2UuXG5lY2hhcnRzLnJlZ2lzdGVyVGhlbWUoJ3JlcG9ydCcsIHtcbiAgY29sb3I6IFJFUE9SVF9DSEFSVF9DT0xPUlNfQ1NTLFxuICB0ZXh0U3R5bGU6IHtcbiAgICBmb250RmFtaWx5OiBSRVBPUlRfQ0hBUlRfRk9OVF9GQU1JTFksXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgdGV4dFN0eWxlOiB7IGNvbG9yOiAnIzFmMjkzMycsIGZvbnRTaXplOiAxNCwgZm9udFdlaWdodDogNjAwIH0sXG4gIH0sXG4gIGxlZ2VuZDoge1xuICAgIHRleHRTdHlsZTogeyBjb2xvcjogJyM1MjYwNmQnLCBmb250U2l6ZTogMTEgfSxcbiAgfSxcbiAgdG9vbHRpcDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMzEsIDQxLCA1MSwgMC45MiknLFxuICAgIGJvcmRlcldpZHRoOiAwLFxuICAgIHRleHRTdHlsZTogeyBjb2xvcjogJyNmZmYnLCBmb250U2l6ZTogMTIgfSxcbiAgfSxcbiAgY2F0ZWdvcnlBeGlzOiB7XG4gICAgYXhpc0xpbmU6IHsgbGluZVN0eWxlOiB7IGNvbG9yOiAnI2NiZDJkOScgfSB9LFxuICAgIGF4aXNUaWNrOiB7IHNob3c6IGZhbHNlIH0sXG4gICAgYXhpc0xhYmVsOiB7IGNvbG9yOiAnIzUyNjA2ZCcsIGZvbnRTaXplOiBSRVBPUlRfQVhJU19MQUJFTF9GT05UX1NJWkUgfSxcbiAgICBzcGxpdExpbmU6IHsgc2hvdzogZmFsc2UgfSxcbiAgfSxcbiAgdmFsdWVBeGlzOiB7XG4gICAgYXhpc0xpbmU6IHsgc2hvdzogZmFsc2UgfSxcbiAgICBheGlzTGFiZWw6IHsgY29sb3I6ICcjNTI2MDZkJywgZm9udFNpemU6IFJFUE9SVF9BWElTX0xBQkVMX0ZPTlRfU0laRSB9LFxuICAgIHNwbGl0TGluZTogeyBsaW5lU3R5bGU6IHsgY29sb3I6ICcjZTRlN2ViJyB9IH0sXG4gIH0sXG4gIHRpbWVBeGlzOiB7XG4gICAgYXhpc0xpbmU6IHsgbGluZVN0eWxlOiB7IGNvbG9yOiAnI2NiZDJkOScgfSB9LFxuICAgIGF4aXNMYWJlbDogeyBjb2xvcjogJyM1MjYwNmQnLCBmb250U2l6ZTogUkVQT1JUX0FYSVNfTEFCRUxfRk9OVF9TSVpFIH0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZWNoYXJ0cztcbiJdfQ==
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ReportChartColor } from '../enums/report-chart-color.enum';
|
|
1
2
|
// The report chart palette — one definition shared by the ECharts theme (on
|
|
2
3
|
// screen), the PowerPoint export's native chart colors, and the PDF export,
|
|
3
4
|
// so a series keeps its color across every medium.
|
|
@@ -7,6 +8,23 @@ export const REPORT_CHART_COLORS = [
|
|
|
7
8
|
];
|
|
8
9
|
// CSS-hex form for ECharts.
|
|
9
10
|
export const REPORT_CHART_COLORS_CSS = REPORT_CHART_COLORS.map((color) => `#${color}`);
|
|
11
|
+
// A measure's named color is the palette entry at the name's position, so a
|
|
12
|
+
// measure colored blue looks exactly like the first series left to the theme.
|
|
13
|
+
export const REPORT_CHART_COLOR_BY_NAME = {
|
|
14
|
+
[ReportChartColor.Blue]: REPORT_CHART_COLORS[0],
|
|
15
|
+
[ReportChartColor.Orange]: REPORT_CHART_COLORS[1],
|
|
16
|
+
[ReportChartColor.Red]: REPORT_CHART_COLORS[2],
|
|
17
|
+
[ReportChartColor.Teal]: REPORT_CHART_COLORS[3],
|
|
18
|
+
[ReportChartColor.Green]: REPORT_CHART_COLORS[4],
|
|
19
|
+
[ReportChartColor.Yellow]: REPORT_CHART_COLORS[5],
|
|
20
|
+
[ReportChartColor.Purple]: REPORT_CHART_COLORS[6],
|
|
21
|
+
[ReportChartColor.Pink]: REPORT_CHART_COLORS[7],
|
|
22
|
+
[ReportChartColor.Brown]: REPORT_CHART_COLORS[8],
|
|
23
|
+
[ReportChartColor.Gray]: REPORT_CHART_COLORS[9],
|
|
24
|
+
};
|
|
25
|
+
// Reference lines and bands are drawn in one neutral slate, apart from every
|
|
26
|
+
// series color, so a target never reads as another series.
|
|
27
|
+
export const REPORT_REFERENCE_COLOR = '52606d';
|
|
10
28
|
// A waterfall colors each bar by what it does to the running total, in the
|
|
11
29
|
// order Excel and PowerPoint use by default: a rise takes the first series
|
|
12
30
|
// color, a fall the second, and the closing total a neutral gray.
|
|
@@ -15,4 +33,4 @@ export const REPORT_WATERFALL_COLORS = {
|
|
|
15
33
|
fall: REPORT_CHART_COLORS[1],
|
|
16
34
|
total: REPORT_CHART_COLORS[9],
|
|
17
35
|
};
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFsZXR0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy90aGVtZS9wYWxldHRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBSXBFLDRFQUE0RTtBQUM1RSw0RUFBNEU7QUFDNUUsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0lBQ2hELFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0NBQ2pELENBQUM7QUFFRiw0QkFBNEI7QUFDNUIsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7QUFFdkYsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBcUM7SUFDMUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7Q0FDaEQsQ0FBQztBQUVGLDZFQUE2RTtBQUM3RSwyREFBMkQ7QUFDM0QsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDO0FBRS9DLDJFQUEyRTtBQUMzRSwyRUFBMkU7QUFDM0Usa0VBQWtFO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQztJQUN4RSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDNUIsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztDQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3J0Q2hhcnRDb2xvciB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1jb2xvci5lbnVtJztcbmltcG9ydCB7IFdhdGVyZmFsbFN0ZXBLaW5kIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcblxuXG4vLyBUaGUgcmVwb3J0IGNoYXJ0IHBhbGV0dGUg4oCUIG9uZSBkZWZpbml0aW9uIHNoYXJlZCBieSB0aGUgRUNoYXJ0cyB0aGVtZSAob25cbi8vIHNjcmVlbiksIHRoZSBQb3dlclBvaW50IGV4cG9ydCdzIG5hdGl2ZSBjaGFydCBjb2xvcnMsIGFuZCB0aGUgUERGIGV4cG9ydCxcbi8vIHNvIGEgc2VyaWVzIGtlZXBzIGl0cyBjb2xvciBhY3Jvc3MgZXZlcnkgbWVkaXVtLlxuZXhwb3J0IGNvbnN0IFJFUE9SVF9DSEFSVF9DT0xPUlMgPSBbXG4gICc0ZTc5YTcnLCAnZjI4ZTJiJywgJ2UxNTc1OScsICc3NmI3YjInLCAnNTlhMTRmJyxcbiAgJ2VkYzk0OCcsICdiMDdhYTEnLCAnZmY5ZGE3JywgJzljNzU1ZicsICdiYWIwYWMnLFxuXTtcblxuLy8gQ1NTLWhleCBmb3JtIGZvciBFQ2hhcnRzLlxuZXhwb3J0IGNvbnN0IFJFUE9SVF9DSEFSVF9DT0xPUlNfQ1NTID0gUkVQT1JUX0NIQVJUX0NPTE9SUy5tYXAoKGNvbG9yKSA9PiBgIyR7Y29sb3J9YCk7XG5cbi8vIEEgbWVhc3VyZSdzIG5hbWVkIGNvbG9yIGlzIHRoZSBwYWxldHRlIGVudHJ5IGF0IHRoZSBuYW1lJ3MgcG9zaXRpb24sIHNvIGFcbi8vIG1lYXN1cmUgY29sb3JlZCBibHVlIGxvb2tzIGV4YWN0bHkgbGlrZSB0aGUgZmlyc3Qgc2VyaWVzIGxlZnQgdG8gdGhlIHRoZW1lLlxuZXhwb3J0IGNvbnN0IFJFUE9SVF9DSEFSVF9DT0xPUl9CWV9OQU1FOiBSZWNvcmQ8UmVwb3J0Q2hhcnRDb2xvciwgc3RyaW5nPiA9IHtcbiAgW1JlcG9ydENoYXJ0Q29sb3IuQmx1ZV06IFJFUE9SVF9DSEFSVF9DT0xPUlNbMF0sXG4gIFtSZXBvcnRDaGFydENvbG9yLk9yYW5nZV06IFJFUE9SVF9DSEFSVF9DT0xPUlNbMV0sXG4gIFtSZXBvcnRDaGFydENvbG9yLlJlZF06IFJFUE9SVF9DSEFSVF9DT0xPUlNbMl0sXG4gIFtSZXBvcnRDaGFydENvbG9yLlRlYWxdOiBSRVBPUlRfQ0hBUlRfQ09MT1JTWzNdLFxuICBbUmVwb3J0Q2hhcnRDb2xvci5HcmVlbl06IFJFUE9SVF9DSEFSVF9DT0xPUlNbNF0sXG4gIFtSZXBvcnRDaGFydENvbG9yLlllbGxvd106IFJFUE9SVF9DSEFSVF9DT0xPUlNbNV0sXG4gIFtSZXBvcnRDaGFydENvbG9yLlB1cnBsZV06IFJFUE9SVF9DSEFSVF9DT0xPUlNbNl0sXG4gIFtSZXBvcnRDaGFydENvbG9yLlBpbmtdOiBSRVBPUlRfQ0hBUlRfQ09MT1JTWzddLFxuICBbUmVwb3J0Q2hhcnRDb2xvci5Ccm93bl06IFJFUE9SVF9DSEFSVF9DT0xPUlNbOF0sXG4gIFtSZXBvcnRDaGFydENvbG9yLkdyYXldOiBSRVBPUlRfQ0hBUlRfQ09MT1JTWzldLFxufTtcblxuLy8gUmVmZXJlbmNlIGxpbmVzIGFuZCBiYW5kcyBhcmUgZHJhd24gaW4gb25lIG5ldXRyYWwgc2xhdGUsIGFwYXJ0IGZyb20gZXZlcnlcbi8vIHNlcmllcyBjb2xvciwgc28gYSB0YXJnZXQgbmV2ZXIgcmVhZHMgYXMgYW5vdGhlciBzZXJpZXMuXG5leHBvcnQgY29uc3QgUkVQT1JUX1JFRkVSRU5DRV9DT0xPUiA9ICc1MjYwNmQnO1xuXG4vLyBBIHdhdGVyZmFsbCBjb2xvcnMgZWFjaCBiYXIgYnkgd2hhdCBpdCBkb2VzIHRvIHRoZSBydW5uaW5nIHRvdGFsLCBpbiB0aGVcbi8vIG9yZGVyIEV4Y2VsIGFuZCBQb3dlclBvaW50IHVzZSBieSBkZWZhdWx0OiBhIHJpc2UgdGFrZXMgdGhlIGZpcnN0IHNlcmllc1xuLy8gY29sb3IsIGEgZmFsbCB0aGUgc2Vjb25kLCBhbmQgdGhlIGNsb3NpbmcgdG90YWwgYSBuZXV0cmFsIGdyYXkuXG5leHBvcnQgY29uc3QgUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlM6IFJlY29yZDxXYXRlcmZhbGxTdGVwS2luZCwgc3RyaW5nPiA9IHtcbiAgcmlzZTogUkVQT1JUX0NIQVJUX0NPTE9SU1swXSxcbiAgZmFsbDogUkVQT1JUX0NIQVJUX0NPTE9SU1sxXSxcbiAgdG90YWw6IFJFUE9SVF9DSEFSVF9DT0xPUlNbOV0sXG59O1xuIl19
|
|
@@ -3,4 +3,7 @@
|
|
|
3
3
|
// leaves around the labels matches what is drawn.
|
|
4
4
|
export const REPORT_CHART_FONT_FAMILY = 'Roboto, "Helvetica Neue", sans-serif';
|
|
5
5
|
export const REPORT_AXIS_LABEL_FONT_SIZE = 11;
|
|
6
|
-
|
|
6
|
+
// The size a chart's data labels (the values printed beside its points) are
|
|
7
|
+
// drawn in: a step under the axis labels, so they never outweigh the axes.
|
|
8
|
+
export const REPORT_DATA_LABEL_FONT_SIZE = 10;
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwb2dyYXBoeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy90aGVtZS90eXBvZ3JhcGh5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdGQUFnRjtBQUNoRiw4RUFBOEU7QUFDOUUsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLHNDQUFzQyxDQUFDO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUM5Qyw0RUFBNEU7QUFDNUUsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSByZXBvcnQgY2hhcnRzJyB0eXBlZmFjZSBhbmQgYXhpcy1sYWJlbCBzaXplLiBUaGUgRUNoYXJ0cyB0aGVtZSBkcmF3cyB3aXRoXG4vLyB0aGVtLCBhbmQgdGhlIG9wdGlvbiBidWlsZGVyIG1lYXN1cmVzIGF4aXMgbGFiZWxzIHdpdGggdGhlbSwgc28gdGhlIHJvb20gaXRcbi8vIGxlYXZlcyBhcm91bmQgdGhlIGxhYmVscyBtYXRjaGVzIHdoYXQgaXMgZHJhd24uXG5leHBvcnQgY29uc3QgUkVQT1JUX0NIQVJUX0ZPTlRfRkFNSUxZID0gJ1JvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmJztcbmV4cG9ydCBjb25zdCBSRVBPUlRfQVhJU19MQUJFTF9GT05UX1NJWkUgPSAxMTtcbi8vIFRoZSBzaXplIGEgY2hhcnQncyBkYXRhIGxhYmVscyAodGhlIHZhbHVlcyBwcmludGVkIGJlc2lkZSBpdHMgcG9pbnRzKSBhcmVcbi8vIGRyYXduIGluOiBhIHN0ZXAgdW5kZXIgdGhlIGF4aXMgbGFiZWxzLCBzbyB0aGV5IG5ldmVyIG91dHdlaWdoIHRoZSBheGVzLlxuZXhwb3J0IGNvbnN0IFJFUE9SVF9EQVRBX0xBQkVMX0ZPTlRfU0laRSA9IDEwO1xuIl19
|
|
@@ -548,4 +548,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
548
548
|
type: ViewChild,
|
|
549
549
|
args: [ReportCanvasComponent]
|
|
550
550
|
}] } });
|
|
551
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtYWktcmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvZnMtYWktcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvZnMtYWktcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQzFELFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQ3RHLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQVUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFnQixjQUFjLEVBQXFCLE1BQU0sb0JBQW9CLENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FB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RUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztxQkFDdEcsV0FDUTt3QkFDUCxjQUFjO3dCQUNkLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixxQkFBcUI7cUJBQ3RCO3dEQTZHTyxNQUFNO3NCQURiLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJNUIsVUFBVTtzQkFEakIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBTWxELE9BQU87c0JBRGQsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBOZ1pvbmUsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgRmlsdGVyQ29uZmlnLCBGc0ZpbHRlck1vZHVsZSwgSUZpbHRlckNvbmZpZ0l0ZW0gfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNNZW51TW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVudSc7XG5pbXBvcnQgeyBGc1Byb2Nlc3MgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9jZXNzJztcblxuaW1wb3J0IHsgU3ViamVjdCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGF1ZGl0VGltZSwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgcHJvdmlkZUVjaGFydHNDb3JlIH0gZnJvbSAnbmd4LWVjaGFydHMnO1xuXG5pbXBvcnQgeyBGc0FpQ2hhdENvbXBvbmVudCwgRnNBaUNoYXREYXRhLCBGc0FpQ2hhdFJlc3BvbnNlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvYWknO1xuXG5pbXBvcnQgeyBSZXBvcnRDYW52YXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3JlcG9ydC1jYW52YXMvcmVwb3J0LWNhbnZhcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0QWlDaGF0RGF0YSB9IGZyb20gJy4uLy4uL2RhdGEvcmVwb3J0LWFpLWNoYXQuZGF0YSc7XG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQgeyBDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCwgQ29tcG9uZW50U2V0dGluZ3NSZXN1bHQgfSBmcm9tICcuLi8uLi9kaWFsb2dzL2NvbXBvbmVudC1zZXR0aW5ncy9jb21wb25lbnQtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCBSZXBvcnRTZXR0aW5nc1Jlc3VsdCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvcmVwb3J0LXNldHRpbmdzL3JlcG9ydC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL2V4cG9ydC9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBkZlNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXBkZi5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBwdHhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC1wcHR4LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0VGltZXpvbmVMYWJlbCB9IGZyb20gJy4uLy4uL2Zvcm1hdCc7XG5pbXBvcnQgeyBSZXBvcnRDaGF0Vmlld2VyU3RhdGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1jaGF0LXZpZXdlci1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQ2hhcnRHcmFudWxhcml0eSwgUmVwb3J0LCBSZXBvcnRDaGF0UmVzcG9uc2UsXG4gIFJlcG9ydENvbXBvbmVudCBhcyBSZXBvcnRDb21wb25lbnRNb2RlbCwgUmVwb3J0RmlsdGVyR3JvdXAsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBHUk9VUF9CWV9JVEVNLCBmaWx0ZXJJdGVtRm9yR3JvdXAsIGdyb3VwQnlGaWx0ZXJJdGVtLCBncm91cEJ5U2lnbmF0dXJlLCBncm91cFZhbHVlc0Zyb21RdWVyeSxcbiAgaXNHcmFudWxhcml0eU9mZmVyZWQsXG59IGZyb20gJy4uLy4uL3JlcG9ydC1maWx0ZXItaXRlbXMnO1xuaW1wb3J0IHsgYnVpbGRSZXBvcnRVcmxQYXJhbXMsIHJlYWRSZXBvcnRVcmxQYXJhbXMgfSBmcm9tICcuLi8uLi9yZXBvcnQtdXJsLXN0YXRlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSwgZGVmYXVsdFNpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItc3RhdGUuc2VydmljZSc7XG5cblxuLy8gQSBzaW5nbGUgcmVwb3J0OiB0aGUgQUkgY2hhdCBvbiB0aGUgbGVmdCwgdGhlIHJlcG9ydCBjYW52YXMgb24gdGhlIHJpZ2h0LFxuLy8gdW5kZXIgYW4gSDIgdGl0bGUgKyBzZXR0aW5ncyBnZWFyLiBUaGUgaG9zdCBzdXBwbGllcyBbcmVwb3J0SWRdIChmcm9tIGl0c1xuLy8gcm91dGUpIGFuZCBzd2l0Y2hlcyByZXBvcnRzIHRocm91Z2ggaXRzIG93biByb3V0ZXMg4oCUIHRoaXMgY29tcG9uZW50IG5ldmVyXG4vLyBwaWNrcyBvbmUuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1haS1yZXBvcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZnMtYWktcmVwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZnMtYWktcmVwb3J0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIHByb3ZpZGVyczogW1xuICAgIC8vIFNlc3Npb24gZmlsdGVyIHN0YXRlIGlzIHBlci1vcGVuLXJlcG9ydCwgbm90IGFwcC1nbG9iYWw7IHRoZSBleHBvcnRcbiAgICAvLyBzZXJ2aWNlcyByZXNvbHZlIGZpbHRlcnMgdGhyb3VnaCBpdCwgc28gdGhleSBsaXZlIGF0IHRoZSBzYW1lIGxldmVsLlxuICAgIFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSxcbiAgICBSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlLFxuICAgIFJlcG9ydFBwdHhTZXJ2aWNlLFxuICAgIFJlcG9ydFBkZlNlcnZpY2UsXG4gICAgUmVwb3J0RXhwb3J0U2VydmljZSxcbiAgICAvLyBmcy1haS1jaGF0IHNpdHMgaW4gdGhpcyB0ZW1wbGF0ZSwgc28gaXQgcmVzb2x2ZXMgaXRzIGdhdGV3YXkgaGVyZTogdGhlXG4gICAgLy8gcmVwb3J0IG9uZSwgd2hpY2ggYWRkcyB0aGUgdmlld2VyJ3Mgc3RhdGUgdG8gZWFjaCB0dXJuIGl0IHNlbmRzLlxuICAgIFJlcG9ydEFpQ2hhdERhdGEsXG4gICAgeyBwcm92aWRlOiBGc0FpQ2hhdERhdGEsIHVzZUV4aXN0aW5nOiBSZXBvcnRBaUNoYXREYXRhIH0sXG4gICAgLy8gVHJlZS1zaGFrZW4gRUNoYXJ0cyBjb3JlICsgdGhlICdyZXBvcnQnIGhvdXNlIHRoZW1lLCBsb2FkZWQgbGF6aWx5LlxuICAgIHByb3ZpZGVFY2hhcnRzQ29yZSh7IGVjaGFydHM6ICgpID0+IGltcG9ydCgnLi4vLi4vdGhlbWUvZWNoYXJ0cycpLnRoZW4oKG1vZHVsZSkgPT4gbW9kdWxlLmRlZmF1bHQpIH0pLFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgRnNGaWx0ZXJNb2R1bGUsXG4gICAgRnNNZW51TW9kdWxlLFxuICAgIEZzQWlDaGF0Q29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgUmVwb3J0Q2FudmFzQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0FpUmVwb3J0Q29tcG9uZW50IHtcblxuICAvLyBUaGUgcmVwb3J0IHRoaXMgdmlldyBpcyBmb2N1c2VkIG9uIOKAlCBzdXBwbGllZCBieSB0aGUgaG9zdCBmcm9tIHRoZSByb3V0ZS5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydElkID0gaW5wdXQ8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gQVBJIGJhc2UgZm9yIHRoZSByZXBvcnRzICsgY2hhdCBlbmRwb2ludHM7IG92ZXJyaWRlIHRvIG1vdW50IGVsc2V3aGVyZS5cbiAgcHVibGljIHJlYWRvbmx5IGJhc2VQYXRoID0gaW5wdXQ8c3RyaW5nPigncmVwb3J0cycpO1xuXG4gIC8vIFRoZSBxdWVyeSBwYXJhbSB0aGF0IGNhcnJpZXMgdGhlIG9wZW4gcGFnZSdzIGlkLiBEZWVwIGxpbmtpbmcgaXMgb24gYnlcbiAgLy8gZGVmYXVsdDsgYSBob3N0IHRoYXQgbW91bnRzIHNldmVyYWwgcmVwb3J0cyBvbiBvbmUgcm91dGUsIG9yIHdhbnRzIG5vIFVSTFxuICAvLyB3cml0ZXMgYXQgYWxsLCBzZXRzIHRoaXMgdG8gbnVsbCB0byB0dXJuIGl0IG9mZi5cbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VRdWVyeVBhcmFtID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4oJ3BhZ2UnKTtcblxuICAvLyBXaGV0aGVyIHRoZSB2aWV3ZXIncyBmaWx0ZXJzLCBncm91cC1ieSBncmFpbiBhbmQgbGlzdCBzb3J0cyBsaXZlIGluIHRoZSBVUkxcbiAgLy8gKGc8Z3JvdXBJZD4sIGdyb3VwQnksIHM8Y29tcG9uZW50SWQ+OyBzZWUgcmVwb3J0LXVybC1zdGF0ZS50cyksIHNvIGFcbiAgLy8gcmVmcmVzaCBvciBhIHNoYXJlZCBsaW5rIG9wZW5zIHRoZSByZXBvcnQgYXMgaXQgd2FzIHNlZW4uIE9uIGJ5IGRlZmF1bHQ7IGFcbiAgLy8gaG9zdCB0aGF0IG1vdW50cyBzZXZlcmFsIHJlcG9ydHMgb24gb25lIHJvdXRlLCBvciB1c2VzIHF1ZXJ5IGtleXMgc2hhcGVkXG4gIC8vIGxpa2UgZzxuPiBvciBzPG4+IGl0c2VsZiwgdHVybnMgaXQgb2ZmLlxuICBwdWJsaWMgcmVhZG9ubHkgdXJsU3RhdGUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAvLyBUaGUgcmVwb3J0IHdhcyBkZWxldGVkIGZyb20gaXRzIHNldHRpbmdzIGRpYWxvZyDigJQgdGhlIGhvc3Qgcm91dGVzIGJhY2sgdG9cbiAgLy8gdGhlIGxpc3RpbmcuXG4gIHB1YmxpYyByZWFkb25seSBkZWxldGVkID0gb3V0cHV0PG51bWJlcj4oKTtcblxuICAvLyBUaGUgcmVwb3J0IHdhcyByZW5hbWVkIChzZXR0aW5ncywgb3IgdGhlIGFnZW50KSDigJQgdGhlIGhvc3QgY2FuIHJlZnJlc2ggYVxuICAvLyBicmVhZGNydW1iIC8gZG9jdW1lbnQgdGl0bGUuXG4gIHB1YmxpYyByZWFkb25seSByZW5hbWVkID0gb3V0cHV0PFJlcG9ydD4oKTtcblxuICAvLyBUaGUgdmlld2VyIG1vdmVkIHRvIGFub3RoZXIgcGFnZS4gVGhpcyB2aWV3IHdyaXRlcyB0aGUgVVJMIGl0c2VsZiAocmlnaHRcbiAgLy8gYWZ0ZXIgdGhpcyBmaXJlcykg4oCUIHRoaXMgaXMgZm9yIGhvc3RzIHRoYXQgdHJhY2sgdGhlIG9wZW4gcGFnZSBmb3IgdGhlaXJcbiAgLy8gb3duIHJlYXNvbnMuXG4gIHB1YmxpYyByZWFkb25seSBwYWdlQ2hhbmdlZCA9IG91dHB1dDxudW1iZXIgfCBudWxsPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSByZXBvcnQgPSBzaWduYWw8UmVwb3J0IHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBlZGl0TW9kZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLy8gVGhlIHRvb2xiYXIncyB6b25lIGluZGljYXRvciAoJ05ldyBZb3JrIChFRFQpJyk6IHRoZSB6b25lIGV2ZXJ5IGRhdGUgaW5cbiAgLy8gdGhpcyByZXBvcnQgaXMgZmlsdGVyZWQgYW5kIGdyb3VwZWQgaW4uIEVtcHR5IHdoZW4gdGhlIHNlcnZlciBpcyB0b28gb2xkXG4gIC8vIHRvIHNlbmQgdGhlIGVmZmVjdGl2ZSB6b25lLCBhbmQgdGhlIGluZGljYXRvciBpcyBub3Qgc2hvd24uXG4gIHB1YmxpYyByZWFkb25seSB0aW1lem9uZUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGVmZmVjdGl2ZVRpbWV6b25lID0gdGhpcy5yZXBvcnQoKT8uZWZmZWN0aXZlVGltZXpvbmU7XG5cbiAgICByZXR1cm4gZWZmZWN0aXZlVGltZXpvbmUgPyBnZXRUaW1lem9uZUxhYmVsKGVmZmVjdGl2ZVRpbWV6b25lKSA6ICcnO1xuICB9KTtcblxuICAvLyBUaGUgcGFnZSB0aGUgY2FudmFzIHNob3VsZCBvcGVuIG9uLCByZWFkIGZyb20gdGhlIFVSTCBvbmNlIHBlciByZXBvcnQuXG4gIC8vIENsZWFyZWQgYXMgc29vbiBhcyB0aGUgY2FudmFzIHJlcG9ydHMgYmFjaywgc28gYSBsYXRlciBpbi1hcHAgcGFnZSBjaGFuZ2VcbiAgLy8gaXMgbmV2ZXIgZm91Z2h0IGJ5IGEgc3RhbGUgdmFsdWUuXG4gIHB1YmxpYyByZWFkb25seSBwYWdlSWQgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gVGhlIHBhZ2UgdGhlIGNoYXQgaXMgYm91bmQgdG86IHRoZSBvbmUgb24gc2NyZWVuLiBBIHJlcG9ydCBjb252ZXJzYXRpb25cbiAgLy8gYmVsb25ncyB0byBleGFjdGx5IG9uZSBwYWdlLCBzbyB0aGlzIGJvdGggc2NvcGVzIHRoZSBjb252ZXJzYXRpb24gbGlzdCBhbmRcbiAgLy8gYmVjb21lcyB0aGUgbmV3IGNvbnZlcnNhdGlvbidzIHBhZ2UuIEEgc2lnbmFsIGJlY2F1c2UgaXQgZmVlZHNcbiAgLy8gW3JlcXVlc3REYXRhXSDigJQgY2hhbmdpbmcgaXQgaXMgd2hhdCByZWxvYWRzIHRoZSBwYW5lbCBvbnRvIHRoZSBuZXcgcGFnZSdzXG4gIC8vIGNvbnZlcnNhdGlvbnMuIE51bGwgdW50aWwgdGhlIGNhbnZhcyByZXBvcnRzIHdoaWNoIHBhZ2UgaXQgb3BlbmVkIG9uLCB3aGljaFxuICAvLyBrZWVwcyB0aGUgY2hhdCBmcm9tIGxpc3RpbmcgYWdhaW5zdCBhIHBhZ2UgZ3Vlc3MuXG4gIHB1YmxpYyByZWFkb25seSBjaGF0UGFnZUlkID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIC8vIFdoYXQgdGhlIGNoYXQgc2VuZHMgd2l0aCBldmVyeSBjb252ZXJzYXRpb24gY2FsbDogdGhlIHJlcG9ydCwgYW5kIHRoZSBwYWdlXG4gIC8vIGl0IGlzIGJvdW5kIHRvLlxuICAvL1xuICAvLyByZXBvcnRQYWdlSWQgaXMgT01JVFRFRCwgbm90IHNlbnQgYXMgbnVsbCwgd2hpbGUgdGhlIG9wZW4gcGFnZSBpcyB1bmtub3duLlxuICAvLyBUaGUgYmFja2VuZCByZWFkcyBhIFBSRVNFTlQgcmVwb3J0UGFnZUlkIG9mIDAvbnVsbCBhcyBcInRoZSByZXBvcnQncyBlYXJsaWVyLFxuICAvLyBwYWdlLWxlc3MgY29udmVyc2F0aW9uc1wiLCBzbyBzZW5kaW5nIG51bGwgYmVmb3JlIHRoZSBjYW52YXMgaGFzIHJlcG9ydGVkIGluXG4gIC8vIHdvdWxkIGFzayBmb3IgdGhlIHdyb25nIGxpc3Qg4oCUIGFuZCwgd29yc2UsIHdvdWxkIGJpbmQgYSBjb252ZXJzYXRpb24gc3RhcnRlZFxuICAvLyBpbiB0aGF0IHdpbmRvdyB0byBubyBwYWdlIGF0IGFsbC5cbiAgLy9cbiAgLy8gVGhlIGNoYXQgaXMgYWxzbyBoZWxkIGNsb3NlZCAoW3JlYWR5XSBpbiB0aGUgdGVtcGxhdGUpIHVudGlsIHRoZSBwYWdlIGlzXG4gIC8vIGtub3duLCBzbyB0aGlzIHBhcnRpYWwgY29udGV4dCBpcyBuZXZlciBhY3R1YWxseSBzZW50OiBvbiBhIGZyZXNoIGxvYWQgdGhlXG4gIC8vIHJlcG9ydCBoYXMgdG8gYXJyaXZlIGFuZCB0aGUgY2FudmFzIGhhcyB0byByZW5kZXIgYmVmb3JlIGFueSBwYWdlIGV4aXN0cyxcbiAgLy8gYW5kIGEgbGlzdCBmZXRjaGVkIGluIHRoYXQgd2luZG93IHdvdWxkIGJlIHRoZSB3aG9sZSByZXBvcnQncyBjb252ZXJzYXRpb25zXG4gIC8vIOKAlCB0aGUgdW5zY29wZWQgbGlzdCwgc2hvd24gYW5kIGF1dG8tc2VsZWN0ZWQgYmVmb3JlIHRoZSByZWFsIG9uZSBsYW5kcy5cbiAgcHVibGljIHJlYWRvbmx5IGNoYXRSZXF1ZXN0RGF0YSA9IGNvbXB1dGVkPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigoKSA9PiB7XG4gICAgY29uc3QgcmVwb3J0UGFnZUlkID0gdGhpcy5jaGF0UGFnZUlkKCk7XG5cbiAgICByZXR1cm4gcmVwb3J0UGFnZUlkID09PSBudWxsXG4gICAgICA/IHsgcmVwb3J0SWQ6IHRoaXMucmVwb3J0SWQoKSB9XG4gICAgICA6IHsgcmVwb3J0SWQ6IHRoaXMucmVwb3J0SWQoKSwgcmVwb3J0UGFnZUlkIH07XG4gIH0pO1xuXG4gIC8vIFRoZSByZXBvcnQtbGV2ZWwgZmlsdGVyIHRvb2xiYXIgKGZzLWZpbHRlcikuIFJlYnVpbHQgd2hlbmV2ZXIgdGhlIGxvYWRlZFxuICAvLyByZXBvcnQgKGFuZCB0aHVzIGl0cyBncm91cHMpIGNoYW5nZXMuXG4gIHB1YmxpYyByZWFkb25seSByZXBvcnRGaWx0ZXJDb25maWcgPSBzaWduYWw8RmlsdGVyQ29uZmlnIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gR2F0ZXMgdGhlIHRvb2xiYXIgZnMtZmlsdGVyIHNvIGl0IGlzbid0IHJlbmRlcmVkIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0b1xuICAvLyBwdXQgaW4gaXQg4oCUIG5vIHJlcG9ydC1sZXZlbCBmaWx0ZXJzIGFuZCBubyBncm91cC1ieSBjb250cm9sLlxuICBwdWJsaWMgcmVhZG9ubHkgcmVwb3J0SGFzRmlsdGVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0R3JvdXBzKCkubGVuZ3RoID4gMCB8fCAhIXRoaXMuX2dyb3VwQnlJdGVtKCk7XG4gIH0pO1xuXG4gIC8vIGZzLWZpbHRlciByZWFkcyBpdHMgY29uZmlnIG9ubHkgb25jZSAoYXQgaW5pdCkuIFRoZSB0ZW1wbGF0ZSBrZXlzIHRoZVxuICAvLyB0b29sYmFyIGZzLWZpbHRlciBvbiB0aGlzIHNpZ25hdHVyZSBzbyBpdCdzIHJlY3JlYXRlZCAoYW5kIHJlLXJlYWRzIHRoZVxuICAvLyByZWJ1aWx0IGNvbmZpZykgd2hlbmV2ZXIgdGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXIgc2V0IGNoYW5nZXMuXG4gIHB1YmxpYyByZWFkb25seSByZXBvcnRGaWx0ZXJLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIFRoZSBlZmZlY3RpdmUgem9uZSBpcyBwYXJ0IG9mIGl0IHRvbzogYSB6b25lIGNoYW5nZSByZS1yZXNvbHZlcyByZWxhdGl2ZVxuICAgICAgLy8gcHJlc2V0cywgYW5kIHRoZSBiYXIgbXVzdCBiZSByZWNyZWF0ZWQgdG8gc2hvdyB0aGUgbmV3IGRheXMuXG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS50aW1lem9uZSgpLFxuICAgICAgLy8gVGhlIHN0b3JlZCBkZWZhdWx0IGlzIHBhcnQgb2YgdGhlIHNpZ25hdHVyZTogc2F2aW5nIGEgbmV3IGRlZmF1bHQgaW4gcmVwb3J0XG4gICAgICAvLyBzZXR0aW5ncyByZWJ1aWxkcyB0aGUgY29uZmlnLCBidXQgd2l0aG91dCBhIGtleSBjaGFuZ2UgZnMtZmlsdGVyIGtlZXBzXG4gICAgICAvLyByZW5kZXJpbmcgdGhlIHZhbHVlcyBpdCB3YXMgY3JlYXRlZCB3aXRoIHVudGlsIGEgZnVsbCBwYWdlIHJlbG9hZC5cbiAgICAgIGdyb3VwQnlTaWduYXR1cmUodGhpcy5yZXBvcnQoKSksXG4gICAgICAuLi50aGlzLl9yZXBvcnRHcm91cHMoKS5tYXAoKGdyb3VwKSA9PiBgJHtncm91cC5pZH06JHtncm91cC5sZXZlbH06JHtncm91cC5sYWJlbH06JHtkZWZhdWx0U2lnbmF0dXJlKGdyb3VwKX1gKSxcbiAgICBdLmpvaW4oJ3wnKTtcbiAgfSk7XG5cbiAgQFZpZXdDaGlsZCgnc3BsaXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIF9zcGxpdCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2NoYXRQYW5lbCcsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgX2NoYXRQYW5lbCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIC8vIE9ubHkgdGhlIGNhbnZhcyBrbm93cyB3aGljaCBwYWdlIGlzIG9uIHNjcmVlbiwgYW5kIGEgcGFnZS1zY29wZWQgZXhwb3J0XG4gIC8vIGhhcyB0byBhc2sgaXQuXG4gIEBWaWV3Q2hpbGQoUmVwb3J0Q2FudmFzQ29tcG9uZW50KVxuICBwcml2YXRlIF9jYW52YXM/OiBSZXBvcnRDYW52YXNDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSBfcmVwb3J0QWlDaGF0RGF0YSA9IGluamVjdChSZXBvcnRBaUNoYXREYXRhKTtcbiAgcHJpdmF0ZSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgX3JvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBfZmlsdGVyU3RhdGUgPSBpbmplY3QoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZXhwb3J0U2VydmljZSA9IGluamVjdChSZXBvcnRFeHBvcnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfY29sbGVjdG9yID0gaW5qZWN0KFJlcG9ydEV4cG9ydENvbGxlY3RvclNlcnZpY2UpO1xuICBwcml2YXRlIF9wcm9jZXNzID0gaW5qZWN0KEZzUHJvY2Vzcyk7XG4gIHByaXZhdGUgX2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIF96b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgLy8gVGhlIHJlcG9ydCB3aG9zZSBVUkwgc3RhdGUgaGFzIGJlZW4gcmVhZC4gVGhlIFVSTCBpcyByZWFkIG9ubHkgb24gYVxuICAvLyByZXBvcnQncyBmaXJzdCBsb2FkOyBhIHJlbG9hZCBhZnRlciBhIGNoYXQgb3IgZGlhbG9nIGVkaXQga2VlcHMgdGhlIHN0YXRlXG4gIC8vIGluIG1lbW9yeSwgd2hpY2ggaXMgbmV3ZXIgdGhhbiBhbnl0aGluZyB0aGUgVVJMIGhvbGRzLlxuICBwcml2YXRlIF9yZXN0b3JlZFJlcG9ydElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvLyBXaGV0aGVyIHRoZSBjYW52YXMgaGFzIHJlcG9ydGVkIHRoZSBvcGVuIHBhZ2UgZm9yIHRoaXMgcmVwb3J0LiBVbnRpbCBpdFxuICAvLyBoYXMsIHRoZSBwYWdlIHBhcmFtIGluIHRoZSBVUkwgaXMgdGhlIGRlZXAgbGluayBzdGlsbCBiZWluZyBob25vcmVkLCBhbmRcbiAgLy8gdGhlIFVSTCB3cml0ZXIgbGVhdmVzIGl0IGFsb25lLlxuICBwcml2YXRlIF9wYWdlUmVwb3J0ZWQgPSBmYWxzZTtcblxuICAvLyBUaGUgY2FudmFzIG1vdmVkIHRvIGFub3RoZXIgcGFnZS4gTWVyZ2VkIGludG8gdGhlIHNpbmdsZSBVUkwgd3JpdGVyLlxuICBwcml2YXRlIF9wYWdlV3JpdGUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBFYWNoIGNoYXQgdHVybiBjYXJyaWVzIHdoYXQgdGhlIHZpZXdlciBoYXMgb24gc2NyZWVuLiBPbmx5IHRoZSBmdW5jdGlvblxuICAgIC8vIGlzIHNldCBoZXJlOyBpdCBpcyBjYWxsZWQgd2hlbiBhIHR1cm4gaXMgc2VudC5cbiAgICB0aGlzLl9yZXBvcnRBaUNoYXREYXRhLnR1cm5EYXRhID0gKCkgPT4gKHsgdmlld2VyU3RhdGU6IHRoaXMuX2NoYXRWaWV3ZXJTdGF0ZSgpIH0pO1xuXG4gICAgLy8gVGhlIE9ORSB3cml0ZXIgb2YgdGhpcyB2aWV3J3MgcXVlcnkgcGFyYW1zLiBQYWdlIG1vdmVzIGFuZCB2aWV3ZXItc3RhdGVcbiAgICAvLyBjaGFuZ2VzIGJvdGggZnVubmVsIGhlcmUsIGFuZCBhdWRpdFRpbWUoMCkgZm9sZHMgYSBidXJzdCAoYSBiYXIgcmUtc2V0c1xuICAgIC8vIGV2ZXJ5IGdyb3VwIGl0IHNob3dzKSBpbnRvIGEgc2luZ2xlIHdyaXRlLiBFdmVyeSB3cml0ZSBjYXJyaWVzIHRoZSB3aG9sZVxuICAgIC8vIHN0YXRlLCBzbyBhIHdyaXRlIHRoYXQgc3VwZXJzZWRlcyBhbm90aGVyIGxvc2VzIG5vdGhpbmcuXG4gICAgbWVyZ2UodGhpcy5fZmlsdGVyU3RhdGUudXJsQ2hhbmdlcygpLCB0aGlzLl9wYWdlV3JpdGUkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGF1ZGl0VGltZSgwKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX3dyaXRlVXJsKCkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAvLyBQb2ludCB0aGUgc2hhcmVkIGRhdGEgZ2F0ZXdheSBhdCB0aGUgY29uZmlndXJlZCBiYXNlIGZpcnN0IChiZWZvcmUgYW55XG4gICAgLy8gbG9hZCBiZWxvdyByZWFkcyBpdCkuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMuX3JlcG9ydERhdGEuYmFzZVBhdGggPSB0aGlzLmJhc2VQYXRoKCk7XG4gICAgfSk7XG5cbiAgICAvLyAoUmUpbG9hZCB3aGVuZXZlciB0aGUgaG9zdCBzd2l0Y2hlcyB0aGUgcmVwb3J0IGlkLlxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCByZXBvcnRJZCA9IHRoaXMucmVwb3J0SWQoKTtcblxuICAgICAgLy8gU2VlZCB0aGUgb3BlbiBwYWdlIGZyb20gdGhlIFVSTCBmb3IgdGhpcyByZXBvcnQuIFJlYWQgcGVyIGxvYWQgcmF0aGVyXG4gICAgICAvLyB0aGFuIG9uY2UgYXQgY29uc3RydWN0aW9uOiB0aGUgaG9zdCBtYXkgc3dhcCByZXBvcnRzIG9uIHRoZSBzYW1lIHJvdXRlLFxuICAgICAgLy8gYW5kIGVhY2ggYXJyaXZhbCBjYXJyaWVzIGl0cyBvd24gP3BhZ2U9LlxuICAgICAgY29uc3QgcGFnZUlkID0gdGhpcy5fcGFnZUlkRnJvbVVybCgpO1xuXG4gICAgICAvLyBPbmx5IHRoZSByZXBvcnQgaWQgYW5kIHRoZSBwYWdlIHBhcmFtIHJlLXJ1biB0aGlzLiBUaGUgdmlldyBzdGF0ZSBiZWxvd1xuICAgICAgLy8gaXMgd3JpdHRlbiBoZXJlIGFuZCByZWFkIGJ5IHRoZSBjb25maWcgYnVpbGQsIHNvIGl0IHN0YXlzIHVudHJhY2tlZC5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdE1vZGUuc2V0KGZhbHNlKTtcblxuICAgICAgICAvLyBBIG5ldyByZXBvcnQncyBwYWdlcyBhcmUgbm90IHRoaXMgcmVwb3J0J3MgcGFnZXMg4oCUIGRyb3AgdGhlIGJpbmRpbmdcbiAgICAgICAgLy8gdW50aWwgaXRzIGNhbnZhcyBzYXlzIHdoaWNoIHBhZ2UgaXQgbGFuZGVkIG9uLlxuICAgICAgICB0aGlzLmNoYXRQYWdlSWQuc2V0KG51bGwpO1xuICAgICAgICB0aGlzLnBhZ2VJZC5zZXQocGFnZUlkKTtcbiAgICAgICAgdGhpcy5fcGFnZVJlcG9ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHJlcG9ydElkICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydElkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb3JnZXQgdGhlIHJlc3RvcmVkIHJlcG9ydCwgc28gYSBob3N0IHRoYXQgY29tZXMgYmFjayB0byBpdCByZWFkc1xuICAgICAgICAgIC8vIHRoZSBVUkwgYWdhaW4uXG4gICAgICAgICAgdGhpcy5fcmVzdG9yZWRSZXBvcnRJZCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KG51bGwpO1xuICAgICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVFZGl0TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRNb2RlLnVwZGF0ZSgoZWRpdE1vZGUpID0+ICFlZGl0TW9kZSk7XG4gIH1cblxuICAvLyBUaGUgZWRpdCB0b29scyBsaXZlIGluIHRoaXMgdG9vbGJhciwgYnV0IHRoZSBjYW52YXMgb3ducyB3aGF0IHRoZXkgYWN0IG9uXG4gIC8vICh0aGUgYWN0aXZlIHBhZ2UsIHRoZSBoZWFkZXIvZm9vdGVyIGJhbmRzLCB3aGljaCBsYXllciBpcyBsaXZlKS5cbiAgcHVibGljIGdldCBpc01hc3Rlck1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbnZhcz8ubWFzdGVyTW9kZSgpID8/IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFkZFRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FudmFzPy5hZGRUZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlTWFzdGVyTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jYW52YXM/LnRvZ2dsZU1hc3Rlck1vZGUoKTtcbiAgfVxuXG4gIC8vIFJlcG9ydCBzZXR0aW5ncyDigJQgbmFtZSwgcGFnZSBzaXplLCBvcmllbnRhdGlvbiwgbGF5b3V0IG1vZGUsIGRlbGV0ZS4gVGhlXG4gIC8vIGRpYWxvZyBwZXJmb3JtcyB0aGUgZGVsZXRlIGl0c2VsZjsgd2UgcmVhY3QgdG8gd2hhdCBpdCByZXBvcnRzIGJhY2suXG4gIHB1YmxpYyByZXBvcnRTZXR0aW5ncygpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xuICAgIGlmICghcmVwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVwb3J0SWQgPSByZXBvcnQuaWQ7XG5cbiAgICB0aGlzLl9kaWFsb2cub3BlbjxSZXBvcnRTZXR0aW5nc0NvbXBvbmVudCwgdW5rbm93biwgUmVwb3J0U2V0dGluZ3NSZXN1bHQ+KFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7IHJlcG9ydCB9LFxuICAgICAgd2lkdGg6ICc0NjBweCcsXG4gICAgfSlcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdD8uYWN0aW9uID09PSAnZGVsZXRlZCcpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZWQuZW1pdChyZXBvcnRJZCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09ICdzYXZlZCcpIHtcbiAgICAgICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydElkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBDb21wb25lbnQgc2V0dGluZ3Mg4oCUIHRpdGxlLCBleGFjdCBnZW9tZXRyeSwgYW5kIHRoZSBkaWFnbm9zdGljIHZpZXdzXG4gIC8vIChTUUwsIGNvbmZpZywgZmlsdGVyIHdpcmluZykuXG4gIHB1YmxpYyBjb21wb25lbnRTZXR0aW5ncyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudE1vZGVsKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAoIXJlcG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcG9ydElkID0gcmVwb3J0LmlkO1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW48Q29tcG9uZW50U2V0dGluZ3NDb21wb25lbnQsIHVua25vd24sIENvbXBvbmVudFNldHRpbmdzUmVzdWx0PihcbiAgICAgIENvbXBvbmVudFNldHRpbmdzQ29tcG9uZW50LFxuICAgICAge1xuICAgICAgICBkYXRhOiB7IHJlcG9ydCwgY29tcG9uZW50IH0sXG4gICAgICAgIHdpZHRoOiAnNjQwcHgnLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gRmlsdGVyIGFkZC9yZW1vdmUvbGV2ZWwgY2hhbmdlcyBwZXJzaXN0IGltbWVkaWF0ZWx5IGluc2lkZSB0aGUgZGlhbG9nIChub1xuICAgIC8vIFwic2F2ZVwiKSBhbmQgY2FuIGxlYXZlIGl0IGJ5IGFuIGV4aXQgdGhhdCBjYXJyaWVzIG5vIHJlc3VsdCwgc28gdGhleSBhcmVcbiAgICAvLyBhbm5vdW5jZWQgYXMgdGhleSBsYW5kLiBUaGUgcmVsb2FkIHdhaXRzIGZvciB0aGUgY2xvc2Ugc28gdGhlIGNhbnZhcyBpc24ndFxuICAgIC8vIHJlLXJlbmRlcmluZyB1bmRlcm5lYXRoIGFuIG9wZW4gZGlhbG9nLlxuICAgIGxldCBmaWx0ZXJzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5maWx0ZXJzQ2hhbmdlZFxuICAgICAgLnBpcGUodGFrZVVudGlsKGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gZmlsdGVyc0NoYW5nZWQgPSB0cnVlKTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgLy8gVGhlIGRpYWxvZyBjb25maXJtcyArIHBlcmZvcm1zIHRoZSBkZWxldGUgaXRzZWxmLiBUaGUgY29tcG9uZW50IGlzXG4gICAgICAgIC8vIGdvbmUgZnJvbSB0aGUgcmVwb3J0LCBzbyByZWxvYWQgcmF0aGVyIHRoYW4gcGF0Y2hpbmcgaXQgb3V0IGxvY2FsbHkg4oCUXG4gICAgICAgIC8vIGl0cyBmaWx0ZXJzIHdlbnQgd2l0aCBpdCwgd2hpY2ggdGhlIHJlcG9ydCBiYXIgaGFzIHRvIGJlIHJlYnVpbHQgZm9yLlxuICAgICAgICBpZiAocmVzdWx0Py5kZWxldGVkKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnRJZCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVwb3J0J3MgZmlsdGVyIGdyb3VwcyBjaGFuZ2VkLCBzbyB0aGUgcmVwb3J0IGJhciBhbmQgdGhlXG4gICAgICAgIC8vIG9uLWNvbXBvbmVudCBzdHJpcHMgaGF2ZSB0byBiZSByZWJ1aWx0IGZyb20gYSBmcmVzaCByZXBvcnQuXG4gICAgICAgIGlmIChmaWx0ZXJzQ2hhbmdlZCkge1xuICAgICAgICAgIHRoaXMuX2xvYWRSZXBvcnQocmVwb3J0SWQpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm90aGluZyBlbHNlIGluIHRoZSBkaWFsb2cgdG91Y2hlcyB0aGUgcXVlcnkg4oCUIHRpdGxlIGFuZCBwYWRkaW5nIGFyZVxuICAgICAgICAvLyBwcmVzZW50YXRpb24uIFJlcGFpbnQgdGhlIG9uZSBjb21wb25lbnQgaXQgd2FzIG9wZW5lZCBmb3IgYW5kIGxlYXZlXG4gICAgICAgIC8vIGV2ZXJ5IG90aGVyIGNvbXBvbmVudCdzIGRhdGEsIGFuZCBpdHMgcXVlcnksIGFsb25lLlxuICAgICAgICBpZiAocmVzdWx0Py5zZXR0aW5ncykge1xuICAgICAgICAgIHRoaXMuX2NhbnZhcz8uYXBwbHlDb21wb25lbnRTZXR0aW5ncyhjb21wb25lbnQuaWQsIHJlc3VsdC5zZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gVGhlIGNhbnZhcyBtb3ZlZCB0byBhbm90aGVyIHBhZ2U6IHJlZmxlY3QgaXQgaW4gdGhlIFVSTCBzbyBhIHJlZnJlc2ggb3IgYVxuICAvLyBzaGFyZWQgbGluayBjb21lcyBiYWNrIGhlcmUgKHRoZSB3cml0ZSBpdHNlbGYgaXMgX3dyaXRlVXJsJ3MpLlxuICBwdWJsaWMgb25DYW52YXNQYWdlQ2hhbmdlZChwYWdlSWQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICAvLyBUaGUgZGVlcCBsaW5rIGhhcyBiZWVuIGNvbnN1bWVkOyBmcm9tIGhlcmUgdGhlIGNhbnZhcyBvd25zIHRoZSBwYWdlLlxuICAgIHRoaXMucGFnZUlkLnNldChudWxsKTtcbiAgICB0aGlzLmNoYXRQYWdlSWQuc2V0KHBhZ2VJZCk7XG4gICAgdGhpcy5fcGFnZVJlcG9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2VkLmVtaXQocGFnZUlkKTtcbiAgICB0aGlzLl9wYWdlV3JpdGUkLm5leHQoKTtcbiAgfVxuXG4gIC8vIFRoZSBjYW52YXMgY2hhbmdlZCB0aGUgcmVwb3J0J3Mgc3RydWN0dXJlIChhZGRlZCBhIHBhZ2UpIOKAlCByZS1mZXRjaCBzbyB0aGVcbiAgLy8gbmV3IHBhZ2UgcmVuZGVyczsgdGhlIGNhbnZhcyBsYW5kcyB0aGUgdmlldyBvbiBpdC5cbiAgcHVibGljIG9uQ2FudmFzUmVwb3J0Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xuICAgIGlmIChyZXBvcnQpIHtcbiAgICAgIHRoaXMuX2xvYWRSZXBvcnQocmVwb3J0LmlkKTtcbiAgICB9XG4gIH1cblxuICAvLyBFeHBvcnQgdGhlIHJlcG9ydCB0byBQb3dlclBvaW50LCBlbnRpcmVseSBjbGllbnQtc2lkZSAobmF0aXZlIGVkaXRhYmxlXG4gIC8vIGNoYXJ0czsgcGFnZSA9IHNsaWRlKS4gVGhlIGRvY2sgc2hvd3MgcHJvZ3Jlc3MgdW50aWwgdGhlIGZpbGUgc2F2ZXMuXG4gIHB1YmxpYyBleHBvcnRQb3dlcnBvaW50KCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG4gICAgaWYgKCFyZXBvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wcm9jZXNzLnJ1bihcbiAgICAgICdFeHBvcnRpbmcgUG93ZXJQb2ludCcsXG4gICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlLnBvd2VycG9pbnQocmVwb3J0KSxcbiAgICApO1xuICB9XG5cbiAgLy8gRXhwb3J0IHRvIFBERiwgZW50aXJlbHkgY2xpZW50LXNpZGUgKG9mZnNjcmVlbiBFQ2hhcnRzIGF0IDPDlzsgcGFnZSA9IFBERiBwYWdlKS5cbiAgcHVibGljIGV4cG9ydFBkZigpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xuICAgIGlmICghcmVwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvY2Vzcy5ydW4oXG4gICAgICAnRXhwb3J0aW5nIFBERicsXG4gICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlLnBkZihyZXBvcnQpLFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgd2hvbGUgcmVwb3J0IGFzIGZpbGVzIGluIG9uZSBhY3Rpb246IHRoZSBzZXJ2ZXIgd3JpdGVzIG9uZSBDU1YgcGVyXG4gIC8vIGNvbXBvbmVudCwgZWFjaCB3aGF0IHRoZSBzY3JlZW4gc2hvd3MgKGEgY2hhcnQgb3IgS1BJIGFzIGRyYXduLCBhdCB0aGVcbiAgLy8gdmlld2VyJ3MgZ3JvdXAtYnkgZ3JhaW47IGEgbGlzdCBpbiBmdWxsKSwgYW5kIHppcHMgdGhlbSBmb2xkZXJlZCBieSBwYWdlXG4gIC8vIHdpdGggYW4gRXhwb3J0IE5vdGVzLnR4dCB0aGF0IHJlY29yZHMgdGhlIGZpbHRlcnMgYXMgdGhlIGJhciByZWFkcyB0aGVtLlxuICAvLyBMaXN0cyB1c2UgdGhlaXIgc2F2ZWQgZGVmYXVsdCBzb3J0OyBhIGhlYWRlciBjbGljayBpcyBjYXJyaWVkIG9ubHkgYnkgYVxuICAvLyBjb21wb25lbnQncyBvd24gQ1NWIGV4cG9ydC4gYHRoaXNQYWdlYCBuYXJyb3dzIGl0IHRvIHRoZSBwYWdlIHRoZSBjYW52YXMgaXNcbiAgLy8gc2hvd2luZy4gVW5saWtlIHRoZSBQREYvUG93ZXJQb2ludCBleHBvcnRzIHRoZSBmaWxlcyBhcmUgd3JpdHRlblxuICAvLyBzZXJ2ZXItc2lkZSwgc28gdGhleSBhcmUgbm90IGNhcHBlZCBieSB3aGF0IGEgc2xpZGUgY2FuIGhvbGQuXG4gIHB1YmxpYyBleHBvcnREYXRhKHRoaXNQYWdlID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xuICAgIGlmICghcmVwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUlkID0gdGhpc1BhZ2UgPyB0aGlzLl9jYW52YXM/LmFjdGl2ZVBhZ2U/LmlkID8/IG51bGwgOiBudWxsO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNvbHZlRm9yUmVwb3J0KHJlcG9ydCwgcGFnZUlkKTtcbiAgICBjb25zdCBmcmVxdWVuY3kgPSB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3koKTtcblxuICAgIHRoaXMuX3Byb2Nlc3MuZG93bmxvYWQoXG4gICAgICAnRXhwb3J0aW5nIGRhdGEnLFxuICAgICAgdGhpcy5fY29sbGVjdG9yLmdldEZpbHRlclN1bW1hcnkocmVwb3J0KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGxpbmVzKSA9PiB0aGlzLl9yZXBvcnREYXRhLmV4cG9ydFJlcG9ydChcbiAgICAgICAgICAgIHJlcG9ydC5pZCxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICBwYWdlSWQsXG4gICAgICAgICAgICBmcmVxdWVuY3ksXG4gICAgICAgICAgICBsaW5lcyxcbiAgICAgICAgICApKSxcbiAgICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVhY3QgdG8gZWFjaCBjaGF0IHR1cm4gKGZzLWNoYXQgaGFuZGxlcyB0aGUgcmVxdWVzdCArIHBlcnNpc3RlbmNlKTsgd2VcbiAgLy8gb25seSBjYXJlIGFib3V0IHRoZSByZXBvcnQgc2lkZSBlZmZlY3RzIHRoaXMgY29udGV4dCdzIGJhY2tlbmQgZmxhZ3MuXG4gIHB1YmxpYyBvbkNoYXRSZXNwb25zZShyZXNwb25zZTogRnNBaUNoYXRSZXNwb25zZSk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydElkID0gdGhpcy5yZXBvcnRJZCgpO1xuICAgIGlmIChyZXBvcnRJZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVwb3J0UmVzcG9uc2UgPSByZXNwb25zZSBhcyBGc0FpQ2hhdFJlc3BvbnNlICYgUmVwb3J0Q2hhdFJlc3BvbnNlO1xuXG4gICAgLy8gQSBzdHJ1Y3R1cmFsIGNoYW5nZSBvciBhIHJlbmFtZSBib3RoIHJlLWZldGNoIHRoZSByZXBvcnQgKHNlc3Npb24gZmlsdGVyXG4gICAgLy8gdmFsdWVzIHN1cnZpdmUpOyBhIHJlbmFtZSBhZGRpdGlvbmFsbHkgbm90aWZpZXMgdGhlIGhvc3Qgc28gaXQgY2FuXG4gICAgLy8gcmVmcmVzaCBhIGJyZWFkY3J1bWIgLyB0aXRsZS5cbiAgICBpZiAocmVwb3J0UmVzcG9uc2UucmVwb3J0Q2hhbmdlZCB8fCByZXBvcnRSZXNwb25zZS5yZXBvcnRSZW5hbWVkKSB7XG4gICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydElkLCAhIXJlcG9ydFJlc3BvbnNlLnJlcG9ydFJlbmFtZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERyYWcgdGhlIGRpdmlkZXIgYmV0d2VlbiB0aGUgY2hhdCBhbmQgY2FudmFzIHBhbmVzIChwb2ludGVyLWNhcHR1cmUgbG9vcFxuICAvLyBvdXRzaWRlIEFuZ3VsYXIpLlxuICBwdWJsaWMgb25SZXNpemVTdGFydChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGhhbmRsZSA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBoYW5kbGUuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcbiAgICB0aGlzLl9zcGxpdC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XG5cbiAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IG1vdmUgPSAoZTogUG9pbnRlckV2ZW50KSA9PiB0aGlzLl9yZXNpemVUbyhlLmNsaWVudFgpO1xuICAgICAgY29uc3QgZW5kID0gKCkgPT4ge1xuICAgICAgICBoYW5kbGUucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG1vdmUpO1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgZW5kKTtcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCBlbmQpO1xuICAgICAgICB0aGlzLl9zcGxpdC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XG4gICAgICB9O1xuXG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBlbmQpO1xuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCBlbmQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gV2hhdCB0aGUgdmlld2VyIGhhcyBvbiBzY3JlZW4gYXMgYSBjaGF0IHR1cm4gc2VuZHMgaXQuIFRoZSBjYW52YXNcbiAgLy8gc2VsZWN0aW9uIGNvdW50cyBvbmx5IGluIGVkaXQgbW9kZTogaXQgaXMgZHJhd24gb25seSB0aGVuLCBhbmQgaXQgaXMga2VwdFxuICAvLyAobm90IGNsZWFyZWQpIHdoZW4gZWRpdCBtb2RlIGlzIGxlZnQuXG4gIHByaXZhdGUgX2NoYXRWaWV3ZXJTdGF0ZSgpOiBSZXBvcnRDaGF0Vmlld2VyU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICBncmFudWxhcml0eTogdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCksXG4gICAgICBzZWxlY3RlZENvbXBvbmVudElkOiB0aGlzLmVkaXRNb2RlKCkgPyB0aGlzLl9jYW52YXM/LnNlbGVjdGVkQ29tcG9uZW50SWQoKSA/PyBudWxsIDogbnVsbCxcbiAgICAgIGZpbHRlcnM6IHRoaXMuX2ZpbHRlclN0YXRlLnZpZXdlckZpbHRlcnMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzaXplVG8oY2xpZW50WDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuX3NwbGl0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKHJlY3Qud2lkdGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYXRpbyA9IChjbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGg7XG4gICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKDAuOCwgTWF0aC5tYXgoMC4yLCByYXRpbykpO1xuICAgIHRoaXMuX2NoYXRQYW5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmZsZXhCYXNpcyA9IGAke2NsYW1wZWQgKiAxMDB9JWA7XG4gIH1cblxuICAvLyBUaGUgcGFnZSBpZCBzaXR0aW5nIGluIHRoZSBVUkwgcmlnaHQgbm93LCBvciBudWxsIHdoZW4gZGVlcCBsaW5raW5nIGlzIG9mZlxuICAvLyBvciB0aGUgdmFsdWUgaXMgbm90IGEgdXNhYmxlIGlkLlxuICBwcml2YXRlIF9wYWdlSWRGcm9tVXJsKCk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IHBhcmFtID0gdGhpcy5wYWdlUXVlcnlQYXJhbSgpO1xuICAgIGlmICghcGFyYW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VJZCA9IE51bWJlcih0aGlzLl9yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChwYXJhbSkpO1xuXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYWdlSWQpICYmIHBhZ2VJZCA+IDAgPyBwYWdlSWQgOiBudWxsO1xuICB9XG5cbiAgLy8gV3JpdGVzIHRoZSBvcGVuIHBhZ2UgYW5kIHRoZSB2aWV3ZXIgc3RhdGUgaW50byB0aGUgVVJMIGluIG9uZSBnby4gT25seVxuICAvLyB0aGUga2V5cyB0aGlzIHZpZXcgb3ducyBhcmUgdG91Y2hlZCAoJ21lcmdlJyksIGFuZCByZXBsYWNlVXJsIGtlZXBzIHRoZVxuICAvLyB3cml0ZXMgb3V0IG9mIHRoZSBicm93c2VyIGhpc3Rvcnk6IEJhY2sgbGVhdmVzIHRoZSByZXBvcnQgcmF0aGVyIHRoYW5cbiAgLy8gd2Fsa2luZyBldmVyeSBwYWdlIGFuZCBmaWx0ZXIgdmlzaXRlZC5cbiAgcHJpdmF0ZSBfd3JpdGVVcmwoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcblxuICAgIC8vIEEgcmVwb3J0IHN0aWxsIG9uIHNjcmVlbiB3aGlsZSB0aGUgaG9zdCdzIG5leHQgb25lIGxvYWRzIG11c3Qgbm90IHdyaXRlXG4gICAgLy8gaXRzIHN0YXRlIG92ZXIgdGhlIG5ldyByZXBvcnQncyBVUkwuXG4gICAgaWYgKCFyZXBvcnQgfHwgcmVwb3J0LmlkICE9PSB0aGlzLnJlcG9ydElkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVBhcmFtczogUGFyYW1zID0gdGhpcy51cmxTdGF0ZSgpXG4gICAgICA/IGJ1aWxkUmVwb3J0VXJsUGFyYW1zKHRoaXMuX2ZpbHRlclN0YXRlLnVybFNuYXBzaG90KHJlcG9ydCksIHRoaXMuX3JvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXApXG4gICAgICA6IHt9O1xuXG4gICAgY29uc3QgcGFnZVBhcmFtID0gdGhpcy5wYWdlUXVlcnlQYXJhbSgpO1xuICAgIGlmIChwYWdlUGFyYW0gJiYgdGhpcy5fcGFnZVJlcG9ydGVkKSB7XG4gICAgICBxdWVyeVBhcmFtc1twYWdlUGFyYW1dID0gdGhpcy5jaGF0UGFnZUlkKCk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhxdWVyeVBhcmFtcykubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLl9yb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkUmVwb3J0KHJlcG9ydElkOiBudW1iZXIsIGVtaXRSZW5hbWVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXBvcnREYXRhLmdldChyZXBvcnRJZClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlcG9ydDogUmVwb3J0KSA9PiB7XG4gICAgICAgIC8vIFRoZSBVUkwgaXMgcmVhZCBvbmNlIHBlciByZXBvcnQsIG9uIGl0cyBmaXJzdCBsb2FkOyBldmVyeSBsYXRlciBsb2FkXG4gICAgICAgIC8vIGtlZXBzIHRoZSBzdGF0ZSBpbiBtZW1vcnkuXG4gICAgICAgIGNvbnN0IHJlc3RvcmUgPSB0aGlzLnVybFN0YXRlKCkgJiYgcmVwb3J0SWQgIT09IHRoaXMuX3Jlc3RvcmVkUmVwb3J0SWRcbiAgICAgICAgICA/IHJlYWRSZXBvcnRVcmxQYXJhbXModGhpcy5fcm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHRoaXMuX3Jlc3RvcmVkUmVwb3J0SWQgPSByZXBvcnRJZDtcblxuICAgICAgICB0aGlzLnJlcG9ydC5zZXQocmVwb3J0KTtcbiAgICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuaW5pdChyZXBvcnQsIHJlc3RvcmUpO1xuICAgICAgICB0aGlzLl9idWlsZFJlcG9ydENvbmZpZygpO1xuXG4gICAgICAgIGlmIChlbWl0UmVuYW1lZCkge1xuICAgICAgICAgIHRoaXMucmVuYW1lZC5lbWl0KHJlcG9ydCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gUmVwb3J0LWxldmVsIGZpbHRlciBncm91cHMgaW4gdGhlaXIgc2F2ZWQgb3JkZXIg4oCUIHRoZSBvbmVzIHRoYXQgcmVuZGVyIGluXG4gIC8vIHRoZSB0b29sYmFyIChjb21wb25lbnQtbGV2ZWwgZ3JvdXBzIHJlbmRlciBvbiB0aGVpciBjb21wb25lbnRzKS5cbiAgcHJpdmF0ZSBfcmVwb3J0R3JvdXBzKCk6IFJlcG9ydEZpbHRlckdyb3VwW10ge1xuICAgIHJldHVybiAodGhpcy5yZXBvcnQoKT8uZmlsdGVyR3JvdXBzID8/IFtdKVxuICAgICAgLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwLmxldmVsID09PSAncmVwb3J0JyB8fCBncm91cC5sZXZlbCA9PT0gJ2JvdGgnKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgfVxuXG4gIC8vIChSZSlidWlsZCB0aGUgdG9vbGJhciBmcy1maWx0ZXIgY29uZmlnIOKAlCB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBpdGVtcyBhbmRcbiAgLy8gdGhlbiB0aGUgZ3JvdXAtYnkgY29udHJvbC5cbiAgcHJpdmF0ZSBfYnVpbGRSZXBvcnRDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBjb25zdCByZXBvcnRJZCA9IHJlcG9ydD8uaWQgPz8gbnVsbDtcblxuICAgIC8vIERyb3AgYSBncmFpbiB0aGUgY29udHJvbCBubyBsb25nZXIgb2ZmZXJzIOKAlCB0aGUgYWdlbnQgY2FuIG5hcnJvdyB0aGUgbGlzdFxuICAgIC8vIG1pZC1zZXNzaW9uLCBhbmQgYW4gb3ZlcnJpZGUgdGhlIHZpZXdlciBjYW4ndCBzZWUgaXMgd29yc2UgdGhhbiBub25lLlxuICAgIGlmIChyZXBvcnQgJiYgIWlzR3JhbnVsYXJpdHlPZmZlcmVkKHJlcG9ydCwgdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCkpKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRGcmVxdWVuY3kobnVsbCk7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbXMgPSByZXBvcnRJZFxuICAgICAgPyB0aGlzLl9yZXBvcnRHcm91cHMoKS5tYXAoKGdyb3VwKSA9PlxuICAgICAgICBmaWx0ZXJJdGVtRm9yR3JvdXAoZ3JvdXAsIHRoaXMuX3JlcG9ydERhdGEsIHJlcG9ydElkLCB0aGlzLl9maWx0ZXJTdGF0ZS52YWx1ZShncm91cC5pZCkpKVxuICAgICAgOiBbXTtcblxuICAgIC8vIFRoZSBncm91cC1ieSBjb250cm9sIGxlYWRzIHRoZSBiYXIsIGFoZWFkIG9mIGV2ZXJ5IGZpbHRlcjogaXQgc2V0cyB0aGVcbiAgICAvLyBncmFpbiB0aGUgd2hvbGUgcmVwb3J0IGlzIHJlYWQgYXQsIHNvIGl0IGlzIHRoZSBmaXJzdCB0aGluZyBhIHZpZXdlclxuICAgIC8vIGRlY2lkZXMuIEl0IGlzIG5vdCBhIGZpbHRlciBncm91cCDigJQgaXQgcmUtYnVja2V0cyByb3dzIHJhdGhlciB0aGFuXG4gICAgLy8gbmFycm93aW5nIHRoZW0g4oCUIHNvIGl0IGlzIHBsYWNlZCBoZXJlIHJhdGhlciB0aGFuIG9yZGVyZWQgYW1vbmcgdGhlbS5cbiAgICBjb25zdCBncm91cEJ5SXRlbSA9IHRoaXMuX2dyb3VwQnlJdGVtKCk7XG4gICAgaWYgKGdyb3VwQnlJdGVtKSB7XG4gICAgICBpdGVtcy51bnNoaWZ0KGdyb3VwQnlJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcG9ydEZpbHRlckNvbmZpZy5zZXQoe1xuICAgICAgLy8gZnMtZmlsdGVyIG5ldmVyIHRvdWNoZXMgdGhlIFVSTCBvciBwZXJzaXN0cyBmaWx0ZXIgc3RhdGU6IGl0cyBrZXlzIGFyZVxuICAgICAgLy8gbm90IG5hbWVzcGFjZWQsIGl0IHdyaXRlcyBvdXRzaWRlIHRoZSByb3V0ZXIsIGFuZCBpdCB3b3VsZCBmcmVlemUgYVxuICAgICAgLy8gcm9sbGluZyByYW5nZSBhcyB0d28gZGF0ZXMuIFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSBvd25zIHRoZSB2YWx1ZXMsXG4gICAgICAvLyBhbmQgX3dyaXRlVXJsIGlzIHRoZSBvbmUgd3JpdGVyIG9mIHRoZSBVUkwuXG4gICAgICBxdWVyeVBhcmFtOiBmYWxzZSxcbiAgICAgIHBlcnNpc3Q6IGZhbHNlLFxuICAgICAgaXRlbXMsXG4gICAgICBjaGFuZ2U6IChxdWVyeSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHsgZ3JvdXBJZCwgdmFsdWUgfSBvZiBncm91cFZhbHVlc0Zyb21RdWVyeShxdWVyeSA/PyB7fSwgdGhpcy5fcmVwb3J0R3JvdXBzKCkpKSB7XG4gICAgICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0VmFsdWUoZ3JvdXBJZCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBhIGZpbHRlciBncm91cCDigJQgdGhlIGdyYWluIGlzIHJlYWQgc3RyYWlnaHQgb2ZmIHRoZSBxdWVyeS5cbiAgICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0RnJlcXVlbmN5KChxdWVyeT8uW0dST1VQX0JZX0lURU1dIGFzIENoYXJ0R3JhbnVsYXJpdHkpIHx8IG51bGwpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sIGFzIGFuIGZzLWZpbHRlciBpdGVtLCBvciBudWxsIHdoZW4gdGhlIHJlcG9ydFxuICAvLyBoYXMgbm9uZSB0byBzaG93LiBTZWVkZWQgZnJvbSB0aGUgc2Vzc2lvbiBzdGF0ZSBzbyB0aGUgZ3JhaW4gdGhlIHZpZXdlclxuICAvLyBwaWNrZWQgc3Vydml2ZXMgdGhlIHJlcG9ydCBiZWluZyByZS1mZXRjaGVkIGFmdGVyIGEgY2hhdCBlZGl0LlxuICBwcml2YXRlIF9ncm91cEJ5SXRlbSgpOiBJRmlsdGVyQ29uZmlnSXRlbSB8IG51bGwge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG5cbiAgICByZXR1cm4gcmVwb3J0XG4gICAgICA/IGdyb3VwQnlGaWx0ZXJJdGVtKHJlcG9ydCwgdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCkpXG4gICAgICA6IG51bGw7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmcy1haS1yZXBvcnQgZnMtY29sdW1uXCI+XG5cbiAgPGRpdiBjbGFzcz1cImZzLWFpLXJlcG9ydF9faGVhZGVyIGZzLXJvdy5hbGlnbi1jZW50ZXJcIj5cbiAgICA8aDIgY2xhc3M9XCJmcy1haS1yZXBvcnRfX3RpdGxlIGZzLWZsZXhcIj57eyByZXBvcnQoKT8ubmFtZSB9fTwvaDI+XG5cbiAgICBAaWYgKHJlcG9ydCgpKSB7XG4gICAgICA8IS0tIFJlcG9ydC1sZXZlbCBmaWx0ZXJzLCBpbmxpbmUgd2l0aCB0aGUgdG9vbGJhciBhY3Rpb25zLiBmcy1maWx0ZXJcbiAgICAgICAgICAgcmVhZHMgaXRzIGNvbmZpZyBvbmNlIGF0IGluaXQsIHNvIGl0J3Mga2V5ZWQgb24gdGhlIGZpbHRlclxuICAgICAgICAgICBzaWduYXR1cmU6IHdoZW4gdGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXIgc2V0IGNoYW5nZXMgdGhlIGJsb2NrIGlzXG4gICAgICAgICAgIHJlY3JlYXRlZCBhbmQgcmUtcmVhZHMgdGhlIHJlYnVpbHQgY29uZmlnLiAtLT5cbiAgICAgIEBpZiAocmVwb3J0SGFzRmlsdGVycygpKSB7XG4gICAgICAgIEBmb3IgKGtleSBvZiBbcmVwb3J0RmlsdGVyS2V5KCldOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICA8ZnMtZmlsdGVyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZnMtYWktcmVwb3J0X19maWx0ZXJzXCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJyZXBvcnRGaWx0ZXJDb25maWcoKVwiPlxuICAgICAgICAgIDwvZnMtZmlsdGVyPlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIDwhLS0gV2hhdCBsYXlvdXQgZWRpdGluZyBjYW4gYWRkIG9yIHN3aXRjaCB0bywgYW5kIHRoZSB3YXkgb3V0IG9mIGl0LlxuICAgICAgICAgICBPbmUgc3R5bGUgZm9yIGFsbCB0aHJlZSDigJQgb3V0bGluZWQsIGljb24gYW5kIHRleHQuIFwiSGVhZGVyICYgZm9vdGVyXCJcbiAgICAgICAgICAgaXMgYSB0b2dnbGU6IGl0IGtlZXBzIGl0cyBsYWJlbCBhbmQgdHVybnMgZ3JheSB3aGlsZSBpdCBpcyBvbi4gLS0+XG4gICAgICBAaWYgKGVkaXRNb2RlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZzLWFpLXJlcG9ydF9fZWRpdC10b29scyBmcy1yb3cuYWxpZ24tY2VudGVyLmdhcC14c1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRkIGEgYmxvY2sgb2YgdGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRUZXh0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj50aXRsZTwvbWF0LWljb24+XG4gICAgICAgICAgICBBZGQgdGV4dFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImZzLWFpLXJlcG9ydF9fbWFzdGVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc01hc3Rlck1vZGVcIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpc01hc3Rlck1vZGUgPyAnQmFjayB0byBlZGl0aW5nIHRoaXMgcGFnZScgOiAnRWRpdCB0aGUgaGVhZGVyIGFuZCBmb290ZXIgc2hvd24gb24gZXZlcnkgcGFnZSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWFzdGVyTW9kZSgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+d2ViX2Fzc2V0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIEhlYWRlciAmIGZvb3RlclxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRWRpdE1vZGUoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIERvbmUgZWRpdGluZ1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBUaGUgem9uZSBldmVyeSBkYXRlIGluIHRoaXMgcmVwb3J0IGlzIGZpbHRlcmVkIGFuZCBncm91cGVkIGluLCB0aGVcbiAgICAgICAgICAgc2FtZSBmb3IgZXZlcnkgdmlld2VyLiBTaG93biBvbmx5IHdoZW4gdGhlIHNlcnZlciBzZW5kcyBpdDsgYSBjbGlja1xuICAgICAgICAgICBvcGVucyBSZXBvcnQgc2V0dGluZ3MsIHdoZXJlIGl0IGlzIGNoYW5nZWQuIC0tPlxuICAgICAgQGlmIChyZXBvcnQoKT8uZWZmZWN0aXZlVGltZXpvbmU7IGFzIGVmZmVjdGl2ZVRpbWV6b25lKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJmcy1haS1yZXBvcnRfX3RpbWV6b25lXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidEYXRlcyBhcmUgZmlsdGVyZWQgYW5kIGdyb3VwZWQgaW4gJyArIGVmZmVjdGl2ZVRpbWV6b25lICsgJyBmb3IgZXZlcnlvbmUuIENoYW5nZSBpdCBpbiBSZXBvcnQgc2V0dGluZ3MuJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVwb3J0U2V0dGluZ3MoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zY2hlZHVsZTwvbWF0LWljb24+XG4gICAgICAgICAge3sgdGltZXpvbmVMYWJlbCgpIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuXG4gICAgICA8IS0tIE9uZSBpY29uIGZvciBib3RoIHN0YXRlczogaXQgcmVhZHMgYXMgcHJlc3NlZCB3aGlsZSBlZGl0aW5nIHJhdGhlclxuICAgICAgICAgICB0aGFuIHN3YXBwaW5nIHRvIHNvbWV0aGluZyBlbHNlLiAtLT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImZzLWFpLXJlcG9ydF9fdG9nZ2xlXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImVkaXRNb2RlKClcIlxuICAgICAgICAgIFttYXRUb29sdGlwXT1cImVkaXRNb2RlKCkgPyAnRG9uZSBlZGl0aW5nJyA6ICdFZGl0IGxheW91dCdcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFZGl0TW9kZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5kYXNoYm9hcmRfY3VzdG9taXplPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgbWF0VG9vbHRpcD1cIkV4cG9ydFwiXG4gICAgICAgICAgW2ZzTWVudVRyaWdnZXJGb3JdPVwiZXhwb3J0TWVudVwiPlxuICAgICAgICA8bWF0LWljb24+ZG93bmxvYWQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZnMtbWVudSAjZXhwb3J0TWVudT5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgIChjbGljayk9XCJleHBvcnRQb3dlcnBvaW50KClcIj5cbiAgICAgICAgICBFeHBvcnQgUG93ZXJQb2ludFxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydFBkZigpXCI+XG4gICAgICAgICAgRXhwb3J0IFBERlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydERhdGEoKVwiPlxuICAgICAgICAgIEV4cG9ydCBSYXcgRGF0YVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICBAaWYgKChyZXBvcnQoKT8ucGFnZXM/Lmxlbmd0aCA/PyAwKSA+IDEpIHtcbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnREYXRhKHRydWUpXCI+XG4gICAgICAgICAgICBFeHBvcnQgUmF3IERhdGEgKFRoaXMgUGFnZSlcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgICA8L2ZzLW1lbnU+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBtYXRUb29sdGlwPVwiUmVwb3J0IHNldHRpbmdzXCJcbiAgICAgICAgICAoY2xpY2spPVwicmVwb3J0U2V0dGluZ3MoKVwiPlxuICAgICAgICA8bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgICAjc3BsaXRcbiAgICAgIGNsYXNzPVwiZnMtYWktcmVwb3J0X19zcGxpdCBmcy1yb3cuYWxpZ24tc3RhcnRcIj5cbiAgICA8ZnMtYWktY2hhdFxuICAgICAgICAjY2hhdFBhbmVsXG4gICAgICAgIGNsYXNzPVwiY2hhdFwiXG4gICAgICAgIFtiYXNlUGF0aF09XCJiYXNlUGF0aCgpXCJcbiAgICAgICAgW3JlcXVlc3REYXRhXT1cImNoYXRSZXF1ZXN0RGF0YSgpXCJcbiAgICAgICAgW3JlYWR5XT1cImNoYXRQYWdlSWQoKSAhPT0gbnVsbFwiXG4gICAgICAgIChyZXNwb25zZSk9XCJvbkNoYXRSZXNwb25zZSgkZXZlbnQpXCI+XG4gICAgPC9mcy1haS1jaGF0PlxuXG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cInJlc2l6ZXJcIlxuICAgICAgICAocG9pbnRlcmRvd24pPVwib25SZXNpemVTdGFydCgkZXZlbnQpXCI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidmlld2VyIGZzLWZsZXggZnMtY29sdW1uXCI+XG4gICAgICBAaWYgKHJlcG9ydCgpKSB7XG4gICAgICAgIDxhcHAtcmVwb3J0LWNhbnZhc1xuICAgICAgICAgICAgW3JlcG9ydF09XCJyZXBvcnQoKVwiXG4gICAgICAgICAgICBbZWRpdE1vZGVdPVwiZWRpdE1vZGUoKVwiXG4gICAgICAgICAgICBbcGFnZUlkXT1cInBhZ2VJZCgpXCJcbiAgICAgICAgICAgIChjb21wb25lbnRTZXR0aW5ncyk9XCJjb21wb25lbnRTZXR0aW5ncygkZXZlbnQpXCJcbiAgICAgICAgICAgIChyZXBvcnRDaGFuZ2VkKT1cIm9uQ2FudmFzUmVwb3J0Q2hhbmdlZCgpXCJcbiAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJvbkNhbnZhc1BhZ2VDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgPC9hcHAtcmVwb3J0LWNhbnZhcz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
551
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtYWktcmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvZnMtYWktcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvZnMtYWktcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQzFELFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQ3RHLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQVUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFnQixjQUFjLEVBQXFCLE1BQU0sb0JBQW9CLENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FB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RUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztxQkFDdEcsV0FDUTt3QkFDUCxjQUFjO3dCQUNkLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixxQkFBcUI7cUJBQ3RCO3dEQTZHTyxNQUFNO3NCQURiLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJNUIsVUFBVTtzQkFEakIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBTWxELE9BQU87c0JBRGQsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsXHJcbiAgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgTmdab25lLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgRmlsdGVyQ29uZmlnLCBGc0ZpbHRlck1vZHVsZSwgSUZpbHRlckNvbmZpZ0l0ZW0gfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xyXG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcclxuaW1wb3J0IHsgRnNQcm9jZXNzIH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvY2Vzcyc7XHJcblxyXG5pbXBvcnQgeyBTdWJqZWN0LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBhdWRpdFRpbWUsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBwcm92aWRlRWNoYXJ0c0NvcmUgfSBmcm9tICduZ3gtZWNoYXJ0cyc7XHJcblxyXG5pbXBvcnQgeyBGc0FpQ2hhdENvbXBvbmVudCwgRnNBaUNoYXREYXRhLCBGc0FpQ2hhdFJlc3BvbnNlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvYWknO1xyXG5cclxuaW1wb3J0IHsgUmVwb3J0Q2FudmFzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZXBvcnQtY2FudmFzL3JlcG9ydC1jYW52YXMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVwb3J0QWlDaGF0RGF0YSB9IGZyb20gJy4uLy4uL2RhdGEvcmVwb3J0LWFpLWNoYXQuZGF0YSc7XHJcbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcclxuaW1wb3J0IHsgQ29tcG9uZW50U2V0dGluZ3NDb21wb25lbnQsIENvbXBvbmVudFNldHRpbmdzUmVzdWx0IH0gZnJvbSAnLi4vLi4vZGlhbG9ncy9jb21wb25lbnQtc2V0dGluZ3MvY29tcG9uZW50LXNldHRpbmdzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCBSZXBvcnRTZXR0aW5nc1Jlc3VsdCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvcmVwb3J0LXNldHRpbmdzL3JlcG9ydC1zZXR0aW5ncy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC1leHBvcnQtY29sbGVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC1leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlcG9ydFBkZlNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXBkZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0UHB0eFNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXBwdHguc2VydmljZSc7XHJcbmltcG9ydCB7IGdldFRpbWV6b25lTGFiZWwgfSBmcm9tICcuLi8uLi9mb3JtYXQnO1xyXG5pbXBvcnQgeyBSZXBvcnRDaGF0Vmlld2VyU3RhdGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1jaGF0LXZpZXdlci1zdGF0ZS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIENoYXJ0R3JhbnVsYXJpdHksIFJlcG9ydCwgUmVwb3J0Q2hhdFJlc3BvbnNlLFxyXG4gIFJlcG9ydENvbXBvbmVudCBhcyBSZXBvcnRDb21wb25lbnRNb2RlbCwgUmVwb3J0RmlsdGVyR3JvdXAsXHJcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBHUk9VUF9CWV9JVEVNLCBmaWx0ZXJJdGVtRm9yR3JvdXAsIGdyb3VwQnlGaWx0ZXJJdGVtLCBncm91cEJ5U2lnbmF0dXJlLCBncm91cFZhbHVlc0Zyb21RdWVyeSxcclxuICBpc0dyYW51bGFyaXR5T2ZmZXJlZCxcclxufSBmcm9tICcuLi8uLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcclxuaW1wb3J0IHsgYnVpbGRSZXBvcnRVcmxQYXJhbXMsIHJlYWRSZXBvcnRVcmxQYXJhbXMgfSBmcm9tICcuLi8uLi9yZXBvcnQtdXJsLXN0YXRlJztcclxuaW1wb3J0IHsgUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlLCBkZWZhdWx0U2lnbmF0dXJlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LWZpbHRlci1zdGF0ZS5zZXJ2aWNlJztcclxuXHJcblxyXG4vLyBBIHNpbmdsZSByZXBvcnQ6IHRoZSBBSSBjaGF0IG9uIHRoZSBsZWZ0LCB0aGUgcmVwb3J0IGNhbnZhcyBvbiB0aGUgcmlnaHQsXHJcbi8vIHVuZGVyIGFuIEgyIHRpdGxlICsgc2V0dGluZ3MgZ2Vhci4gVGhlIGhvc3Qgc3VwcGxpZXMgW3JlcG9ydElkXSAoZnJvbSBpdHNcclxuLy8gcm91dGUpIGFuZCBzd2l0Y2hlcyByZXBvcnRzIHRocm91Z2ggaXRzIG93biByb3V0ZXMg4oCUIHRoaXMgY29tcG9uZW50IG5ldmVyXHJcbi8vIHBpY2tzIG9uZS5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmcy1haS1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mcy1haS1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZzLWFpLXJlcG9ydC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgLy8gU2Vzc2lvbiBmaWx0ZXIgc3RhdGUgaXMgcGVyLW9wZW4tcmVwb3J0LCBub3QgYXBwLWdsb2JhbDsgdGhlIGV4cG9ydFxyXG4gICAgLy8gc2VydmljZXMgcmVzb2x2ZSBmaWx0ZXJzIHRocm91Z2ggaXQsIHNvIHRoZXkgbGl2ZSBhdCB0aGUgc2FtZSBsZXZlbC5cclxuICAgIFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSxcclxuICAgIFJlcG9ydEV4cG9ydENvbGxlY3RvclNlcnZpY2UsXHJcbiAgICBSZXBvcnRQcHR4U2VydmljZSxcclxuICAgIFJlcG9ydFBkZlNlcnZpY2UsXHJcbiAgICBSZXBvcnRFeHBvcnRTZXJ2aWNlLFxyXG4gICAgLy8gZnMtYWktY2hhdCBzaXRzIGluIHRoaXMgdGVtcGxhdGUsIHNvIGl0IHJlc29sdmVzIGl0cyBnYXRld2F5IGhlcmU6IHRoZVxyXG4gICAgLy8gcmVwb3J0IG9uZSwgd2hpY2ggYWRkcyB0aGUgdmlld2VyJ3Mgc3RhdGUgdG8gZWFjaCB0dXJuIGl0IHNlbmRzLlxyXG4gICAgUmVwb3J0QWlDaGF0RGF0YSxcclxuICAgIHsgcHJvdmlkZTogRnNBaUNoYXREYXRhLCB1c2VFeGlzdGluZzogUmVwb3J0QWlDaGF0RGF0YSB9LFxyXG4gICAgLy8gVHJlZS1zaGFrZW4gRUNoYXJ0cyBjb3JlICsgdGhlICdyZXBvcnQnIGhvdXNlIHRoZW1lLCBsb2FkZWQgbGF6aWx5LlxyXG4gICAgcHJvdmlkZUVjaGFydHNDb3JlKHsgZWNoYXJ0czogKCkgPT4gaW1wb3J0KCcuLi8uLi90aGVtZS9lY2hhcnRzJykudGhlbigobW9kdWxlKSA9PiBtb2R1bGUuZGVmYXVsdCkgfSksXHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGc0ZpbHRlck1vZHVsZSxcclxuICAgIEZzTWVudU1vZHVsZSxcclxuICAgIEZzQWlDaGF0Q29tcG9uZW50LFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBSZXBvcnRDYW52YXNDb21wb25lbnQsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZzQWlSZXBvcnRDb21wb25lbnQge1xyXG5cclxuICAvLyBUaGUgcmVwb3J0IHRoaXMgdmlldyBpcyBmb2N1c2VkIG9uIOKAlCBzdXBwbGllZCBieSB0aGUgaG9zdCBmcm9tIHRoZSByb3V0ZS5cclxuICBwdWJsaWMgcmVhZG9ubHkgcmVwb3J0SWQgPSBpbnB1dDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuXHJcbiAgLy8gQVBJIGJhc2UgZm9yIHRoZSByZXBvcnRzICsgY2hhdCBlbmRwb2ludHM7IG92ZXJyaWRlIHRvIG1vdW50IGVsc2V3aGVyZS5cclxuICBwdWJsaWMgcmVhZG9ubHkgYmFzZVBhdGggPSBpbnB1dDxzdHJpbmc+KCdyZXBvcnRzJyk7XHJcblxyXG4gIC8vIFRoZSBxdWVyeSBwYXJhbSB0aGF0IGNhcnJpZXMgdGhlIG9wZW4gcGFnZSdzIGlkLiBEZWVwIGxpbmtpbmcgaXMgb24gYnlcclxuICAvLyBkZWZhdWx0OyBhIGhvc3QgdGhhdCBtb3VudHMgc2V2ZXJhbCByZXBvcnRzIG9uIG9uZSByb3V0ZSwgb3Igd2FudHMgbm8gVVJMXHJcbiAgLy8gd3JpdGVzIGF0IGFsbCwgc2V0cyB0aGlzIHRvIG51bGwgdG8gdHVybiBpdCBvZmYuXHJcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VRdWVyeVBhcmFtID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4oJ3BhZ2UnKTtcclxuXHJcbiAgLy8gV2hldGhlciB0aGUgdmlld2VyJ3MgZmlsdGVycywgZ3JvdXAtYnkgZ3JhaW4gYW5kIGxpc3Qgc29ydHMgbGl2ZSBpbiB0aGUgVVJMXHJcbiAgLy8gKGc8Z3JvdXBJZD4sIGdyb3VwQnksIHM8Y29tcG9uZW50SWQ+OyBzZWUgcmVwb3J0LXVybC1zdGF0ZS50cyksIHNvIGFcclxuICAvLyByZWZyZXNoIG9yIGEgc2hhcmVkIGxpbmsgb3BlbnMgdGhlIHJlcG9ydCBhcyBpdCB3YXMgc2Vlbi4gT24gYnkgZGVmYXVsdDsgYVxyXG4gIC8vIGhvc3QgdGhhdCBtb3VudHMgc2V2ZXJhbCByZXBvcnRzIG9uIG9uZSByb3V0ZSwgb3IgdXNlcyBxdWVyeSBrZXlzIHNoYXBlZFxyXG4gIC8vIGxpa2UgZzxuPiBvciBzPG4+IGl0c2VsZiwgdHVybnMgaXQgb2ZmLlxyXG4gIHB1YmxpYyByZWFkb25seSB1cmxTdGF0ZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICAvLyBUaGUgcmVwb3J0IHdhcyBkZWxldGVkIGZyb20gaXRzIHNldHRpbmdzIGRpYWxvZyDigJQgdGhlIGhvc3Qgcm91dGVzIGJhY2sgdG9cclxuICAvLyB0aGUgbGlzdGluZy5cclxuICBwdWJsaWMgcmVhZG9ubHkgZGVsZXRlZCA9IG91dHB1dDxudW1iZXI+KCk7XHJcblxyXG4gIC8vIFRoZSByZXBvcnQgd2FzIHJlbmFtZWQgKHNldHRpbmdzLCBvciB0aGUgYWdlbnQpIOKAlCB0aGUgaG9zdCBjYW4gcmVmcmVzaCBhXHJcbiAgLy8gYnJlYWRjcnVtYiAvIGRvY3VtZW50IHRpdGxlLlxyXG4gIHB1YmxpYyByZWFkb25seSByZW5hbWVkID0gb3V0cHV0PFJlcG9ydD4oKTtcclxuXHJcbiAgLy8gVGhlIHZpZXdlciBtb3ZlZCB0byBhbm90aGVyIHBhZ2UuIFRoaXMgdmlldyB3cml0ZXMgdGhlIFVSTCBpdHNlbGYgKHJpZ2h0XHJcbiAgLy8gYWZ0ZXIgdGhpcyBmaXJlcykg4oCUIHRoaXMgaXMgZm9yIGhvc3RzIHRoYXQgdHJhY2sgdGhlIG9wZW4gcGFnZSBmb3IgdGhlaXJcclxuICAvLyBvd24gcmVhc29ucy5cclxuICBwdWJsaWMgcmVhZG9ubHkgcGFnZUNoYW5nZWQgPSBvdXRwdXQ8bnVtYmVyIHwgbnVsbD4oKTtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydCA9IHNpZ25hbDxSZXBvcnQgfCBudWxsPihudWxsKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZWRpdE1vZGUgPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICAvLyBUaGUgdG9vbGJhcidzIHpvbmUgaW5kaWNhdG9yICgnTmV3IFlvcmsgKEVEVCknKTogdGhlIHpvbmUgZXZlcnkgZGF0ZSBpblxyXG4gIC8vIHRoaXMgcmVwb3J0IGlzIGZpbHRlcmVkIGFuZCBncm91cGVkIGluLiBFbXB0eSB3aGVuIHRoZSBzZXJ2ZXIgaXMgdG9vIG9sZFxyXG4gIC8vIHRvIHNlbmQgdGhlIGVmZmVjdGl2ZSB6b25lLCBhbmQgdGhlIGluZGljYXRvciBpcyBub3Qgc2hvd24uXHJcbiAgcHVibGljIHJlYWRvbmx5IHRpbWV6b25lTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBlZmZlY3RpdmVUaW1lem9uZSA9IHRoaXMucmVwb3J0KCk/LmVmZmVjdGl2ZVRpbWV6b25lO1xyXG5cclxuICAgIHJldHVybiBlZmZlY3RpdmVUaW1lem9uZSA/IGdldFRpbWV6b25lTGFiZWwoZWZmZWN0aXZlVGltZXpvbmUpIDogJyc7XHJcbiAgfSk7XHJcblxyXG4gIC8vIFRoZSBwYWdlIHRoZSBjYW52YXMgc2hvdWxkIG9wZW4gb24sIHJlYWQgZnJvbSB0aGUgVVJMIG9uY2UgcGVyIHJlcG9ydC5cclxuICAvLyBDbGVhcmVkIGFzIHNvb24gYXMgdGhlIGNhbnZhcyByZXBvcnRzIGJhY2ssIHNvIGEgbGF0ZXIgaW4tYXBwIHBhZ2UgY2hhbmdlXHJcbiAgLy8gaXMgbmV2ZXIgZm91Z2h0IGJ5IGEgc3RhbGUgdmFsdWUuXHJcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuXHJcbiAgLy8gVGhlIHBhZ2UgdGhlIGNoYXQgaXMgYm91bmQgdG86IHRoZSBvbmUgb24gc2NyZWVuLiBBIHJlcG9ydCBjb252ZXJzYXRpb25cclxuICAvLyBiZWxvbmdzIHRvIGV4YWN0bHkgb25lIHBhZ2UsIHNvIHRoaXMgYm90aCBzY29wZXMgdGhlIGNvbnZlcnNhdGlvbiBsaXN0IGFuZFxyXG4gIC8vIGJlY29tZXMgdGhlIG5ldyBjb252ZXJzYXRpb24ncyBwYWdlLiBBIHNpZ25hbCBiZWNhdXNlIGl0IGZlZWRzXHJcbiAgLy8gW3JlcXVlc3REYXRhXSDigJQgY2hhbmdpbmcgaXQgaXMgd2hhdCByZWxvYWRzIHRoZSBwYW5lbCBvbnRvIHRoZSBuZXcgcGFnZSdzXHJcbiAgLy8gY29udmVyc2F0aW9ucy4gTnVsbCB1bnRpbCB0aGUgY2FudmFzIHJlcG9ydHMgd2hpY2ggcGFnZSBpdCBvcGVuZWQgb24sIHdoaWNoXHJcbiAgLy8ga2VlcHMgdGhlIGNoYXQgZnJvbSBsaXN0aW5nIGFnYWluc3QgYSBwYWdlIGd1ZXNzLlxyXG4gIHB1YmxpYyByZWFkb25seSBjaGF0UGFnZUlkID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvLyBXaGF0IHRoZSBjaGF0IHNlbmRzIHdpdGggZXZlcnkgY29udmVyc2F0aW9uIGNhbGw6IHRoZSByZXBvcnQsIGFuZCB0aGUgcGFnZVxyXG4gIC8vIGl0IGlzIGJvdW5kIHRvLlxyXG4gIC8vXHJcbiAgLy8gcmVwb3J0UGFnZUlkIGlzIE9NSVRURUQsIG5vdCBzZW50IGFzIG51bGwsIHdoaWxlIHRoZSBvcGVuIHBhZ2UgaXMgdW5rbm93bi5cclxuICAvLyBUaGUgYmFja2VuZCByZWFkcyBhIFBSRVNFTlQgcmVwb3J0UGFnZUlkIG9mIDAvbnVsbCBhcyBcInRoZSByZXBvcnQncyBlYXJsaWVyLFxyXG4gIC8vIHBhZ2UtbGVzcyBjb252ZXJzYXRpb25zXCIsIHNvIHNlbmRpbmcgbnVsbCBiZWZvcmUgdGhlIGNhbnZhcyBoYXMgcmVwb3J0ZWQgaW5cclxuICAvLyB3b3VsZCBhc2sgZm9yIHRoZSB3cm9uZyBsaXN0IOKAlCBhbmQsIHdvcnNlLCB3b3VsZCBiaW5kIGEgY29udmVyc2F0aW9uIHN0YXJ0ZWRcclxuICAvLyBpbiB0aGF0IHdpbmRvdyB0byBubyBwYWdlIGF0IGFsbC5cclxuICAvL1xyXG4gIC8vIFRoZSBjaGF0IGlzIGFsc28gaGVsZCBjbG9zZWQgKFtyZWFkeV0gaW4gdGhlIHRlbXBsYXRlKSB1bnRpbCB0aGUgcGFnZSBpc1xyXG4gIC8vIGtub3duLCBzbyB0aGlzIHBhcnRpYWwgY29udGV4dCBpcyBuZXZlciBhY3R1YWxseSBzZW50OiBvbiBhIGZyZXNoIGxvYWQgdGhlXHJcbiAgLy8gcmVwb3J0IGhhcyB0byBhcnJpdmUgYW5kIHRoZSBjYW52YXMgaGFzIHRvIHJlbmRlciBiZWZvcmUgYW55IHBhZ2UgZXhpc3RzLFxyXG4gIC8vIGFuZCBhIGxpc3QgZmV0Y2hlZCBpbiB0aGF0IHdpbmRvdyB3b3VsZCBiZSB0aGUgd2hvbGUgcmVwb3J0J3MgY29udmVyc2F0aW9uc1xyXG4gIC8vIOKAlCB0aGUgdW5zY29wZWQgbGlzdCwgc2hvd24gYW5kIGF1dG8tc2VsZWN0ZWQgYmVmb3JlIHRoZSByZWFsIG9uZSBsYW5kcy5cclxuICBwdWJsaWMgcmVhZG9ubHkgY2hhdFJlcXVlc3REYXRhID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCgpID0+IHtcclxuICAgIGNvbnN0IHJlcG9ydFBhZ2VJZCA9IHRoaXMuY2hhdFBhZ2VJZCgpO1xyXG5cclxuICAgIHJldHVybiByZXBvcnRQYWdlSWQgPT09IG51bGxcclxuICAgICAgPyB7IHJlcG9ydElkOiB0aGlzLnJlcG9ydElkKCkgfVxyXG4gICAgICA6IHsgcmVwb3J0SWQ6IHRoaXMucmVwb3J0SWQoKSwgcmVwb3J0UGFnZUlkIH07XHJcbiAgfSk7XHJcblxyXG4gIC8vIFRoZSByZXBvcnQtbGV2ZWwgZmlsdGVyIHRvb2xiYXIgKGZzLWZpbHRlcikuIFJlYnVpbHQgd2hlbmV2ZXIgdGhlIGxvYWRlZFxyXG4gIC8vIHJlcG9ydCAoYW5kIHRodXMgaXRzIGdyb3VwcykgY2hhbmdlcy5cclxuICBwdWJsaWMgcmVhZG9ubHkgcmVwb3J0RmlsdGVyQ29uZmlnID0gc2lnbmFsPEZpbHRlckNvbmZpZyB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvLyBHYXRlcyB0aGUgdG9vbGJhciBmcy1maWx0ZXIgc28gaXQgaXNuJ3QgcmVuZGVyZWQgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvXHJcbiAgLy8gcHV0IGluIGl0IOKAlCBubyByZXBvcnQtbGV2ZWwgZmlsdGVycyBhbmQgbm8gZ3JvdXAtYnkgY29udHJvbC5cclxuICBwdWJsaWMgcmVhZG9ubHkgcmVwb3J0SGFzRmlsdGVycyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXBvcnRHcm91cHMoKS5sZW5ndGggPiAwIHx8ICEhdGhpcy5fZ3JvdXBCeUl0ZW0oKTtcclxuICB9KTtcclxuXHJcbiAgLy8gZnMtZmlsdGVyIHJlYWRzIGl0cyBjb25maWcgb25seSBvbmNlIChhdCBpbml0KS4gVGhlIHRlbXBsYXRlIGtleXMgdGhlXHJcbiAgLy8gdG9vbGJhciBmcy1maWx0ZXIgb24gdGhpcyBzaWduYXR1cmUgc28gaXQncyByZWNyZWF0ZWQgKGFuZCByZS1yZWFkcyB0aGVcclxuICAvLyByZWJ1aWx0IGNvbmZpZykgd2hlbmV2ZXIgdGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXIgc2V0IGNoYW5nZXMuXHJcbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydEZpbHRlcktleSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIC8vIFRoZSBlZmZlY3RpdmUgem9uZSBpcyBwYXJ0IG9mIGl0IHRvbzogYSB6b25lIGNoYW5nZSByZS1yZXNvbHZlcyByZWxhdGl2ZVxyXG4gICAgICAvLyBwcmVzZXRzLCBhbmQgdGhlIGJhciBtdXN0IGJlIHJlY3JlYXRlZCB0byBzaG93IHRoZSBuZXcgZGF5cy5cclxuICAgICAgdGhpcy5fZmlsdGVyU3RhdGUudGltZXpvbmUoKSxcclxuICAgICAgLy8gVGhlIHN0b3JlZCBkZWZhdWx0IGlzIHBhcnQgb2YgdGhlIHNpZ25hdHVyZTogc2F2aW5nIGEgbmV3IGRlZmF1bHQgaW4gcmVwb3J0XHJcbiAgICAgIC8vIHNldHRpbmdzIHJlYnVpbGRzIHRoZSBjb25maWcsIGJ1dCB3aXRob3V0IGEga2V5IGNoYW5nZSBmcy1maWx0ZXIga2VlcHNcclxuICAgICAgLy8gcmVuZGVyaW5nIHRoZSB2YWx1ZXMgaXQgd2FzIGNyZWF0ZWQgd2l0aCB1bnRpbCBhIGZ1bGwgcGFnZSByZWxvYWQuXHJcbiAgICAgIGdyb3VwQnlTaWduYXR1cmUodGhpcy5yZXBvcnQoKSksXHJcbiAgICAgIC4uLnRoaXMuX3JlcG9ydEdyb3VwcygpLm1hcCgoZ3JvdXApID0+IGAke2dyb3VwLmlkfToke2dyb3VwLmxldmVsfToke2dyb3VwLmxhYmVsfToke2RlZmF1bHRTaWduYXR1cmUoZ3JvdXApfWApLFxyXG4gICAgXS5qb2luKCd8Jyk7XHJcbiAgfSk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NwbGl0JywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwcml2YXRlIF9zcGxpdCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkKCdjaGF0UGFuZWwnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxyXG4gIHByaXZhdGUgX2NoYXRQYW5lbCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICAvLyBPbmx5IHRoZSBjYW52YXMga25vd3Mgd2hpY2ggcGFnZSBpcyBvbiBzY3JlZW4sIGFuZCBhIHBhZ2Utc2NvcGVkIGV4cG9ydFxyXG4gIC8vIGhhcyB0byBhc2sgaXQuXHJcbiAgQFZpZXdDaGlsZChSZXBvcnRDYW52YXNDb21wb25lbnQpXHJcbiAgcHJpdmF0ZSBfY2FudmFzPzogUmVwb3J0Q2FudmFzQ29tcG9uZW50O1xyXG5cclxuICBwcml2YXRlIF9yZXBvcnREYXRhID0gaW5qZWN0KFJlcG9ydERhdGEpO1xyXG4gIHByaXZhdGUgX3JlcG9ydEFpQ2hhdERhdGEgPSBpbmplY3QoUmVwb3J0QWlDaGF0RGF0YSk7XHJcbiAgcHJpdmF0ZSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgcHJpdmF0ZSBfcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xyXG4gIHByaXZhdGUgX2ZpbHRlclN0YXRlID0gaW5qZWN0KFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfZXhwb3J0U2VydmljZSA9IGluamVjdChSZXBvcnRFeHBvcnRTZXJ2aWNlKTtcclxuICBwcml2YXRlIF9jb2xsZWN0b3IgPSBpbmplY3QoUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfcHJvY2VzcyA9IGluamVjdChGc1Byb2Nlc3MpO1xyXG4gIHByaXZhdGUgX2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcbiAgcHJpdmF0ZSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xyXG5cclxuICAvLyBUaGUgcmVwb3J0IHdob3NlIFVSTCBzdGF0ZSBoYXMgYmVlbiByZWFkLiBUaGUgVVJMIGlzIHJlYWQgb25seSBvbiBhXHJcbiAgLy8gcmVwb3J0J3MgZmlyc3QgbG9hZDsgYSByZWxvYWQgYWZ0ZXIgYSBjaGF0IG9yIGRpYWxvZyBlZGl0IGtlZXBzIHRoZSBzdGF0ZVxyXG4gIC8vIGluIG1lbW9yeSwgd2hpY2ggaXMgbmV3ZXIgdGhhbiBhbnl0aGluZyB0aGUgVVJMIGhvbGRzLlxyXG4gIHByaXZhdGUgX3Jlc3RvcmVkUmVwb3J0SWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvLyBXaGV0aGVyIHRoZSBjYW52YXMgaGFzIHJlcG9ydGVkIHRoZSBvcGVuIHBhZ2UgZm9yIHRoaXMgcmVwb3J0LiBVbnRpbCBpdFxyXG4gIC8vIGhhcywgdGhlIHBhZ2UgcGFyYW0gaW4gdGhlIFVSTCBpcyB0aGUgZGVlcCBsaW5rIHN0aWxsIGJlaW5nIGhvbm9yZWQsIGFuZFxyXG4gIC8vIHRoZSBVUkwgd3JpdGVyIGxlYXZlcyBpdCBhbG9uZS5cclxuICBwcml2YXRlIF9wYWdlUmVwb3J0ZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8gVGhlIGNhbnZhcyBtb3ZlZCB0byBhbm90aGVyIHBhZ2UuIE1lcmdlZCBpbnRvIHRoZSBzaW5nbGUgVVJMIHdyaXRlci5cclxuICBwcml2YXRlIF9wYWdlV3JpdGUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAvLyBFYWNoIGNoYXQgdHVybiBjYXJyaWVzIHdoYXQgdGhlIHZpZXdlciBoYXMgb24gc2NyZWVuLiBPbmx5IHRoZSBmdW5jdGlvblxyXG4gICAgLy8gaXMgc2V0IGhlcmU7IGl0IGlzIGNhbGxlZCB3aGVuIGEgdHVybiBpcyBzZW50LlxyXG4gICAgdGhpcy5fcmVwb3J0QWlDaGF0RGF0YS50dXJuRGF0YSA9ICgpID0+ICh7IHZpZXdlclN0YXRlOiB0aGlzLl9jaGF0Vmlld2VyU3RhdGUoKSB9KTtcclxuXHJcbiAgICAvLyBUaGUgT05FIHdyaXRlciBvZiB0aGlzIHZpZXcncyBxdWVyeSBwYXJhbXMuIFBhZ2UgbW92ZXMgYW5kIHZpZXdlci1zdGF0ZVxyXG4gICAgLy8gY2hhbmdlcyBib3RoIGZ1bm5lbCBoZXJlLCBhbmQgYXVkaXRUaW1lKDApIGZvbGRzIGEgYnVyc3QgKGEgYmFyIHJlLXNldHNcclxuICAgIC8vIGV2ZXJ5IGdyb3VwIGl0IHNob3dzKSBpbnRvIGEgc2luZ2xlIHdyaXRlLiBFdmVyeSB3cml0ZSBjYXJyaWVzIHRoZSB3aG9sZVxyXG4gICAgLy8gc3RhdGUsIHNvIGEgd3JpdGUgdGhhdCBzdXBlcnNlZGVzIGFub3RoZXIgbG9zZXMgbm90aGluZy5cclxuICAgIG1lcmdlKHRoaXMuX2ZpbHRlclN0YXRlLnVybENoYW5nZXMoKSwgdGhpcy5fcGFnZVdyaXRlJClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgYXVkaXRUaW1lKDApLFxyXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl93cml0ZVVybCgpKSxcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIC8vIFBvaW50IHRoZSBzaGFyZWQgZGF0YSBnYXRld2F5IGF0IHRoZSBjb25maWd1cmVkIGJhc2UgZmlyc3QgKGJlZm9yZSBhbnlcclxuICAgIC8vIGxvYWQgYmVsb3cgcmVhZHMgaXQpLlxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgdGhpcy5fcmVwb3J0RGF0YS5iYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGgoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIChSZSlsb2FkIHdoZW5ldmVyIHRoZSBob3N0IHN3aXRjaGVzIHRoZSByZXBvcnQgaWQuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCByZXBvcnRJZCA9IHRoaXMucmVwb3J0SWQoKTtcclxuXHJcbiAgICAgIC8vIFNlZWQgdGhlIG9wZW4gcGFnZSBmcm9tIHRoZSBVUkwgZm9yIHRoaXMgcmVwb3J0LiBSZWFkIHBlciBsb2FkIHJhdGhlclxyXG4gICAgICAvLyB0aGFuIG9uY2UgYXQgY29uc3RydWN0aW9uOiB0aGUgaG9zdCBtYXkgc3dhcCByZXBvcnRzIG9uIHRoZSBzYW1lIHJvdXRlLFxyXG4gICAgICAvLyBhbmQgZWFjaCBhcnJpdmFsIGNhcnJpZXMgaXRzIG93biA/cGFnZT0uXHJcbiAgICAgIGNvbnN0IHBhZ2VJZCA9IHRoaXMuX3BhZ2VJZEZyb21VcmwoKTtcclxuXHJcbiAgICAgIC8vIE9ubHkgdGhlIHJlcG9ydCBpZCBhbmQgdGhlIHBhZ2UgcGFyYW0gcmUtcnVuIHRoaXMuIFRoZSB2aWV3IHN0YXRlIGJlbG93XHJcbiAgICAgIC8vIGlzIHdyaXR0ZW4gaGVyZSBhbmQgcmVhZCBieSB0aGUgY29uZmlnIGJ1aWxkLCBzbyBpdCBzdGF5cyB1bnRyYWNrZWQuXHJcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZS5zZXQoZmFsc2UpO1xyXG5cclxuICAgICAgICAvLyBBIG5ldyByZXBvcnQncyBwYWdlcyBhcmUgbm90IHRoaXMgcmVwb3J0J3MgcGFnZXMg4oCUIGRyb3AgdGhlIGJpbmRpbmdcclxuICAgICAgICAvLyB1bnRpbCBpdHMgY2FudmFzIHNheXMgd2hpY2ggcGFnZSBpdCBsYW5kZWQgb24uXHJcbiAgICAgICAgdGhpcy5jaGF0UGFnZUlkLnNldChudWxsKTtcclxuICAgICAgICB0aGlzLnBhZ2VJZC5zZXQocGFnZUlkKTtcclxuICAgICAgICB0aGlzLl9wYWdlUmVwb3J0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHJlcG9ydElkICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuX2xvYWRSZXBvcnQocmVwb3J0SWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBGb3JnZXQgdGhlIHJlc3RvcmVkIHJlcG9ydCwgc28gYSBob3N0IHRoYXQgY29tZXMgYmFjayB0byBpdCByZWFkc1xyXG4gICAgICAgICAgLy8gdGhlIFVSTCBhZ2Fpbi5cclxuICAgICAgICAgIHRoaXMuX3Jlc3RvcmVkUmVwb3J0SWQgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KG51bGwpO1xyXG4gICAgICAgICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVFZGl0TW9kZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdE1vZGUudXBkYXRlKChlZGl0TW9kZSkgPT4gIWVkaXRNb2RlKTtcclxuICB9XHJcblxyXG4gIC8vIFRoZSBlZGl0IHRvb2xzIGxpdmUgaW4gdGhpcyB0b29sYmFyLCBidXQgdGhlIGNhbnZhcyBvd25zIHdoYXQgdGhleSBhY3Qgb25cclxuICAvLyAodGhlIGFjdGl2ZSBwYWdlLCB0aGUgaGVhZGVyL2Zvb3RlciBiYW5kcywgd2hpY2ggbGF5ZXIgaXMgbGl2ZSkuXHJcbiAgcHVibGljIGdldCBpc01hc3Rlck1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FudmFzPy5tYXN0ZXJNb2RlKCkgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkVGV4dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhbnZhcz8uYWRkVGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZU1hc3Rlck1vZGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jYW52YXM/LnRvZ2dsZU1hc3Rlck1vZGUoKTtcclxuICB9XHJcblxyXG4gIC8vIFJlcG9ydCBzZXR0aW5ncyDigJQgbmFtZSwgcGFnZSBzaXplLCBvcmllbnRhdGlvbiwgbGF5b3V0IG1vZGUsIGRlbGV0ZS4gVGhlXHJcbiAgLy8gZGlhbG9nIHBlcmZvcm1zIHRoZSBkZWxldGUgaXRzZWxmOyB3ZSByZWFjdCB0byB3aGF0IGl0IHJlcG9ydHMgYmFjay5cclxuICBwdWJsaWMgcmVwb3J0U2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xyXG4gICAgaWYgKCFyZXBvcnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlcG9ydElkID0gcmVwb3J0LmlkO1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZy5vcGVuPFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCB1bmtub3duLCBSZXBvcnRTZXR0aW5nc1Jlc3VsdD4oUmVwb3J0U2V0dGluZ3NDb21wb25lbnQsIHtcclxuICAgICAgZGF0YTogeyByZXBvcnQgfSxcclxuICAgICAgd2lkdGg6ICc0NjBweCcsXHJcbiAgICB9KVxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbiA9PT0gJ2RlbGV0ZWQnKSB7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZWQuZW1pdChyZXBvcnRJZCk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdD8uYWN0aW9uID09PSAnc2F2ZWQnKSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydElkLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29tcG9uZW50IHNldHRpbmdzIOKAlCB0aXRsZSwgZXhhY3QgZ2VvbWV0cnksIGFuZCB0aGUgZGlhZ25vc3RpYyB2aWV3c1xyXG4gIC8vIChTUUwsIGNvbmZpZywgZmlsdGVyIHdpcmluZykuXHJcbiAgcHVibGljIGNvbXBvbmVudFNldHRpbmdzKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50TW9kZWwpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XHJcbiAgICBpZiAoIXJlcG9ydCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVwb3J0SWQgPSByZXBvcnQuaWQ7XHJcblxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW48Q29tcG9uZW50U2V0dGluZ3NDb21wb25lbnQsIHVua25vd24sIENvbXBvbmVudFNldHRpbmdzUmVzdWx0PihcclxuICAgICAgQ29tcG9uZW50U2V0dGluZ3NDb21wb25lbnQsXHJcbiAgICAgIHtcclxuICAgICAgICBkYXRhOiB7IHJlcG9ydCwgY29tcG9uZW50IH0sXHJcbiAgICAgICAgd2lkdGg6ICc2NDBweCcsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEZpbHRlciBhZGQvcmVtb3ZlL2xldmVsIGNoYW5nZXMgcGVyc2lzdCBpbW1lZGlhdGVseSBpbnNpZGUgdGhlIGRpYWxvZyAobm9cclxuICAgIC8vIFwic2F2ZVwiKSBhbmQgY2FuIGxlYXZlIGl0IGJ5IGFuIGV4aXQgdGhhdCBjYXJyaWVzIG5vIHJlc3VsdCwgc28gdGhleSBhcmVcclxuICAgIC8vIGFubm91bmNlZCBhcyB0aGV5IGxhbmQuIFRoZSByZWxvYWQgd2FpdHMgZm9yIHRoZSBjbG9zZSBzbyB0aGUgY2FudmFzIGlzbid0XHJcbiAgICAvLyByZS1yZW5kZXJpbmcgdW5kZXJuZWF0aCBhbiBvcGVuIGRpYWxvZy5cclxuICAgIGxldCBmaWx0ZXJzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmZpbHRlcnNDaGFuZ2VkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbChkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gZmlsdGVyc0NoYW5nZWQgPSB0cnVlKTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIC8vIFRoZSBkaWFsb2cgY29uZmlybXMgKyBwZXJmb3JtcyB0aGUgZGVsZXRlIGl0c2VsZi4gVGhlIGNvbXBvbmVudCBpc1xyXG4gICAgICAgIC8vIGdvbmUgZnJvbSB0aGUgcmVwb3J0LCBzbyByZWxvYWQgcmF0aGVyIHRoYW4gcGF0Y2hpbmcgaXQgb3V0IGxvY2FsbHkg4oCUXHJcbiAgICAgICAgLy8gaXRzIGZpbHRlcnMgd2VudCB3aXRoIGl0LCB3aGljaCB0aGUgcmVwb3J0IGJhciBoYXMgdG8gYmUgcmVidWlsdCBmb3IuXHJcbiAgICAgICAgaWYgKHJlc3VsdD8uZGVsZXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnRJZCk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGhlIHJlcG9ydCdzIGZpbHRlciBncm91cHMgY2hhbmdlZCwgc28gdGhlIHJlcG9ydCBiYXIgYW5kIHRoZVxyXG4gICAgICAgIC8vIG9uLWNvbXBvbmVudCBzdHJpcHMgaGF2ZSB0byBiZSByZWJ1aWx0IGZyb20gYSBmcmVzaCByZXBvcnQuXHJcbiAgICAgICAgaWYgKGZpbHRlcnNDaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydElkKTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBOb3RoaW5nIGVsc2UgaW4gdGhlIGRpYWxvZyB0b3VjaGVzIHRoZSBxdWVyeSDigJQgdGl0bGUgYW5kIHBhZGRpbmcgYXJlXHJcbiAgICAgICAgLy8gcHJlc2VudGF0aW9uLiBSZXBhaW50IHRoZSBvbmUgY29tcG9uZW50IGl0IHdhcyBvcGVuZWQgZm9yIGFuZCBsZWF2ZVxyXG4gICAgICAgIC8vIGV2ZXJ5IG90aGVyIGNvbXBvbmVudCdzIGRhdGEsIGFuZCBpdHMgcXVlcnksIGFsb25lLlxyXG4gICAgICAgIGlmIChyZXN1bHQ/LnNldHRpbmdzKSB7XHJcbiAgICAgICAgICB0aGlzLl9jYW52YXM/LmFwcGx5Q29tcG9uZW50U2V0dGluZ3MoY29tcG9uZW50LmlkLCByZXN1bHQuc2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgY2FudmFzIG1vdmVkIHRvIGFub3RoZXIgcGFnZTogcmVmbGVjdCBpdCBpbiB0aGUgVVJMIHNvIGEgcmVmcmVzaCBvciBhXHJcbiAgLy8gc2hhcmVkIGxpbmsgY29tZXMgYmFjayBoZXJlICh0aGUgd3JpdGUgaXRzZWxmIGlzIF93cml0ZVVybCdzKS5cclxuICBwdWJsaWMgb25DYW52YXNQYWdlQ2hhbmdlZChwYWdlSWQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcclxuICAgIC8vIFRoZSBkZWVwIGxpbmsgaGFzIGJlZW4gY29uc3VtZWQ7IGZyb20gaGVyZSB0aGUgY2FudmFzIG93bnMgdGhlIHBhZ2UuXHJcbiAgICB0aGlzLnBhZ2VJZC5zZXQobnVsbCk7XHJcbiAgICB0aGlzLmNoYXRQYWdlSWQuc2V0KHBhZ2VJZCk7XHJcbiAgICB0aGlzLl9wYWdlUmVwb3J0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHBhZ2VJZCk7XHJcbiAgICB0aGlzLl9wYWdlV3JpdGUkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIC8vIFRoZSBjYW52YXMgY2hhbmdlZCB0aGUgcmVwb3J0J3Mgc3RydWN0dXJlIChhZGRlZCBhIHBhZ2UpIOKAlCByZS1mZXRjaCBzbyB0aGVcclxuICAvLyBuZXcgcGFnZSByZW5kZXJzOyB0aGUgY2FudmFzIGxhbmRzIHRoZSB2aWV3IG9uIGl0LlxyXG4gIHB1YmxpYyBvbkNhbnZhc1JlcG9ydENoYW5nZWQoKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xyXG4gICAgaWYgKHJlcG9ydCkge1xyXG4gICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydC5pZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBFeHBvcnQgdGhlIHJlcG9ydCB0byBQb3dlclBvaW50LCBlbnRpcmVseSBjbGllbnQtc2lkZSAobmF0aXZlIGVkaXRhYmxlXHJcbiAgLy8gY2hhcnRzOyBwYWdlID0gc2xpZGUpLiBUaGUgZG9jayBzaG93cyBwcm9ncmVzcyB1bnRpbCB0aGUgZmlsZSBzYXZlcy5cclxuICBwdWJsaWMgZXhwb3J0UG93ZXJwb2ludCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XHJcbiAgICBpZiAoIXJlcG9ydCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcHJvY2Vzcy5ydW4oXHJcbiAgICAgICdFeHBvcnRpbmcgUG93ZXJQb2ludCcsXHJcbiAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UucG93ZXJwb2ludChyZXBvcnQpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEV4cG9ydCB0byBQREYsIGVudGlyZWx5IGNsaWVudC1zaWRlIChvZmZzY3JlZW4gRUNoYXJ0cyBhdCAzw5c7IHBhZ2UgPSBQREYgcGFnZSkuXHJcbiAgcHVibGljIGV4cG9ydFBkZigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XHJcbiAgICBpZiAoIXJlcG9ydCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcHJvY2Vzcy5ydW4oXHJcbiAgICAgICdFeHBvcnRpbmcgUERGJyxcclxuICAgICAgdGhpcy5fZXhwb3J0U2VydmljZS5wZGYocmVwb3J0KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgd2hvbGUgcmVwb3J0IGFzIGZpbGVzIGluIG9uZSBhY3Rpb246IHRoZSBzZXJ2ZXIgd3JpdGVzIG9uZSBDU1YgcGVyXHJcbiAgLy8gY29tcG9uZW50LCBlYWNoIHdoYXQgdGhlIHNjcmVlbiBzaG93cyAoYSBjaGFydCBvciBLUEkgYXMgZHJhd24sIGF0IHRoZVxyXG4gIC8vIHZpZXdlcidzIGdyb3VwLWJ5IGdyYWluOyBhIGxpc3QgaW4gZnVsbCksIGFuZCB6aXBzIHRoZW0gZm9sZGVyZWQgYnkgcGFnZVxyXG4gIC8vIHdpdGggYW4gRXhwb3J0IE5vdGVzLnR4dCB0aGF0IHJlY29yZHMgdGhlIGZpbHRlcnMgYXMgdGhlIGJhciByZWFkcyB0aGVtLlxyXG4gIC8vIExpc3RzIHVzZSB0aGVpciBzYXZlZCBkZWZhdWx0IHNvcnQ7IGEgaGVhZGVyIGNsaWNrIGlzIGNhcnJpZWQgb25seSBieSBhXHJcbiAgLy8gY29tcG9uZW50J3Mgb3duIENTViBleHBvcnQuIGB0aGlzUGFnZWAgbmFycm93cyBpdCB0byB0aGUgcGFnZSB0aGUgY2FudmFzIGlzXHJcbiAgLy8gc2hvd2luZy4gVW5saWtlIHRoZSBQREYvUG93ZXJQb2ludCBleHBvcnRzIHRoZSBmaWxlcyBhcmUgd3JpdHRlblxyXG4gIC8vIHNlcnZlci1zaWRlLCBzbyB0aGV5IGFyZSBub3QgY2FwcGVkIGJ5IHdoYXQgYSBzbGlkZSBjYW4gaG9sZC5cclxuICBwdWJsaWMgZXhwb3J0RGF0YSh0aGlzUGFnZSA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xyXG4gICAgaWYgKCFyZXBvcnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhZ2VJZCA9IHRoaXNQYWdlID8gdGhpcy5fY2FudmFzPy5hY3RpdmVQYWdlPy5pZCA/PyBudWxsIDogbnVsbDtcclxuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNvbHZlRm9yUmVwb3J0KHJlcG9ydCwgcGFnZUlkKTtcclxuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpO1xyXG5cclxuICAgIHRoaXMuX3Byb2Nlc3MuZG93bmxvYWQoXHJcbiAgICAgICdFeHBvcnRpbmcgZGF0YScsXHJcbiAgICAgIHRoaXMuX2NvbGxlY3Rvci5nZXRGaWx0ZXJTdW1tYXJ5KHJlcG9ydClcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcCgobGluZXMpID0+IHRoaXMuX3JlcG9ydERhdGEuZXhwb3J0UmVwb3J0KFxyXG4gICAgICAgICAgICByZXBvcnQuaWQsXHJcbiAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgIHBhZ2VJZCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5LFxyXG4gICAgICAgICAgICBsaW5lcyxcclxuICAgICAgICAgICkpLFxyXG4gICAgICAgICksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVhY3QgdG8gZWFjaCBjaGF0IHR1cm4gKGZzLWNoYXQgaGFuZGxlcyB0aGUgcmVxdWVzdCArIHBlcnNpc3RlbmNlKTsgd2VcclxuICAvLyBvbmx5IGNhcmUgYWJvdXQgdGhlIHJlcG9ydCBzaWRlIGVmZmVjdHMgdGhpcyBjb250ZXh0J3MgYmFja2VuZCBmbGFncy5cclxuICBwdWJsaWMgb25DaGF0UmVzcG9uc2UocmVzcG9uc2U6IEZzQWlDaGF0UmVzcG9uc2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlcG9ydElkID0gdGhpcy5yZXBvcnRJZCgpO1xyXG4gICAgaWYgKHJlcG9ydElkID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlcG9ydFJlc3BvbnNlID0gcmVzcG9uc2UgYXMgRnNBaUNoYXRSZXNwb25zZSAmIFJlcG9ydENoYXRSZXNwb25zZTtcclxuXHJcbiAgICAvLyBBIHN0cnVjdHVyYWwgY2hhbmdlIG9yIGEgcmVuYW1lIGJvdGggcmUtZmV0Y2ggdGhlIHJlcG9ydCAoc2Vzc2lvbiBmaWx0ZXJcclxuICAgIC8vIHZhbHVlcyBzdXJ2aXZlKTsgYSByZW5hbWUgYWRkaXRpb25hbGx5IG5vdGlmaWVzIHRoZSBob3N0IHNvIGl0IGNhblxyXG4gICAgLy8gcmVmcmVzaCBhIGJyZWFkY3J1bWIgLyB0aXRsZS5cclxuICAgIGlmIChyZXBvcnRSZXNwb25zZS5yZXBvcnRDaGFuZ2VkIHx8IHJlcG9ydFJlc3BvbnNlLnJlcG9ydFJlbmFtZWQpIHtcclxuICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnRJZCwgISFyZXBvcnRSZXNwb25zZS5yZXBvcnRSZW5hbWVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIERyYWcgdGhlIGRpdmlkZXIgYmV0d2VlbiB0aGUgY2hhdCBhbmQgY2FudmFzIHBhbmVzIChwb2ludGVyLWNhcHR1cmUgbG9vcFxyXG4gIC8vIG91dHNpZGUgQW5ndWxhcikuXHJcbiAgcHVibGljIG9uUmVzaXplU3RhcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGUgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBoYW5kbGUuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcclxuICAgIHRoaXMuX3NwbGl0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgncmVzaXppbmcnKTtcclxuXHJcbiAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgY29uc3QgbW92ZSA9IChlOiBQb2ludGVyRXZlbnQpID0+IHRoaXMuX3Jlc2l6ZVRvKGUuY2xpZW50WCk7XHJcbiAgICAgIGNvbnN0IGVuZCA9ICgpID0+IHtcclxuICAgICAgICBoYW5kbGUucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XHJcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XHJcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIGVuZCk7XHJcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCBlbmQpO1xyXG4gICAgICAgIHRoaXMuX3NwbGl0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgncmVzaXppbmcnKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG1vdmUpO1xyXG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgZW5kKTtcclxuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCBlbmQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBXaGF0IHRoZSB2aWV3ZXIgaGFzIG9uIHNjcmVlbiBhcyBhIGNoYXQgdHVybiBzZW5kcyBpdC4gVGhlIGNhbnZhc1xyXG4gIC8vIHNlbGVjdGlvbiBjb3VudHMgb25seSBpbiBlZGl0IG1vZGU6IGl0IGlzIGRyYXduIG9ubHkgdGhlbiwgYW5kIGl0IGlzIGtlcHRcclxuICAvLyAobm90IGNsZWFyZWQpIHdoZW4gZWRpdCBtb2RlIGlzIGxlZnQuXHJcbiAgcHJpdmF0ZSBfY2hhdFZpZXdlclN0YXRlKCk6IFJlcG9ydENoYXRWaWV3ZXJTdGF0ZSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBncmFudWxhcml0eTogdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCksXHJcbiAgICAgIHNlbGVjdGVkQ29tcG9uZW50SWQ6IHRoaXMuZWRpdE1vZGUoKSA/IHRoaXMuX2NhbnZhcz8uc2VsZWN0ZWRDb21wb25lbnRJZCgpID8/IG51bGwgOiBudWxsLFxyXG4gICAgICBmaWx0ZXJzOiB0aGlzLl9maWx0ZXJTdGF0ZS52aWV3ZXJGaWx0ZXJzKCksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplVG8oY2xpZW50WDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGlmIChyZWN0LndpZHRoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByYXRpbyA9IChjbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGg7XHJcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5taW4oMC44LCBNYXRoLm1heCgwLjIsIHJhdGlvKSk7XHJcbiAgICB0aGlzLl9jaGF0UGFuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5mbGV4QmFzaXMgPSBgJHtjbGFtcGVkICogMTAwfSVgO1xyXG4gIH1cclxuXHJcbiAgLy8gVGhlIHBhZ2UgaWQgc2l0dGluZyBpbiB0aGUgVVJMIHJpZ2h0IG5vdywgb3IgbnVsbCB3aGVuIGRlZXAgbGlua2luZyBpcyBvZmZcclxuICAvLyBvciB0aGUgdmFsdWUgaXMgbm90IGEgdXNhYmxlIGlkLlxyXG4gIHByaXZhdGUgX3BhZ2VJZEZyb21VcmwoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBjb25zdCBwYXJhbSA9IHRoaXMucGFnZVF1ZXJ5UGFyYW0oKTtcclxuICAgIGlmICghcGFyYW0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFnZUlkID0gTnVtYmVyKHRoaXMuX3JvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KHBhcmFtKSk7XHJcblxyXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYWdlSWQpICYmIHBhZ2VJZCA+IDAgPyBwYWdlSWQgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gV3JpdGVzIHRoZSBvcGVuIHBhZ2UgYW5kIHRoZSB2aWV3ZXIgc3RhdGUgaW50byB0aGUgVVJMIGluIG9uZSBnby4gT25seVxyXG4gIC8vIHRoZSBrZXlzIHRoaXMgdmlldyBvd25zIGFyZSB0b3VjaGVkICgnbWVyZ2UnKSwgYW5kIHJlcGxhY2VVcmwga2VlcHMgdGhlXHJcbiAgLy8gd3JpdGVzIG91dCBvZiB0aGUgYnJvd3NlciBoaXN0b3J5OiBCYWNrIGxlYXZlcyB0aGUgcmVwb3J0IHJhdGhlciB0aGFuXHJcbiAgLy8gd2Fsa2luZyBldmVyeSBwYWdlIGFuZCBmaWx0ZXIgdmlzaXRlZC5cclxuICBwcml2YXRlIF93cml0ZVVybCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XHJcblxyXG4gICAgLy8gQSByZXBvcnQgc3RpbGwgb24gc2NyZWVuIHdoaWxlIHRoZSBob3N0J3MgbmV4dCBvbmUgbG9hZHMgbXVzdCBub3Qgd3JpdGVcclxuICAgIC8vIGl0cyBzdGF0ZSBvdmVyIHRoZSBuZXcgcmVwb3J0J3MgVVJMLlxyXG4gICAgaWYgKCFyZXBvcnQgfHwgcmVwb3J0LmlkICE9PSB0aGlzLnJlcG9ydElkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB0aGlzLnVybFN0YXRlKClcclxuICAgICAgPyBidWlsZFJlcG9ydFVybFBhcmFtcyh0aGlzLl9maWx0ZXJTdGF0ZS51cmxTbmFwc2hvdChyZXBvcnQpLCB0aGlzLl9yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwKVxyXG4gICAgICA6IHt9O1xyXG5cclxuICAgIGNvbnN0IHBhZ2VQYXJhbSA9IHRoaXMucGFnZVF1ZXJ5UGFyYW0oKTtcclxuICAgIGlmIChwYWdlUGFyYW0gJiYgdGhpcy5fcGFnZVJlcG9ydGVkKSB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zW3BhZ2VQYXJhbV0gPSB0aGlzLmNoYXRQYWdlSWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIU9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLl9yb3V0ZSxcclxuICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgIHJlcGxhY2VVcmw6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRSZXBvcnQocmVwb3J0SWQ6IG51bWJlciwgZW1pdFJlbmFtZWQgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVwb3J0RGF0YS5nZXQocmVwb3J0SWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVwb3J0OiBSZXBvcnQpID0+IHtcclxuICAgICAgICAvLyBUaGUgVVJMIGlzIHJlYWQgb25jZSBwZXIgcmVwb3J0LCBvbiBpdHMgZmlyc3QgbG9hZDsgZXZlcnkgbGF0ZXIgbG9hZFxyXG4gICAgICAgIC8vIGtlZXBzIHRoZSBzdGF0ZSBpbiBtZW1vcnkuXHJcbiAgICAgICAgY29uc3QgcmVzdG9yZSA9IHRoaXMudXJsU3RhdGUoKSAmJiByZXBvcnRJZCAhPT0gdGhpcy5fcmVzdG9yZWRSZXBvcnRJZFxyXG4gICAgICAgICAgPyByZWFkUmVwb3J0VXJsUGFyYW1zKHRoaXMuX3JvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXApXHJcbiAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5fcmVzdG9yZWRSZXBvcnRJZCA9IHJlcG9ydElkO1xyXG5cclxuICAgICAgICB0aGlzLnJlcG9ydC5zZXQocmVwb3J0KTtcclxuICAgICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5pbml0KHJlcG9ydCwgcmVzdG9yZSk7XHJcbiAgICAgICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcclxuXHJcbiAgICAgICAgaWYgKGVtaXRSZW5hbWVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmFtZWQuZW1pdChyZXBvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBSZXBvcnQtbGV2ZWwgZmlsdGVyIGdyb3VwcyBpbiB0aGVpciBzYXZlZCBvcmRlciDigJQgdGhlIG9uZXMgdGhhdCByZW5kZXIgaW5cclxuICAvLyB0aGUgdG9vbGJhciAoY29tcG9uZW50LWxldmVsIGdyb3VwcyByZW5kZXIgb24gdGhlaXIgY29tcG9uZW50cykuXHJcbiAgcHJpdmF0ZSBfcmVwb3J0R3JvdXBzKCk6IFJlcG9ydEZpbHRlckdyb3VwW10ge1xyXG4gICAgcmV0dXJuICh0aGlzLnJlcG9ydCgpPy5maWx0ZXJHcm91cHMgPz8gW10pXHJcbiAgICAgIC5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5sZXZlbCA9PT0gJ3JlcG9ydCcgfHwgZ3JvdXAubGV2ZWwgPT09ICdib3RoJylcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcclxuICB9XHJcblxyXG4gIC8vIChSZSlidWlsZCB0aGUgdG9vbGJhciBmcy1maWx0ZXIgY29uZmlnIOKAlCB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBpdGVtcyBhbmRcclxuICAvLyB0aGVuIHRoZSBncm91cC1ieSBjb250cm9sLlxyXG4gIHByaXZhdGUgX2J1aWxkUmVwb3J0Q29uZmlnKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcclxuICAgIGNvbnN0IHJlcG9ydElkID0gcmVwb3J0Py5pZCA/PyBudWxsO1xyXG5cclxuICAgIC8vIERyb3AgYSBncmFpbiB0aGUgY29udHJvbCBubyBsb25nZXIgb2ZmZXJzIOKAlCB0aGUgYWdlbnQgY2FuIG5hcnJvdyB0aGUgbGlzdFxyXG4gICAgLy8gbWlkLXNlc3Npb24sIGFuZCBhbiBvdmVycmlkZSB0aGUgdmlld2VyIGNhbid0IHNlZSBpcyB3b3JzZSB0aGFuIG5vbmUuXHJcbiAgICBpZiAocmVwb3J0ICYmICFpc0dyYW51bGFyaXR5T2ZmZXJlZChyZXBvcnQsIHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpKSkge1xyXG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRGcmVxdWVuY3kobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXRlbXMgPSByZXBvcnRJZFxyXG4gICAgICA/IHRoaXMuX3JlcG9ydEdyb3VwcygpLm1hcCgoZ3JvdXApID0+XHJcbiAgICAgICAgZmlsdGVySXRlbUZvckdyb3VwKGdyb3VwLCB0aGlzLl9yZXBvcnREYXRhLCByZXBvcnRJZCwgdGhpcy5fZmlsdGVyU3RhdGUudmFsdWUoZ3JvdXAuaWQpKSlcclxuICAgICAgOiBbXTtcclxuXHJcbiAgICAvLyBUaGUgZ3JvdXAtYnkgY29udHJvbCBsZWFkcyB0aGUgYmFyLCBhaGVhZCBvZiBldmVyeSBmaWx0ZXI6IGl0IHNldHMgdGhlXHJcbiAgICAvLyBncmFpbiB0aGUgd2hvbGUgcmVwb3J0IGlzIHJlYWQgYXQsIHNvIGl0IGlzIHRoZSBmaXJzdCB0aGluZyBhIHZpZXdlclxyXG4gICAgLy8gZGVjaWRlcy4gSXQgaXMgbm90IGEgZmlsdGVyIGdyb3VwIOKAlCBpdCByZS1idWNrZXRzIHJvd3MgcmF0aGVyIHRoYW5cclxuICAgIC8vIG5hcnJvd2luZyB0aGVtIOKAlCBzbyBpdCBpcyBwbGFjZWQgaGVyZSByYXRoZXIgdGhhbiBvcmRlcmVkIGFtb25nIHRoZW0uXHJcbiAgICBjb25zdCBncm91cEJ5SXRlbSA9IHRoaXMuX2dyb3VwQnlJdGVtKCk7XHJcbiAgICBpZiAoZ3JvdXBCeUl0ZW0pIHtcclxuICAgICAgaXRlbXMudW5zaGlmdChncm91cEJ5SXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXBvcnRGaWx0ZXJDb25maWcuc2V0KHtcclxuICAgICAgLy8gZnMtZmlsdGVyIG5ldmVyIHRvdWNoZXMgdGhlIFVSTCBvciBwZXJzaXN0cyBmaWx0ZXIgc3RhdGU6IGl0cyBrZXlzIGFyZVxyXG4gICAgICAvLyBub3QgbmFtZXNwYWNlZCwgaXQgd3JpdGVzIG91dHNpZGUgdGhlIHJvdXRlciwgYW5kIGl0IHdvdWxkIGZyZWV6ZSBhXHJcbiAgICAgIC8vIHJvbGxpbmcgcmFuZ2UgYXMgdHdvIGRhdGVzLiBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2Ugb3ducyB0aGUgdmFsdWVzLFxyXG4gICAgICAvLyBhbmQgX3dyaXRlVXJsIGlzIHRoZSBvbmUgd3JpdGVyIG9mIHRoZSBVUkwuXHJcbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxyXG4gICAgICBwZXJzaXN0OiBmYWxzZSxcclxuICAgICAgaXRlbXMsXHJcbiAgICAgIGNoYW5nZTogKHF1ZXJ5KSA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCB7IGdyb3VwSWQsIHZhbHVlIH0gb2YgZ3JvdXBWYWx1ZXNGcm9tUXVlcnkocXVlcnkgPz8ge30sIHRoaXMuX3JlcG9ydEdyb3VwcygpKSkge1xyXG4gICAgICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0VmFsdWUoZ3JvdXBJZCwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBOb3QgYSBmaWx0ZXIgZ3JvdXAg4oCUIHRoZSBncmFpbiBpcyByZWFkIHN0cmFpZ2h0IG9mZiB0aGUgcXVlcnkuXHJcbiAgICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0RnJlcXVlbmN5KChxdWVyeT8uW0dST1VQX0JZX0lURU1dIGFzIENoYXJ0R3JhbnVsYXJpdHkpIHx8IG51bGwpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCBhcyBhbiBmcy1maWx0ZXIgaXRlbSwgb3IgbnVsbCB3aGVuIHRoZSByZXBvcnRcclxuICAvLyBoYXMgbm9uZSB0byBzaG93LiBTZWVkZWQgZnJvbSB0aGUgc2Vzc2lvbiBzdGF0ZSBzbyB0aGUgZ3JhaW4gdGhlIHZpZXdlclxyXG4gIC8vIHBpY2tlZCBzdXJ2aXZlcyB0aGUgcmVwb3J0IGJlaW5nIHJlLWZldGNoZWQgYWZ0ZXIgYSBjaGF0IGVkaXQuXHJcbiAgcHJpdmF0ZSBfZ3JvdXBCeUl0ZW0oKTogSUZpbHRlckNvbmZpZ0l0ZW0gfCBudWxsIHtcclxuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XHJcblxyXG4gICAgcmV0dXJuIHJlcG9ydFxyXG4gICAgICA/IGdyb3VwQnlGaWx0ZXJJdGVtKHJlcG9ydCwgdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCkpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZzLWFpLXJlcG9ydCBmcy1jb2x1bW5cIj5cblxuICA8ZGl2IGNsYXNzPVwiZnMtYWktcmVwb3J0X19oZWFkZXIgZnMtcm93LmFsaWduLWNlbnRlclwiPlxuICAgIDxoMiBjbGFzcz1cImZzLWFpLXJlcG9ydF9fdGl0bGUgZnMtZmxleFwiPnt7IHJlcG9ydCgpPy5uYW1lIH19PC9oMj5cblxuICAgIEBpZiAocmVwb3J0KCkpIHtcbiAgICAgIDwhLS0gUmVwb3J0LWxldmVsIGZpbHRlcnMsIGlubGluZSB3aXRoIHRoZSB0b29sYmFyIGFjdGlvbnMuIGZzLWZpbHRlclxuICAgICAgICAgICByZWFkcyBpdHMgY29uZmlnIG9uY2UgYXQgaW5pdCwgc28gaXQncyBrZXllZCBvbiB0aGUgZmlsdGVyXG4gICAgICAgICAgIHNpZ25hdHVyZTogd2hlbiB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBzZXQgY2hhbmdlcyB0aGUgYmxvY2sgaXNcbiAgICAgICAgICAgcmVjcmVhdGVkIGFuZCByZS1yZWFkcyB0aGUgcmVidWlsdCBjb25maWcuIC0tPlxuICAgICAgQGlmIChyZXBvcnRIYXNGaWx0ZXJzKCkpIHtcbiAgICAgICAgQGZvciAoa2V5IG9mIFtyZXBvcnRGaWx0ZXJLZXkoKV07IHRyYWNrIGtleSkge1xuICAgICAgICAgIDxmcy1maWx0ZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmcy1haS1yZXBvcnRfX2ZpbHRlcnNcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cInJlcG9ydEZpbHRlckNvbmZpZygpXCI+XG4gICAgICAgICAgPC9mcy1maWx0ZXI+XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPCEtLSBXaGF0IGxheW91dCBlZGl0aW5nIGNhbiBhZGQgb3Igc3dpdGNoIHRvLCBhbmQgdGhlIHdheSBvdXQgb2YgaXQuXG4gICAgICAgICAgIE9uZSBzdHlsZSBmb3IgYWxsIHRocmVlIOKAlCBvdXRsaW5lZCwgaWNvbiBhbmQgdGV4dC4gXCJIZWFkZXIgJiBmb290ZXJcIlxuICAgICAgICAgICBpcyBhIHRvZ2dsZTogaXQga2VlcHMgaXRzIGxhYmVsIGFuZCB0dXJucyBncmF5IHdoaWxlIGl0IGlzIG9uLiAtLT5cbiAgICAgIEBpZiAoZWRpdE1vZGUoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtYWktcmVwb3J0X19lZGl0LXRvb2xzIGZzLXJvdy5hbGlnbi1jZW50ZXIuZ2FwLXhzXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBZGQgYSBibG9jayBvZiB0ZXh0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFRleHQoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPnRpdGxlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIEFkZCB0ZXh0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZnMtYWktcmVwb3J0X19tYXN0ZXJcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzTWFzdGVyTW9kZVwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImlzTWFzdGVyTW9kZSA/ICdCYWNrIHRvIGVkaXRpbmcgdGhpcyBwYWdlJyA6ICdFZGl0IHRoZSBoZWFkZXIgYW5kIGZvb3RlciBzaG93biBvbiBldmVyeSBwYWdlJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNYXN0ZXJNb2RlKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj53ZWJfYXNzZXQ8L21hdC1pY29uPlxuICAgICAgICAgICAgSGVhZGVyICYgZm9vdGVyXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFZGl0TW9kZSgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgRG9uZSBlZGl0aW5nXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIFRoZSB6b25lIGV2ZXJ5IGRhdGUgaW4gdGhpcyByZXBvcnQgaXMgZmlsdGVyZWQgYW5kIGdyb3VwZWQgaW4sIHRoZVxuICAgICAgICAgICBzYW1lIGZvciBldmVyeSB2aWV3ZXIuIFNob3duIG9ubHkgd2hlbiB0aGUgc2VydmVyIHNlbmRzIGl0OyBhIGNsaWNrXG4gICAgICAgICAgIG9wZW5zIFJlcG9ydCBzZXR0aW5ncywgd2hlcmUgaXQgaXMgY2hhbmdlZC4gLS0+XG4gICAgICBAaWYgKHJlcG9ydCgpPy5lZmZlY3RpdmVUaW1lem9uZTsgYXMgZWZmZWN0aXZlVGltZXpvbmUpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImZzLWFpLXJlcG9ydF9fdGltZXpvbmVcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0RhdGVzIGFyZSBmaWx0ZXJlZCBhbmQgZ3JvdXBlZCBpbiAnICsgZWZmZWN0aXZlVGltZXpvbmUgKyAnIGZvciBldmVyeW9uZS4gQ2hhbmdlIGl0IGluIFJlcG9ydCBzZXR0aW5ncy4nXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZXBvcnRTZXR0aW5ncygpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPnNjaGVkdWxlPC9tYXQtaWNvbj5cbiAgICAgICAgICB7eyB0aW1lem9uZUxhYmVsKCkgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gT25lIGljb24gZm9yIGJvdGggc3RhdGVzOiBpdCByZWFkcyBhcyBwcmVzc2VkIHdoaWxlIGVkaXRpbmcgcmF0aGVyXG4gICAgICAgICAgIHRoYW4gc3dhcHBpbmcgdG8gc29tZXRoaW5nIGVsc2UuIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiZnMtYWktcmVwb3J0X190b2dnbGVcIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiZWRpdE1vZGUoKVwiXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiZWRpdE1vZGUoKSA/ICdEb25lIGVkaXRpbmcnIDogJ0VkaXQgbGF5b3V0J1wiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRNb2RlKClcIj5cbiAgICAgICAgPG1hdC1pY29uPmRhc2hib2FyZF9jdXN0b21pemU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBtYXRUb29sdGlwPVwiRXhwb3J0XCJcbiAgICAgICAgICBbZnNNZW51VHJpZ2dlckZvcl09XCJleHBvcnRNZW51XCI+XG4gICAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxmcy1tZW51ICNleHBvcnRNZW51PlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydFBvd2VycG9pbnQoKVwiPlxuICAgICAgICAgIEV4cG9ydCBQb3dlclBvaW50XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0UGRmKClcIj5cbiAgICAgICAgICBFeHBvcnQgUERGXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0RGF0YSgpXCI+XG4gICAgICAgICAgRXhwb3J0IFJhdyBEYXRhXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIEBpZiAoKHJlcG9ydCgpPy5wYWdlcz8ubGVuZ3RoID8/IDApID4gMSkge1xuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydERhdGEodHJ1ZSlcIj5cbiAgICAgICAgICAgIEV4cG9ydCBSYXcgRGF0YSAoVGhpcyBQYWdlKVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgIDwvZnMtbWVudT5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZXBvcnQgc2V0dGluZ3NcIlxuICAgICAgICAgIChjbGljayk9XCJyZXBvcnRTZXR0aW5ncygpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAgICNzcGxpdFxuICAgICAgY2xhc3M9XCJmcy1haS1yZXBvcnRfX3NwbGl0IGZzLXJvdy5hbGlnbi1zdGFydFwiPlxuICAgIDxmcy1haS1jaGF0XG4gICAgICAgICNjaGF0UGFuZWxcbiAgICAgICAgY2xhc3M9XCJjaGF0XCJcbiAgICAgICAgW2Jhc2VQYXRoXT1cImJhc2VQYXRoKClcIlxuICAgICAgICBbcmVxdWVzdERhdGFdPVwiY2hhdFJlcXVlc3REYXRhKClcIlxuICAgICAgICBbcmVhZHldPVwiY2hhdFBhZ2VJZCgpICE9PSBudWxsXCJcbiAgICAgICAgKHJlc3BvbnNlKT1cIm9uQ2hhdFJlc3BvbnNlKCRldmVudClcIj5cbiAgICA8L2ZzLWFpLWNoYXQ+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicmVzaXplclwiXG4gICAgICAgIChwb2ludGVyZG93bik9XCJvblJlc2l6ZVN0YXJ0KCRldmVudClcIj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ2aWV3ZXIgZnMtZmxleCBmcy1jb2x1bW5cIj5cbiAgICAgIEBpZiAocmVwb3J0KCkpIHtcbiAgICAgICAgPGFwcC1yZXBvcnQtY2FudmFzXG4gICAgICAgICAgICBbcmVwb3J0XT1cInJlcG9ydCgpXCJcbiAgICAgICAgICAgIFtlZGl0TW9kZV09XCJlZGl0TW9kZSgpXCJcbiAgICAgICAgICAgIFtwYWdlSWRdPVwicGFnZUlkKClcIlxuICAgICAgICAgICAgKGNvbXBvbmVudFNldHRpbmdzKT1cImNvbXBvbmVudFNldHRpbmdzKCRldmVudClcIlxuICAgICAgICAgICAgKHJlcG9ydENoYW5nZWQpPVwib25DYW52YXNSZXBvcnRDaGFuZ2VkKClcIlxuICAgICAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cIm9uQ2FudmFzUGFnZUNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICA8L2FwcC1yZXBvcnQtY2FudmFzPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
package/esm2022/public_api.mjs
CHANGED
|
@@ -14,4 +14,12 @@ export { ReportData } from './app/reports/data/report.data';
|
|
|
14
14
|
export { ReportService } from './app/reports/services/report.service';
|
|
15
15
|
export { ReportFilterStateService } from './app/reports/services/report-filter-state.service';
|
|
16
16
|
export * from './app/reports/interfaces/report.interface';
|
|
17
|
-
|
|
17
|
+
export * from './app/reports/enums/report-value-format.enum';
|
|
18
|
+
export * from './app/reports/enums/report-list-column-format.enum';
|
|
19
|
+
export * from './app/reports/enums/report-number-units.enum';
|
|
20
|
+
export * from './app/reports/enums/report-chart-data-labels.enum';
|
|
21
|
+
export * from './app/reports/enums/report-chart-color.enum';
|
|
22
|
+
export * from './app/reports/enums/report-chart-line-style.enum';
|
|
23
|
+
export * from './app/reports/enums/report-chart-mark-stat.enum';
|
|
24
|
+
export * from './app/reports/enums/report-chart-date-label.enum';
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSwrRUFBK0U7QUFDL0UsMkVBQTJFO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDOUYsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsa0RBQWtELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIEBmaXJlc3RpdGNoL3JlcG9ydHNcbiAqXG4gKiBUaGUgQUktYnVpbHQgcmVwb3J0IHZpZXdlci9lZGl0b3IsIGl0cyBkYXRhIGdhdGV3YXksIHNlc3Npb24gZmlsdGVyIHN0YXRlIGFuZFxuICogcmVuZGVyZXIgY29tcG9uZW50cy4gVGhlIGhvc3QgYXBwIG9ubHkgbmVlZHMgUmVwb3J0Q29tcG9uZW50IChyb3V0ZSBpdCkg4oCUXG4gKiBldmVyeXRoaW5nIGVsc2UgaXMgaW50ZXJuYWwgd2lyaW5nLiBUaGUgQUkgY2hhdCBpcyBwcm92aWRlZCBieSBAZmlyZXN0aXRjaC9haS5cbiAqL1xuZXhwb3J0IHsgUmVwb3J0Q29tcG9uZW50IH0gZnJvbSAnLi9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvcmVwb3J0LmNvbXBvbmVudCc7XG4vLyBTcGxpdCwgcm91dGluZy1mcmVlIHN1cmZhY2U6IGEgcmVwb3J0cyBsaXN0aW5nIGFuZCBhIHNpbmdsZS1yZXBvcnQgdmlldy4gVGhlXG4vLyBob3N0IHJvdXRlcyBiZXR3ZWVuIHRoZW0gYW5kIHBhc3NlcyBbcmVwb3J0SWRdIGludG8gRnNBaVJlcG9ydENvbXBvbmVudC5cbmV4cG9ydCB7IEZzQWlSZXBvcnRzQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnRzL2ZzLWFpLXJlcG9ydHMuY29tcG9uZW50JztcbmV4cG9ydCB7IEZzQWlSZXBvcnRDb21wb25lbnQgfSBmcm9tICcuL2FwcC9yZXBvcnRzL3ZpZXdzL3JlcG9ydC9mcy1haS1yZXBvcnQuY29tcG9uZW50JztcbmV4cG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuL2FwcC9yZXBvcnRzL2RhdGEvcmVwb3J0LmRhdGEnO1xuZXhwb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4vYXBwL3JlcG9ydHMvc2VydmljZXMvcmVwb3J0LnNlcnZpY2UnO1xuZXhwb3J0IHsgUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvcmVwb3J0cy9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9lbnVtcy9yZXBvcnQtdmFsdWUtZm9ybWF0LmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9lbnVtcy9yZXBvcnQtbnVtYmVyLXVuaXRzLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0YS1sYWJlbHMuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1jaGFydC1jb2xvci5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvZW51bXMvcmVwb3J0LWNoYXJ0LWxpbmUtc3R5bGUuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1jaGFydC1tYXJrLXN0YXQuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1jaGFydC1kYXRlLWxhYmVsLmVudW0nO1xuIl19
|
package/fesm2022/{firestitch-report-echarts-Djtmaxj1.mjs → firestitch-report-echarts-u5ImuZT5.mjs}
RENAMED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { BarChart, LineChart, PieChart } from 'echarts/charts';
|
|
2
|
-
import { GridComponent, TooltipComponent, LegendComponent, DatasetComponent } from 'echarts/components';
|
|
2
|
+
import { GridComponent, TooltipComponent, LegendComponent, DatasetComponent, MarkLineComponent, MarkAreaComponent } from 'echarts/components';
|
|
3
3
|
import * as echarts from 'echarts/core';
|
|
4
4
|
export { echarts as default };
|
|
5
|
+
import { LabelLayout } from 'echarts/features';
|
|
5
6
|
import { CanvasRenderer } from 'echarts/renderers';
|
|
6
|
-
import { R as REPORT_CHART_COLORS_CSS, a as REPORT_CHART_FONT_FAMILY, b as REPORT_AXIS_LABEL_FONT_SIZE } from './firestitch-report-firestitch-report-
|
|
7
|
+
import { R as REPORT_CHART_COLORS_CSS, a as REPORT_CHART_FONT_FAMILY, b as REPORT_AXIS_LABEL_FONT_SIZE } from './firestitch-report-firestitch-report-Cz-kA_id.mjs';
|
|
7
8
|
|
|
8
9
|
// Tree-shaken ECharts build for the reports renderer: only the chart types and
|
|
9
10
|
// components the option-builder emits are registered, keeping the lazy chunk
|
|
@@ -20,6 +21,11 @@ echarts.use([
|
|
|
20
21
|
TooltipComponent,
|
|
21
22
|
LegendComponent,
|
|
22
23
|
DatasetComponent,
|
|
24
|
+
// Reference lines and statistic lines (markLine), reference bands
|
|
25
|
+
// (markArea), and the overlap hiding of 'auto' data labels (LabelLayout).
|
|
26
|
+
MarkLineComponent,
|
|
27
|
+
MarkAreaComponent,
|
|
28
|
+
LabelLayout,
|
|
23
29
|
CanvasRenderer,
|
|
24
30
|
]);
|
|
25
31
|
// The house theme — the single place report chart "standards" live (palette,
|
|
@@ -57,4 +63,4 @@ echarts.registerTheme('report', {
|
|
|
57
63
|
axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },
|
|
58
64
|
},
|
|
59
65
|
});
|
|
60
|
-
//# sourceMappingURL=firestitch-report-echarts-
|
|
66
|
+
//# sourceMappingURL=firestitch-report-echarts-u5ImuZT5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestitch-report-echarts-u5ImuZT5.mjs","sources":["../../src/app/reports/theme/echarts.ts"],"sourcesContent":["// Tree-shaken ECharts build for the reports renderer: only the chart types and\n// components the option-builder emits are registered, keeping the lazy chunk\n// lean. Loaded on demand by ngx-echarts via provideEchartsCore — see\n// REPORT_ECHARTS_PROVIDERS in reports-echarts.provider.ts.\n//\n// The canvas renderer (not SVG) is deliberate: chart.getDataURL() needs it for\n// the high-res images the PPT/PDF exports will use.\n\nimport { BarChart, LineChart, PieChart } from 'echarts/charts';\nimport {\n DatasetComponent,\n GridComponent,\n LegendComponent,\n MarkAreaComponent,\n MarkLineComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { LabelLayout } from 'echarts/features';\nimport { CanvasRenderer } from 'echarts/renderers';\n\nimport { REPORT_CHART_COLORS_CSS } from './palette';\nimport { REPORT_AXIS_LABEL_FONT_SIZE, REPORT_CHART_FONT_FAMILY } from './typography';\n\necharts.use([\n BarChart,\n LineChart,\n PieChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n DatasetComponent,\n // Reference lines and statistic lines (markLine), reference bands\n // (markArea), and the overlap hiding of 'auto' data labels (LabelLayout).\n MarkLineComponent,\n MarkAreaComponent,\n LabelLayout,\n CanvasRenderer,\n]);\n\n// The house theme — the single place report chart \"standards\" live (palette,\n// typography, tooltip styling). Polished defaults now; refined in the polish\n// phase.\necharts.registerTheme('report', {\n color: REPORT_CHART_COLORS_CSS,\n textStyle: {\n fontFamily: REPORT_CHART_FONT_FAMILY,\n },\n title: {\n textStyle: { color: '#1f2933', fontSize: 14, fontWeight: 600 },\n },\n legend: {\n textStyle: { color: '#52606d', fontSize: 11 },\n },\n tooltip: {\n backgroundColor: 'rgba(31, 41, 51, 0.92)',\n borderWidth: 0,\n textStyle: { color: '#fff', fontSize: 12 },\n },\n categoryAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisTick: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { show: false },\n },\n valueAxis: {\n axisLine: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { lineStyle: { color: '#e4e7eb' } },\n },\n timeAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n },\n});\n\nexport default echarts;\n"],"names":[],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA,OAAO,CAAC,GAAG,CAAC;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,gBAAgB;;;IAGhB,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,cAAc;AACf,CAAA,CAAC,CAAC;AAEH;AACA;AACA;AACA,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC9B,IAAA,KAAK,EAAE,uBAAuB;AAC9B,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,wBAAwB;AACrC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;AAC/D,KAAA;AACD,IAAA,MAAM,EAAE;QACN,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,eAAe,EAAE,wBAAwB;AACzC,QAAA,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC3C,KAAA;AACD,IAAA,YAAY,EAAE;QACZ,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC7C,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACtE,QAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AAC3B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;QACtE,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC/C,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7C,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACvE,KAAA;AACF,CAAA,CAAC"}
|