igniteui-angular-extras 18.2.4 → 19.0.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.
Files changed (27) hide show
  1. package/README.md +38 -0
  2. package/fesm2022/igniteui-angular-extras.mjs +1233 -1319
  3. package/fesm2022/igniteui-angular-extras.mjs.map +1 -1
  4. package/lib/context-menu/chart-dialog/chart-dialog.component.d.ts +1 -1
  5. package/lib/context-menu/context-menu.component.d.ts +1 -1
  6. package/lib/context-menu/igx-context-menu.directive.d.ts +1 -1
  7. package/lib/directives/chart-integration/chart-integration.directive.d.ts +1 -1
  8. package/lib/directives/conditional-formatting/conditional-formatting.directive.d.ts +1 -1
  9. package/lib/page-header/page-header.component.d.ts +1 -1
  10. package/lib/pipes/svg.pipe.d.ts +1 -1
  11. package/package.json +6 -8
  12. package/public-api.d.ts +4 -1
  13. package/esm2022/igniteui-angular-extras.mjs +0 -5
  14. package/esm2022/images/charts.mjs +0 -408
  15. package/esm2022/images/conditions.mjs +0 -95
  16. package/esm2022/lib/context-menu/chart-dialog/chart-dialog.component.mjs +0 -70
  17. package/esm2022/lib/context-menu/context-menu.component.mjs +0 -176
  18. package/esm2022/lib/context-menu/igx-context-menu.directive.mjs +0 -154
  19. package/esm2022/lib/directives/chart-integration/chart-integration.directive.mjs +0 -312
  20. package/esm2022/lib/directives/chart-integration/chart-types.mjs +0 -28
  21. package/esm2022/lib/directives/chart-integration/initializers.mjs +0 -103
  22. package/esm2022/lib/directives/conditional-formatting/conditional-formatting.directive.mjs +0 -307
  23. package/esm2022/lib/igniteui-angular-extras.module.mjs +0 -116
  24. package/esm2022/lib/page-header/page-header.component.mjs +0 -14
  25. package/esm2022/lib/pipes/svg.pipe.mjs +0 -20
  26. package/esm2022/public-api.mjs +0 -22
  27. package/lib/igniteui-angular-extras.module.d.ts +0 -16
@@ -1,103 +0,0 @@
1
- // tslint:disable: max-line-length
2
- import { EventEmitter } from '@angular/core';
3
- import { IgxBarSeriesComponent, IgxBubbleSeriesComponent, IgxCategoryXAxisComponent, IgxCategoryYAxisComponent, IgxNumericXAxisComponent, IgxNumericYAxisComponent, IgxScatterLineSeriesComponent, IgxScatterSeriesComponent, IgxStacked100BarSeriesComponent, IgxStackedBarSeriesComponent, IgxStackedFragmentSeriesComponent } from 'igniteui-angular-charts';
4
- class SeriesFactory {
5
- create(type) {
6
- return new type();
7
- }
8
- }
9
- export class ChartInitializer {
10
- constructor() {
11
- this.seriesFactory = new SeriesFactory();
12
- }
13
- applyOptions(target, options) {
14
- if (options) {
15
- Object.keys(options).forEach(key => {
16
- if (target[key] instanceof EventEmitter) {
17
- target[key].subscribe(options[key]);
18
- }
19
- else {
20
- target[key] = options[key];
21
- }
22
- });
23
- }
24
- }
25
- }
26
- export class IgxPieChartInitializer extends ChartInitializer {
27
- constructor() {
28
- super();
29
- }
30
- initChart(chart, options) {
31
- this.applyOptions(chart, options.chartOptions);
32
- return chart;
33
- }
34
- }
35
- export class IgxDataChartInitializer extends ChartInitializer {
36
- constructor(seriesType) {
37
- super();
38
- switch (seriesType) {
39
- case IgxBarSeriesComponent:
40
- this.xAxis = new IgxNumericXAxisComponent();
41
- this.yAxis = new IgxCategoryYAxisComponent();
42
- break;
43
- case IgxScatterSeriesComponent:
44
- case IgxBubbleSeriesComponent:
45
- case IgxScatterLineSeriesComponent:
46
- this.xAxis = new IgxNumericXAxisComponent();
47
- this.yAxis = new IgxNumericYAxisComponent();
48
- break;
49
- default:
50
- this.xAxis = new IgxCategoryXAxisComponent();
51
- this.yAxis = new IgxNumericYAxisComponent();
52
- }
53
- this.seriesType = seriesType;
54
- }
55
- initChart(chart, options) {
56
- options.seriesOptions.forEach((option) => {
57
- const series = this.seriesFactory.create(this.seriesType);
58
- series.xAxis = this.xAxis;
59
- series.yAxis = this.yAxis;
60
- this.applyOptions(series, option);
61
- chart.series.add(series);
62
- });
63
- this.applyOptions(chart, options.chartOptions);
64
- this.applyOptions(this.xAxis, options.xAxisOptions);
65
- this.applyOptions(this.yAxis, options.yAxisOptions);
66
- chart.axes.add(this.xAxis);
67
- chart.axes.add(this.yAxis);
68
- return chart;
69
- }
70
- }
71
- export class IgxStackedDataChartInitializer extends ChartInitializer {
72
- constructor(seriesType) {
73
- super();
74
- if (seriesType === IgxStackedBarSeriesComponent || seriesType === IgxStacked100BarSeriesComponent) {
75
- this.xAxis = new IgxNumericXAxisComponent();
76
- this.yAxis = new IgxCategoryYAxisComponent();
77
- }
78
- else {
79
- this.xAxis = new IgxCategoryXAxisComponent();
80
- this.yAxis = new IgxNumericYAxisComponent();
81
- }
82
- this.seriesType = seriesType;
83
- }
84
- initChart(chart, options) {
85
- const series = this.seriesFactory.create(this.seriesType);
86
- series.xAxis = this.xAxis;
87
- series.yAxis = this.yAxis;
88
- options.stackedFragmentOptions.forEach(fragOpt => {
89
- const frag = new IgxStackedFragmentSeriesComponent();
90
- this.applyOptions(frag, fragOpt);
91
- series.series.add(frag);
92
- });
93
- this.applyOptions(series, options.seriesOptions);
94
- this.applyOptions(chart, options.chartOptions);
95
- this.applyOptions(this.xAxis, options.xAxisOptions);
96
- this.applyOptions(this.yAxis, options.yAxisOptions);
97
- chart.series.add(series);
98
- chart.axes.add(this.xAxis);
99
- chart.axes.add(this.yAxis);
100
- return chart;
101
- }
102
- }
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci1leHRyYXMvc3JjL2xpYi9kaXJlY3RpdmVzL2NoYXJ0LWludGVncmF0aW9uL2luaXRpYWxpemVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQy9FLHlCQUF5QixFQUF5Qix3QkFBd0IsRUFDMUUsd0JBQXdCLEVBQXdCLDZCQUE2QixFQUM3RSx5QkFBeUIsRUFBRSwrQkFBK0IsRUFBRSw0QkFBNEIsRUFDeEYsaUNBQWlDLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RSxNQUFNLGFBQWE7SUFDUixNQUFNLENBQUksSUFBbUI7UUFDaEMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7Q0FDSjtBQWVELE1BQU0sT0FBZ0IsZ0JBQWdCO0lBSWxDO1FBRFUsa0JBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFVixZQUFZLENBQUMsTUFBVyxFQUFFLE9BQWlCO1FBQzlDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksWUFBWSxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxD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SyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTogbWF4LWxpbmUtbGVuZ3RoXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJZ3hCYXJTZXJpZXNDb21wb25lbnQsIElneEJ1YmJsZVNlcmllc0NvbXBvbmVudCwgSWd4Q2F0ZWdvcnlYQXhpc0NvbXBvbmVudCxcclxuICAgIElneENhdGVnb3J5WUF4aXNDb21wb25lbnQsIElneERhdGFDaGFydENvbXBvbmVudCwgSWd4TnVtZXJpY1hBeGlzQ29tcG9uZW50LFxyXG4gICAgSWd4TnVtZXJpY1lBeGlzQ29tcG9uZW50LCBJZ3hQaWVDaGFydENvbXBvbmVudCwgSWd4U2NhdHRlckxpbmVTZXJpZXNDb21wb25lbnQsXHJcbiAgICBJZ3hTY2F0dGVyU2VyaWVzQ29tcG9uZW50LCBJZ3hTdGFja2VkMTAwQmFyU2VyaWVzQ29tcG9uZW50LCBJZ3hTdGFja2VkQmFyU2VyaWVzQ29tcG9uZW50LFxyXG4gICAgSWd4U3RhY2tlZEZyYWdtZW50U2VyaWVzQ29tcG9uZW50IH0gZnJvbSAnaWduaXRldWktYW5ndWxhci1jaGFydHMnO1xyXG5cclxuY2xhc3MgU2VyaWVzRmFjdG9yeSB7XHJcbiAgICBwdWJsaWMgY3JlYXRlPFQ+KHR5cGU6IChuZXcgKCkgPT4gVCkpOiBUIHtcclxuICAgICAgICByZXR1cm4gbmV3IHR5cGUoKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3B0aW9ucyB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNoYXJ0Q29tcG9uZW50T3B0aW9ucyB7XHJcbiAgICAgY2hhcnRPcHRpb25zPzogSU9wdGlvbnM7XHJcbiAgICAgc2VyaWVzT3B0aW9ucz86IElPcHRpb25zW107XHJcbiAgICAgeEF4aXNPcHRpb25zPzogSU9wdGlvbnM7XHJcbiAgICAgc2VyaWVzTW9kZWw/OiBJT3B0aW9ucztcclxuICAgICB5QXhpc09wdGlvbnM/OiBJT3B0aW9ucztcclxuICAgICBzdGFja2VkRnJhZ21lbnRPcHRpb25zPzogSU9wdGlvbnM7XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDaGFydEluaXRpYWxpemVyIHtcclxuICAgIHByb3RlY3RlZCB5QXhpcztcclxuICAgIHByb3RlY3RlZCB4QXhpcztcclxuICAgIHByb3RlY3RlZCBzZXJpZXNGYWN0b3J5ID0gbmV3IFNlcmllc0ZhY3RvcnkoKTtcclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5T3B0aW9ucyh0YXJnZXQ6IGFueSwgb3B0aW9uczogSU9wdGlvbnMpIHtcclxuICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0W2tleV0gaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XS5zdWJzY3JpYmUob3B0aW9uc1trZXldKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBvcHRpb25zW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgaW5pdENoYXJ0KGNoYXJ0OiBhbnksIG9wdGlvbnM/OiBJQ2hhcnRDb21wb25lbnRPcHRpb25zKTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4UGllQ2hhcnRJbml0aWFsaXplciBleHRlbmRzIENoYXJ0SW5pdGlhbGl6ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdENoYXJ0KGNoYXJ0OiBJZ3hQaWVDaGFydENvbXBvbmVudCwgb3B0aW9uczogSUNoYXJ0Q29tcG9uZW50T3B0aW9ucykge1xyXG5cclxuICAgICAgICB0aGlzLmFwcGx5T3B0aW9ucyhjaGFydCwgb3B0aW9ucy5jaGFydE9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBjaGFydDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIElneERhdGFDaGFydEluaXRpYWxpemVyIGV4dGVuZHMgQ2hhcnRJbml0aWFsaXplciB7XHJcbiAgICBwdWJsaWMgc2VyaWVzVHlwZTogVHlwZTxhbnk+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNlcmllc1R5cGU6IFR5cGU8YW55Pikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgc3dpdGNoIChzZXJpZXNUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgSWd4QmFyU2VyaWVzQ29tcG9uZW50OlxyXG4gICAgICAgICAgICAgICAgdGhpcy54QXhpcyA9ICBuZXcgSWd4TnVtZXJpY1hBeGlzQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnlBeGlzID0gIG5ldyBJZ3hDYXRlZ29yeVlBeGlzQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBJZ3hTY2F0dGVyU2VyaWVzQ29tcG9uZW50OlxyXG4gICAgICAgICAgICBjYXNlIElneEJ1YmJsZVNlcmllc0NvbXBvbmVudDpcclxuICAgICAgICAgICAgY2FzZSBJZ3hTY2F0dGVyTGluZVNlcmllc0NvbXBvbmVudDpcclxuICAgICAgICAgICAgICAgIHRoaXMueEF4aXMgPSAgbmV3IElneE51bWVyaWNYQXhpc0NvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy55QXhpcyA9ICBuZXcgSWd4TnVtZXJpY1lBeGlzQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMueEF4aXMgPSAgbmV3IElneENhdGVnb3J5WEF4aXNDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMueUF4aXMgPSAgbmV3IElneE51bWVyaWNZQXhpc0NvbXBvbmVudCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXJpZXNUeXBlID0gc2VyaWVzVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdENoYXJ0KGNoYXJ0OiBJZ3hEYXRhQ2hhcnRDb21wb25lbnQsIG9wdGlvbnM6IElDaGFydENvbXBvbmVudE9wdGlvbnMpOiBJZ3hEYXRhQ2hhcnRDb21wb25lbnQge1xyXG4gICAgICAgIG9wdGlvbnMuc2VyaWVzT3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2VyaWVzID0gdGhpcy5zZXJpZXNGYWN0b3J5LmNyZWF0ZSh0aGlzLnNlcmllc1R5cGUpO1xyXG4gICAgICAgICAgICBzZXJpZXMueEF4aXMgPSB0aGlzLnhBeGlzO1xyXG4gICAgICAgICAgICBzZXJpZXMueUF4aXMgPSB0aGlzLnlBeGlzO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5T3B0aW9ucyhzZXJpZXMsIG9wdGlvbik7XHJcbiAgICAgICAgICAgIGNoYXJ0LnNlcmllcy5hZGQoc2VyaWVzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFwcGx5T3B0aW9ucyhjaGFydCwgb3B0aW9ucy5jaGFydE9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlPcHRpb25zKHRoaXMueEF4aXMsIG9wdGlvbnMueEF4aXNPcHRpb25zKTtcclxuICAgICAgICB0aGlzLmFwcGx5T3B0aW9ucyh0aGlzLnlBeGlzLCBvcHRpb25zLnlBeGlzT3B0aW9ucyk7XHJcbiAgICAgICAgY2hhcnQuYXhlcy5hZGQodGhpcy54QXhpcyk7XHJcbiAgICAgICAgY2hhcnQuYXhlcy5hZGQodGhpcy55QXhpcyk7XHJcbiAgICAgICAgcmV0dXJuIGNoYXJ0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4U3RhY2tlZERhdGFDaGFydEluaXRpYWxpemVyIGV4dGVuZHMgQ2hhcnRJbml0aWFsaXplciB7XHJcbiAgICBwdWJsaWMgc2VyaWVzVHlwZTogVHlwZTxhbnk+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNlcmllc1R5cGU6IFR5cGU8YW55Pikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgaWYgKHNlcmllc1R5cGUgPT09IElneFN0YWNrZWRCYXJTZXJpZXNDb21wb25lbnQgfHwgc2VyaWVzVHlwZSA9PT0gSWd4U3RhY2tlZDEwMEJhclNlcmllc0NvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnhBeGlzID0gbmV3IElneE51bWVyaWNYQXhpc0NvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLnlBeGlzID0gbmV3IElneENhdGVnb3J5WUF4aXNDb21wb25lbnQoKTtcclxuICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy54QXhpcyA9IG5ldyBJZ3hDYXRlZ29yeVhBeGlzQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMueUF4aXMgPSBuZXcgSWd4TnVtZXJpY1lBeGlzQ29tcG9uZW50KCk7XHJcbiAgICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlcmllc1R5cGUgPSBzZXJpZXNUeXBlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGluaXRDaGFydChjaGFydDogSWd4RGF0YUNoYXJ0Q29tcG9uZW50LCBvcHRpb25zPzogSUNoYXJ0Q29tcG9uZW50T3B0aW9ucyk6IElneERhdGFDaGFydENvbXBvbmVudCB7XHJcbiAgICAgICAgY29uc3Qgc2VyaWVzID0gdGhpcy5zZXJpZXNGYWN0b3J5LmNyZWF0ZSh0aGlzLnNlcmllc1R5cGUpO1xyXG4gICAgICAgIHNlcmllcy54QXhpcyA9IHRoaXMueEF4aXM7XHJcbiAgICAgICAgc2VyaWVzLnlBeGlzID0gdGhpcy55QXhpcztcclxuICAgICAgICBvcHRpb25zLnN0YWNrZWRGcmFnbWVudE9wdGlvbnMuZm9yRWFjaChmcmFnT3B0ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZnJhZyA9IG5ldyBJZ3hTdGFja2VkRnJhZ21lbnRTZXJpZXNDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5hcHBseU9wdGlvbnMoZnJhZywgZnJhZ09wdCk7XHJcbiAgICAgICAgICAgIHNlcmllcy5zZXJpZXMuYWRkKGZyYWcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYXBwbHlPcHRpb25zKHNlcmllcywgb3B0aW9ucy5zZXJpZXNPcHRpb25zKTtcclxuICAgICAgICB0aGlzLmFwcGx5T3B0aW9ucyhjaGFydCwgb3B0aW9ucy5jaGFydE9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlPcHRpb25zKHRoaXMueEF4aXMsIG9wdGlvbnMueEF4aXNPcHRpb25zKTtcclxuICAgICAgICB0aGlzLmFwcGx5T3B0aW9ucyh0aGlzLnlBeGlzLCBvcHRpb25zLnlBeGlzT3B0aW9ucyk7XHJcbiAgICAgICAgY2hhcnQuc2VyaWVzLmFkZChzZXJpZXMpO1xyXG4gICAgICAgIGNoYXJ0LmF4ZXMuYWRkKHRoaXMueEF4aXMpO1xyXG4gICAgICAgIGNoYXJ0LmF4ZXMuYWRkKHRoaXMueUF4aXMpO1xyXG4gICAgICAgIHJldHVybiBjaGFydDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,307 +0,0 @@
1
- import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { takeUntil } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "igniteui-angular";
6
- export var ConditionalFormattingType;
7
- (function (ConditionalFormattingType) {
8
- ConditionalFormattingType["dataBars"] = "Data Bars";
9
- ConditionalFormattingType["colorScale"] = "Color Scale";
10
- ConditionalFormattingType["top10"] = "Top 10";
11
- ConditionalFormattingType["textContains"] = "Text Contains";
12
- ConditionalFormattingType["single"] = "Duplicate Values";
13
- ConditionalFormattingType["unique"] = "Unique Values";
14
- ConditionalFormattingType["empty"] = "Empty";
15
- })(ConditionalFormattingType || (ConditionalFormattingType = {}));
16
- export class IgxConditionalFormattingDirective {
17
- set formatColors(val) {
18
- this._formatColors = val;
19
- }
20
- get formatColors() {
21
- return this._formatColors;
22
- }
23
- get selectedData() {
24
- if (!this._selectedData.length) {
25
- this._selectedData = this.toArray(this.grid.getSelectedData());
26
- }
27
- return this._selectedData;
28
- }
29
- get textData() {
30
- return this.selectedData.filter(val => typeof val === 'string');
31
- }
32
- get numericData() {
33
- return this.selectedData.filter(val => typeof val === 'number');
34
- }
35
- constructor(grid) {
36
- this.grid = grid;
37
- this.onFormattersReady = new EventEmitter();
38
- this.colorScale = {
39
- backgroundColor: (rowData, colname, cellValue, rowIndex) => {
40
- if (!(typeof cellValue === 'number' && this.isWithInFormattedRange(rowIndex, colname))) {
41
- return;
42
- }
43
- return this.lowTresholdValue >= cellValue ? this.formatColors.error :
44
- this.middleTresholdValue >= cellValue ? this.formatColors.warning : this.formatColors.success;
45
- }
46
- };
47
- this.dataBars = {
48
- backgroundImage: (rowData, colname, cellValue, rowIndex) => {
49
- if (!(typeof cellValue === 'number' && this.isWithInFormattedRange(rowIndex, colname))) {
50
- return;
51
- }
52
- const treshold = this.threshold;
53
- let gradientPercents;
54
- if (cellValue < 0) {
55
- const negativeStartingPoint = 100 - treshold;
56
- gradientPercents = this.getNegativePercentage(cellValue);
57
- return `linear-gradient(to left, transparent 0% ${negativeStartingPoint}%,
58
- ${this.formatColors.error} ${negativeStartingPoint}% ${negativeStartingPoint + gradientPercents}%,
59
- transparent ${gradientPercents}% 100%)`;
60
- }
61
- else {
62
- gradientPercents = this.getPositivePercentage(cellValue);
63
- return `linear-gradient(to right, transparent 0% ${treshold}%,
64
- ${this.formatColors.success} ${treshold}% ${treshold + gradientPercents}%,
65
- transparent ${treshold + gradientPercents}% 100%)`;
66
- }
67
- },
68
- backgroundSize: '100% 80%',
69
- backgroundRepeat: 'no-repeat',
70
- backgroundPositionY: 'center'
71
- };
72
- this.top10Percent = {
73
- backgroundColor: (rowData, colname, cellValue, rowIndex) => {
74
- if (typeof cellValue === 'number' && this.isWithInFormattedRange(rowIndex, colname)
75
- && cellValue > this.top10PercentTreshold) {
76
- return this.formatColors.info;
77
- }
78
- },
79
- color: (rowData, colname, cellValue, rowIndex) => {
80
- if (typeof cellValue === 'number' && this.isWithInFormattedRange(rowIndex, colname)
81
- && cellValue > this.top10PercentTreshold) {
82
- return this.formatColors.text;
83
- }
84
- }
85
- };
86
- this.greaterThan = {
87
- backgroundColor: (rowData, colname, cellValue, rowIndex) => {
88
- if (typeof cellValue === 'number' && this.isWithInFormattedRange(rowIndex, colname)
89
- && cellValue > this.avgValue) {
90
- return this.formatColors.info;
91
- }
92
- },
93
- color: (rowData, colname, cellValue, rowIndex) => {
94
- if (typeof cellValue === 'number' && this.isWithInFormattedRange(rowIndex, colname)
95
- && cellValue > this.avgValue) {
96
- return this.formatColors.text;
97
- }
98
- }
99
- };
100
- this.empty = {
101
- backgroundColor: (rowData, colname, cellValue, rowIndex) => {
102
- if (this.isWithInFormattedRange(rowIndex, colname) && cellValue === undefined) {
103
- return this.formatColors.info;
104
- }
105
- },
106
- color: (rowData, colname, cellValue, rowIndex) => {
107
- if (this.isWithInFormattedRange(rowIndex, colname) && cellValue === undefined) {
108
- return this.formatColors.text;
109
- }
110
- }
111
- };
112
- this.duplicates = {
113
- backgroundColor: (rowData, colname, cellValue, rowIndex) => {
114
- if (!this.isWithInFormattedRange(rowIndex, colname)) {
115
- return;
116
- }
117
- const arr = typeof cellValue === 'number' ? this.numericData : this.textData;
118
- return arr.indexOf(cellValue) !== arr.lastIndexOf(cellValue) ? this.formatColors.info : '';
119
- },
120
- color: (rowData, colname, cellValue, rowIndex) => {
121
- if (!this.isWithInFormattedRange(rowIndex, colname)) {
122
- return;
123
- }
124
- const arr = typeof cellValue === 'number' ? this.numericData : this.textData;
125
- return arr.indexOf(cellValue) !== arr.lastIndexOf(cellValue) ? this.formatColors.text : '';
126
- }
127
- };
128
- this.textContains = {
129
- backgroundColor: (rowData, colname, cellValue, rowIndex) => {
130
- if (typeof cellValue === 'string' && this.isWithInFormattedRange(rowIndex, colname) &&
131
- cellValue.toLowerCase().indexOf(this._valueForComparison.toLowerCase()) !== -1) {
132
- return this.formatColors.info;
133
- }
134
- },
135
- color: (rowData, colname, cellValue, rowIndex) => {
136
- if (typeof cellValue === 'string' && this.isWithInFormattedRange(rowIndex, colname) &&
137
- cellValue.toLowerCase().indexOf(this._valueForComparison.toLowerCase()) !== -1) {
138
- return this.formatColors.text;
139
- }
140
- }
141
- };
142
- this.uniques = {
143
- backgroundColor: (rowData, colname, cellValue, rowIndex) => {
144
- if (!this.isWithInFormattedRange(rowIndex, colname)) {
145
- return;
146
- }
147
- const arr = typeof cellValue === 'number' ? this.numericData : this.textData;
148
- return arr.indexOf(cellValue) === arr.lastIndexOf(cellValue) ? this.formatColors.info : '';
149
- },
150
- color: (rowData, colname, cellValue, rowIndex) => {
151
- if (!this.isWithInFormattedRange(rowIndex, colname)) {
152
- return;
153
- }
154
- const arr = typeof cellValue === 'number' ? this.numericData : this.textData;
155
- return arr.indexOf(cellValue) === arr.lastIndexOf(cellValue) ? this.formatColors.text : '';
156
- }
157
- };
158
- this._formatColors = {
159
- success: '#4EB862',
160
- error: '#FF134A',
161
- warning: '#FBB13C',
162
- info: '#1377D5',
163
- text: '#FFF'
164
- };
165
- this._numericFormatters = ['Data Bars', 'Color Scale', 'Top 10', 'Greater Than'];
166
- this._textFormatters = ['Text Contains'];
167
- this._commonFormattersName = ['Duplicate Values', 'Unique Values', 'Empty'];
168
- this._selectedData = [];
169
- this._formattersData = new Map();
170
- this.destroy$ = new Subject();
171
- this.formatedRange = new Map();
172
- this._formattersData.set('Data Bars', this.dataBars);
173
- this._formattersData.set('Color Scale', this.colorScale);
174
- this._formattersData.set('Top 10', this.top10Percent);
175
- this._formattersData.set('Greater Than', this.greaterThan);
176
- this._formattersData.set('Text Contains', this.textContains);
177
- this._formattersData.set('Duplicate Values', this.duplicates);
178
- this._formattersData.set('Unique Values', this.uniques);
179
- this._formattersData.set('Empty', this.empty);
180
- }
181
- ngAfterViewInit() {
182
- this.grid.rangeSelected.pipe(takeUntil(this.destroy$)).subscribe(() => {
183
- this.determineFormatters();
184
- });
185
- this.grid.cellEdit.pipe(takeUntil(this.destroy$)).subscribe((args) => {
186
- if ((args.newValue === args.oldValue || !this.formatter)) {
187
- return;
188
- }
189
- if (this.isWithInFormattedRange(args.cellID.rowIndex, args.cellID.columnID - 1)) {
190
- const value = Number(args.newValue);
191
- const valueToBeAdded = !Number.isNaN(value) && Number.isFinite(value) ? value : args.newValue;
192
- this.selectedData.splice(this.selectedData.indexOf(args.oldValue), 1, valueToBeAdded);
193
- this.recalcCachedValues();
194
- this.formatCells(this.formatter, undefined, false);
195
- }
196
- });
197
- }
198
- ngOnDestroy() {
199
- this.destroy$.next(true);
200
- this.destroy$.complete();
201
- }
202
- formatCells(formatterName, formatRange, reset = true) {
203
- if (reset) {
204
- this.resetRange(formatRange);
205
- }
206
- this.clearFormatting();
207
- this.formatter = formatterName;
208
- this.grid.visibleColumns.forEach(c => {
209
- if (c.visibleIndex >= this._startColumn && c.visibleIndex <= this._endColumn) {
210
- c.cellStyles = this._formattersData.get(this.formatter);
211
- this.grid.notifyChanges();
212
- }
213
- });
214
- }
215
- clearFormatting() {
216
- this.formatter = undefined;
217
- this.grid.visibleColumns.forEach(c => {
218
- c.cellStyles = undefined;
219
- this.grid.cdr.detectChanges();
220
- });
221
- }
222
- determineFormatters() {
223
- const numericData = this.toArray(this.grid.getSelectedData()).some(rec => typeof rec === 'number');
224
- const textData = this.toArray(this.grid.getSelectedData()).some(rec => typeof rec === 'string');
225
- const formatters = Array.of(...this._commonFormattersName);
226
- if (!(numericData) && textData) {
227
- formatters.splice(0, 0, ...this._textFormatters);
228
- }
229
- else if (numericData && !textData) {
230
- formatters.splice(0, 0, ...this._numericFormatters);
231
- }
232
- else {
233
- formatters.splice(0, 0, ...['Data Bars', 'Color Scale', 'Text Contains']);
234
- }
235
- this.onFormattersReady.emit(formatters);
236
- }
237
- recalcCachedValues(clearAll = false) {
238
- if (clearAll) {
239
- this._startColumn = Math.min(...this.grid.getSelectedRanges().map(r => Number(r.columnStart)));
240
- this._endColumn = Math.max(...this.grid.getSelectedRanges().map(r => Number(r.columnEnd)));
241
- this._selectedData = [];
242
- }
243
- this._valueForComparison = this.textData[0];
244
- this._maxValue = Math.max(...this.numericData);
245
- this._minValue = Math.min(...this.numericData.filter(value => value < 0)) | 0;
246
- }
247
- isWithInFormattedRange(rowIndex, colID) {
248
- const visibleIndex = typeof colID === 'string' ? this.grid.getColumnByName(colID).visibleIndex : colID;
249
- if (!this.formatedRange.size) {
250
- return false;
251
- }
252
- return this.formatedRange.has(rowIndex) && this.formatedRange.get(rowIndex).has(visibleIndex);
253
- }
254
- get middleTresholdValue() { return 0.66 * Math.ceil(this._maxValue); }
255
- get lowTresholdValue() { return 0.33 * Math.ceil(this._maxValue); }
256
- get top10PercentTreshold() { return 0.9 * Math.ceil(this._maxValue); }
257
- get avgValue() {
258
- return Math.ceil((this.numericData.reduce((a, b) => a + b, 0)) / this.numericData.length);
259
- }
260
- get threshold() {
261
- return Math.ceil(Math.abs(this._minValue) / (this._maxValue + Math.abs(this._minValue)) * 100);
262
- }
263
- getPositivePercentage(val) {
264
- const result = (Math.ceil(val) / (this._maxValue + Math.abs(this._minValue))) * 100;
265
- return Math.ceil(result);
266
- }
267
- getNegativePercentage(val) {
268
- const result = (Math.abs(val) / (this._maxValue + Math.abs(this._minValue))) * 100;
269
- return Math.ceil(result);
270
- }
271
- resetRange(formatRange) {
272
- this.formatedRange.clear();
273
- const customRange = formatRange ? formatRange : this.grid.getSelectedRanges();
274
- customRange.forEach(range => {
275
- for (let ri = range.rowStart; ri <= Number(range.rowEnd); ri++) {
276
- for (let ci = Number(range.columnStart); ci <= Number(range.columnEnd); ci++) {
277
- this.addToCache(ri, ci);
278
- }
279
- }
280
- });
281
- this.recalcCachedValues(true);
282
- }
283
- addToCache(rowIndex, colIndex, selection = true) {
284
- this.formatedRange.has(rowIndex) ? this.formatedRange.get(rowIndex).add(colIndex) :
285
- this.formatedRange.set(rowIndex, new Set()).get(rowIndex).add(colIndex);
286
- }
287
- toArray(data) {
288
- let result = [];
289
- data.forEach(rec => result = result.concat(Object.values(rec)));
290
- return result;
291
- }
292
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IgxConditionalFormattingDirective, deps: [{ token: i1.IgxGridComponent }], target: i0.ɵɵFactoryTarget.Directive }); }
293
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: IgxConditionalFormattingDirective, selector: "[igxConditionalFormatting]", inputs: { formatter: "formatter", formatColors: "formatColors" }, outputs: { onFormattersReady: "onFormattersReady" }, ngImport: i0 }); }
294
- }
295
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IgxConditionalFormattingDirective, decorators: [{
296
- type: Directive,
297
- args: [{
298
- selector: '[igxConditionalFormatting]'
299
- }]
300
- }], ctorParameters: () => [{ type: i1.IgxGridComponent }], propDecorators: { formatter: [{
301
- type: Input
302
- }], formatColors: [{
303
- type: Input
304
- }], onFormattersReady: [{
305
- type: Output
306
- }] } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uYWwtZm9ybWF0dGluZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyLWV4dHJhcy9zcmMvbGliL2RpcmVjdGl2ZXMvY29uZGl0aW9uYWwtZm9ybWF0dGluZy9jb25kaXRpb25hbC1mb3JtYXR0aW5nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQVUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTNDLE1BQU0sQ0FBTixJQUFZLHlCQVFYO0FBUkQsV0FBWSx5QkFBeUI7SUFDakMsbURBQXNCLENBQUE7SUFDdEIsdURBQTBCLENBQUE7SUFDMUIsNkNBQWdCLENBQUE7SUFDaEIsMkRBQThCLENBQUE7SUFDOUIsd0RBQTJCLENBQUE7SUFDM0IscURBQXdCLENBQUE7SUFDeEIsNENBQWUsQ0FBQTtBQUNuQixDQUFDLEVBUlcseUJBQXlCLEtBQXpCLHlCQUF5QixRQVFwQztBQVlELE1BQU0sT0FBTyxpQ0FBaUM7SUFJMUMsSUFDVyxZQUFZLENBQUMsR0FBa0I7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQXlIRCxJQUFZLFlBQVk7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7WUFBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQUMsQ0FBQztRQUNuRyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVksUUFBUTtRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQVksV0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQXFCRCxZQUFtQixJQUFzQjtRQUF0QixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQXRKbEMsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUVqRCxlQUFVLEdBQUc7WUFDaEIsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxDQUFDLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFBQyxPQUFPO2dCQUFDLENBQUM7Z0JBQ25HLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakUsSUFBSSxDQUFDLG1CQUFtQixJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQ3ZHLENBQUM7U0FDSixDQUFDO1FBRUssYUFBUSxHQUFHO1lBQ2QsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxDQUFDLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFBQyxPQUFPO2dCQUFDLENBQUM7Z0JBQ25HLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2hDLElBQUksZ0JBQWdCLENBQUM7Z0JBQ3JCLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNoQixNQUFNLHFCQUFxQixHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7b0JBQzdDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDekQsT0FBTywyQ0FBMkMscUJBQXFCO3NCQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxxQkFBcUIsS0FBSyxxQkFBcUIsR0FBRyxnQkFBZ0I7a0NBQ2xGLGdCQUFnQixTQUFTLENBQUM7Z0JBQ2hELENBQUM7cUJBQU0sQ0FBQztvQkFDSixnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3pELE9BQU8sNENBQTRDLFFBQVE7c0JBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxJQUFJLFFBQVEsS0FBSyxRQUFRLEdBQUcsZ0JBQWdCO2tDQUMxRCxRQUFRLEdBQUcsZ0JBQWdCLFNBQVMsQ0FBQztnQkFDM0QsQ0FBQztZQUNMLENBQUM7WUFDRCxjQUFjLEVBQUUsVUFBVTtZQUMxQixnQkFBZ0IsRUFBRSxXQUFXO1lBQzdCLG1CQUFtQixFQUFFLFFBQVE7U0FDaEMsQ0FBQztRQUVLLGlCQUFZLEdBQUc7WUFDbEIsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO3VCQUM1RSxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQzNDLE9BQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLENBQUM7WUFDTCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQzdDLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO3VCQUM1RSxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQzNDLE9BQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztRQUVLLGdCQUFXLEdBQUc7WUFDakIsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO3VCQUNoRixTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUMzQixPQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNuQyxDQUFDO1lBQ0wsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUM3QyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQzt1QkFDaEYsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDM0IsT0FBUSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDbkMsQ0FBQztZQUNMLENBQUM7U0FDSixDQUFDO1FBRUssVUFBSyxHQUFHO1lBQ1gsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzVFLE9BQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLENBQUM7WUFDTCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQzdDLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzVFLE9BQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztRQUVLLGVBQVUsR0FBRztZQUNoQixlQUFlLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFBQyxPQUFPO2dCQUFDLENBQUM7Z0JBQ2hFLE1BQU0sR0FBRyxHQUFVLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDcEYsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFaEcsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUFDLE9BQU87Z0JBQUMsQ0FBQztnQkFDaEUsTUFBTSxHQUFHLEdBQVUsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNwRixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRyxDQUFDO1NBQ0osQ0FBQztRQUVLLGlCQUFZLEdBQUc7WUFDbEIsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO29CQUMvRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pGLE9BQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLENBQUM7WUFDTCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQzdDLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO29CQUMvRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pGLE9BQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztRQUVLLFlBQU8sR0FBRztZQUNiLGVBQWUsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUFDLE9BQU87Z0JBQUMsQ0FBQztnQkFDaEUsTUFBTSxHQUFHLEdBQVUsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNwRixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRyxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQUMsT0FBTztnQkFBQyxDQUFDO2dCQUNoRSxNQUFNLEdBQUcsR0FBVSxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ3BGLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hHLENBQUM7U0FDSixDQUFDO1FBY00sa0JBQWEsR0FBa0I7WUFDbkMsT0FBTyxFQUFFLFNBQVM7WUFDbEIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsT0FBTyxFQUFFLFNBQVM7WUFDbEIsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsTUFBTTtTQUNmLENBQUM7UUFDTSx1QkFBa0IsR0FBRyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzVFLG9CQUFlLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwQywwQkFBcUIsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2RSxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQU1uQixvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFDekMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDOUIsa0JBQWEsR0FBNkIsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFHN0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLGVBQWU7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQUMsT0FBTztZQUFDLENBQUM7WUFDckUsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDOUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDdEYsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxXQUFXLENBQUMsYUFBYSxFQUFFLFdBQWdCLEVBQUUsS0FBSyxHQUFHLElBQUk7UUFDNUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzNFLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNqQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxtQkFBbUI7UUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDbkcsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDaEcsTUFBTSxVQUFVLEdBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzdCLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRCxDQUFDO2FBQU0sSUFBSSxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN4RCxDQUFDO2FBQU0sQ0FBQztZQUNKLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxRQUFRLEdBQUcsS0FBSztRQUN0QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9GLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSztRQUN6QyxNQUFNLFlBQVksR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3ZHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQUMsT0FBTyxLQUFLLENBQUM7UUFBQyxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxJQUFZLG1CQUFtQixLQUFLLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RSxJQUFZLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzRSxJQUFZLG9CQUFvQixLQUFLLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RSxJQUFZLFFBQVE7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsSUFBWSxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRU8scUJBQXFCLENBQUMsR0FBRztRQUM3QixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDcEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxHQUFHO1FBQzdCLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNuRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLFVBQVUsQ0FBQyxXQUFnQjtRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDOUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDN0QsS0FBSyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7b0JBQzNFLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEdBQUcsSUFBSTtRQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVztRQUN2QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7K0dBcFNRLGlDQUFpQzttR0FBakMsaUNBQWlDOzs0RkFBakMsaUNBQWlDO2tCQUg3QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw0QkFBNEI7aUJBQ3pDO3FGQUdVLFNBQVM7c0JBRGYsS0FBSztnQkFJSyxZQUFZO3NCQUR0QixLQUFLO2dCQVNDLGlCQUFpQjtzQkFEdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnaWduaXRldWktYW5ndWxhcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuZXhwb3J0IGVudW0gQ29uZGl0aW9uYWxGb3JtYXR0aW5nVHlwZSB7XHJcbiAgICBkYXRhQmFycyA9ICdEYXRhIEJhcnMnLFxyXG4gICAgY29sb3JTY2FsZSA9ICdDb2xvciBTY2FsZScsXHJcbiAgICB0b3AxMCA9ICdUb3AgMTAnLFxyXG4gICAgdGV4dENvbnRhaW5zID0gJ1RleHQgQ29udGFpbnMnLFxyXG4gICAgc2luZ2xlID0gJ0R1cGxpY2F0ZSBWYWx1ZXMnLFxyXG4gICAgdW5pcXVlID0gJ1VuaXF1ZSBWYWx1ZXMnLFxyXG4gICAgZW1wdHkgPSAnRW1wdHknXHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJRm9ybWF0Q29sb3JzIHtcclxuICAgIHN1Y2Nlc3M6IHN0cmluZztcclxuICAgIGVycm9yOiBzdHJpbmc7XHJcbiAgICBpbmZvOiBzdHJpbmc7XHJcbiAgICB3YXJuaW5nOiBzdHJpbmc7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbaWd4Q29uZGl0aW9uYWxGb3JtYXR0aW5nXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIElneENvbmRpdGlvbmFsRm9ybWF0dGluZ0RpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGZvcm1hdHRlcjogc3RyaW5nIHwgQ29uZGl0aW9uYWxGb3JtYXR0aW5nVHlwZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBmb3JtYXRDb2xvcnModmFsOiBJRm9ybWF0Q29sb3JzKSAge1xyXG4gICAgICAgIHRoaXMuX2Zvcm1hdENvbG9ycyA9IHZhbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZm9ybWF0Q29sb3JzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRDb2xvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgb25Gb3JtYXR0ZXJzUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xyXG5cclxuICAgIHB1YmxpYyBjb2xvclNjYWxlID0ge1xyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogKHJvd0RhdGEsIGNvbG5hbWUsIGNlbGxWYWx1ZSwgcm93SW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEodHlwZW9mIGNlbGxWYWx1ZSA9PT0gJ251bWJlcicgJiYgdGhpcy5pc1dpdGhJbkZvcm1hdHRlZFJhbmdlKHJvd0luZGV4LCBjb2xuYW1lKSkpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvd1RyZXNob2xkVmFsdWUgPj0gY2VsbFZhbHVlID8gdGhpcy5mb3JtYXRDb2xvcnMuZXJyb3IgOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5taWRkbGVUcmVzaG9sZFZhbHVlID49IGNlbGxWYWx1ZSA/IHRoaXMuZm9ybWF0Q29sb3JzLndhcm5pbmcgOiAgdGhpcy5mb3JtYXRDb2xvcnMuc3VjY2VzcztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBkYXRhQmFycyA9IHtcclxuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IChyb3dEYXRhLCBjb2xuYW1lLCBjZWxsVmFsdWUsIHJvd0luZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghKHR5cGVvZiBjZWxsVmFsdWUgPT09ICdudW1iZXInICYmIHRoaXMuaXNXaXRoSW5Gb3JtYXR0ZWRSYW5nZShyb3dJbmRleCwgY29sbmFtZSkpKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICBjb25zdCB0cmVzaG9sZCA9IHRoaXMudGhyZXNob2xkO1xyXG4gICAgICAgICAgICBsZXQgZ3JhZGllbnRQZXJjZW50cztcclxuICAgICAgICAgICAgaWYgKGNlbGxWYWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5lZ2F0aXZlU3RhcnRpbmdQb2ludCA9IDEwMCAtIHRyZXNob2xkO1xyXG4gICAgICAgICAgICAgICAgZ3JhZGllbnRQZXJjZW50cyA9IHRoaXMuZ2V0TmVnYXRpdmVQZXJjZW50YWdlKGNlbGxWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCB0cmFuc3BhcmVudCAwJSAke25lZ2F0aXZlU3RhcnRpbmdQb2ludH0lLFxyXG4gICAgICAgICAgICAgICAgICAgICR7IHRoaXMuZm9ybWF0Q29sb3JzLmVycm9yfSAke25lZ2F0aXZlU3RhcnRpbmdQb2ludH0lICR7bmVnYXRpdmVTdGFydGluZ1BvaW50ICsgZ3JhZGllbnRQZXJjZW50c30lLFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICR7Z3JhZGllbnRQZXJjZW50c30lIDEwMCUpYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGdyYWRpZW50UGVyY2VudHMgPSB0aGlzLmdldFBvc2l0aXZlUGVyY2VudGFnZShjZWxsVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50IDAlICR7dHJlc2hvbGR9JSxcclxuICAgICAgICAgICAgICAgICAgICAkeyB0aGlzLmZvcm1hdENvbG9ycy5zdWNjZXNzfSAke3RyZXNob2xkfSUgJHt0cmVzaG9sZCArIGdyYWRpZW50UGVyY2VudHN9JSxcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCAke3RyZXNob2xkICsgZ3JhZGllbnRQZXJjZW50c30lIDEwMCUpYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYmFja2dyb3VuZFNpemU6ICcxMDAlIDgwJScsXHJcbiAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCcsXHJcbiAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uWTogJ2NlbnRlcidcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHRvcDEwUGVyY2VudCA9IHtcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IChyb3dEYXRhLCBjb2xuYW1lLCBjZWxsVmFsdWUsIHJvd0luZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2VsbFZhbHVlID09PSAnbnVtYmVyJyAmJiB0aGlzLmlzV2l0aEluRm9ybWF0dGVkUmFuZ2Uocm93SW5kZXgsIGNvbG5hbWUpXHJcbiAgICAgICAgICAgICAgICAmJiBjZWxsVmFsdWUgPiB0aGlzLnRvcDEwUGVyY2VudFRyZXNob2xkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIHRoaXMuZm9ybWF0Q29sb3JzLmluZm87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbG9yOiAocm93RGF0YSwgY29sbmFtZSwgY2VsbFZhbHVlLCByb3dJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNlbGxWYWx1ZSA9PT0gJ251bWJlcicgJiYgdGhpcy5pc1dpdGhJbkZvcm1hdHRlZFJhbmdlKHJvd0luZGV4LCBjb2xuYW1lKVxyXG4gICAgICAgICAgICAgICAgJiYgY2VsbFZhbHVlID4gdGhpcy50b3AxMFBlcmNlbnRUcmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICB0aGlzLmZvcm1hdENvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgZ3JlYXRlclRoYW4gPSB7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAocm93RGF0YSwgY29sbmFtZSwgY2VsbFZhbHVlLCByb3dJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNlbGxWYWx1ZSA9PT0gJ251bWJlcicgJiYgdGhpcy5pc1dpdGhJbkZvcm1hdHRlZFJhbmdlKHJvd0luZGV4LCBjb2xuYW1lKVxyXG4gICAgICAgICAgICAmJiBjZWxsVmFsdWUgPiB0aGlzLmF2Z1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIHRoaXMuZm9ybWF0Q29sb3JzLmluZm87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbG9yOiAocm93RGF0YSwgY29sbmFtZSwgY2VsbFZhbHVlLCByb3dJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNlbGxWYWx1ZSA9PT0gJ251bWJlcicgJiYgdGhpcy5pc1dpdGhJbkZvcm1hdHRlZFJhbmdlKHJvd0luZGV4LCBjb2xuYW1lKVxyXG4gICAgICAgICAgICAmJiBjZWxsVmFsdWUgPiB0aGlzLmF2Z1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIHRoaXMuZm9ybWF0Q29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBlbXB0eSA9IHtcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IChyb3dEYXRhLCBjb2xuYW1lLCBjZWxsVmFsdWUsIHJvd0luZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzV2l0aEluRm9ybWF0dGVkUmFuZ2Uocm93SW5kZXgsIGNvbG5hbWUpICYmIGNlbGxWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIHRoaXMuZm9ybWF0Q29sb3JzLmluZm87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbG9yOiAocm93RGF0YSwgY29sbmFtZSwgY2VsbFZhbHVlLCByb3dJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1dpdGhJbkZvcm1hdHRlZFJhbmdlKHJvd0luZGV4LCBjb2xuYW1lKSAmJiBjZWxsVmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICB0aGlzLmZvcm1hdENvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgZHVwbGljYXRlcyA9IHtcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IChyb3dEYXRhLCBjb2xuYW1lLCBjZWxsVmFsdWUsIHJvd0luZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1dpdGhJbkZvcm1hdHRlZFJhbmdlKHJvd0luZGV4LCBjb2xuYW1lKSkgeyByZXR1cm47IH1cclxuICAgICAgICAgICAgY29uc3QgYXJyOiBhbnlbXSA9IHR5cGVvZiBjZWxsVmFsdWUgPT09ICdudW1iZXInID8gdGhpcy5udW1lcmljRGF0YSA6IHRoaXMudGV4dERhdGE7XHJcbiAgICAgICAgICAgIHJldHVybiBhcnIuaW5kZXhPZihjZWxsVmFsdWUpICE9PSBhcnIubGFzdEluZGV4T2YoY2VsbFZhbHVlKSA/ICB0aGlzLmZvcm1hdENvbG9ycy5pbmZvIDogJyc7XHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29sb3I6IChyb3dEYXRhLCBjb2xuYW1lLCBjZWxsVmFsdWUsIHJvd0luZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1dpdGhJbkZvcm1hdHRlZFJhbmdlKHJvd0luZGV4LCBjb2xuYW1lKSkgeyByZXR1cm47IH1cclxuICAgICAgICAgICAgY29uc3QgYXJyOiBhbnlbXSA9IHR5cGVvZiBjZWxsVmFsdWUgPT09ICdudW1iZXInID8gdGhpcy5udW1lcmljRGF0YSA6IHRoaXMudGV4dERhdGE7XHJcbiAgICAgICAgICAgIHJldHVybiBhcnIuaW5kZXhPZihjZWxsVmFsdWUpICE9PSBhcnIubGFzdEluZGV4T2YoY2VsbFZhbHVlKSA/ICB0aGlzLmZvcm1hdENvbG9ycy50ZXh0IDogJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgdGV4dENvbnRhaW5zID0ge1xyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogKHJvd0RhdGEsIGNvbG5hbWUsIGNlbGxWYWx1ZSwgcm93SW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjZWxsVmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMuaXNXaXRoSW5Gb3JtYXR0ZWRSYW5nZShyb3dJbmRleCwgY29sbmFtZSkgJiZcclxuICAgICAgICAgICAgICAgIGNlbGxWYWx1ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5fdmFsdWVGb3JDb21wYXJpc29uLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICB0aGlzLmZvcm1hdENvbG9ycy5pbmZvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb2xvcjogKHJvd0RhdGEsIGNvbG5hbWUsIGNlbGxWYWx1ZSwgcm93SW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjZWxsVmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMuaXNXaXRoSW5Gb3JtYXR0ZWRSYW5nZShyb3dJbmRleCwgY29sbmFtZSkgJiZcclxuICAgICAgICAgICAgICAgIGNlbGxWYWx1ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5fdmFsdWVGb3JDb21wYXJpc29uLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICB0aGlzLmZvcm1hdENvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgdW5pcXVlcyA9IHtcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IChyb3dEYXRhLCBjb2xuYW1lLCBjZWxsVmFsdWUsIHJvd0luZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1dpdGhJbkZvcm1hdHRlZFJhbmdlKHJvd0luZGV4LCBjb2xuYW1lKSkgeyByZXR1cm47IH1cclxuICAgICAgICAgICAgY29uc3QgYXJyOiBhbnlbXSA9IHR5cGVvZiBjZWxsVmFsdWUgPT09ICdudW1iZXInID8gdGhpcy5udW1lcmljRGF0YSA6IHRoaXMudGV4dERhdGE7XHJcbiAgICAgICAgICAgIHJldHVybiBhcnIuaW5kZXhPZihjZWxsVmFsdWUpID09PSBhcnIubGFzdEluZGV4T2YoY2VsbFZhbHVlKSA/ICB0aGlzLmZvcm1hdENvbG9ycy5pbmZvIDogJyc7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb2xvcjogKHJvd0RhdGEsIGNvbG5hbWUsIGNlbGxWYWx1ZSwgcm93SW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzV2l0aEluRm9ybWF0dGVkUmFuZ2Uocm93SW5kZXgsIGNvbG5hbWUpKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICBjb25zdCBhcnI6IGFueVtdID0gdHlwZW9mIGNlbGxWYWx1ZSA9PT0gJ251bWJlcicgPyB0aGlzLm51bWVyaWNEYXRhIDogdGhpcy50ZXh0RGF0YTtcclxuICAgICAgICAgICAgcmV0dXJuIGFyci5pbmRleE9mKGNlbGxWYWx1ZSkgPT09IGFyci5sYXN0SW5kZXhPZihjZWxsVmFsdWUpID8gIHRoaXMuZm9ybWF0Q29sb3JzLnRleHQgOiAnJztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgZ2V0IHNlbGVjdGVkRGF0YSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdGVkRGF0YS5sZW5ndGgpIHsgdGhpcy5fc2VsZWN0ZWREYXRhID0gdGhpcy50b0FycmF5KHRoaXMuZ3JpZC5nZXRTZWxlY3RlZERhdGEoKSk7IH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IHRleHREYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0YS5maWx0ZXIodmFsID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBudW1lcmljRGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGEuZmlsdGVyKHZhbCA9PiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9mb3JtYXRDb2xvcnM6IElGb3JtYXRDb2xvcnMgPSB7XHJcbiAgICAgICAgc3VjY2VzczogJyM0RUI4NjInLFxyXG4gICAgICAgIGVycm9yOiAnI0ZGMTM0QScsXHJcbiAgICAgICAgd2FybmluZzogJyNGQkIxM0MnLFxyXG4gICAgICAgIGluZm86ICcjMTM3N0Q1JyxcclxuICAgICAgICB0ZXh0OiAnI0ZGRidcclxuICAgIH07XHJcbiAgICBwcml2YXRlIF9udW1lcmljRm9ybWF0dGVycyA9IFsnRGF0YSBCYXJzJywgJ0NvbG9yIFNjYWxlJywgJ1RvcCAxMCcsICdHcmVhdGVyIFRoYW4nXTtcclxuICAgIHByaXZhdGUgX3RleHRGb3JtYXR0ZXJzID0gWydUZXh0IENvbnRhaW5zJ107XHJcbiAgICBwcml2YXRlIF9jb21tb25Gb3JtYXR0ZXJzTmFtZSA9IFsnRHVwbGljYXRlIFZhbHVlcycsICdVbmlxdWUgVmFsdWVzJywgJ0VtcHR5J107XHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZERhdGEgPSBbXTtcclxuICAgIHByaXZhdGUgX21pblZhbHVlO1xyXG4gICAgcHJpdmF0ZSBfbWF4VmFsdWU7XHJcbiAgICBwcml2YXRlIF9zdGFydENvbHVtbjtcclxuICAgIHByaXZhdGUgX2VuZENvbHVtbjtcclxuICAgIHByaXZhdGUgX3ZhbHVlRm9yQ29tcGFyaXNvbjtcclxuICAgIHByaXZhdGUgX2Zvcm1hdHRlcnNEYXRhID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBwcml2YXRlIGZvcm1hdGVkUmFuZ2U6IE1hcDxudW1iZXIsIFNldDxudW1iZXI+PiA9IG5ldyBNYXA8bnVtYmVyLCBTZXQ8bnVtYmVyPj4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCkge1xyXG4gICAgICAgIHRoaXMuX2Zvcm1hdHRlcnNEYXRhLnNldCgnRGF0YSBCYXJzJywgdGhpcy5kYXRhQmFycyk7XHJcbiAgICAgICAgdGhpcy5fZm9ybWF0dGVyc0RhdGEuc2V0KCdDb2xvciBTY2FsZScsIHRoaXMuY29sb3JTY2FsZSk7XHJcbiAgICAgICAgdGhpcy5fZm9ybWF0dGVyc0RhdGEuc2V0KCdUb3AgMTAnLCB0aGlzLnRvcDEwUGVyY2VudCk7XHJcbiAgICAgICAgdGhpcy5fZm9ybWF0dGVyc0RhdGEuc2V0KCdHcmVhdGVyIFRoYW4nLCB0aGlzLmdyZWF0ZXJUaGFuKTtcclxuICAgICAgICB0aGlzLl9mb3JtYXR0ZXJzRGF0YS5zZXQoJ1RleHQgQ29udGFpbnMnLCB0aGlzLnRleHRDb250YWlucyk7XHJcbiAgICAgICAgdGhpcy5fZm9ybWF0dGVyc0RhdGEuc2V0KCdEdXBsaWNhdGUgVmFsdWVzJywgdGhpcy5kdXBsaWNhdGVzKTtcclxuICAgICAgICB0aGlzLl9mb3JtYXR0ZXJzRGF0YS5zZXQoJ1VuaXF1ZSBWYWx1ZXMnLCB0aGlzLnVuaXF1ZXMpO1xyXG4gICAgICAgIHRoaXMuX2Zvcm1hdHRlcnNEYXRhLnNldCgnRW1wdHknLCB0aGlzLmVtcHR5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ3JpZC5yYW5nZVNlbGVjdGVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRldGVybWluZUZvcm1hdHRlcnMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoYXJnczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgoYXJncy5uZXdWYWx1ZSA9PT0gYXJncy5vbGRWYWx1ZSB8fCAhdGhpcy5mb3JtYXR0ZXIpKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1dpdGhJbkZvcm1hdHRlZFJhbmdlKGFyZ3MuY2VsbElELnJvd0luZGV4LCBhcmdzLmNlbGxJRC5jb2x1bW5JRCAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihhcmdzLm5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlVG9CZUFkZGVkID0gIU51bWJlci5pc05hTih2YWx1ZSkgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogYXJncy5uZXdWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhLnNwbGljZSh0aGlzLnNlbGVjdGVkRGF0YS5pbmRleE9mKGFyZ3Mub2xkVmFsdWUpLCAxLCB2YWx1ZVRvQmVBZGRlZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY0NhY2hlZFZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtYXRDZWxscyh0aGlzLmZvcm1hdHRlciwgdW5kZWZpbmVkLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9ybWF0Q2VsbHMoZm9ybWF0dGVyTmFtZSwgZm9ybWF0UmFuZ2U/OiBbXSwgcmVzZXQgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHJlc2V0KSB7IHRoaXMucmVzZXRSYW5nZShmb3JtYXRSYW5nZSk7IH1cclxuICAgICAgICB0aGlzLmNsZWFyRm9ybWF0dGluZygpO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0dGVyID0gZm9ybWF0dGVyTmFtZTtcclxuICAgICAgICB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgaWYgKGMudmlzaWJsZUluZGV4ID49IHRoaXMuX3N0YXJ0Q29sdW1uICYmIGMudmlzaWJsZUluZGV4IDw9IHRoaXMuX2VuZENvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgYy5jZWxsU3R5bGVzID0gdGhpcy5fZm9ybWF0dGVyc0RhdGEuZ2V0KHRoaXMuZm9ybWF0dGVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGb3JtYXR0aW5nKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybWF0dGVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuZ3JpZC52aXNpYmxlQ29sdW1ucy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICBjLmNlbGxTdHlsZXMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXRlcm1pbmVGb3JtYXR0ZXJzKCkge1xyXG4gICAgICAgIGNvbnN0IG51bWVyaWNEYXRhID0gdGhpcy50b0FycmF5KHRoaXMuZ3JpZC5nZXRTZWxlY3RlZERhdGEoKSkuc29tZShyZWMgPT4gdHlwZW9mIHJlYyA9PT0gJ251bWJlcicpO1xyXG4gICAgICAgIGNvbnN0IHRleHREYXRhID0gdGhpcy50b0FycmF5KHRoaXMuZ3JpZC5nZXRTZWxlY3RlZERhdGEoKSkuc29tZShyZWMgPT4gdHlwZW9mIHJlYyA9PT0gJ3N0cmluZycpO1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlcnMgPSAgQXJyYXkub2YoLi4udGhpcy5fY29tbW9uRm9ybWF0dGVyc05hbWUpO1xyXG4gICAgICAgIGlmICghKG51bWVyaWNEYXRhKSAmJiB0ZXh0RGF0YSkge1xyXG4gICAgICAgICAgICBmb3JtYXR0ZXJzLnNwbGljZSgwLCAwLCAuLi50aGlzLl90ZXh0Rm9ybWF0dGVycyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChudW1lcmljRGF0YSAmJiAhdGV4dERhdGEpIHtcclxuICAgICAgICAgICAgZm9ybWF0dGVycy5zcGxpY2UoMCwgMCwgLi4udGhpcy5fbnVtZXJpY0Zvcm1hdHRlcnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvcm1hdHRlcnMuc3BsaWNlKDAsIDAsIC4uLlsnRGF0YSBCYXJzJywgJ0NvbG9yIFNjYWxlJywgJ1RleHQgQ29udGFpbnMnXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Gb3JtYXR0ZXJzUmVhZHkuZW1pdChmb3JtYXR0ZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVjYWxjQ2FjaGVkVmFsdWVzKGNsZWFyQWxsID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoY2xlYXJBbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRDb2x1bW4gPSBNYXRoLm1pbiguLi50aGlzLmdyaWQuZ2V0U2VsZWN0ZWRSYW5nZXMoKS5tYXAociA9PiBOdW1iZXIoci5jb2x1bW5TdGFydCkpKTtcclxuICAgICAgICAgICAgdGhpcy5fZW5kQ29sdW1uID0gTWF0aC5tYXgoLi4udGhpcy5ncmlkLmdldFNlbGVjdGVkUmFuZ2VzKCkubWFwKHIgPT4gTnVtYmVyKHIuY29sdW1uRW5kKSkpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGEgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdmFsdWVGb3JDb21wYXJpc29uID0gdGhpcy50ZXh0RGF0YVswXTtcclxuICAgICAgICB0aGlzLl9tYXhWYWx1ZSA9IE1hdGgubWF4KC4uLnRoaXMubnVtZXJpY0RhdGEpO1xyXG4gICAgICAgIHRoaXMuX21pblZhbHVlID0gTWF0aC5taW4oLi4udGhpcy5udW1lcmljRGF0YS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgPCAwKSkgfCAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1dpdGhJbkZvcm1hdHRlZFJhbmdlKHJvd0luZGV4LCBjb2xJRCkge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGVJbmRleCA9IHR5cGVvZiBjb2xJRCA9PT0gJ3N0cmluZycgPyB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlOYW1lKGNvbElEKS52aXNpYmxlSW5kZXggOiBjb2xJRDtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybWF0ZWRSYW5nZS5zaXplKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGVkUmFuZ2UuaGFzKHJvd0luZGV4KSAmJiB0aGlzLmZvcm1hdGVkUmFuZ2UuZ2V0KHJvd0luZGV4KS5oYXModmlzaWJsZUluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBtaWRkbGVUcmVzaG9sZFZhbHVlKCkgeyByZXR1cm4gMC42NiAqIE1hdGguY2VpbCh0aGlzLl9tYXhWYWx1ZSk7IH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBsb3dUcmVzaG9sZFZhbHVlKCkgeyByZXR1cm4gMC4zMyAqIE1hdGguY2VpbCh0aGlzLl9tYXhWYWx1ZSk7IH1cclxuXHJcbiAgICBwcml2YXRlIGdldCB0b3AxMFBlcmNlbnRUcmVzaG9sZCgpIHsgcmV0dXJuIDAuOSAqIE1hdGguY2VpbCh0aGlzLl9tYXhWYWx1ZSk7IH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBhdmdWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKCh0aGlzLm51bWVyaWNEYXRhLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApKSAvIHRoaXMubnVtZXJpY0RhdGEubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCB0aHJlc2hvbGQoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChNYXRoLmFicyh0aGlzLl9taW5WYWx1ZSkgLyAodGhpcy5fbWF4VmFsdWUgKyBNYXRoLmFicyh0aGlzLl9taW5WYWx1ZSkpICogMTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFBvc2l0aXZlUGVyY2VudGFnZSh2YWwpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSAoTWF0aC5jZWlsKHZhbCkgLyAodGhpcy5fbWF4VmFsdWUgKyBNYXRoLmFicyh0aGlzLl9taW5WYWx1ZSkpKSAqIDEwMDtcclxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXROZWdhdGl2ZVBlcmNlbnRhZ2UodmFsKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKE1hdGguYWJzKHZhbCkgLyAodGhpcy5fbWF4VmFsdWUgKyBNYXRoLmFicyh0aGlzLl9taW5WYWx1ZSkpKSAqIDEwMDtcclxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldFJhbmdlKGZvcm1hdFJhbmdlPzogW10pIHtcclxuICAgICAgICB0aGlzLmZvcm1hdGVkUmFuZ2UuY2xlYXIoKTtcclxuICAgICAgICBjb25zdCBjdXN0b21SYW5nZSA9IGZvcm1hdFJhbmdlID8gZm9ybWF0UmFuZ2UgOiB0aGlzLmdyaWQuZ2V0U2VsZWN0ZWRSYW5nZXMoKTtcclxuICAgICAgICBjdXN0b21SYW5nZS5mb3JFYWNoKHJhbmdlID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcmkgPSByYW5nZS5yb3dTdGFydDsgcmkgPD0gTnVtYmVyKHJhbmdlLnJvd0VuZCk7IHJpKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNpID0gTnVtYmVyKHJhbmdlLmNvbHVtblN0YXJ0KTsgY2kgPD0gTnVtYmVyKHJhbmdlLmNvbHVtbkVuZCk7IGNpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2FjaGUocmksIGNpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVjYWxjQ2FjaGVkVmFsdWVzKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkVG9DYWNoZShyb3dJbmRleCwgY29sSW5kZXgsIHNlbGVjdGlvbiA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLmZvcm1hdGVkUmFuZ2UuaGFzKHJvd0luZGV4KSA/IHRoaXMuZm9ybWF0ZWRSYW5nZS5nZXQocm93SW5kZXgpLmFkZChjb2xJbmRleCkgOlxyXG4gICAgICAgIHRoaXMuZm9ybWF0ZWRSYW5nZS5zZXQocm93SW5kZXgsIG5ldyBTZXQ8bnVtYmVyPigpKS5nZXQocm93SW5kZXgpLmFkZChjb2xJbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b0FycmF5KGRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGRhdGEuZm9yRWFjaChyZWMgPT4gcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChPYmplY3QudmFsdWVzKHJlYykpKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,116 +0,0 @@
1
- import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
- // tslint:disable-next-line: max-line-length
3
- import { IgxButtonModule, IgxDividerModule, IgxGridModule, IgxTabsModule, IgxToggleModule, IgxIconModule, IgxRippleModule } from 'igniteui-angular';
4
- import { IgxBarSeriesModule, IgxCategoryChartModule, IgxCategoryXAxisModule, IgxDataChartCategoryModule, IgxDataChartCoreModule, IgxDataChartInteractivityModule, IgxDataChartScatterModule, IgxDataChartStackedModule, IgxItemLegendModule, IgxLegendModule, IgxNumericXAxisModule, IgxNumericYAxisModule } from 'igniteui-angular-charts';
5
- import { IgxPieChartModule } from 'igniteui-angular-charts';
6
- import { IgxChartMenuComponent } from './context-menu/chart-dialog/chart-dialog.component';
7
- import { IgxContextMenuComponent } from './context-menu/context-menu.component';
8
- import { IgxContextMenuDirective } from './context-menu/igx-context-menu.directive';
9
- import { IgxChartIntegrationDirective } from './directives/chart-integration/chart-integration.directive';
10
- import { IgxConditionalFormattingDirective } from './directives/conditional-formatting/conditional-formatting.directive';
11
- import { SvgPipe } from './pipes/svg.pipe';
12
- import { CommonModule } from '@angular/common';
13
- import { PageHeaderComponent } from './page-header/page-header.component';
14
- import * as i0 from "@angular/core";
15
- export class IgxExtrasModule {
16
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IgxExtrasModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
17
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: IgxExtrasModule, declarations: [IgxConditionalFormattingDirective,
18
- IgxChartIntegrationDirective,
19
- IgxContextMenuDirective,
20
- IgxContextMenuComponent,
21
- IgxChartMenuComponent,
22
- PageHeaderComponent,
23
- SvgPipe], imports: [IgxButtonModule,
24
- IgxRippleModule,
25
- IgxDividerModule,
26
- IgxGridModule,
27
- IgxTabsModule,
28
- IgxToggleModule,
29
- IgxDataChartCategoryModule,
30
- IgxDataChartCoreModule,
31
- IgxLegendModule,
32
- IgxDataChartInteractivityModule,
33
- IgxNumericXAxisModule,
34
- IgxNumericYAxisModule,
35
- IgxCategoryXAxisModule,
36
- IgxItemLegendModule,
37
- IgxPieChartModule,
38
- IgxDataChartStackedModule,
39
- IgxDividerModule,
40
- IgxDataChartScatterModule,
41
- IgxBarSeriesModule,
42
- IgxIconModule,
43
- IgxCategoryChartModule,
44
- CommonModule], exports: [IgxConditionalFormattingDirective,
45
- IgxChartIntegrationDirective,
46
- IgxContextMenuDirective,
47
- PageHeaderComponent] }); }
48
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IgxExtrasModule, imports: [IgxButtonModule,
49
- IgxRippleModule,
50
- IgxDividerModule,
51
- IgxGridModule,
52
- IgxTabsModule,
53
- IgxToggleModule,
54
- IgxDataChartCategoryModule,
55
- IgxDataChartCoreModule,
56
- IgxLegendModule,
57
- IgxDataChartInteractivityModule,
58
- IgxNumericXAxisModule,
59
- IgxNumericYAxisModule,
60
- IgxCategoryXAxisModule,
61
- IgxItemLegendModule,
62
- IgxPieChartModule,
63
- IgxDataChartStackedModule,
64
- IgxDividerModule,
65
- IgxDataChartScatterModule,
66
- IgxBarSeriesModule,
67
- IgxIconModule,
68
- IgxCategoryChartModule,
69
- CommonModule] }); }
70
- }
71
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IgxExtrasModule, decorators: [{
72
- type: NgModule,
73
- args: [{
74
- declarations: [
75
- IgxConditionalFormattingDirective,
76
- IgxChartIntegrationDirective,
77
- IgxContextMenuDirective,
78
- IgxContextMenuComponent,
79
- IgxChartMenuComponent,
80
- PageHeaderComponent,
81
- SvgPipe
82
- ],
83
- imports: [
84
- IgxButtonModule,
85
- IgxRippleModule,
86
- IgxDividerModule,
87
- IgxGridModule,
88
- IgxTabsModule,
89
- IgxToggleModule,
90
- IgxDataChartCategoryModule,
91
- IgxDataChartCoreModule,
92
- IgxLegendModule,
93
- IgxDataChartInteractivityModule,
94
- IgxNumericXAxisModule,
95
- IgxNumericYAxisModule,
96
- IgxCategoryXAxisModule,
97
- IgxItemLegendModule,
98
- IgxPieChartModule,
99
- IgxDataChartStackedModule,
100
- IgxDividerModule,
101
- IgxDataChartScatterModule,
102
- IgxBarSeriesModule,
103
- IgxIconModule,
104
- IgxCategoryChartModule,
105
- CommonModule
106
- ],
107
- exports: [
108
- IgxConditionalFormattingDirective,
109
- IgxChartIntegrationDirective,
110
- IgxContextMenuDirective,
111
- PageHeaderComponent
112
- ],
113
- schemas: [CUSTOM_ELEMENTS_SCHEMA]
114
- }]
115
- }] });
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWduaXRldWktYW5ndWxhci1leHRyYXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci1leHRyYXMvc3JjL2xpYi9pZ25pdGV1aS1hbmd1bGFyLWV4dHJhcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSw0Q0FBNEM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEosT0FBTyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUN2RSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFDbEQsK0JBQStCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQ3JGLG1CQUFtQixFQUFFLGVBQWUsRUFDcEMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUN6SCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQTZDMUUsTUFBTSxPQUFPLGVBQWU7K0dBQWYsZUFBZTtnSEFBZixlQUFlLGlCQXhDcEIsaUNBQWlDO1lBQ2pDLDRCQUE0QjtZQUM1Qix1QkFBdUI7WUFDdkIsdUJBQXVCO1lBQ3ZCLHFCQUFxQjtZQUNyQixtQkFBbUI7WUFDbkIsT0FBTyxhQUdQLGVBQWU7WUFDZixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGFBQWE7WUFDYixhQUFhO1lBQ2IsZUFBZTtZQUNmLDBCQUEwQjtZQUMxQixzQkFBc0I7WUFDdEIsZUFBZTtZQUNmLCtCQUErQjtZQUMvQixxQkFBcUI7WUFDckIscUJBQXFCO1lBQ3JCLHNCQUFzQjtZQUN0QixtQkFBbUI7WUFDbkIsaUJBQWlCO1lBQ2pCLHlCQUF5QjtZQUN6QixnQkFBZ0I7WUFDaEIseUJBQXlCO1lBQ3pCLGtCQUFrQjtZQUNsQixhQUFhO1lBQ2Isc0JBQXNCO1lBQ3RCLFlBQVksYUFHWixpQ0FBaUM7WUFDakMsNEJBQTRCO1lBQzVCLHVCQUF1QjtZQUN2QixtQkFBbUI7Z0hBSWQsZUFBZSxZQS9CcEIsZUFBZTtZQUNmLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsYUFBYTtZQUNiLGFBQWE7WUFDYixlQUFlO1lBQ2YsMEJBQTBCO1lBQzFCLHNCQUFzQjtZQUN0QixlQUFlO1lBQ2YsK0JBQStCO1lBQy9CLHFCQUFxQjtZQUNyQixxQkFBcUI7WUFDckIsc0JBQXNCO1lBQ3RCLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIseUJBQXlCO1lBQ3pCLGdCQUFnQjtZQUNoQix5QkFBeUI7WUFDekIsa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixzQkFBc0I7WUFDdEIsWUFBWTs7NEZBVVAsZUFBZTtrQkExQzNCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFO3dCQUNWLGlDQUFpQzt3QkFDakMsNEJBQTRCO3dCQUM1Qix1QkFBdUI7d0JBQ3ZCLHVCQUF1Qjt3QkFDdkIscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLE9BQU87cUJBQ1Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixlQUFlO3dCQUNmLDBCQUEwQjt3QkFDMUIsc0JBQXNCO3dCQUN0QixlQUFlO3dCQUNmLCtCQUErQjt3QkFDL0IscUJBQXFCO3dCQUNyQixxQkFBcUI7d0JBQ3JCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLHlCQUF5Qjt3QkFDekIsZ0JBQWdCO3dCQUNoQix5QkFBeUI7d0JBQ3pCLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixzQkFBc0I7d0JBQ3RCLFlBQVk7cUJBQ2Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGlDQUFpQzt3QkFDakMsNEJBQTRCO3dCQUM1Qix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjtxQkFDdEI7b0JBQ0QsT0FBTyxFQUFFLENBQUUsc0JBQXNCLENBQUU7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuaW1wb3J0IHsgSWd4QnV0dG9uTW9kdWxlLCBJZ3hEaXZpZGVyTW9kdWxlLCBJZ3hHcmlkTW9kdWxlLCBJZ3hUYWJzTW9kdWxlLCBJZ3hUb2dnbGVNb2R1bGUsIElneEljb25Nb2R1bGUsIElneFJpcHBsZU1vZHVsZSB9IGZyb20gJ2lnbml0ZXVpLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBJZ3hCYXJTZXJpZXNNb2R1bGUsIElneENhdGVnb3J5Q2hhcnRNb2R1bGUsIElneENhdGVnb3J5WEF4aXNNb2R1bGUsXHJcbiAgICBJZ3hEYXRhQ2hhcnRDYXRlZ29yeU1vZHVsZSwgSWd4RGF0YUNoYXJ0Q29yZU1vZHVsZSxcclxuICAgIElneERhdGFDaGFydEludGVyYWN0aXZpdHlNb2R1bGUsIElneERhdGFDaGFydFNjYXR0ZXJNb2R1bGUsIElneERhdGFDaGFydFN0YWNrZWRNb2R1bGUsXHJcbiAgICBJZ3hJdGVtTGVnZW5kTW9kdWxlLCBJZ3hMZWdlbmRNb2R1bGUsXHJcbiAgICBJZ3hOdW1lcmljWEF4aXNNb2R1bGUsIElneE51bWVyaWNZQXhpc01vZHVsZSB9IGZyb20gJ2lnbml0ZXVpLWFuZ3VsYXItY2hhcnRzJztcclxuaW1wb3J0IHsgSWd4UGllQ2hhcnRNb2R1bGUgfSBmcm9tICdpZ25pdGV1aS1hbmd1bGFyLWNoYXJ0cyc7XHJcbmltcG9ydCB7IElneENoYXJ0TWVudUNvbXBvbmVudCB9IGZyb20gJy4vY29udGV4dC1tZW51L2NoYXJ0LWRpYWxvZy9jaGFydC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4Q29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4Q29udGV4dE1lbnVEaXJlY3RpdmUgfSBmcm9tICcuL2NvbnRleHQtbWVudS9pZ3gtY29udGV4dC1tZW51LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElneENoYXJ0SW50ZWdyYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2hhcnQtaW50ZWdyYXRpb24vY2hhcnQtaW50ZWdyYXRpb24uZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSWd4Q29uZGl0aW9uYWxGb3JtYXR0aW5nRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2NvbmRpdGlvbmFsLWZvcm1hdHRpbmcvY29uZGl0aW9uYWwtZm9ybWF0dGluZy5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTdmdQaXBlIH0gZnJvbSAnLi9waXBlcy9zdmcucGlwZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFBhZ2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3BhZ2UtaGVhZGVyL3BhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XHJcblxyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIElneENvbmRpdGlvbmFsRm9ybWF0dGluZ0RpcmVjdGl2ZSxcclxuICAgICAgICBJZ3hDaGFydEludGVncmF0aW9uRGlyZWN0aXZlLFxyXG4gICAgICAgIElneENvbnRleHRNZW51RGlyZWN0aXZlLFxyXG4gICAgICAgIElneENvbnRleHRNZW51Q29tcG9uZW50LFxyXG4gICAgICAgIElneENoYXJ0TWVudUNvbXBvbmVudCxcclxuICAgICAgICBQYWdlSGVhZGVyQ29tcG9uZW50LFxyXG4gICAgICAgIFN2Z1BpcGVcclxuICAgIF0sXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgSWd4QnV0dG9uTW9kdWxlLFxyXG4gICAgICAgIElneFJpcHBsZU1vZHVsZSxcclxuICAgICAgICBJZ3hEaXZpZGVyTW9kdWxlLFxyXG4gICAgICAgIElneEdyaWRNb2R1bGUsXHJcbiAgICAgICAgSWd4VGFic01vZHVsZSxcclxuICAgICAgICBJZ3hUb2dnbGVNb2R1bGUsXHJcbiAgICAgICAgSWd4RGF0YUNoYXJ0Q2F0ZWdvcnlNb2R1bGUsXHJcbiAgICAgICAgSWd4RGF0YUNoYXJ0Q29yZU1vZHVsZSxcclxuICAgICAgICBJZ3hMZWdlbmRNb2R1bGUsXHJcbiAgICAgICAgSWd4RGF0YUNoYXJ0SW50ZXJhY3Rpdml0eU1vZHVsZSxcclxuICAgICAgICBJZ3hOdW1lcmljWEF4aXNNb2R1bGUsXHJcbiAgICAgICAgSWd4TnVtZXJpY1lBeGlzTW9kdWxlLFxyXG4gICAgICAgIElneENhdGVnb3J5WEF4aXNNb2R1bGUsXHJcbiAgICAgICAgSWd4SXRlbUxlZ2VuZE1vZHVsZSxcclxuICAgICAgICBJZ3hQaWVDaGFydE1vZHVsZSxcclxuICAgICAgICBJZ3hEYXRhQ2hhcnRTdGFja2VkTW9kdWxlLFxyXG4gICAgICAgIElneERpdmlkZXJNb2R1bGUsXHJcbiAgICAgICAgSWd4RGF0YUNoYXJ0U2NhdHRlck1vZHVsZSxcclxuICAgICAgICBJZ3hCYXJTZXJpZXNNb2R1bGUsXHJcbiAgICAgICAgSWd4SWNvbk1vZHVsZSxcclxuICAgICAgICBJZ3hDYXRlZ29yeUNoYXJ0TW9kdWxlLFxyXG4gICAgICAgIENvbW1vbk1vZHVsZVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgICBJZ3hDb25kaXRpb25hbEZvcm1hdHRpbmdEaXJlY3RpdmUsXHJcbiAgICAgICAgSWd4Q2hhcnRJbnRlZ3JhdGlvbkRpcmVjdGl2ZSxcclxuICAgICAgICBJZ3hDb250ZXh0TWVudURpcmVjdGl2ZSxcclxuICAgICAgICBQYWdlSGVhZGVyQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogWyBDVVNUT01fRUxFTUVOVFNfU0NIRU1BIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIElneEV4dHJhc01vZHVsZSB7IH1cclxuIl19