@esfaenza/es-charts 15.2.7 → 16.2.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/{esm2020 → esm2022}/esfaenza-es-charts.mjs +4 -4
- package/{esm2020 → esm2022}/lib/adapters/BaseAdapter.mjs +50 -50
- package/{esm2020 → esm2022}/lib/adapters/IBaseAdapter.mjs +1 -1
- package/{esm2020 → esm2022}/lib/components/base/base-chart.component.mjs +350 -350
- package/{esm2020 → esm2022}/lib/components/chart-pager/chart-pager.component.mjs +89 -89
- package/{esm2020 → esm2022}/lib/components/specializations/es-area-chart.component.mjs +77 -77
- package/{esm2020 → esm2022}/lib/components/specializations/es-chart.component.mjs +122 -122
- package/{esm2020 → esm2022}/lib/components/specializations/es-line-chart.component.mjs +112 -112
- package/{esm2020 → esm2022}/lib/components/specializations/es-pie-chart.component.mjs +98 -98
- package/{esm2020 → esm2022}/lib/components/specializations/es-vertical-2d-chart.component.mjs +95 -95
- package/{esm2020 → esm2022}/lib/components/specializations/es-vertical-chart.component.mjs +92 -92
- package/{esm2020 → esm2022}/lib/components/specializations/es-vertical-stacked-chart.component.mjs +92 -92
- package/{esm2020 → esm2022}/lib/es-charts.module.mjs +67 -67
- package/{esm2020 → esm2022}/lib/models/EsChaartsModuleConfig.mjs +5 -5
- package/{esm2020 → esm2022}/lib/models/core/ChartDispatcher.mjs +91 -91
- package/{esm2020 → esm2022}/lib/models/core/ChartLoader.mjs +212 -212
- package/{esm2020 → esm2022}/lib/models/core/ChartThemes.mjs +60 -60
- package/{esm2020 → esm2022}/lib/models/data/AreaChartData.mjs +15 -15
- package/{esm2020 → esm2022}/lib/models/data/LineChartData.mjs +15 -15
- package/{esm2020 → esm2022}/lib/models/data/PagedChartData.mjs +19 -19
- package/{esm2020 → esm2022}/lib/models/data/PieChartData.mjs +13 -13
- package/{esm2020 → esm2022}/lib/models/data/Vertical2DChartData.mjs +15 -15
- package/{esm2020 → esm2022}/lib/models/data/VerticalChartData.mjs +13 -13
- package/{esm2020 → esm2022}/lib/models/data/VerticalStackedChartData.mjs +13 -13
- package/{esm2020 → esm2022}/lib/models/data/base/DateValue.mjs +10 -10
- package/{esm2020 → esm2022}/lib/models/data/base/KeyValue.mjs +10 -10
- package/{esm2020 → esm2022}/lib/models/data/base/KeyValueColor.mjs +12 -12
- package/{esm2020 → esm2022}/lib/models/data/base/Limit.mjs +15 -15
- package/{esm2020 → esm2022}/lib/models/data/base/LineSerie.mjs +27 -27
- package/{esm2020 → esm2022}/lib/models/settings/AreaChartSettings.mjs +10 -10
- package/{esm2020 → esm2022}/lib/models/settings/LineChartSettings.mjs +10 -10
- package/{esm2020 → esm2022}/lib/models/settings/PieChartSettings.mjs +6 -6
- package/{esm2020 → esm2022}/lib/models/settings/Vertical2DChartSettings.mjs +10 -10
- package/{esm2020 → esm2022}/lib/models/settings/VerticalChartSettings.mjs +10 -10
- package/{esm2020 → esm2022}/lib/models/settings/VerticalStackedChartSettings.mjs +10 -10
- package/{esm2020 → esm2022}/lib/models/settings/base/BaseInterval.mjs +5 -5
- package/{esm2020 → esm2022}/lib/models/settings/base/BaseSettings.mjs +5 -5
- package/{esm2020 → esm2022}/lib/models/settings/base/LegendPad.mjs +5 -5
- package/esm2022/lib/services/AreaChartService.mjs +157 -0
- package/esm2022/lib/services/LineChartService.mjs +392 -0
- package/{esm2020 → esm2022}/lib/services/PieChartService.mjs +113 -113
- package/{esm2020 → esm2022}/lib/services/Vertical2DChartService.mjs +162 -162
- package/{esm2020 → esm2022}/lib/services/VerticalChartService.mjs +113 -113
- package/{esm2020 → esm2022}/lib/services/VerticalStackedChartService.mjs +126 -126
- package/{esm2020 → esm2022}/lib/services/base/IBaseService.mjs +1 -1
- package/{esm2020 → esm2022}/lib/tokens.mjs +13 -13
- package/{esm2020 → esm2022}/public-api.mjs +38 -38
- package/{fesm2020 → fesm2022}/esfaenza-es-charts.mjs +2728 -2688
- package/fesm2022/esfaenza-es-charts.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/adapters/BaseAdapter.d.ts +40 -40
- package/lib/adapters/IBaseAdapter.d.ts +35 -35
- package/lib/components/base/base-chart.component.d.ts +304 -304
- package/lib/components/chart-pager/chart-pager.component.d.ts +70 -70
- package/lib/components/specializations/es-area-chart.component.d.ts +53 -53
- package/lib/components/specializations/es-chart.component.d.ts +71 -71
- package/lib/components/specializations/es-line-chart.component.d.ts +112 -112
- package/lib/components/specializations/es-pie-chart.component.d.ts +81 -81
- package/lib/components/specializations/es-vertical-2d-chart.component.d.ts +79 -79
- package/lib/components/specializations/es-vertical-chart.component.d.ts +74 -74
- package/lib/components/specializations/es-vertical-stacked-chart.component.d.ts +74 -74
- package/lib/es-charts.module.d.ts +18 -18
- package/lib/models/EsChaartsModuleConfig.d.ts +24 -24
- package/lib/models/core/ChartDispatcher.d.ts +46 -46
- package/lib/models/core/ChartLoader.d.ts +92 -92
- package/lib/models/core/ChartThemes.d.ts +23 -23
- package/lib/models/data/AreaChartData.d.ts +22 -22
- package/lib/models/data/LineChartData.d.ts +16 -16
- package/lib/models/data/PagedChartData.d.ts +23 -23
- package/lib/models/data/PieChartData.d.ts +13 -13
- package/lib/models/data/Vertical2DChartData.d.ts +27 -27
- package/lib/models/data/VerticalChartData.d.ts +13 -13
- package/lib/models/data/VerticalStackedChartData.d.ts +21 -21
- package/lib/models/data/base/DateValue.d.ts +9 -9
- package/lib/models/data/base/KeyValue.d.ts +9 -9
- package/lib/models/data/base/KeyValueColor.d.ts +11 -11
- package/lib/models/data/base/Limit.d.ts +14 -14
- package/lib/models/data/base/LineSerie.d.ts +28 -28
- package/lib/models/settings/AreaChartSettings.d.ts +10 -10
- package/lib/models/settings/LineChartSettings.d.ts +67 -67
- package/lib/models/settings/PieChartSettings.d.ts +34 -34
- package/lib/models/settings/Vertical2DChartSettings.d.ts +36 -36
- package/lib/models/settings/VerticalChartSettings.d.ts +31 -31
- package/lib/models/settings/VerticalStackedChartSettings.d.ts +31 -31
- package/lib/models/settings/base/BaseInterval.d.ts +13 -13
- package/lib/models/settings/base/BaseSettings.d.ts +67 -67
- package/lib/models/settings/base/LegendPad.d.ts +21 -21
- package/lib/services/AreaChartService.d.ts +32 -31
- package/lib/services/LineChartService.d.ts +48 -47
- package/lib/services/PieChartService.d.ts +27 -27
- package/lib/services/Vertical2DChartService.d.ts +39 -39
- package/lib/services/VerticalChartService.d.ts +33 -33
- package/lib/services/VerticalStackedChartService.d.ts +35 -35
- package/lib/services/base/IBaseService.d.ts +38 -38
- package/lib/tokens.d.ts +13 -13
- package/package.json +11 -17
- package/public-api.d.ts +35 -35
- package/esm2020/lib/services/AreaChartService.mjs +0 -137
- package/esm2020/lib/services/LineChartService.mjs +0 -372
- package/fesm2015/esfaenza-es-charts.mjs +0 -2829
- package/fesm2015/esfaenza-es-charts.mjs.map +0 -1
- package/fesm2020/esfaenza-es-charts.mjs.map +0 -1
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
import { Component, Input, Inject, PLATFORM_ID, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
-
import { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';
|
|
3
|
-
import { BaseChartComponent } from '../base/base-chart.component';
|
|
4
|
-
// Services
|
|
5
|
-
import { LineChartService } from "../../services/LineChartService";
|
|
6
|
-
import { PieChartService } from "../../services/PieChartService";
|
|
7
|
-
import { VerticalChartService } from "../../services/VerticalChartService";
|
|
8
|
-
import { Vertical2DChartService } from "../../services/Vertical2DChartService";
|
|
9
|
-
import { VerticalStackedChartService } from "../../services/VerticalStackedChartService";
|
|
10
|
-
import { AreaChartService } from "../../services/AreaChartService";
|
|
11
|
-
// Settings
|
|
12
|
-
import { PieChartSettings } from "../../models/settings/PieChartSettings";
|
|
13
|
-
import { AreaChartSettings } from "../../models/settings/AreaChartSettings";
|
|
14
|
-
import { VerticalChartSettings } from "../../models/settings/VerticalChartSettings";
|
|
15
|
-
import { Vertical2DChartSettings } from "../../models/settings/Vertical2DChartSettings";
|
|
16
|
-
import { VerticalStackedChartSettings } from "../../models/settings/VerticalStackedChartSettings";
|
|
17
|
-
import { LineChartSettings } from "../../models/settings/LineChartSettings";
|
|
18
|
-
import * as i0 from "@angular/core";
|
|
19
|
-
import * as i1 from "../../models/core/ChartLoader";
|
|
20
|
-
import * as i2 from "../../models/core/ChartDispatcher";
|
|
21
|
-
import * as i3 from "@esfaenza/extensions";
|
|
22
|
-
import * as i4 from "../../adapters/BaseAdapter";
|
|
23
|
-
import * as i5 from "@esfaenza/localizations";
|
|
24
|
-
import * as i6 from "@angular/common";
|
|
25
|
-
import * as i7 from "../chart-pager/chart-pager.component";
|
|
26
|
-
/**
|
|
27
|
-
* Componente specifico per la graficazione di un qualsiasi tipo di grafico.
|
|
28
|
-
*
|
|
29
|
-
* Si basa sul tipo specificato dalla proprietà **Type**
|
|
30
|
-
*/
|
|
31
|
-
export class EsChartComponent extends BaseChartComponent {
|
|
32
|
-
/**
|
|
33
|
-
* @ignore
|
|
34
|
-
*/
|
|
35
|
-
constructor(el, ChartLoader, ChartDispatcher, dateService, adapter, zone, platformId, ESC_DEBUG_MODE, ESC_ANIMATIONS, ESC_THEME, lc) {
|
|
36
|
-
super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);
|
|
37
|
-
this.dateService = dateService;
|
|
38
|
-
this.adapter = adapter;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare
|
|
42
|
-
*/
|
|
43
|
-
getSpecificPropertiesToCheck() {
|
|
44
|
-
return ["Data", "Type"];
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico
|
|
48
|
-
*
|
|
49
|
-
* @returns {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} Settings castati al tipo giusto
|
|
50
|
-
*/
|
|
51
|
-
getCastedSettings() {
|
|
52
|
-
switch (this.Type) {
|
|
53
|
-
case 'pie':
|
|
54
|
-
return (this.Settings ?? new PieChartSettings());
|
|
55
|
-
case 'area':
|
|
56
|
-
return (this.Settings ?? new AreaChartSettings());
|
|
57
|
-
case 'line':
|
|
58
|
-
return (this.Settings ?? new LineChartSettings());
|
|
59
|
-
case 'vertical':
|
|
60
|
-
return (this.Settings ?? new VerticalChartSettings());
|
|
61
|
-
case 'vertical-2d':
|
|
62
|
-
return (this.Settings ?? new Vertical2DChartSettings());
|
|
63
|
-
case 'vertical-stacked':
|
|
64
|
-
return (this.Settings ?? new VerticalStackedChartSettings());
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti
|
|
69
|
-
*
|
|
70
|
-
* @param {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} settingsCasted Settings castati al tipo giusto
|
|
71
|
-
*/
|
|
72
|
-
fillSpecificSettings(settingsCasted) {
|
|
73
|
-
// Nope. Se si usa l'es-chart si danno i settings con l'oggetto
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Effettua il rendering di questo grafico in base ai Settings
|
|
77
|
-
*
|
|
78
|
-
* @param {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} settingsCasted Impostazioni di graficazione
|
|
79
|
-
* @returns {PieChartService | AreaChartService | LineChartService | VerticalChartService | Vertical2DChartService | VerticalStackedChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato
|
|
80
|
-
*/
|
|
81
|
-
graphicate(settings) {
|
|
82
|
-
switch (this.Type) {
|
|
83
|
-
case 'pie':
|
|
84
|
-
return new PieChartService(this.adapter).graphicate(this.Data, settings);
|
|
85
|
-
case 'area':
|
|
86
|
-
return new AreaChartService(this.adapter).graphicate(this.Data, settings);
|
|
87
|
-
case 'line':
|
|
88
|
-
return new LineChartService(this.adapter, this.dateService).graphicate(this.Data, settings);
|
|
89
|
-
case 'vertical':
|
|
90
|
-
return new VerticalChartService(this.adapter).graphicate(this.Data, settings);
|
|
91
|
-
case 'vertical-2d':
|
|
92
|
-
return new Vertical2DChartService(this.adapter).graphicate(this.Data, settings);
|
|
93
|
-
case 'vertical-stacked':
|
|
94
|
-
return new VerticalStackedChartService(this.adapter).graphicate(this.Data, settings);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
101
|
-
type: Component,
|
|
102
|
-
args: [{ selector: 'es-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<chart-pager *ngIf=\"isPaged\" (onPageChange)=\"changePage($event)\" [Items]=\"DataArray\" [Dtos]=\"DataDtos\" [StartIndex]=\"DataDtoStartIndex\"\r\n [BrowseDelayMs]=\"BrowseDelayMs\">\r\n <ng-template #header_inner let-headerItem>\r\n <ng-container *ngTemplateOutlet=\"header_tr; context : {$implicit: headerItem}\"></ng-container>\r\n </ng-template>\r\n</chart-pager>\r\n\r\n<ng-container *ngIf=\"loadingChart && loading_template\">\r\n <div style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\">\r\n <ng-container *ngTemplateOutlet=\"loading_template\"></ng-container>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"loadingChart && !loading_template\">\r\n <div class=\"esc-loading-overlay\" style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\">\r\n <p class=\"label\">Loading....</p>\r\n </div>\r\n</ng-container>\r\n\r\n<div [class.hide-block]=\"loadingChart\" id=\"{{name}}\" style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\"></div>", styles: [".esc-loading-overlay{background
|
|
103
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ChartLoader }, { type: i2.ChartDispatcher }, { type: i3.DateService }, { type: i4.BaseAdapter }, { type: i0.NgZone }, { type: Object, decorators: [{
|
|
104
|
-
type: Inject,
|
|
105
|
-
args: [PLATFORM_ID]
|
|
106
|
-
}] }, { type: undefined, decorators: [{
|
|
107
|
-
type: Inject,
|
|
108
|
-
args: [ESC_DEBUG_MODE]
|
|
109
|
-
}] }, { type: undefined, decorators: [{
|
|
110
|
-
type: Inject,
|
|
111
|
-
args: [ESC_ANIMATIONS]
|
|
112
|
-
}] }, { type: undefined, decorators: [{
|
|
113
|
-
type: Inject,
|
|
114
|
-
args: [ESC_THEME]
|
|
115
|
-
}] }, { type: i5.LocalizationService }]; }, propDecorators: { Type: [{
|
|
116
|
-
type: Input
|
|
117
|
-
}], Data: [{
|
|
118
|
-
type: Input
|
|
119
|
-
}], DataArray: [{
|
|
120
|
-
type: Input
|
|
121
|
-
}] } });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9zcGVjaWFsaXphdGlvbnMvZXMtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Jhc2UtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBVSx1QkFBdUIsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUtuSCxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFhbEUsV0FBVztBQUNYLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVuRSxXQUFXO0FBQ1gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FB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QUFPLENBQUMsQ0FBQyxVQUFVLENBQXNCLElBQUksQ0FBQyxJQUFJLEVBQTJCLFFBQVEsQ0FBQyxDQUFDO1lBQ2hJLEtBQUssa0JBQWtCO2dCQUNyQixPQUFPLElBQUksMkJBQTJCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBMkIsSUFBSSxDQUFDLElBQUksRUFBZ0MsUUFBUSxDQUFDLENBQUM7U0FDaEo7SUFDSCxDQUFDOzs2R0E5RlUsZ0JBQWdCLGtMQTJCakIsV0FBVyxhQUNYLGNBQWMsYUFDZCxjQUFjLGFBQ2QsU0FBUztpR0E5QlIsZ0JBQWdCLHVJQ2hEN0Isd2pDQW1Cd0k7MkZENkIzSCxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0UsVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNOzswQkE2QjVDLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLE1BQU07MkJBQUMsY0FBYzs7MEJBQ3JCLE1BQU07MkJBQUMsY0FBYzs7MEJBQ3JCLE1BQU07MkJBQUMsU0FBUzs4RUF6QlYsSUFBSTtzQkFBWixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgSW5qZWN0LCBQTEFURk9STV9JRCwgTmdab25lLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGVzZmFlbnphL2xvY2FsaXphdGlvbnMnO1xyXG5cclxuaW1wb3J0IHsgQmFzZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9hZGFwdGVycy9CYXNlQWRhcHRlcic7XHJcbmltcG9ydCB7IEVTQ19BTklNQVRJT05TLCBFU0NfVEhFTUUsIEVTQ19ERUJVR19NT0RFIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcclxuXHJcbmltcG9ydCB7IEJhc2VDaGFydENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UvYmFzZS1jaGFydC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGFydERpc3BhdGNoZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvcmUvQ2hhcnREaXNwYXRjaGVyXCI7XHJcbmltcG9ydCB7IENoYXJ0TG9hZGVyIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb3JlL0NoYXJ0TG9hZGVyXCI7XHJcblxyXG4vLyBEYXRhXHJcbmltcG9ydCB7IExpbmVDaGFydERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RhdGEvTGluZUNoYXJ0RGF0YVwiO1xyXG5pbXBvcnQgeyBQaWVDaGFydERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RhdGEvUGllQ2hhcnREYXRhXCI7XHJcbmltcG9ydCB7IFZlcnRpY2FsQ2hhcnREYXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9kYXRhL1ZlcnRpY2FsQ2hhcnREYXRhXCI7XHJcbmltcG9ydCB7IFZlcnRpY2FsMkRDaGFydERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RhdGEvVmVydGljYWwyRENoYXJ0RGF0YVwiO1xyXG5pbXBvcnQgeyBWZXJ0aWNhbFN0YWNrZWRDaGFydERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RhdGEvVmVydGljYWxTdGFja2VkQ2hhcnREYXRhXCI7XHJcbmltcG9ydCB7IEFyZWFDaGFydERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RhdGEvQXJlYUNoYXJ0RGF0YVwiO1xyXG5pbXBvcnQgeyBQYWdlZENoYXJ0RGF0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZGF0YS9QYWdlZENoYXJ0RGF0YVwiO1xyXG5cclxuLy8gU2VydmljZXNcclxuaW1wb3J0IHsgTGluZUNoYXJ0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9MaW5lQ2hhcnRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBpZUNoYXJ0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9QaWVDaGFydFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVmVydGljYWxDaGFydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvVmVydGljYWxDaGFydFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVmVydGljYWwyRENoYXJ0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9WZXJ0aWNhbDJEQ2hhcnRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFZlcnRpY2FsU3RhY2tlZENoYXJ0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9WZXJ0aWNhbFN0YWNrZWRDaGFydFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXJlYUNoYXJ0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9BcmVhQ2hhcnRTZXJ2aWNlXCI7XHJcblxyXG4vLyBTZXR0aW5nc1xyXG5pbXBvcnQgeyBQaWVDaGFydFNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXR0aW5ncy9QaWVDaGFydFNldHRpbmdzXCI7XHJcbmltcG9ydCB7IEFyZWFDaGFydFNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXR0aW5ncy9BcmVhQ2hhcnRTZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBWZXJ0aWNhbENoYXJ0U2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NldHRpbmdzL1ZlcnRpY2FsQ2hhcnRTZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBWZXJ0aWNhbDJEQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2V0dGluZ3MvVmVydGljYWwyRENoYXJ0U2V0dGluZ3NcIjtcclxuaW1wb3J0IHsgVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2V0dGluZ3MvVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBMaW5lQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2V0dGluZ3MvTGluZUNoYXJ0U2V0dGluZ3NcIjtcclxuXHJcblxyXG4vKipcclxuICogQ29tcG9uZW50ZSBzcGVjaWZpY28gcGVyIGxhIGdyYWZpY2F6aW9uZSBkaSB1biBxdWFsc2lhc2kgdGlwbyBkaSBncmFmaWNvLlxyXG4gKiBcclxuICogU2kgYmFzYSBzdWwgdGlwbyBzcGVjaWZpY2F0byBkYWxsYSBwcm9wcmlldMOgICoqVHlwZSoqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VzLWNoYXJ0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4uL2Jhc2UvYmFzZS1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4uL2Jhc2UvYmFzZS1jaGFydC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFc0NoYXJ0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUNoYXJ0Q29tcG9uZW50IHtcclxuXHJcbiAgLyoqXHJcbiAgICogVGlwb2xvZ2lhIGRpIGdyYWZpY28gZGEgcHJlc2VudGFyZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFR5cGU6ICdwaWUnIHwgJ2xpbmUnIHwgJ3ZlcnRpY2FsJyB8ICd2ZXJ0aWNhbC0yZCcgfCAndmVydGljYWwtc3RhY2tlZCcgfCAnYXJlYSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGkgc3BlY2lmaWNpIHBlciBpbCBncmFmaWNvIG8gZGkgdW4gdGlwbyB0cmFtdXRhYmlsZSBhbCB0aXBvIGdpdXN0byBjb2wgc3VwcG9ydG8gZGVsICoqQmFzZUFkYXB0ZXIqKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIERhdGE6IExpbmVDaGFydERhdGEgfCBQaWVDaGFydERhdGEgfCBWZXJ0aWNhbDJEQ2hhcnREYXRhIHwgVmVydGljYWxDaGFydERhdGEgfCBWZXJ0aWNhbFN0YWNrZWRDaGFydERhdGEgfCBBcmVhQ2hhcnREYXRhIHwgYW55O1xyXG5cclxuICAvKipcclxuICAgKiBMaXN0YSBkaSBEYXRpIHNwZWNpZmljaSBwZXIgdW4gZ3JhZmljbyBwYWdpbmF0byBvIGRpIGN1aSBvZ25pIGJsb2NjbyBkYXRpIMOoIHRyYW11dGFiaWxlIGFsIHRpcG8gZ2l1c3RvIGNvbCBzdXBwb3J0byBkZWwgKipCYXNlQWRhcHRlcioqXHJcbiAgICovXHJcbiAgQElucHV0KCkgRGF0YUFycmF5OiBQYWdlZENoYXJ0RGF0YTxMaW5lQ2hhcnREYXRhPltdXHJcbiAgICB8IFBhZ2VkQ2hhcnREYXRhPFBpZUNoYXJ0RGF0YT5bXVxyXG4gICAgfCBQYWdlZENoYXJ0RGF0YTxWZXJ0aWNhbDJEQ2hhcnREYXRhPltdXHJcbiAgICB8IFBhZ2VkQ2hhcnREYXRhPFZlcnRpY2FsQ2hhcnREYXRhPltdXHJcbiAgICB8IFBhZ2VkQ2hhcnREYXRhPFZlcnRpY2FsU3RhY2tlZENoYXJ0RGF0YT5bXVxyXG4gICAgfCBQYWdlZENoYXJ0RGF0YTxBcmVhQ2hhcnREYXRhPltdXHJcbiAgICB8IFBhZ2VkQ2hhcnREYXRhPGFueT5bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGVsOiBFbGVtZW50UmVmLCBDaGFydExvYWRlcjogQ2hhcnRMb2FkZXIsIENoYXJ0RGlzcGF0Y2hlcjogQ2hhcnREaXNwYXRjaGVyLCBwcml2YXRlIGRhdGVTZXJ2aWNlOiBEYXRlU2VydmljZSwgcHJpdmF0ZSBhZGFwdGVyOiBCYXNlQWRhcHRlciwgem9uZTogTmdab25lLFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZDogT2JqZWN0LFxyXG4gICAgQEluamVjdChFU0NfREVCVUdfTU9ERSkgRVNDX0RFQlVHX01PREU6IGJvb2xlYW4sXHJcbiAgICBASW5qZWN0KEVTQ19BTklNQVRJT05TKSBFU0NfQU5JTUFUSU9OUzogYm9vbGVhbixcclxuICAgIEBJbmplY3QoRVNDX1RIRU1FKSBFU0NfVEhFTUU6IHN0cmluZyxcclxuICAgIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihlbCwgcGxhdGZvcm1JZCwgem9uZSwgQ2hhcnRMb2FkZXIsIENoYXJ0RGlzcGF0Y2hlciwgRVNDX0RFQlVHX01PREUsIEVTQ19BTklNQVRJT05TLCBsYy5Mb2NhbGUsIEVTQ19USEVNRSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPdHRpZW5lIGxlIHByb3ByaWV0w6Agc3BlY2lmaWNoZSBwZXIgcXVlc3RhIHRpcG9sb2dpYSBkaSBncmFmaWNvIHBlciBjdWkgc2VydmUgcmlncmFmaWNhcmVcclxuICAgKi9cclxuICBnZXRTcGVjaWZpY1Byb3BlcnRpZXNUb0NoZWNrKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbXCJEYXRhXCIsIFwiVHlwZVwiXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE90dGllbmUgaSBTZXR0aW5ncyAoRXJlZGl0YXRpIGRhbGxhIGNsYXNzZSBiYXNlLCBxdWluZGkgZGVsIHRpcG8gZ2VuZXJpY28gKipCYXNlU2V0dGluZ3MqKikgY2FzdGF0aSBhbCB0aXBvIHNwZWNpZmljbyBwZXIgcXVlc3RvIGdyYWZpY29cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7UGllQ2hhcnRTZXR0aW5ncyB8IEFyZWFDaGFydFNldHRpbmdzIHwgTGluZUNoYXJ0U2V0dGluZ3MgfCBWZXJ0aWNhbENoYXJ0U2V0dGluZ3MgfCBWZXJ0aWNhbDJEQ2hhcnRTZXR0aW5ncyB8IFZlcnRpY2FsU3RhY2tlZENoYXJ0U2V0dGluZ3N9IFNldHRpbmdzIGNhc3RhdGkgYWwgdGlwbyBnaXVzdG9cclxuICAgKi9cclxuICBnZXRDYXN0ZWRTZXR0aW5ncygpIHtcclxuICAgIHN3aXRjaCAodGhpcy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgJ3BpZSc6XHJcbiAgICAgICAgcmV0dXJuIDxQaWVDaGFydFNldHRpbmdzPih0aGlzLlNldHRpbmdzID8/IG5ldyBQaWVDaGFydFNldHRpbmdzKCkpO1xyXG4gICAgICBjYXNlICdhcmVhJzpcclxuICAgICAgICByZXR1cm4gPEFyZWFDaGFydFNldHRpbmdzPih0aGlzLlNldHRpbmdzID8/IG5ldyBBcmVhQ2hhcnRTZXR0aW5ncygpKTtcclxuICAgICAgY2FzZSAnbGluZSc6XHJcbiAgICAgICAgcmV0dXJuIDxMaW5lQ2hhcnRTZXR0aW5ncz4odGhpcy5TZXR0aW5ncyA/PyBuZXcgTGluZUNoYXJ0U2V0dGluZ3MoKSk7XHJcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcclxuICAgICAgICByZXR1cm4gPFZlcnRpY2FsQ2hhcnRTZXR0aW5ncz4odGhpcy5TZXR0aW5ncyA/PyBuZXcgVmVydGljYWxDaGFydFNldHRpbmdzKCkpO1xyXG4gICAgICBjYXNlICd2ZXJ0aWNhbC0yZCc6XHJcbiAgICAgICAgcmV0dXJuIDxWZXJ0aWNhbDJEQ2hhcnRTZXR0aW5ncz4odGhpcy5TZXR0aW5ncyA/PyBuZXcgVmVydGljYWwyRENoYXJ0U2V0dGluZ3MoKSk7XHJcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsLXN0YWNrZWQnOlxyXG4gICAgICAgIHJldHVybiA8VmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5ncz4odGhpcy5TZXR0aW5ncyA/PyBuZXcgVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5ncygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEludGVncmEgaSBTZXR0aW5ncyBiYXNlIGNvbiB0dXR0aSBnbGkgSW5wdXQgc3BlY2lmaWNpIGRpIHF1ZXN0byBncmFmaWNvLCBkYW5kbyBwcmlvcml0w6AgYWkgU2V0dGluZ3Mgc2UgZGVmaW5pdGlcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge1BpZUNoYXJ0U2V0dGluZ3MgfCBBcmVhQ2hhcnRTZXR0aW5ncyB8IExpbmVDaGFydFNldHRpbmdzIHwgVmVydGljYWxDaGFydFNldHRpbmdzIHwgVmVydGljYWwyRENoYXJ0U2V0dGluZ3MgfCBWZXJ0aWNhbFN0YWNrZWRDaGFydFNldHRpbmdzfSBzZXR0aW5nc0Nhc3RlZCBTZXR0aW5ncyBjYXN0YXRpIGFsIHRpcG8gZ2l1c3RvXHJcbiAgICovXHJcbiAgZmlsbFNwZWNpZmljU2V0dGluZ3Moc2V0dGluZ3NDYXN0ZWQ6IFBpZUNoYXJ0U2V0dGluZ3MgfCBBcmVhQ2hhcnRTZXR0aW5ncyB8IExpbmVDaGFydFNldHRpbmdzIHwgVmVydGljYWxDaGFydFNldHRpbmdzIHwgVmVydGljYWwyRENoYXJ0U2V0dGluZ3MgfCBWZXJ0aWNhbFN0YWNrZWRDaGFydFNldHRpbmdzKTogdm9pZCB7XHJcbiAgICAvLyBOb3BlLiBTZSBzaSB1c2EgbCdlcy1jaGFydCBzaSBkYW5ubyBpIHNldHRpbmdzIGNvbiBsJ29nZ2V0dG9cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVmZmV0dHVhIGlsIHJlbmRlcmluZyBkaSBxdWVzdG8gZ3JhZmljbyBpbiBiYXNlIGFpIFNldHRpbmdzXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtQaWVDaGFydFNldHRpbmdzIHwgQXJlYUNoYXJ0U2V0dGluZ3MgfCBMaW5lQ2hhcnRTZXR0aW5ncyB8IFZlcnRpY2FsQ2hhcnRTZXR0aW5ncyB8IFZlcnRpY2FsMkRDaGFydFNldHRpbmdzIHwgVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5nc30gc2V0dGluZ3NDYXN0ZWQgSW1wb3N0YXppb25pIGRpIGdyYWZpY2F6aW9uZVxyXG4gICAqIEByZXR1cm5zIHtQaWVDaGFydFNlcnZpY2UgfCBBcmVhQ2hhcnRTZXJ2aWNlIHwgTGluZUNoYXJ0U2VydmljZSB8IFZlcnRpY2FsQ2hhcnRTZXJ2aWNlIHwgVmVydGljYWwyRENoYXJ0U2VydmljZSB8IFZlcnRpY2FsU3RhY2tlZENoYXJ0U2VydmljZX0gTGEgc2VydmljZSB1dGlsaXp6YXRhIHBlciBpbCByZW5kZXJpbmcgbmVsbG8gc3RhdG8gc3ViaXRvIHN1Y2Nlc3Npdm8gYWwgcmVuZGVyaW5nIGVmZmV0dHVhdG9cclxuICAgKi9cclxuICBncmFwaGljYXRlKHNldHRpbmdzOiBQaWVDaGFydFNldHRpbmdzIHwgQXJlYUNoYXJ0U2V0dGluZ3MgfCBMaW5lQ2hhcnRTZXR0aW5ncyB8IFZlcnRpY2FsQ2hhcnRTZXR0aW5ncyB8IFZlcnRpY2FsMkRDaGFydFNldHRpbmdzIHwgVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5ncyk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuVHlwZSkge1xyXG4gICAgICBjYXNlICdwaWUnOlxyXG4gICAgICAgIHJldHVybiBuZXcgUGllQ2hhcnRTZXJ2aWNlKHRoaXMuYWRhcHRlcikuZ3JhcGhpY2F0ZSg8UGllQ2hhcnREYXRhPnRoaXMuRGF0YSwgPFBpZUNoYXJ0U2V0dGluZ3M+c2V0dGluZ3MpO1xyXG4gICAgICBjYXNlICdhcmVhJzpcclxuICAgICAgICByZXR1cm4gbmV3IEFyZWFDaGFydFNlcnZpY2UodGhpcy5hZGFwdGVyKS5ncmFwaGljYXRlKDxBcmVhQ2hhcnREYXRhPnRoaXMuRGF0YSwgPEFyZWFDaGFydFNldHRpbmdzPnNldHRpbmdzKTtcclxuICAgICAgY2FzZSAnbGluZSc6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5lQ2hhcnRTZXJ2aWNlKHRoaXMuYWRhcHRlciwgdGhpcy5kYXRlU2VydmljZSkuZ3JhcGhpY2F0ZSg8TGluZUNoYXJ0RGF0YT50aGlzLkRhdGEsIDxMaW5lQ2hhcnRTZXR0aW5ncz5zZXR0aW5ncyk7XHJcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcclxuICAgICAgICByZXR1cm4gbmV3IFZlcnRpY2FsQ2hhcnRTZXJ2aWNlKHRoaXMuYWRhcHRlcikuZ3JhcGhpY2F0ZSg8VmVydGljYWxDaGFydERhdGE+dGhpcy5EYXRhLCA8VmVydGljYWxDaGFydFNldHRpbmdzPnNldHRpbmdzKTtcclxuICAgICAgY2FzZSAndmVydGljYWwtMmQnOlxyXG4gICAgICAgIHJldHVybiBuZXcgVmVydGljYWwyRENoYXJ0U2VydmljZSh0aGlzLmFkYXB0ZXIpLmdyYXBoaWNhdGUoPFZlcnRpY2FsMkRDaGFydERhdGE+dGhpcy5EYXRhLCA8VmVydGljYWwyRENoYXJ0U2V0dGluZ3M+c2V0dGluZ3MpO1xyXG4gICAgICBjYXNlICd2ZXJ0aWNhbC1zdGFja2VkJzpcclxuICAgICAgICByZXR1cm4gbmV3IFZlcnRpY2FsU3RhY2tlZENoYXJ0U2VydmljZSh0aGlzLmFkYXB0ZXIpLmdyYXBoaWNhdGUoPFZlcnRpY2FsU3RhY2tlZENoYXJ0RGF0YT50aGlzLkRhdGEsIDxWZXJ0aWNhbFN0YWNrZWRDaGFydFNldHRpbmdzPnNldHRpbmdzKTtcclxuICAgIH1cclxuICB9XHJcbn0iLCI8Y2hhcnQtcGFnZXIgKm5nSWY9XCJpc1BhZ2VkXCIgKG9uUGFnZUNoYW5nZSk9XCJjaGFuZ2VQYWdlKCRldmVudClcIiBbSXRlbXNdPVwiRGF0YUFycmF5XCIgW0R0b3NdPVwiRGF0YUR0b3NcIiBbU3RhcnRJbmRleF09XCJEYXRhRHRvU3RhcnRJbmRleFwiXHJcbiAgICBbQnJvd3NlRGVsYXlNc109XCJCcm93c2VEZWxheU1zXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlcl9pbm5lciBsZXQtaGVhZGVySXRlbT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyX3RyOyBjb250ZXh0IDogeyRpbXBsaWNpdDogaGVhZGVySXRlbX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvY2hhcnQtcGFnZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ0NoYXJ0ICYmIGxvYWRpbmdfdGVtcGxhdGVcIj5cclxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbc3R5bGUuaGVpZ2h0XT1cImlzUGFnZWQgPyAnY2FsYygxMDAlIC0gNDRweCknIDogJzEwMCUnXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdfdGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nQ2hhcnQgJiYgIWxvYWRpbmdfdGVtcGxhdGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJlc2MtbG9hZGluZy1vdmVybGF5XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbc3R5bGUuaGVpZ2h0XT1cImlzUGFnZWQgPyAnY2FsYygxMDAlIC0gNDRweCknIDogJzEwMCUnXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJsYWJlbFwiPkxvYWRpbmcuLi4uPC9wPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGRpdiBbY2xhc3MuaGlkZS1ibG9ja109XCJsb2FkaW5nQ2hhcnRcIiBpZD1cInt7bmFtZX19XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbc3R5bGUuaGVpZ2h0XT1cImlzUGFnZWQgPyAnY2FsYygxMDAlIC0gNDRweCknIDogJzEwMCUnXCI+PC9kaXY+Il19
|
|
1
|
+
import { Component, Input, Inject, PLATFORM_ID, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';
|
|
3
|
+
import { BaseChartComponent } from '../base/base-chart.component';
|
|
4
|
+
// Services
|
|
5
|
+
import { LineChartService } from "../../services/LineChartService";
|
|
6
|
+
import { PieChartService } from "../../services/PieChartService";
|
|
7
|
+
import { VerticalChartService } from "../../services/VerticalChartService";
|
|
8
|
+
import { Vertical2DChartService } from "../../services/Vertical2DChartService";
|
|
9
|
+
import { VerticalStackedChartService } from "../../services/VerticalStackedChartService";
|
|
10
|
+
import { AreaChartService } from "../../services/AreaChartService";
|
|
11
|
+
// Settings
|
|
12
|
+
import { PieChartSettings } from "../../models/settings/PieChartSettings";
|
|
13
|
+
import { AreaChartSettings } from "../../models/settings/AreaChartSettings";
|
|
14
|
+
import { VerticalChartSettings } from "../../models/settings/VerticalChartSettings";
|
|
15
|
+
import { Vertical2DChartSettings } from "../../models/settings/Vertical2DChartSettings";
|
|
16
|
+
import { VerticalStackedChartSettings } from "../../models/settings/VerticalStackedChartSettings";
|
|
17
|
+
import { LineChartSettings } from "../../models/settings/LineChartSettings";
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
import * as i1 from "../../models/core/ChartLoader";
|
|
20
|
+
import * as i2 from "../../models/core/ChartDispatcher";
|
|
21
|
+
import * as i3 from "@esfaenza/extensions";
|
|
22
|
+
import * as i4 from "../../adapters/BaseAdapter";
|
|
23
|
+
import * as i5 from "@esfaenza/localizations";
|
|
24
|
+
import * as i6 from "@angular/common";
|
|
25
|
+
import * as i7 from "../chart-pager/chart-pager.component";
|
|
26
|
+
/**
|
|
27
|
+
* Componente specifico per la graficazione di un qualsiasi tipo di grafico.
|
|
28
|
+
*
|
|
29
|
+
* Si basa sul tipo specificato dalla proprietà **Type**
|
|
30
|
+
*/
|
|
31
|
+
export class EsChartComponent extends BaseChartComponent {
|
|
32
|
+
/**
|
|
33
|
+
* @ignore
|
|
34
|
+
*/
|
|
35
|
+
constructor(el, ChartLoader, ChartDispatcher, dateService, adapter, zone, platformId, ESC_DEBUG_MODE, ESC_ANIMATIONS, ESC_THEME, lc) {
|
|
36
|
+
super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);
|
|
37
|
+
this.dateService = dateService;
|
|
38
|
+
this.adapter = adapter;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare
|
|
42
|
+
*/
|
|
43
|
+
getSpecificPropertiesToCheck() {
|
|
44
|
+
return ["Data", "Type"];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico
|
|
48
|
+
*
|
|
49
|
+
* @returns {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} Settings castati al tipo giusto
|
|
50
|
+
*/
|
|
51
|
+
getCastedSettings() {
|
|
52
|
+
switch (this.Type) {
|
|
53
|
+
case 'pie':
|
|
54
|
+
return (this.Settings ?? new PieChartSettings());
|
|
55
|
+
case 'area':
|
|
56
|
+
return (this.Settings ?? new AreaChartSettings());
|
|
57
|
+
case 'line':
|
|
58
|
+
return (this.Settings ?? new LineChartSettings());
|
|
59
|
+
case 'vertical':
|
|
60
|
+
return (this.Settings ?? new VerticalChartSettings());
|
|
61
|
+
case 'vertical-2d':
|
|
62
|
+
return (this.Settings ?? new Vertical2DChartSettings());
|
|
63
|
+
case 'vertical-stacked':
|
|
64
|
+
return (this.Settings ?? new VerticalStackedChartSettings());
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti
|
|
69
|
+
*
|
|
70
|
+
* @param {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} settingsCasted Settings castati al tipo giusto
|
|
71
|
+
*/
|
|
72
|
+
fillSpecificSettings(settingsCasted) {
|
|
73
|
+
// Nope. Se si usa l'es-chart si danno i settings con l'oggetto
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Effettua il rendering di questo grafico in base ai Settings
|
|
77
|
+
*
|
|
78
|
+
* @param {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} settingsCasted Impostazioni di graficazione
|
|
79
|
+
* @returns {PieChartService | AreaChartService | LineChartService | VerticalChartService | Vertical2DChartService | VerticalStackedChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato
|
|
80
|
+
*/
|
|
81
|
+
graphicate(settings) {
|
|
82
|
+
switch (this.Type) {
|
|
83
|
+
case 'pie':
|
|
84
|
+
return new PieChartService(this.adapter).graphicate(this.Data, settings);
|
|
85
|
+
case 'area':
|
|
86
|
+
return new AreaChartService(this.adapter).graphicate(this.Data, settings);
|
|
87
|
+
case 'line':
|
|
88
|
+
return new LineChartService(this.adapter, this.dateService).graphicate(this.Data, settings);
|
|
89
|
+
case 'vertical':
|
|
90
|
+
return new VerticalChartService(this.adapter).graphicate(this.Data, settings);
|
|
91
|
+
case 'vertical-2d':
|
|
92
|
+
return new Vertical2DChartService(this.adapter).graphicate(this.Data, settings);
|
|
93
|
+
case 'vertical-stacked':
|
|
94
|
+
return new VerticalStackedChartService(this.adapter).graphicate(this.Data, settings);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EsChartComponent, deps: [{ token: i0.ElementRef }, { token: i1.ChartLoader }, { token: i2.ChartDispatcher }, { token: i3.DateService }, { token: i4.BaseAdapter }, { token: i0.NgZone }, { token: PLATFORM_ID }, { token: ESC_DEBUG_MODE }, { token: ESC_ANIMATIONS }, { token: ESC_THEME }, { token: i5.LocalizationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
98
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EsChartComponent, selector: "es-chart", inputs: { Type: "Type", Data: "Data", DataArray: "DataArray" }, usesInheritance: true, ngImport: i0, template: "<chart-pager *ngIf=\"isPaged\" (onPageChange)=\"changePage($event)\" [Items]=\"DataArray\" [Dtos]=\"DataDtos\" [StartIndex]=\"DataDtoStartIndex\"\r\n [BrowseDelayMs]=\"BrowseDelayMs\">\r\n <ng-template #header_inner let-headerItem>\r\n <ng-container *ngTemplateOutlet=\"header_tr; context : {$implicit: headerItem}\"></ng-container>\r\n </ng-template>\r\n</chart-pager>\r\n\r\n<ng-container *ngIf=\"loadingChart && loading_template\">\r\n <div style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\">\r\n <ng-container *ngTemplateOutlet=\"loading_template\"></ng-container>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"loadingChart && !loading_template\">\r\n <div class=\"esc-loading-overlay\" style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\">\r\n <p class=\"label\">Loading....</p>\r\n </div>\r\n</ng-container>\r\n\r\n<div [class.hide-block]=\"loadingChart\" id=\"{{name}}\" style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\"></div>", styles: [".esc-loading-overlay{background:#9999;text-transform:uppercase;font-size:30px;font-weight:700;color:#fff;text-align:center;font-family:monospace}.esc-loading-overlay .label{margin:0;padding-top:7%}.hide-block{display:none}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.PageChartSelector, selector: "chart-pager", inputs: ["Items", "Dtos", "BrowseDelayMs", "StartIndex"], outputs: ["onPageChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
99
|
+
}
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EsChartComponent, decorators: [{
|
|
101
|
+
type: Component,
|
|
102
|
+
args: [{ selector: 'es-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<chart-pager *ngIf=\"isPaged\" (onPageChange)=\"changePage($event)\" [Items]=\"DataArray\" [Dtos]=\"DataDtos\" [StartIndex]=\"DataDtoStartIndex\"\r\n [BrowseDelayMs]=\"BrowseDelayMs\">\r\n <ng-template #header_inner let-headerItem>\r\n <ng-container *ngTemplateOutlet=\"header_tr; context : {$implicit: headerItem}\"></ng-container>\r\n </ng-template>\r\n</chart-pager>\r\n\r\n<ng-container *ngIf=\"loadingChart && loading_template\">\r\n <div style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\">\r\n <ng-container *ngTemplateOutlet=\"loading_template\"></ng-container>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"loadingChart && !loading_template\">\r\n <div class=\"esc-loading-overlay\" style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\">\r\n <p class=\"label\">Loading....</p>\r\n </div>\r\n</ng-container>\r\n\r\n<div [class.hide-block]=\"loadingChart\" id=\"{{name}}\" style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\"></div>", styles: [".esc-loading-overlay{background:#9999;text-transform:uppercase;font-size:30px;font-weight:700;color:#fff;text-align:center;font-family:monospace}.esc-loading-overlay .label{margin:0;padding-top:7%}.hide-block{display:none}\n"] }]
|
|
103
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ChartLoader }, { type: i2.ChartDispatcher }, { type: i3.DateService }, { type: i4.BaseAdapter }, { type: i0.NgZone }, { type: Object, decorators: [{
|
|
104
|
+
type: Inject,
|
|
105
|
+
args: [PLATFORM_ID]
|
|
106
|
+
}] }, { type: undefined, decorators: [{
|
|
107
|
+
type: Inject,
|
|
108
|
+
args: [ESC_DEBUG_MODE]
|
|
109
|
+
}] }, { type: undefined, decorators: [{
|
|
110
|
+
type: Inject,
|
|
111
|
+
args: [ESC_ANIMATIONS]
|
|
112
|
+
}] }, { type: undefined, decorators: [{
|
|
113
|
+
type: Inject,
|
|
114
|
+
args: [ESC_THEME]
|
|
115
|
+
}] }, { type: i5.LocalizationService }]; }, propDecorators: { Type: [{
|
|
116
|
+
type: Input
|
|
117
|
+
}], Data: [{
|
|
118
|
+
type: Input
|
|
119
|
+
}], DataArray: [{
|
|
120
|
+
type: Input
|
|
121
|
+
}] } });
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9zcGVjaWFsaXphdGlvbnMvZXMtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Jhc2UtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBVSx1QkFBdUIsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUtuSCxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFhbEUsV0FBVztBQUNYLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVuRSxXQUFXO0FBQ1gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FB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QUFPLENBQUMsQ0FBQyxVQUFVLENBQXNCLElBQUksQ0FBQyxJQUFJLEVBQTJCLFFBQVEsQ0FBQyxDQUFDO1lBQ2hJLEtBQUssa0JBQWtCO2dCQUNyQixPQUFPLElBQUksMkJBQTJCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBMkIsSUFBSSxDQUFDLElBQUksRUFBZ0MsUUFBUSxDQUFDLENBQUM7U0FDaEo7SUFDSCxDQUFDOytHQTlGVSxnQkFBZ0Isa0xBMkJqQixXQUFXLGFBQ1gsY0FBYyxhQUNkLGNBQWMsYUFDZCxTQUFTO21HQTlCUixnQkFBZ0IsdUlDaEQ3Qix3akNBbUJ3STs7NEZENkIzSCxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0UsVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNOzswQkE2QjVDLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLE1BQU07MkJBQUMsY0FBYzs7MEJBQ3JCLE1BQU07MkJBQUMsY0FBYzs7MEJBQ3JCLE1BQU07MkJBQUMsU0FBUzs4RUF6QlYsSUFBSTtzQkFBWixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgSW5qZWN0LCBQTEFURk9STV9JRCwgTmdab25lLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGVzZmFlbnphL2xvY2FsaXphdGlvbnMnO1xyXG5cclxuaW1wb3J0IHsgQmFzZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9hZGFwdGVycy9CYXNlQWRhcHRlcic7XHJcbmltcG9ydCB7IEVTQ19BTklNQVRJT05TLCBFU0NfVEhFTUUsIEVTQ19ERUJVR19NT0RFIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcclxuXHJcbmltcG9ydCB7IEJhc2VDaGFydENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UvYmFzZS1jaGFydC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGFydERpc3BhdGNoZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvcmUvQ2hhcnREaXNwYXRjaGVyXCI7XHJcbmltcG9ydCB7IENoYXJ0TG9hZGVyIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb3JlL0NoYXJ0TG9hZGVyXCI7XHJcblxyXG4vLyBEYXRhXHJcbmltcG9ydCB7IExpbmVDaGFydERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RhdGEvTGluZUNoYXJ0RGF0YVwiO1xyXG5pbXBvcnQgeyBQaWVDaGFydERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RhdGEvUGllQ2hhcnREYXRhXCI7XHJcbmltcG9ydCB7IFZlcnRpY2FsQ2hhcnREYXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9kYXRhL1ZlcnRpY2FsQ2hhcnREYXRhXCI7XHJcbmltcG9ydCB7IFZlcnRpY2FsMkRDaGFydERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RhdGEvVmVydGljYWwyRENoYXJ0RGF0YVwiO1xyXG5pbXBvcnQgeyBWZXJ0aWNhbFN0YWNrZWRDaGFydERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RhdGEvVmVydGljYWxTdGFja2VkQ2hhcnREYXRhXCI7XHJcbmltcG9ydCB7IEFyZWFDaGFydERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RhdGEvQXJlYUNoYXJ0RGF0YVwiO1xyXG5pbXBvcnQgeyBQYWdlZENoYXJ0RGF0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZGF0YS9QYWdlZENoYXJ0RGF0YVwiO1xyXG5cclxuLy8gU2VydmljZXNcclxuaW1wb3J0IHsgTGluZUNoYXJ0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9MaW5lQ2hhcnRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBpZUNoYXJ0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9QaWVDaGFydFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVmVydGljYWxDaGFydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvVmVydGljYWxDaGFydFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVmVydGljYWwyRENoYXJ0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9WZXJ0aWNhbDJEQ2hhcnRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFZlcnRpY2FsU3RhY2tlZENoYXJ0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9WZXJ0aWNhbFN0YWNrZWRDaGFydFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXJlYUNoYXJ0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9BcmVhQ2hhcnRTZXJ2aWNlXCI7XHJcblxyXG4vLyBTZXR0aW5nc1xyXG5pbXBvcnQgeyBQaWVDaGFydFNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXR0aW5ncy9QaWVDaGFydFNldHRpbmdzXCI7XHJcbmltcG9ydCB7IEFyZWFDaGFydFNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXR0aW5ncy9BcmVhQ2hhcnRTZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBWZXJ0aWNhbENoYXJ0U2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NldHRpbmdzL1ZlcnRpY2FsQ2hhcnRTZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBWZXJ0aWNhbDJEQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2V0dGluZ3MvVmVydGljYWwyRENoYXJ0U2V0dGluZ3NcIjtcclxuaW1wb3J0IHsgVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2V0dGluZ3MvVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBMaW5lQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2V0dGluZ3MvTGluZUNoYXJ0U2V0dGluZ3NcIjtcclxuXHJcblxyXG4vKipcclxuICogQ29tcG9uZW50ZSBzcGVjaWZpY28gcGVyIGxhIGdyYWZpY2F6aW9uZSBkaSB1biBxdWFsc2lhc2kgdGlwbyBkaSBncmFmaWNvLlxyXG4gKiBcclxuICogU2kgYmFzYSBzdWwgdGlwbyBzcGVjaWZpY2F0byBkYWxsYSBwcm9wcmlldMOgICoqVHlwZSoqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VzLWNoYXJ0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4uL2Jhc2UvYmFzZS1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4uL2Jhc2UvYmFzZS1jaGFydC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFc0NoYXJ0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUNoYXJ0Q29tcG9uZW50IHtcclxuXHJcbiAgLyoqXHJcbiAgICogVGlwb2xvZ2lhIGRpIGdyYWZpY28gZGEgcHJlc2VudGFyZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFR5cGU6ICdwaWUnIHwgJ2xpbmUnIHwgJ3ZlcnRpY2FsJyB8ICd2ZXJ0aWNhbC0yZCcgfCAndmVydGljYWwtc3RhY2tlZCcgfCAnYXJlYSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGkgc3BlY2lmaWNpIHBlciBpbCBncmFmaWNvIG8gZGkgdW4gdGlwbyB0cmFtdXRhYmlsZSBhbCB0aXBvIGdpdXN0byBjb2wgc3VwcG9ydG8gZGVsICoqQmFzZUFkYXB0ZXIqKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIERhdGE6IExpbmVDaGFydERhdGEgfCBQaWVDaGFydERhdGEgfCBWZXJ0aWNhbDJEQ2hhcnREYXRhIHwgVmVydGljYWxDaGFydERhdGEgfCBWZXJ0aWNhbFN0YWNrZWRDaGFydERhdGEgfCBBcmVhQ2hhcnREYXRhIHwgYW55O1xyXG5cclxuICAvKipcclxuICAgKiBMaXN0YSBkaSBEYXRpIHNwZWNpZmljaSBwZXIgdW4gZ3JhZmljbyBwYWdpbmF0byBvIGRpIGN1aSBvZ25pIGJsb2NjbyBkYXRpIMOoIHRyYW11dGFiaWxlIGFsIHRpcG8gZ2l1c3RvIGNvbCBzdXBwb3J0byBkZWwgKipCYXNlQWRhcHRlcioqXHJcbiAgICovXHJcbiAgQElucHV0KCkgRGF0YUFycmF5OiBQYWdlZENoYXJ0RGF0YTxMaW5lQ2hhcnREYXRhPltdXHJcbiAgICB8IFBhZ2VkQ2hhcnREYXRhPFBpZUNoYXJ0RGF0YT5bXVxyXG4gICAgfCBQYWdlZENoYXJ0RGF0YTxWZXJ0aWNhbDJEQ2hhcnREYXRhPltdXHJcbiAgICB8IFBhZ2VkQ2hhcnREYXRhPFZlcnRpY2FsQ2hhcnREYXRhPltdXHJcbiAgICB8IFBhZ2VkQ2hhcnREYXRhPFZlcnRpY2FsU3RhY2tlZENoYXJ0RGF0YT5bXVxyXG4gICAgfCBQYWdlZENoYXJ0RGF0YTxBcmVhQ2hhcnREYXRhPltdXHJcbiAgICB8IFBhZ2VkQ2hhcnREYXRhPGFueT5bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGVsOiBFbGVtZW50UmVmLCBDaGFydExvYWRlcjogQ2hhcnRMb2FkZXIsIENoYXJ0RGlzcGF0Y2hlcjogQ2hhcnREaXNwYXRjaGVyLCBwcml2YXRlIGRhdGVTZXJ2aWNlOiBEYXRlU2VydmljZSwgcHJpdmF0ZSBhZGFwdGVyOiBCYXNlQWRhcHRlciwgem9uZTogTmdab25lLFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZDogT2JqZWN0LFxyXG4gICAgQEluamVjdChFU0NfREVCVUdfTU9ERSkgRVNDX0RFQlVHX01PREU6IGJvb2xlYW4sXHJcbiAgICBASW5qZWN0KEVTQ19BTklNQVRJT05TKSBFU0NfQU5JTUFUSU9OUzogYm9vbGVhbixcclxuICAgIEBJbmplY3QoRVNDX1RIRU1FKSBFU0NfVEhFTUU6IHN0cmluZyxcclxuICAgIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihlbCwgcGxhdGZvcm1JZCwgem9uZSwgQ2hhcnRMb2FkZXIsIENoYXJ0RGlzcGF0Y2hlciwgRVNDX0RFQlVHX01PREUsIEVTQ19BTklNQVRJT05TLCBsYy5Mb2NhbGUsIEVTQ19USEVNRSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPdHRpZW5lIGxlIHByb3ByaWV0w6Agc3BlY2lmaWNoZSBwZXIgcXVlc3RhIHRpcG9sb2dpYSBkaSBncmFmaWNvIHBlciBjdWkgc2VydmUgcmlncmFmaWNhcmVcclxuICAgKi9cclxuICBnZXRTcGVjaWZpY1Byb3BlcnRpZXNUb0NoZWNrKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbXCJEYXRhXCIsIFwiVHlwZVwiXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE90dGllbmUgaSBTZXR0aW5ncyAoRXJlZGl0YXRpIGRhbGxhIGNsYXNzZSBiYXNlLCBxdWluZGkgZGVsIHRpcG8gZ2VuZXJpY28gKipCYXNlU2V0dGluZ3MqKikgY2FzdGF0aSBhbCB0aXBvIHNwZWNpZmljbyBwZXIgcXVlc3RvIGdyYWZpY29cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7UGllQ2hhcnRTZXR0aW5ncyB8IEFyZWFDaGFydFNldHRpbmdzIHwgTGluZUNoYXJ0U2V0dGluZ3MgfCBWZXJ0aWNhbENoYXJ0U2V0dGluZ3MgfCBWZXJ0aWNhbDJEQ2hhcnRTZXR0aW5ncyB8IFZlcnRpY2FsU3RhY2tlZENoYXJ0U2V0dGluZ3N9IFNldHRpbmdzIGNhc3RhdGkgYWwgdGlwbyBnaXVzdG9cclxuICAgKi9cclxuICBnZXRDYXN0ZWRTZXR0aW5ncygpIHtcclxuICAgIHN3aXRjaCAodGhpcy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgJ3BpZSc6XHJcbiAgICAgICAgcmV0dXJuIDxQaWVDaGFydFNldHRpbmdzPih0aGlzLlNldHRpbmdzID8/IG5ldyBQaWVDaGFydFNldHRpbmdzKCkpO1xyXG4gICAgICBjYXNlICdhcmVhJzpcclxuICAgICAgICByZXR1cm4gPEFyZWFDaGFydFNldHRpbmdzPih0aGlzLlNldHRpbmdzID8/IG5ldyBBcmVhQ2hhcnRTZXR0aW5ncygpKTtcclxuICAgICAgY2FzZSAnbGluZSc6XHJcbiAgICAgICAgcmV0dXJuIDxMaW5lQ2hhcnRTZXR0aW5ncz4odGhpcy5TZXR0aW5ncyA/PyBuZXcgTGluZUNoYXJ0U2V0dGluZ3MoKSk7XHJcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcclxuICAgICAgICByZXR1cm4gPFZlcnRpY2FsQ2hhcnRTZXR0aW5ncz4odGhpcy5TZXR0aW5ncyA/PyBuZXcgVmVydGljYWxDaGFydFNldHRpbmdzKCkpO1xyXG4gICAgICBjYXNlICd2ZXJ0aWNhbC0yZCc6XHJcbiAgICAgICAgcmV0dXJuIDxWZXJ0aWNhbDJEQ2hhcnRTZXR0aW5ncz4odGhpcy5TZXR0aW5ncyA/PyBuZXcgVmVydGljYWwyRENoYXJ0U2V0dGluZ3MoKSk7XHJcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsLXN0YWNrZWQnOlxyXG4gICAgICAgIHJldHVybiA8VmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5ncz4odGhpcy5TZXR0aW5ncyA/PyBuZXcgVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5ncygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEludGVncmEgaSBTZXR0aW5ncyBiYXNlIGNvbiB0dXR0aSBnbGkgSW5wdXQgc3BlY2lmaWNpIGRpIHF1ZXN0byBncmFmaWNvLCBkYW5kbyBwcmlvcml0w6AgYWkgU2V0dGluZ3Mgc2UgZGVmaW5pdGlcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge1BpZUNoYXJ0U2V0dGluZ3MgfCBBcmVhQ2hhcnRTZXR0aW5ncyB8IExpbmVDaGFydFNldHRpbmdzIHwgVmVydGljYWxDaGFydFNldHRpbmdzIHwgVmVydGljYWwyRENoYXJ0U2V0dGluZ3MgfCBWZXJ0aWNhbFN0YWNrZWRDaGFydFNldHRpbmdzfSBzZXR0aW5nc0Nhc3RlZCBTZXR0aW5ncyBjYXN0YXRpIGFsIHRpcG8gZ2l1c3RvXHJcbiAgICovXHJcbiAgZmlsbFNwZWNpZmljU2V0dGluZ3Moc2V0dGluZ3NDYXN0ZWQ6IFBpZUNoYXJ0U2V0dGluZ3MgfCBBcmVhQ2hhcnRTZXR0aW5ncyB8IExpbmVDaGFydFNldHRpbmdzIHwgVmVydGljYWxDaGFydFNldHRpbmdzIHwgVmVydGljYWwyRENoYXJ0U2V0dGluZ3MgfCBWZXJ0aWNhbFN0YWNrZWRDaGFydFNldHRpbmdzKTogdm9pZCB7XHJcbiAgICAvLyBOb3BlLiBTZSBzaSB1c2EgbCdlcy1jaGFydCBzaSBkYW5ubyBpIHNldHRpbmdzIGNvbiBsJ29nZ2V0dG9cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVmZmV0dHVhIGlsIHJlbmRlcmluZyBkaSBxdWVzdG8gZ3JhZmljbyBpbiBiYXNlIGFpIFNldHRpbmdzXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtQaWVDaGFydFNldHRpbmdzIHwgQXJlYUNoYXJ0U2V0dGluZ3MgfCBMaW5lQ2hhcnRTZXR0aW5ncyB8IFZlcnRpY2FsQ2hhcnRTZXR0aW5ncyB8IFZlcnRpY2FsMkRDaGFydFNldHRpbmdzIHwgVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5nc30gc2V0dGluZ3NDYXN0ZWQgSW1wb3N0YXppb25pIGRpIGdyYWZpY2F6aW9uZVxyXG4gICAqIEByZXR1cm5zIHtQaWVDaGFydFNlcnZpY2UgfCBBcmVhQ2hhcnRTZXJ2aWNlIHwgTGluZUNoYXJ0U2VydmljZSB8IFZlcnRpY2FsQ2hhcnRTZXJ2aWNlIHwgVmVydGljYWwyRENoYXJ0U2VydmljZSB8IFZlcnRpY2FsU3RhY2tlZENoYXJ0U2VydmljZX0gTGEgc2VydmljZSB1dGlsaXp6YXRhIHBlciBpbCByZW5kZXJpbmcgbmVsbG8gc3RhdG8gc3ViaXRvIHN1Y2Nlc3Npdm8gYWwgcmVuZGVyaW5nIGVmZmV0dHVhdG9cclxuICAgKi9cclxuICBncmFwaGljYXRlKHNldHRpbmdzOiBQaWVDaGFydFNldHRpbmdzIHwgQXJlYUNoYXJ0U2V0dGluZ3MgfCBMaW5lQ2hhcnRTZXR0aW5ncyB8IFZlcnRpY2FsQ2hhcnRTZXR0aW5ncyB8IFZlcnRpY2FsMkRDaGFydFNldHRpbmdzIHwgVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5ncyk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuVHlwZSkge1xyXG4gICAgICBjYXNlICdwaWUnOlxyXG4gICAgICAgIHJldHVybiBuZXcgUGllQ2hhcnRTZXJ2aWNlKHRoaXMuYWRhcHRlcikuZ3JhcGhpY2F0ZSg8UGllQ2hhcnREYXRhPnRoaXMuRGF0YSwgPFBpZUNoYXJ0U2V0dGluZ3M+c2V0dGluZ3MpO1xyXG4gICAgICBjYXNlICdhcmVhJzpcclxuICAgICAgICByZXR1cm4gbmV3IEFyZWFDaGFydFNlcnZpY2UodGhpcy5hZGFwdGVyKS5ncmFwaGljYXRlKDxBcmVhQ2hhcnREYXRhPnRoaXMuRGF0YSwgPEFyZWFDaGFydFNldHRpbmdzPnNldHRpbmdzKTtcclxuICAgICAgY2FzZSAnbGluZSc6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5lQ2hhcnRTZXJ2aWNlKHRoaXMuYWRhcHRlciwgdGhpcy5kYXRlU2VydmljZSkuZ3JhcGhpY2F0ZSg8TGluZUNoYXJ0RGF0YT50aGlzLkRhdGEsIDxMaW5lQ2hhcnRTZXR0aW5ncz5zZXR0aW5ncyk7XHJcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcclxuICAgICAgICByZXR1cm4gbmV3IFZlcnRpY2FsQ2hhcnRTZXJ2aWNlKHRoaXMuYWRhcHRlcikuZ3JhcGhpY2F0ZSg8VmVydGljYWxDaGFydERhdGE+dGhpcy5EYXRhLCA8VmVydGljYWxDaGFydFNldHRpbmdzPnNldHRpbmdzKTtcclxuICAgICAgY2FzZSAndmVydGljYWwtMmQnOlxyXG4gICAgICAgIHJldHVybiBuZXcgVmVydGljYWwyRENoYXJ0U2VydmljZSh0aGlzLmFkYXB0ZXIpLmdyYXBoaWNhdGUoPFZlcnRpY2FsMkRDaGFydERhdGE+dGhpcy5EYXRhLCA8VmVydGljYWwyRENoYXJ0U2V0dGluZ3M+c2V0dGluZ3MpO1xyXG4gICAgICBjYXNlICd2ZXJ0aWNhbC1zdGFja2VkJzpcclxuICAgICAgICByZXR1cm4gbmV3IFZlcnRpY2FsU3RhY2tlZENoYXJ0U2VydmljZSh0aGlzLmFkYXB0ZXIpLmdyYXBoaWNhdGUoPFZlcnRpY2FsU3RhY2tlZENoYXJ0RGF0YT50aGlzLkRhdGEsIDxWZXJ0aWNhbFN0YWNrZWRDaGFydFNldHRpbmdzPnNldHRpbmdzKTtcclxuICAgIH1cclxuICB9XHJcbn0iLCI8Y2hhcnQtcGFnZXIgKm5nSWY9XCJpc1BhZ2VkXCIgKG9uUGFnZUNoYW5nZSk9XCJjaGFuZ2VQYWdlKCRldmVudClcIiBbSXRlbXNdPVwiRGF0YUFycmF5XCIgW0R0b3NdPVwiRGF0YUR0b3NcIiBbU3RhcnRJbmRleF09XCJEYXRhRHRvU3RhcnRJbmRleFwiXHJcbiAgICBbQnJvd3NlRGVsYXlNc109XCJCcm93c2VEZWxheU1zXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlcl9pbm5lciBsZXQtaGVhZGVySXRlbT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyX3RyOyBjb250ZXh0IDogeyRpbXBsaWNpdDogaGVhZGVySXRlbX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvY2hhcnQtcGFnZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ0NoYXJ0ICYmIGxvYWRpbmdfdGVtcGxhdGVcIj5cclxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbc3R5bGUuaGVpZ2h0XT1cImlzUGFnZWQgPyAnY2FsYygxMDAlIC0gNDRweCknIDogJzEwMCUnXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdfdGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nQ2hhcnQgJiYgIWxvYWRpbmdfdGVtcGxhdGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJlc2MtbG9hZGluZy1vdmVybGF5XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbc3R5bGUuaGVpZ2h0XT1cImlzUGFnZWQgPyAnY2FsYygxMDAlIC0gNDRweCknIDogJzEwMCUnXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJsYWJlbFwiPkxvYWRpbmcuLi4uPC9wPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGRpdiBbY2xhc3MuaGlkZS1ibG9ja109XCJsb2FkaW5nQ2hhcnRcIiBpZD1cInt7bmFtZX19XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbc3R5bGUuaGVpZ2h0XT1cImlzUGFnZWQgPyAnY2FsYygxMDAlIC0gNDRweCknIDogJzEwMCUnXCI+PC9kaXY+Il19
|