@esfaenza/es-charts 11.2.8 → 11.2.12

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.
@@ -21,7 +21,7 @@ export class LineChartService {
21
21
  * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un LineChart
22
22
  */
23
23
  graphicate(data, settings) {
24
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
24
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
25
25
  let dataConverted = this.Adapter ? this.Adapter.adaptDataForLineChart(data) : data;
26
26
  let threshold = (_a = settings.DataGroupingThreshold) !== null && _a !== void 0 ? _a : 3000;
27
27
  let singleDataSet = (_b = settings.MergeDatasets) !== null && _b !== void 0 ? _b : false;
@@ -32,7 +32,6 @@ export class LineChartService {
32
32
  let interval = seriesWithInterval ? dataConverted.series.find(t => t.interval).interval : null;
33
33
  let gapsAllowed = (settings === null || settings === void 0 ? void 0 : settings.AllowGaps) == null ? seriesWithInterval : settings === null || settings === void 0 ? void 0 : settings.AllowGaps;
34
34
  let finalInstant = (_c = settings === null || settings === void 0 ? void 0 : settings.FinalInstants) !== null && _c !== void 0 ? _c : true;
35
- let fill = (_d = settings === null || settings === void 0 ? void 0 : settings.Fill) !== null && _d !== void 0 ? _d : false;
36
35
  //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...
37
36
  am4core.options.autoDispose = true;
38
37
  this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);
@@ -59,11 +58,11 @@ export class LineChartService {
59
58
  dateAxis.renderer.ticks.template.length = 10;
60
59
  dateAxis.renderer.ticks.template.location = 0;
61
60
  }
62
- dateAxis.renderer.minGridDistance = (_e = settings === null || settings === void 0 ? void 0 : settings.MinGridDistance) !== null && _e !== void 0 ? _e : 50;
61
+ dateAxis.renderer.minGridDistance = (_d = settings === null || settings === void 0 ? void 0 : settings.MinGridDistance) !== null && _d !== void 0 ? _d : 50;
63
62
  dateAxis.renderer.grid.template.location = 0;
64
63
  dateAxis.minZoomCount = 5;
65
64
  dateAxis.groupData = dataShouldBeGrouped;
66
- dateAxis.groupCount = (_f = settings.DataGroupBucketSize) !== null && _f !== void 0 ? _f : this.DataGroupBucketSize;
65
+ dateAxis.groupCount = (_e = settings.DataGroupBucketSize) !== null && _e !== void 0 ? _e : this.DataGroupBucketSize;
67
66
  //Se ho almeno una serie ad intervallo e i settings non mi impediscono esplicitamente di usare i gaps, visualizzo i dati col gap
68
67
  if (gapsAllowed) {
69
68
  if (!seriesWithInterval) {
@@ -107,7 +106,7 @@ export class LineChartService {
107
106
  }
108
107
  //-- Fine generazione
109
108
  dataConverted.series.forEach((s, index) => {
110
- var _a, _b;
109
+ var _a, _b, _c;
111
110
  if (s.values[0] && !(s.values[0].d instanceof Date)) {
112
111
  for (let v = 0; v < s.values.length; v++)
113
112
  s.values[v].d = new Date(s.values[v].d);
@@ -124,12 +123,13 @@ export class LineChartService {
124
123
  }
125
124
  if (!correctOrder)
126
125
  s.values.sort((d1, d2) => d1.d.getTime() - d2.d.getTime());
126
+ let fill = s.fill != null && s.fill != undefined ? s.fill : ((_a = settings === null || settings === void 0 ? void 0 : settings.Fill) !== null && _a !== void 0 ? _a : false);
127
127
  let series = (settings === null || settings === void 0 ? void 0 : settings.Step) ? new am4charts.StepLineSeries() : new am4charts.LineSeries();
128
128
  series.dataFields.valueY = "v" + (singleDataSet ? index : "");
129
129
  series.dataFields.dateX = "d";
130
130
  series.dataFields.measureUnit = s.uom;
131
131
  series.name = s.name;
132
- series.strokeWidth = (_a = settings === null || settings === void 0 ? void 0 : settings.StrokeSize) !== null && _a !== void 0 ? _a : 1;
132
+ series.strokeWidth = (_b = settings === null || settings === void 0 ? void 0 : settings.StrokeSize) !== null && _b !== void 0 ? _b : 1;
133
133
  series.connect = !gapsAllowed;
134
134
  series.minBulletDistance = 10;
135
135
  series.tooltipText = singleDataSet ? "" : "{name}: [bold]{valueY}[/]";
@@ -180,7 +180,7 @@ export class LineChartService {
180
180
  series.data = s.values;
181
181
  let segment = series.segments.template;
182
182
  let hoverState = segment.states.create("hover");
183
- hoverState.properties.strokeWidth = ((_b = settings === null || settings === void 0 ? void 0 : settings.StrokeSize) !== null && _b !== void 0 ? _b : 1) + 1;
183
+ hoverState.properties.strokeWidth = ((_c = settings === null || settings === void 0 ? void 0 : settings.StrokeSize) !== null && _c !== void 0 ? _c : 1) + 1;
184
184
  let dimmed = segment.states.create("dimmed");
185
185
  dimmed.properties.stroke = am4core.color("#dadada");
186
186
  //Se la serie ha un colore, uso quello, altrimenti pesco dai colori di default andando in ordine
@@ -201,17 +201,25 @@ export class LineChartService {
201
201
  });
202
202
  if (settings.Legend) {
203
203
  this.ChartInstance.legend = new am4charts.Legend();
204
- this.ChartInstance.legend.position = (_g = settings === null || settings === void 0 ? void 0 : settings.LegendPosition) !== null && _g !== void 0 ? _g : 'right';
204
+ this.ChartInstance.legend.position = (_f = settings === null || settings === void 0 ? void 0 : settings.LegendPosition) !== null && _f !== void 0 ? _f : 'right';
205
205
  this.ChartInstance.legend.scrollable = true;
206
206
  this.ChartInstance.legend.itemContainers.template.tooltipText = "{name}";
207
- this.ChartInstance.legend.itemContainers.template.events.on("over", (event) => { this.processOver(event.target.dataItem.dataContext, fill); });
208
- this.ChartInstance.legend.itemContainers.template.events.on("out", (event) => { this.processOut(fill); });
207
+ this.ChartInstance.legend.itemContainers.template.events.on("over", (event) => {
208
+ let series = event.target.dataItem.dataContext;
209
+ let fill = series.stacked;
210
+ this.processOver(series, fill);
211
+ });
212
+ this.ChartInstance.legend.itemContainers.template.events.on("out", (event) => {
213
+ let series = event.target.dataItem.dataContext;
214
+ let fill = series.stacked;
215
+ this.processOut(fill);
216
+ });
209
217
  if (settings.LegendPadding) {
210
218
  let template = this.ChartInstance.legend.itemContainers.template;
211
- template.paddingTop = (_h = settings.LegendPadding.top) !== null && _h !== void 0 ? _h : 0;
212
- template.paddingBottom = (_j = settings.LegendPadding.bottom) !== null && _j !== void 0 ? _j : 0;
213
- template.paddingLeft = (_k = settings.LegendPadding.left) !== null && _k !== void 0 ? _k : 0;
214
- template.paddingRight = (_l = settings.LegendPadding.right) !== null && _l !== void 0 ? _l : 0;
219
+ template.paddingTop = (_g = settings.LegendPadding.top) !== null && _g !== void 0 ? _g : 0;
220
+ template.paddingBottom = (_h = settings.LegendPadding.bottom) !== null && _h !== void 0 ? _h : 0;
221
+ template.paddingLeft = (_j = settings.LegendPadding.left) !== null && _j !== void 0 ? _j : 0;
222
+ template.paddingRight = (_k = settings.LegendPadding.right) !== null && _k !== void 0 ? _k : 0;
215
223
  }
216
224
  }
217
225
  this.ChartInstance.cursor = new am4charts.XYCursor();
@@ -293,4 +301,4 @@ export class LineChartService {
293
301
  this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);
294
302
  }
295
303
  }
296
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZUNoYXJ0U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLWNoYXJ0cy9zcmMvbGliL3NlcnZpY2VzL2NsYXNzZXMvTGluZUNoYXJ0U2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEtBQUssT0FBTyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxTQUFTLE1BQU0sNEJBQTRCLENBQUM7QUFFeEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBUXpCLGNBQWM7SUFDZCxZQUFtQixPQUFvQixFQUFVLFFBQXFCO1FBQW5ELFlBQU8sR0FBUCxPQUFPLENBQWE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBTnRFLGNBQWM7UUFDTix3QkFBbUIsR0FBVyxJQUFJLENBQUM7UUFDM0MsY0FBYztRQUNOLHNCQUFpQixHQUFXLEdBQUcsQ0FBQztRQXNUeEMsdUdBQXVHO1FBQ3ZHLCtEQUErRDtRQUMvRCxjQUFjO1FBQ04sb0JBQWUsR0FBNkIsRUFBRSxDQUFDO0lBdFRtQixDQUFDO0lBRTNFOztPQUVHO0lBQ0ksVUFBVSxDQUFDLElBQXlCLEVBQUUsUUFBMkI7O1FBQ3BFLElBQUksYUFBYSxHQUFrQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEcsSUFBSSxTQUFTLFNBQUcsUUFBUSxDQUFDLHFCQUFxQixtQ0FBSSxJQUFJLENBQUM7UUFDdkQsSUFBSSxhQUFhLFNBQUcsUUFBUSxDQUFDLGFBQWEsbUNBQUksS0FBSyxDQUFDO1FBQ3BELElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsYUFBUixRQUFRLHVCQUFS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QUNILElBQUksQ0FBQyxJQUFJO2dCQUNMLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFNRCxjQUFjO0lBQ04sUUFBUSxDQUFDLEVBQVUsRUFBRSxJQUFjLEVBQUUsWUFBb0I7UUFDN0QsNkRBQTZEO1FBQzdELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUzQywrRUFBK0U7UUFDL0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2UvSUJhc2VTZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9hZGFwdGVycyc7XHJcbmltcG9ydCB7IExpbmVDaGFydERhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0YSc7XHJcbmltcG9ydCB7IExpbmVDaGFydFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NldHRpbmdzJztcclxuXHJcbmltcG9ydCAqIGFzIGFtNGNvcmUgZnJvbSBcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvY29yZVwiO1xyXG5pbXBvcnQgKiBhcyBhbTRjaGFydHMgZnJvbSBcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvY2hhcnRzXCI7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIGlsIGN1aSB1bmljbyBzY29wbyDDqCBnZXN0aXJlIGlsIHNldHVwIGUgcmVuZGVyaW5nIGRpIHVuIExpbmVDaGFydFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIExpbmVDaGFydFNlcnZpY2UgaW1wbGVtZW50cyBJQmFzZVNlcnZpY2U8YW00Y2hhcnRzLlhZQ2hhcnQ+e1xyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHB1YmxpYyBDaGFydEluc3RhbmNlOiBhbTRjaGFydHMuWFlDaGFydDtcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIERhdGFHcm91cEJ1Y2tldFNpemU6IG51bWJlciA9IDE1MDA7XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBPcGFjaXR5T25TZWxlY3RlZDogbnVtYmVyID0gMC4zO1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgQWRhcHRlcjogQmFzZUFkYXB0ZXIsIHByaXZhdGUgZGF0ZUV4dHM6IERhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBjaGUgZGF0YSB1bmEgY29wcGlhIERhdGkgLSBJbXBvc3RhemlvbmkgbGkgdXRpbGl6emEgcGVyIGNyZWFyZSBlIHZpc3VhbGl6emFyZSB1biBMaW5lQ2hhcnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdyYXBoaWNhdGUoZGF0YTogTGluZUNoYXJ0RGF0YSB8IGFueSwgc2V0dGluZ3M6IExpbmVDaGFydFNldHRpbmdzKTogSUJhc2VTZXJ2aWNlPGFtNGNoYXJ0cy5YWUNoYXJ0PiB7XHJcbiAgICAgICAgbGV0IGRhdGFDb252ZXJ0ZWQ6IExpbmVDaGFydERhdGEgPSB0aGlzLkFkYXB0ZXIgPyB0aGlzLkFkYXB0ZXIuYWRhcHREYXRhRm9yTGluZUNoYXJ0KGRhdGEpIDogZGF0YTtcclxuICAgICAgICBsZXQgdGhyZXNob2xkID0gc2V0dGluZ3MuRGF0YUdyb3VwaW5nVGhyZXNob2xkID8/IDMwMDA7XHJcbiAgICAgICAgbGV0IHNpbmdsZURhdGFTZXQgPSBzZXR0aW5ncy5NZXJnZURhdGFzZXRzID8/IGZhbHNlO1xyXG4gICAgICAgIGxldCBzaG93VGlja3MgPSBzZXR0aW5ncy5TaG93VGlja3MgPT0gbnVsbCA/IHRydWUgOiBzZXR0aW5ncz8uU2hvd1RpY2tzO1xyXG4gICAgICAgIGxldCBkYXRhU2hvdWxkQmVHcm91cGVkID0gTWF0aC5tYXgoLi4uZGF0YUNvbnZlcnRlZC5zZXJpZXMubWFwKHQgPT4gdC52YWx1ZXMubGVuZ3RoKSkgPiB0aHJlc2hvbGQ7XHJcbiAgICAgICAgbGV0IHNob3dUaW1lbGluZSA9IHNldHRpbmdzLlRpbWVsaW5lIHx8IGRhdGFTaG91bGRCZUdyb3VwZWQ7XHJcbiAgICAgICAgbGV0IHNlcmllc1dpdGhJbnRlcnZhbCA9IGRhdGFDb252ZXJ0ZWQuc2VyaWVzLnNvbWUodCA9PiB0LmludGVydmFsKTtcclxuICAgICAgICBsZXQgaW50ZXJ2YWwgPSBzZXJpZXNXaXRoSW50ZXJ2YWwgPyBkYXRhQ29udmVydGVkLnNlcmllcy5maW5kKHQgPT4gdC5pbnRlcnZhbCkuaW50ZXJ2YWwgOiBudWxsO1xyXG4gICAgICAgIGxldCBnYXBzQWxsb3dlZCA9IHNldHRpbmdzPy5BbGxvd0dhcHMgPT0gbnVsbCA/IHNlcmllc1dpdGhJbnRlcnZhbCA6IHNldHRpbmdzPy5BbGxvd0dhcHM7XHJcbiAgICAgICAgbGV0IGZpbmFsSW5zdGFudCA9IHNldHRpbmdzPy5GaW5hbEluc3RhbnRzID8/IHRydWU7XHJcbiAgICAgICAgbGV0IGZpbGwgPSBzZXR0aW5ncz8uRmlsbCA/PyBmYWxzZTtcclxuXHJcbiAgICAgICAgLy9QZXIgZXZpdGFyZSBkaSBkaW1lbnRpY2FybWVsaSBlIGdlc3RpcmUgY29tdW5xdWUgYmVuZSBnbGkgbmdpZiBlY2MuLi5cclxuICAgICAgICBhbTRjb3JlLm9wdGlvbnMuYXV0b0Rpc3Bvc2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UgPSBhbTRjb3JlLmNyZWF0ZShzZXR0aW5ncy5OYW1lLCBhbTRjaGFydHMuWFlDaGFydCk7XHJcbiAgICAgICAgbGV0IENoYXJ0SW5zdGFuY2VDYXN0ZWQgPSA8YW00Y2hhcnRzLlhZQ2hhcnQ+dGhpcy5DaGFydEluc3RhbmNlO1xyXG5cclxuICAgICAgICBsZXQgeUF4aXMgPSBDaGFydEluc3RhbmNlQ2FzdGVkLnlBeGVzLnB1c2gobmV3IGFtNGNoYXJ0cy5WYWx1ZUF4aXMoKSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzLllBeGlzVGl0bGUpIHtcclxuICAgICAgICAgICAgeUF4aXMudGl0bGUudGV4dCA9IHNldHRpbmdzLllBeGlzVGl0bGVcclxuICAgICAgICAgICAgeUF4aXMudGl0bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzLk1pbilcclxuICAgICAgICAgICAgeUF4aXMubWluID0gc2V0dGluZ3MuTWluO1xyXG4gICAgICAgIGlmIChzZXR0aW5ncy5NYXgpXHJcbiAgICAgICAgICAgIHlBeGlzLm1heCA9IHNldHRpbmdzLk1heDtcclxuXHJcbiAgICAgICAgbGV0IGRhdGVBeGlzID0gQ2hhcnRJbnN0YW5jZUNhc3RlZC54QXhlcy5wdXNoKG5ldyBhbTRjaGFydHMuRGF0ZUF4aXMoKSk7XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5ncy5YQXhpc1RpdGxlKSB7XHJcbiAgICAgICAgICAgIGRhdGVBeGlzLnRpdGxlLnRleHQgPSBzZXR0aW5ncy5YQXhpc1RpdGxlXHJcbiAgICAgICAgICAgIGRhdGVBeGlzLnRpdGxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzaG93VGlja3MpIHtcclxuICAgICAgICAgICAgZGF0ZUF4aXMucmVuZGVyZXIudGlja3MudGVtcGxhdGUuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgZGF0ZUF4aXMucmVuZGVyZXIudGlja3MudGVtcGxhdGUuc3Ryb2tlT3BhY2l0eSA9IDE7XHJcbiAgICAgICAgICAgIGRhdGVBeGlzLnJlbmRlcmVyLnRpY2tzLnRlbXBsYXRlLnN0cm9rZSA9IGFtNGNvcmUuY29sb3IoXCIjNDk1QzQzXCIpO1xyXG4gICAgICAgICAgICBkYXRlQXhpcy5yZW5kZXJlci50aWNrcy50ZW1wbGF0ZS5zdHJva2VXaWR0aCA9IDI7XHJcbiAgICAgICAgICAgIGRhdGVBeGlzLnJlbmRlcmVyLnRpY2tzLnRlbXBsYXRlLmxlbmd0aCA9IDEwO1xyXG4gICAgICAgICAgICBkYXRlQXhpcy5yZW5kZXJlci50aWNrcy50ZW1wbGF0ZS5sb2NhdGlvbiA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRlQXhpcy5yZW5kZXJlci5taW5HcmlkRGlzdGFuY2UgPSBzZXR0aW5ncz8uTWluR3JpZERpc3RhbmNlID8/IDUwO1xyXG4gICAgICAgIGRhdGVBeGlzLnJlbmRlcmVyLmdyaWQudGVtcGxhdGUubG9jYXRpb24gPSAwO1xyXG4gICAgICAgIGRhdGVBeGlzLm1pblpvb21Db3VudCA9IDU7XHJcbiAgICAgICAgZGF0ZUF4aXMuZ3JvdXBEYXRhID0gZGF0YVNob3VsZEJlR3JvdXBlZDtcclxuICAgICAgICBkYXRlQXhpcy5ncm91cENvdW50ID0gc2V0dGluZ3MuRGF0YUdyb3VwQnVja2V0U2l6ZSA/PyB0aGlzLkRhdGFHcm91cEJ1Y2tldFNpemU7XHJcblxyXG4gICAgICAgIC8vU2UgaG8gYWxtZW5vIHVuYSBzZXJpZSBhZCBpbnRlcnZhbGxvIGUgaSBzZXR0aW5ncyBub24gbWkgaW1wZWRpc2Nvbm8gZXNwbGljaXRhbWVudGUgZGkgdXNhcmUgaSBnYXBzLCB2aXN1YWxpenpvIGkgZGF0aSBjb2wgZ2FwXHJcblxyXG4gICAgICAgIGlmIChnYXBzQWxsb3dlZCkge1xyXG4gICAgICAgICAgICBpZiAoIXNlcmllc1dpdGhJbnRlcnZhbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlBlciB1dGlsaXp6YXJlIGxhIGZ1bnppb25hbGl0w6AgZGVpIGdhcCDDqCBvYmJsaWdhdG9yaW8gZGVmaW5pcmUgdW4gaW50ZXJ2YWxsbyBuZWxsZSBzZXJpZSBkZWwgZ3JhZmljb1wiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkYXRlQXhpcy5iYXNlSW50ZXJ2YWwgPSB7IGNvdW50OiBpbnRlcnZhbC5jb3VudCwgdGltZVVuaXQ6IGludGVydmFsLnRpbWV1bml0IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaG93VGltZWxpbmUpXHJcbiAgICAgICAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQuc2Nyb2xsYmFyWCA9IG5ldyBhbTRjaGFydHMuWFlDaGFydFNjcm9sbGJhcigpO1xyXG5cclxuICAgICAgICBsZXQgc2VyaWVzVG9QdXNoID0gW107XHJcbiAgICAgICAgbGV0IHNlcmllc0NvbG9yczogYW00Y29yZS5Db2xvcltdID0gW107XHJcbiAgICAgICAgbGV0IGRlZmF1bHRJbmRleCA9IDA7XHJcblxyXG4gICAgICAgIC8vLS0gR2VuZXJhemlvbmUgZGkgdW4gdW5pY28gZGF0YXNldCBpbnZlY2UgY2hlIE4sIHBlciBwb3RlciBnZXN0aXJlIHVuIHVuaWNvIHRvb2x0aXBcclxuICAgICAgICBpZiAoc2luZ2xlRGF0YVNldCkge1xyXG4gICAgICAgICAgICBsZXQgZHRvOiB7IFtpbmRleDogbnVtYmVyXTogeyBbc2luZGV4OiBzdHJpbmddOiBudW1iZXIgfSB9ID0ge307XHJcbiAgICAgICAgICAgIGRhdGFDb252ZXJ0ZWQuc2VyaWVzLmZvckVhY2goKHZzLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YWl0ZW0gPSB2cy52YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ZXIgPSBuZXcgRGF0ZShkYXRhaXRlbS5kKS52YWx1ZU9mKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZHRvW2luZGV4ZXJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkdG9baW5kZXhlcl0gPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZHRvW2luZGV4ZXJdWyd2JyArIGluZGV4XSA9IGRhdGFpdGVtLnY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGVzID0gT2JqZWN0LmtleXMoZHRvKTtcclxuICAgICAgICAgICAgbGV0IHNpbmdsZURTID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXM6IHsgW3NpbmRleDogc3RyaW5nXTogbnVtYmVyIH0gPSBkdG9bZGF0ZXNbaV1dO1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSB7IGQ6IG5ldyBEYXRlKHBhcnNlSW50KGRhdGVzW2ldKSkgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciB2YWxzID0gT2JqZWN0LmtleXModmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGlpID0gMDsgaWkgPCB2YWxzLmxlbmd0aDsgaWkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXJpZXMgPSB2YWxzW2lpXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2luZ2xlVmFsID0gdmFsdWVzW3Nlcmllc107XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVtzZXJpZXNdID0gc2luZ2xlVmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2luZ2xlRFMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UuZGF0YSA9IHNpbmdsZURTO1xyXG4gICAgICAgICAgICBkYXRlQXhpcy5jdXJzb3JUb29sdGlwRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLy0tIEZpbmUgZ2VuZXJhemlvbmVcclxuXHJcbiAgICAgICAgZGF0YUNvbnZlcnRlZC5zZXJpZXMuZm9yRWFjaCgocywgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHMudmFsdWVzWzBdICYmICEocy52YWx1ZXNbMF0uZCBpbnN0YW5jZW9mIERhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2ID0gMDsgdiA8IHMudmFsdWVzLmxlbmd0aDsgdisrKVxyXG4gICAgICAgICAgICAgICAgICAgIHMudmFsdWVzW3ZdLmQgPSBuZXcgRGF0ZShzLnZhbHVlc1t2XS5kKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNvcnJlY3RPcmRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBwcmV2RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgcy52YWx1ZXMubGVuZ3RoOyB2KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJldkRhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldkRhdGUgPSBzLnZhbHVlc1t2XS5kO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzLnZhbHVlc1t2XS5kIDwgcHJldkRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdE9yZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb3JyZWN0T3JkZXIpXHJcbiAgICAgICAgICAgICAgICBzLnZhbHVlcy5zb3J0KChkMSwgZDIpID0+IGQxLmQuZ2V0VGltZSgpIC0gZDIuZC5nZXRUaW1lKCkpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHNlcmllczogYW00Y2hhcnRzLlN0ZXBMaW5lU2VyaWVzIHwgYW00Y2hhcnRzLkxpbmVTZXJpZXMgPSBzZXR0aW5ncz8uU3RlcCA/IG5ldyBhbTRjaGFydHMuU3RlcExpbmVTZXJpZXMoKSA6IG5ldyBhbTRjaGFydHMuTGluZVNlcmllcygpO1xyXG4gICAgICAgICAgICBzZXJpZXMuZGF0YUZpZWxkcy52YWx1ZVkgPSBcInZcIiArIChzaW5nbGVEYXRhU2V0ID8gaW5kZXggOiBcIlwiKTtcclxuICAgICAgICAgICAgc2VyaWVzLmRhdGFGaWVsZHMuZGF0ZVggPSBcImRcIjtcclxuICAgICAgICAgICAgKDxhbnk+c2VyaWVzLmRhdGFGaWVsZHMpLm1lYXN1cmVVbml0ID0gcy51b207XHJcbiAgICAgICAgICAgIHNlcmllcy5uYW1lID0gcy5uYW1lO1xyXG4gICAgICAgICAgICBzZXJpZXMuc3Ryb2tlV2lkdGggPSBzZXR0aW5ncz8uU3Ryb2tlU2l6ZSA/PyAxO1xyXG4gICAgICAgICAgICBzZXJpZXMuY29ubmVjdCA9ICFnYXBzQWxsb3dlZDtcclxuICAgICAgICAgICAgc2VyaWVzLm1pbkJ1bGxldERpc3RhbmNlID0gMTA7XHJcbiAgICAgICAgICAgIHNlcmllcy50b29sdGlwVGV4dCA9IHNpbmdsZURhdGFTZXQgPyBcIlwiIDogXCJ7bmFtZX06IFtib2xkXXt2YWx1ZVl9Wy9dXCI7XHJcbiAgICAgICAgICAgIHNlcmllcy50b29sdGlwLnBvaW50ZXJPcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcclxuICAgICAgICAgICAgc2VyaWVzLnRvb2x0aXAuYmFja2dyb3VuZC5maWxsT3BhY2l0eSA9IDAuNTtcclxuICAgICAgICAgICAgc2VyaWVzLnRvb2x0aXAubGFiZWwucGFkZGluZygxMiwgMTIsIDEyLCAxMik7XHJcbiAgICAgICAgICAgIHNlcmllcy5maWxsT3BhY2l0eSA9IGZpbGwgPyAxIDogMC4wMDAxO1xyXG4gICAgICAgICAgICBzZXJpZXMuc3RhY2tlZCA9IGZpbGw7XHJcblxyXG4gICAgICAgICAgICAvL0RhdGFzZXQgc2luZ29sbywgaSBkYXRpIHNvbm8gcmVnaXN0cmF0aSBhIGxpdmVsbG8gZGkgY2hhcnQsIGNyZW8gaWwgdG9vbHRpcCBjaGUgcGVybWV0dGUgZGkgdmVkZXJsaSB0dXR0aSBpbnNpZW1lXHJcbiAgICAgICAgICAgIC8vYWx0cmltZW50aSBhc3NlZ25vIGkgZGF0aSBkZWxsYSBzZXJpZSBkaXJldHRhbWVudGUgYWxsYSBzZXJpZVxyXG4gICAgICAgICAgICBpZiAoc2luZ2xlRGF0YVNldCkge1xyXG4gICAgICAgICAgICAgICAgc2VyaWVzLnRvb2x0aXAuZ2V0RmlsbEZyb21PYmplY3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHNlcmllcy50b29sdGlwLmJhY2tncm91bmQuZmlsbCA9IGFtNGNvcmUuY29sb3IoXCIjZWVlXCIpO1xyXG4gICAgICAgICAgICAgICAgc2VyaWVzLnRvb2x0aXAubGFiZWwuZmlsbCA9IGFtNGNvcmUuY29sb3IoXCIjMDBcIik7XHJcbiAgICAgICAgICAgICAgICBzZXJpZXMudG9vbHRpcC5kZWZhdWx0U3RhdGUudHJhbnNpdGlvbkR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgIHNlcmllcy50b29sdGlwLmhpZGRlblN0YXRlLnRyYW5zaXRpb25EdXJhdGlvbiA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9VdGlsaXp6byBpbCBtaW8gZGF0ZVNlcnZpY2UgcGVyIGxhIGZvcm1hdHRhemlvbmUgZGVsbGEgZGF0YSBpbiBtb2RvIGNoZSBub24gZGViYmEgbWFpIGdlc3RpcmUgbiBmb3JtYXRpIGZyYSBuIGxpYnJlcmllLi4uIGJlbGxpc3NpbW9cclxuICAgICAgICAgICAgICAgIHNlcmllcy5kYXRlRm9ybWF0dGVyLmZvcm1hdCA9IChzb3VyY2U6IERhdGUpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiBmaW5hbEluc3RhbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWVwYXJ0OiBcIm1pbnV0ZVwiIHwgXCJob3VyXCIgfCBcImRheVwiID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpbnRlcnZhbC50aW1ldW5pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImhvdXJcIjogdGltZXBhcnQgPSAnZGF5JzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWludXRlXCI6IHRpbWVwYXJ0ID0gJ2hvdXInOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzZWNvbmRcIjogdGltZXBhcnQgPSAnbWludXRlJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVwYXJ0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZUV4dHMuYWRqdXN0RGF0ZVRvRmluYWxJbnN0YW50KHNvdXJjZSwgdGltZXBhcnQsIGludGVydmFsID8gaW50ZXJ2YWwudGltZXVuaXQgPT0gXCJzZWNvbmRcIiA6IGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlRXh0cy5nZXRGb3JtYXR0ZWQoc291cmNlLCBmYWxzZSwgaW50ZXJ2YWwgPyBpbnRlcnZhbC50aW1ldW5pdCA9PSBcInNlY29uZFwiIDogZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICg8YW55PnNlcmllcy5hZGFwdGVyKS5hZGQoXCJ0b29sdGlwVGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRleHQgPSBcIltib2xkXXtkYXRlWC5mb3JtYXREYXRlKCl9Wy9dXFxuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlLnNlcmllcy5lYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1b20gPSBcIiBbZm9udC1zdHlsZTogaXRhbGljXVwiICsgKDxhbnk+c2VyaWVzLmRhdGFGaWVsZHMpLm1lYXN1cmVVbml0IHx8IFwiXCIgKyBcIlsvXVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IFwiW1wiICsgKDxhbnk+aXRlbS5zdHJva2UpLmhleCArIFwiXeKXj1svXSBcIiArIGl0ZW0ubmFtZSArIFwiOiBbYm9sZF17XCIgKyBpdGVtLmRhdGFGaWVsZHMudmFsdWVZICsgXCJ9Wy9dXCIgKyB1b20gKyBcIlxcblwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgc2VyaWVzLmRhdGEgPSBzLnZhbHVlcztcclxuXHJcbiAgICAgICAgICAgIGxldCBzZWdtZW50ID0gc2VyaWVzLnNlZ21lbnRzLnRlbXBsYXRlO1xyXG5cclxuICAgICAgICAgICAgbGV0IGhvdmVyU3RhdGUgPSBzZWdtZW50LnN0YXRlcy5jcmVhdGUoXCJob3ZlclwiKTtcclxuICAgICAgICAgICAgaG92ZXJTdGF0ZS5wcm9wZXJ0aWVzLnN0cm9rZVdpZHRoID0gKHNldHRpbmdzPy5TdHJva2VTaXplID8/IDEpICsgMTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkaW1tZWQgPSBzZWdtZW50LnN0YXRlcy5jcmVhdGUoXCJkaW1tZWRcIik7XHJcbiAgICAgICAgICAgIGRpbW1lZC5wcm9wZXJ0aWVzLnN0cm9rZSA9IGFtNGNvcmUuY29sb3IoXCIjZGFkYWRhXCIpO1xyXG5cclxuICAgICAgICAgICAgLy9TZSBsYSBzZXJpZSBoYSB1biBjb2xvcmUsIHVzbyBxdWVsbG8sIGFsdHJpbWVudGkgcGVzY28gZGFpIGNvbG9yaSBkaSBkZWZhdWx0IGFuZGFuZG8gaW4gb3JkaW5lXHJcbiAgICAgICAgICAgIGlmIChzLmNvbG9yKVxyXG4gICAgICAgICAgICAgICAgc2VyaWVzQ29sb3JzLnB1c2goYW00Y29yZS5jb2xvcihzLmNvbG9yKSk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VyaWVzQ29sb3JzLnB1c2goQ2hhcnRJbnN0YW5jZUNhc3RlZC5jb2xvcnMubGlzdFtkZWZhdWx0SW5kZXggJSBDaGFydEluc3RhbmNlQ2FzdGVkLmNvbG9ycy5saXN0Lmxlbmd0aF0pXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0SW5kZXgrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2VyaWVzVG9QdXNoLnB1c2goc2VyaWVzKTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQuY29sb3JzLmxpc3QgPSBzZXJpZXNDb2xvcnM7XHJcbiAgICAgICAgLy9TY3Jpdm8gbGUgc2VyaWUgbmVsIGdyYWZpY29cclxuICAgICAgICBzZXJpZXNUb1B1c2guZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgQ2hhcnRJbnN0YW5jZUNhc3RlZC5zZXJpZXMucHVzaChzKTtcclxuICAgICAgICAgICAgaWYgKHNob3dUaW1lbGluZSlcclxuICAgICAgICAgICAgICAgICg8YW00Y2hhcnRzLlhZQ2hhcnRTY3JvbGxiYXI+Q2hhcnRJbnN0YW5jZUNhc3RlZC5zY3JvbGxiYXJYKS5zZXJpZXMucHVzaChzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzLkxlZ2VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UubGVnZW5kID0gbmV3IGFtNGNoYXJ0cy5MZWdlbmQoKTtcclxuICAgICAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlLmxlZ2VuZC5wb3NpdGlvbiA9IHNldHRpbmdzPy5MZWdlbmRQb3NpdGlvbiA/PyAncmlnaHQnO1xyXG4gICAgICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UubGVnZW5kLnNjcm9sbGFibGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlLmxlZ2VuZC5pdGVtQ29udGFpbmVycy50ZW1wbGF0ZS50b29sdGlwVGV4dCA9IFwie25hbWV9XCI7XHJcbiAgICAgICAgICAgIHRoaXMuQ2hhcnRJbnN0YW5jZS5sZWdlbmQuaXRlbUNvbnRhaW5lcnMudGVtcGxhdGUuZXZlbnRzLm9uKFwib3ZlclwiLCAoZXZlbnQpID0+IHsgdGhpcy5wcm9jZXNzT3Zlcig8YW00Y2hhcnRzLkxpbmVTZXJpZXM+ZXZlbnQudGFyZ2V0LmRhdGFJdGVtLmRhdGFDb250ZXh0LCBmaWxsKTsgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuQ2hhcnRJbnN0YW5jZS5sZWdlbmQuaXRlbUNvbnRhaW5lcnMudGVtcGxhdGUuZXZlbnRzLm9uKFwib3V0XCIsIChldmVudCkgPT4geyB0aGlzLnByb2Nlc3NPdXQoZmlsbCk7IH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcpIHtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wbGF0ZSA9IHRoaXMuQ2hhcnRJbnN0YW5jZS5sZWdlbmQuaXRlbUNvbnRhaW5lcnMudGVtcGxhdGU7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5wYWRkaW5nVG9wID0gc2V0dGluZ3MuTGVnZW5kUGFkZGluZy50b3AgPz8gMDtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlLnBhZGRpbmdCb3R0b20gPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nLmJvdHRvbSA/PyAwO1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGUucGFkZGluZ0xlZnQgPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nLmxlZnQgPz8gMDtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlLnBhZGRpbmdSaWdodCA9IHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcucmlnaHQgPz8gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlLmN1cnNvciA9IG5ldyBhbTRjaGFydHMuWFlDdXJzb3IoKTtcclxuXHJcbiAgICAgICAgLy9Qcm92ZSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgIC8vIHRoaXMuQ2hhcnRJbnN0YW5jZS5jdXJzb3IuZXZlbnRzLm9uKFwiY3Vyc29ycG9zaXRpb25jaGFuZ2VkXCIsIChldikgPT4ge1xyXG4gICAgICAgIC8vICAgICAvL3ZhciB2YWx1ZSA9IGRhdGVBeGlzLnBvc2l0aW9uVG9EYXRlKGRhdGVBeGlzLnRvQXhpc1Bvc2l0aW9uKGV2LnRhcmdldC54UG9zaXRpb24pKTtcclxuICAgICAgICAvLyAgICAgdmFyIGR0ID0gZGF0ZUF4aXMuc2VyaWVzLnZhbHVlcy5maW5kKHQgPT4gdC5kYXRhSXRlbS52YWx1ZXMuZGF0ZVgpO1xyXG4gICAgICAgIC8vICAgICBpZiAoZHQgJiYgZHQuZGF0YUl0ZW0pIHtcclxuICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKGR0LmRhdGFJdGVtLnZhbHVlcyk7XHJcbiAgICAgICAgLy8gICAgICAgICAvLyB0aGlzLkNoYXJ0SW5zdGFuY2UudG9vbHRpcFRleHQgPSBkdDtcclxuICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgIC8vICAgICBlbHNlIHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuQ2hhcnRJbnN0YW5jZS50b29sdGlwVGV4dCA9IFwiXCI7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cclxuICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UuY3Vyc29yLnhBeGlzID0gZGF0ZUF4aXM7XHJcbiAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlLmN1cnNvci55QXhpcyA9IHlBeGlzO1xyXG4gICAgICAgIGlmIChzaW5nbGVEYXRhU2V0KVxyXG4gICAgICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UuY3Vyc29yLm1heFRvb2x0aXBEaXN0YW5jZSA9IC0xO1xyXG5cclxuICAgICAgICAvL1RPRE86IENlcmNhcmUgZGkgY2FwaXJlIHBlcmNow6kgw6ggZmlnbGlvIGRpIHB1dHRhbmEuLi4uLi5cclxuICAgICAgICBkYXRlQXhpcy5ldmVudHMub24oXCJzdGFydGNoYW5nZWRcIiwgdCA9PiB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkKHQsIHNldHRpbmdzKSk7XHJcbiAgICAgICAgZGF0ZUF4aXMuZXZlbnRzLm9uKFwiZW5kY2hhbmdlZFwiLCB0ID0+IHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWQodCwgc2V0dGluZ3MpKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIHJlZnJlc2hEYXRhKGRhdGE6IExpbmVDaGFydERhdGEgfCBhbnkpIHtcclxuICAgICAgICAvL1RPRE86SU1QTFxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIGVtaXRTZWxlY3Rpb25DaGFuZ2VkKGV2LCBzZXR0aW5ncykge1xyXG4gICAgICAgIGlmICgoPGFueT5zZXR0aW5ncykuT25TZWxlY3Rpb25DaGFuZ2VkQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvdHRsYShcInNlbGNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXhpcyA9IDxhbTRjaGFydHMuRGF0ZUF4aXM+ZXYudGFyZ2V0XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZShheGlzLm1pblpvb21lZCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoYXhpcy5tYXhab29tZWQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGluaXRpYWwgPSBheGlzLm1pbiA9PSBheGlzLm1pblpvb21lZCAmJiBheGlzLm1heCA9PSBheGlzLm1heFpvb21lZDtcclxuICAgICAgICAgICAgICAgICg8YW55PnNldHRpbmdzKS5PblNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayh7IGZyb206IHN0YXJ0LCB0bzogZW5kLCBpbml0aWFsOiBpbml0aWFsIH0pO1xyXG4gICAgICAgICAgICB9LCAxNTApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIHByb2Nlc3NPdmVyKGhvdmVyZWRTZXJpZXM6IGFtNGNoYXJ0cy5MaW5lU2VyaWVzLCBmaWxsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaG92ZXJlZFNlcmllcy50b0Zyb250KCk7XHJcblxyXG4gICAgICAgIGhvdmVyZWRTZXJpZXMuc2VnbWVudHMuZWFjaCgoc2VnbWVudCkgPT4ge1xyXG4gICAgICAgICAgICBzZWdtZW50LnNldFN0YXRlKFwiaG92ZXJcIik7XHJcbiAgICAgICAgICAgIGlmICghZmlsbClcclxuICAgICAgICAgICAgICAgIHNlZ21lbnQuZmlsbFNwcml0ZS5maWxsT3BhY2l0eSA9IHRoaXMuT3BhY2l0eU9uU2VsZWN0ZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFmaWxsKVxyXG4gICAgICAgICAgICBob3ZlcmVkU2VyaWVzLmxlZ2VuZERhdGFJdGVtLm1hcmtlci5jaGlsZHJlbi5nZXRJbmRleCgxKS5maWxsT3BhY2l0eSA9IHRoaXMuT3BhY2l0eU9uU2VsZWN0ZWQ7XHJcblxyXG4gICAgICAgIHRoaXMuQ2hhcnRJbnN0YW5jZS5zZXJpZXMuZWFjaCgoc2VyaWVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZXJpZXMgIT0gaG92ZXJlZFNlcmllcylcclxuICAgICAgICAgICAgICAgICg8YW00Y2hhcnRzLkxpbmVTZXJpZXM+c2VyaWVzKS5zZWdtZW50cy5lYWNoKChzZWdtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5zZXRTdGF0ZShcImRpbW1lZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQuZmlsbFNwcml0ZS5maWxsT3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBwcm9jZXNzT3V0KGZpbGw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2Uuc2VyaWVzLmVhY2goKHNlcmllcykgPT4ge1xyXG4gICAgICAgICAgICAoPGFtNGNoYXJ0cy5MaW5lU2VyaWVzPnNlcmllcykuc2VnbWVudHMuZWFjaCgoc2VnbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2VnbWVudC5zZXRTdGF0ZShcImRlZmF1bHRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5maWxsU3ByaXRlLmZpbGxPcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICghZmlsbClcclxuICAgICAgICAgICAgICAgIHNlcmllcy5sZWdlbmREYXRhSXRlbS5tYXJrZXIuY2hpbGRyZW4uZ2V0SW5kZXgoMSkuZmlsbE9wYWNpdHkgPSAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vKioqKioqKioqKioqKioqKioqKiogRnVuemlvbmUgZGkgdGhyb3R0bGluZyBwZXIgbm9uIHNwYW1tYXJlIHJpY2hpZXN0ZSBpbiBjYXNvIGRpIGFuaW1hemlvbmkgYXR0aXZhdGVcclxuICAgIC8vVE9ETzogc3Bvc3RhcmxhIGluIHVuIG1ldG9kbyBkaSB1dGlsaXTDoCAoZXNmYWVuemEvZXh0ZW5zaW9ucylcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIGV4ZWN1dGlvblRpbWVyczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSB0aHJvdHRsYShpZDogc3RyaW5nLCBmdW5jOiBGdW5jdGlvbiwgdGhyb3R0bGVUaW1lOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICAvL1NlIGhvIGxhIGZ1bnppb25lIGNoZSB2dW9sZSBlc2VndWlyZSByaXB1bGlzY28gcXVlbCB0aW1lb3V0XHJcbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSlcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSk7XHJcblxyXG4gICAgICAgIC8vUmljcmVvIGlsIHRpbWVvdXQgcGVyIGVzZWd1aXJlIHF1ZWxsYSBmdW56aW9uZSBkb3BvIHRocm90dGxlVGltZSBtaWxsaXNlY29uZGlcclxuICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBzZXRUaW1lb3V0KCgpID0+IHsgZnVuYygpOyB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBudWxsOyB9LCB0aHJvdHRsZVRpbWUpO1xyXG4gICAgfVxyXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqXHJcbn0iXX0=
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZUNoYXJ0U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLWNoYXJ0cy9zcmMvbGliL3NlcnZpY2VzL2NsYXNzZXMvTGluZUNoYXJ0U2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEtBQUssT0FBTyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxTQUFTLE1BQU0sNEJBQTRCLENBQUM7QUFFeEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBUXpCLGNBQWM7SUFDZCxZQUFtQixPQUFvQixFQUFVLFFBQXFCO1FBQW5ELFlBQU8sR0FBUCxPQUFPLENBQWE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBTnRFLGNBQWM7UUFDTix3QkFBbUIsR0FBVyxJQUFJLENBQUM7UUFDM0MsY0FBYztRQUNOLHNCQUFpQixHQUFXLEdBQUcsQ0FBQztRQThUeEMsdUdBQXVHO1FBQ3ZHLCtEQUErRDtRQUMvRCxjQUFjO1FBQ04sb0JBQWUsR0FBNkIsRUFBRSxDQUFDO0lBOVRtQixDQUFDO0lBRTNFOztPQUVHO0lBQ0ksVUFBVSxDQUFDLElBQXlCLEVBQUUsUUFBMkI7O1FBQ3BFLElBQUksYUFBYSxHQUFrQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEcsSUFBSSxTQUFTLFNBQUcsUUFBUSxDQUFDLHFCQUFxQixtQ0FBSSxJQUFJLENBQUM7UUFDdkQsSUFBSSxhQUFhLFNBQUcsUUFBUSxDQUFDLGFBQWEsbUNBQUksS0FBSyxDQUFDO1FBQ3BELElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsYUFBUixRQUFRLHVCQUFS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SUFDUCxDQUFDO0lBRUQsY0FBYztJQUNOLFVBQVUsQ0FBQyxJQUFhO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2YsTUFBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDckQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLElBQUk7b0JBQ0wsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUk7Z0JBQ0wsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQU1ELGNBQWM7SUFDTixRQUFRLENBQUMsRUFBVSxFQUFFLElBQWMsRUFBRSxZQUFvQjtRQUM3RCw2REFBNkQ7UUFDN0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUN4QixZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTNDLCtFQUErRTtRQUMvRSxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzVHLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcbmltcG9ydCB7IElCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS9JQmFzZVNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2FkYXB0ZXJzJztcclxuaW1wb3J0IHsgTGluZUNoYXJ0RGF0YSB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRhJztcclxuaW1wb3J0IHsgTGluZUNoYXJ0U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2V0dGluZ3MnO1xyXG5cclxuaW1wb3J0ICogYXMgYW00Y29yZSBmcm9tIFwiQGFtY2hhcnRzL2FtY2hhcnRzNC9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIGFtNGNoYXJ0cyBmcm9tIFwiQGFtY2hhcnRzL2FtY2hhcnRzNC9jaGFydHNcIjtcclxuXHJcbi8qKlxyXG4gKiBDbGFzc2UgaWwgY3VpIHVuaWNvIHNjb3BvIMOoIGdlc3RpcmUgaWwgc2V0dXAgZSByZW5kZXJpbmcgZGkgdW4gTGluZUNoYXJ0XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTGluZUNoYXJ0U2VydmljZSBpbXBsZW1lbnRzIElCYXNlU2VydmljZTxhbTRjaGFydHMuWFlDaGFydD57XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIENoYXJ0SW5zdGFuY2U6IGFtNGNoYXJ0cy5YWUNoYXJ0O1xyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgRGF0YUdyb3VwQnVja2V0U2l6ZTogbnVtYmVyID0gMTUwMDtcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIE9wYWNpdHlPblNlbGVjdGVkOiBudW1iZXIgPSAwLjM7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBBZGFwdGVyOiBCYXNlQWRhcHRlciwgcHJpdmF0ZSBkYXRlRXh0czogRGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBkYXRhIHVuYSBjb3BwaWEgRGF0aSAtIEltcG9zdGF6aW9uaSBsaSB1dGlsaXp6YSBwZXIgY3JlYXJlIGUgdmlzdWFsaXp6YXJlIHVuIExpbmVDaGFydFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JhcGhpY2F0ZShkYXRhOiBMaW5lQ2hhcnREYXRhIHwgYW55LCBzZXR0aW5nczogTGluZUNoYXJ0U2V0dGluZ3MpOiBJQmFzZVNlcnZpY2U8YW00Y2hhcnRzLlhZQ2hhcnQ+IHtcclxuICAgICAgICBsZXQgZGF0YUNvbnZlcnRlZDogTGluZUNoYXJ0RGF0YSA9IHRoaXMuQWRhcHRlciA/IHRoaXMuQWRhcHRlci5hZGFwdERhdGFGb3JMaW5lQ2hhcnQoZGF0YSkgOiBkYXRhO1xyXG4gICAgICAgIGxldCB0aHJlc2hvbGQgPSBzZXR0aW5ncy5EYXRhR3JvdXBpbmdUaHJlc2hvbGQgPz8gMzAwMDtcclxuICAgICAgICBsZXQgc2luZ2xlRGF0YVNldCA9IHNldHRpbmdzLk1lcmdlRGF0YXNldHMgPz8gZmFsc2U7XHJcbiAgICAgICAgbGV0IHNob3dUaWNrcyA9IHNldHRpbmdzLlNob3dUaWNrcyA9PSBudWxsID8gdHJ1ZSA6IHNldHRpbmdzPy5TaG93VGlja3M7XHJcbiAgICAgICAgbGV0IGRhdGFTaG91bGRCZUdyb3VwZWQgPSBNYXRoLm1heCguLi5kYXRhQ29udmVydGVkLnNlcmllcy5tYXAodCA9PiB0LnZhbHVlcy5sZW5ndGgpKSA+IHRocmVzaG9sZDtcclxuICAgICAgICBsZXQgc2hvd1RpbWVsaW5lID0gc2V0dGluZ3MuVGltZWxpbmUgfHwgZGF0YVNob3VsZEJlR3JvdXBlZDtcclxuICAgICAgICBsZXQgc2VyaWVzV2l0aEludGVydmFsID0gZGF0YUNvbnZlcnRlZC5zZXJpZXMuc29tZSh0ID0+IHQuaW50ZXJ2YWwpO1xyXG4gICAgICAgIGxldCBpbnRlcnZhbCA9IHNlcmllc1dpdGhJbnRlcnZhbCA/IGRhdGFDb252ZXJ0ZWQuc2VyaWVzLmZpbmQodCA9PiB0LmludGVydmFsKS5pbnRlcnZhbCA6IG51bGw7XHJcbiAgICAgICAgbGV0IGdhcHNBbGxvd2VkID0gc2V0dGluZ3M/LkFsbG93R2FwcyA9PSBudWxsID8gc2VyaWVzV2l0aEludGVydmFsIDogc2V0dGluZ3M/LkFsbG93R2FwcztcclxuICAgICAgICBsZXQgZmluYWxJbnN0YW50ID0gc2V0dGluZ3M/LkZpbmFsSW5zdGFudHMgPz8gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9QZXIgZXZpdGFyZSBkaSBkaW1lbnRpY2FybWVsaSBlIGdlc3RpcmUgY29tdW5xdWUgYmVuZSBnbGkgbmdpZiBlY2MuLi5cclxuICAgICAgICBhbTRjb3JlLm9wdGlvbnMuYXV0b0Rpc3Bvc2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UgPSBhbTRjb3JlLmNyZWF0ZShzZXR0aW5ncy5OYW1lLCBhbTRjaGFydHMuWFlDaGFydCk7XHJcbiAgICAgICAgbGV0IENoYXJ0SW5zdGFuY2VDYXN0ZWQgPSA8YW00Y2hhcnRzLlhZQ2hhcnQ+dGhpcy5DaGFydEluc3RhbmNlO1xyXG5cclxuICAgICAgICBsZXQgeUF4aXMgPSBDaGFydEluc3RhbmNlQ2FzdGVkLnlBeGVzLnB1c2gobmV3IGFtNGNoYXJ0cy5WYWx1ZUF4aXMoKSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzLllBeGlzVGl0bGUpIHtcclxuICAgICAgICAgICAgeUF4aXMudGl0bGUudGV4dCA9IHNldHRpbmdzLllBeGlzVGl0bGVcclxuICAgICAgICAgICAgeUF4aXMudGl0bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzLk1pbilcclxuICAgICAgICAgICAgeUF4aXMubWluID0gc2V0dGluZ3MuTWluO1xyXG4gICAgICAgIGlmIChzZXR0aW5ncy5NYXgpXHJcbiAgICAgICAgICAgIHlBeGlzLm1heCA9IHNldHRpbmdzLk1heDtcclxuXHJcbiAgICAgICAgbGV0IGRhdGVBeGlzID0gQ2hhcnRJbnN0YW5jZUNhc3RlZC54QXhlcy5wdXNoKG5ldyBhbTRjaGFydHMuRGF0ZUF4aXMoKSk7XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5ncy5YQXhpc1RpdGxlKSB7XHJcbiAgICAgICAgICAgIGRhdGVBeGlzLnRpdGxlLnRleHQgPSBzZXR0aW5ncy5YQXhpc1RpdGxlXHJcbiAgICAgICAgICAgIGRhdGVBeGlzLnRpdGxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzaG93VGlja3MpIHtcclxuICAgICAgICAgICAgZGF0ZUF4aXMucmVuZGVyZXIudGlja3MudGVtcGxhdGUuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgZGF0ZUF4aXMucmVuZGVyZXIudGlja3MudGVtcGxhdGUuc3Ryb2tlT3BhY2l0eSA9IDE7XHJcbiAgICAgICAgICAgIGRhdGVBeGlzLnJlbmRlcmVyLnRpY2tzLnRlbXBsYXRlLnN0cm9rZSA9IGFtNGNvcmUuY29sb3IoXCIjNDk1QzQzXCIpO1xyXG4gICAgICAgICAgICBkYXRlQXhpcy5yZW5kZXJlci50aWNrcy50ZW1wbGF0ZS5zdHJva2VXaWR0aCA9IDI7XHJcbiAgICAgICAgICAgIGRhdGVBeGlzLnJlbmRlcmVyLnRpY2tzLnRlbXBsYXRlLmxlbmd0aCA9IDEwO1xyXG4gICAgICAgICAgICBkYXRlQXhpcy5yZW5kZXJlci50aWNrcy50ZW1wbGF0ZS5sb2NhdGlvbiA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRlQXhpcy5yZW5kZXJlci5taW5HcmlkRGlzdGFuY2UgPSBzZXR0aW5ncz8uTWluR3JpZERpc3RhbmNlID8/IDUwO1xyXG4gICAgICAgIGRhdGVBeGlzLnJlbmRlcmVyLmdyaWQudGVtcGxhdGUubG9jYXRpb24gPSAwO1xyXG4gICAgICAgIGRhdGVBeGlzLm1pblpvb21Db3VudCA9IDU7XHJcbiAgICAgICAgZGF0ZUF4aXMuZ3JvdXBEYXRhID0gZGF0YVNob3VsZEJlR3JvdXBlZDtcclxuICAgICAgICBkYXRlQXhpcy5ncm91cENvdW50ID0gc2V0dGluZ3MuRGF0YUdyb3VwQnVja2V0U2l6ZSA/PyB0aGlzLkRhdGFHcm91cEJ1Y2tldFNpemU7XHJcblxyXG4gICAgICAgIC8vU2UgaG8gYWxtZW5vIHVuYSBzZXJpZSBhZCBpbnRlcnZhbGxvIGUgaSBzZXR0aW5ncyBub24gbWkgaW1wZWRpc2Nvbm8gZXNwbGljaXRhbWVudGUgZGkgdXNhcmUgaSBnYXBzLCB2aXN1YWxpenpvIGkgZGF0aSBjb2wgZ2FwXHJcblxyXG4gICAgICAgIGlmIChnYXBzQWxsb3dlZCkge1xyXG4gICAgICAgICAgICBpZiAoIXNlcmllc1dpdGhJbnRlcnZhbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlBlciB1dGlsaXp6YXJlIGxhIGZ1bnppb25hbGl0w6AgZGVpIGdhcCDDqCBvYmJsaWdhdG9yaW8gZGVmaW5pcmUgdW4gaW50ZXJ2YWxsbyBuZWxsZSBzZXJpZSBkZWwgZ3JhZmljb1wiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkYXRlQXhpcy5iYXNlSW50ZXJ2YWwgPSB7IGNvdW50OiBpbnRlcnZhbC5jb3VudCwgdGltZVVuaXQ6IGludGVydmFsLnRpbWV1bml0IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaG93VGltZWxpbmUpXHJcbiAgICAgICAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQuc2Nyb2xsYmFyWCA9IG5ldyBhbTRjaGFydHMuWFlDaGFydFNjcm9sbGJhcigpO1xyXG5cclxuICAgICAgICBsZXQgc2VyaWVzVG9QdXNoID0gW107XHJcbiAgICAgICAgbGV0IHNlcmllc0NvbG9yczogYW00Y29yZS5Db2xvcltdID0gW107XHJcbiAgICAgICAgbGV0IGRlZmF1bHRJbmRleCA9IDA7XHJcblxyXG4gICAgICAgIC8vLS0gR2VuZXJhemlvbmUgZGkgdW4gdW5pY28gZGF0YXNldCBpbnZlY2UgY2hlIE4sIHBlciBwb3RlciBnZXN0aXJlIHVuIHVuaWNvIHRvb2x0aXBcclxuICAgICAgICBpZiAoc2luZ2xlRGF0YVNldCkge1xyXG4gICAgICAgICAgICBsZXQgZHRvOiB7IFtpbmRleDogbnVtYmVyXTogeyBbc2luZGV4OiBzdHJpbmddOiBudW1iZXIgfSB9ID0ge307XHJcbiAgICAgICAgICAgIGRhdGFDb252ZXJ0ZWQuc2VyaWVzLmZvckVhY2goKHZzLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YWl0ZW0gPSB2cy52YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ZXIgPSBuZXcgRGF0ZShkYXRhaXRlbS5kKS52YWx1ZU9mKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZHRvW2luZGV4ZXJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkdG9baW5kZXhlcl0gPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZHRvW2luZGV4ZXJdWyd2JyArIGluZGV4XSA9IGRhdGFpdGVtLnY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGVzID0gT2JqZWN0LmtleXMoZHRvKTtcclxuICAgICAgICAgICAgbGV0IHNpbmdsZURTID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXM6IHsgW3NpbmRleDogc3RyaW5nXTogbnVtYmVyIH0gPSBkdG9bZGF0ZXNbaV1dO1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSB7IGQ6IG5ldyBEYXRlKHBhcnNlSW50KGRhdGVzW2ldKSkgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciB2YWxzID0gT2JqZWN0LmtleXModmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGlpID0gMDsgaWkgPCB2YWxzLmxlbmd0aDsgaWkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXJpZXMgPSB2YWxzW2lpXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2luZ2xlVmFsID0gdmFsdWVzW3Nlcmllc107XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVtzZXJpZXNdID0gc2luZ2xlVmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2luZ2xlRFMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UuZGF0YSA9IHNpbmdsZURTO1xyXG4gICAgICAgICAgICBkYXRlQXhpcy5jdXJzb3JUb29sdGlwRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLy0tIEZpbmUgZ2VuZXJhemlvbmVcclxuXHJcbiAgICAgICAgZGF0YUNvbnZlcnRlZC5zZXJpZXMuZm9yRWFjaCgocywgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHMudmFsdWVzWzBdICYmICEocy52YWx1ZXNbMF0uZCBpbnN0YW5jZW9mIERhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2ID0gMDsgdiA8IHMudmFsdWVzLmxlbmd0aDsgdisrKVxyXG4gICAgICAgICAgICAgICAgICAgIHMudmFsdWVzW3ZdLmQgPSBuZXcgRGF0ZShzLnZhbHVlc1t2XS5kKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNvcnJlY3RPcmRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBwcmV2RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgcy52YWx1ZXMubGVuZ3RoOyB2KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJldkRhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldkRhdGUgPSBzLnZhbHVlc1t2XS5kO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzLnZhbHVlc1t2XS5kIDwgcHJldkRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdE9yZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb3JyZWN0T3JkZXIpXHJcbiAgICAgICAgICAgICAgICBzLnZhbHVlcy5zb3J0KChkMSwgZDIpID0+IGQxLmQuZ2V0VGltZSgpIC0gZDIuZC5nZXRUaW1lKCkpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGZpbGwgPSBzLmZpbGwgIT0gbnVsbCAmJiBzLmZpbGwgIT0gdW5kZWZpbmVkID8gcy5maWxsIDogKHNldHRpbmdzPy5GaWxsID8/IGZhbHNlKTtcclxuICAgICAgICAgICAgbGV0IHNlcmllczogYW00Y2hhcnRzLlN0ZXBMaW5lU2VyaWVzIHwgYW00Y2hhcnRzLkxpbmVTZXJpZXMgPSBzZXR0aW5ncz8uU3RlcCA/IG5ldyBhbTRjaGFydHMuU3RlcExpbmVTZXJpZXMoKSA6IG5ldyBhbTRjaGFydHMuTGluZVNlcmllcygpO1xyXG4gICAgICAgICAgICBzZXJpZXMuZGF0YUZpZWxkcy52YWx1ZVkgPSBcInZcIiArIChzaW5nbGVEYXRhU2V0ID8gaW5kZXggOiBcIlwiKTtcclxuICAgICAgICAgICAgc2VyaWVzLmRhdGFGaWVsZHMuZGF0ZVggPSBcImRcIjtcclxuICAgICAgICAgICAgKDxhbnk+c2VyaWVzLmRhdGFGaWVsZHMpLm1lYXN1cmVVbml0ID0gcy51b207XHJcbiAgICAgICAgICAgIHNlcmllcy5uYW1lID0gcy5uYW1lO1xyXG4gICAgICAgICAgICBzZXJpZXMuc3Ryb2tlV2lkdGggPSBzZXR0aW5ncz8uU3Ryb2tlU2l6ZSA/PyAxO1xyXG4gICAgICAgICAgICBzZXJpZXMuY29ubmVjdCA9ICFnYXBzQWxsb3dlZDtcclxuICAgICAgICAgICAgc2VyaWVzLm1pbkJ1bGxldERpc3RhbmNlID0gMTA7XHJcbiAgICAgICAgICAgIHNlcmllcy50b29sdGlwVGV4dCA9IHNpbmdsZURhdGFTZXQgPyBcIlwiIDogXCJ7bmFtZX06IFtib2xkXXt2YWx1ZVl9Wy9dXCI7XHJcbiAgICAgICAgICAgIHNlcmllcy50b29sdGlwLnBvaW50ZXJPcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcclxuICAgICAgICAgICAgc2VyaWVzLnRvb2x0aXAuYmFja2dyb3VuZC5maWxsT3BhY2l0eSA9IDAuNTtcclxuICAgICAgICAgICAgc2VyaWVzLnRvb2x0aXAubGFiZWwucGFkZGluZygxMiwgMTIsIDEyLCAxMik7XHJcbiAgICAgICAgICAgIHNlcmllcy5maWxsT3BhY2l0eSA9IGZpbGwgPyAxIDogMC4wMDAxO1xyXG4gICAgICAgICAgICBzZXJpZXMuc3RhY2tlZCA9IGZpbGxcclxuXHJcbiAgICAgICAgICAgIC8vRGF0YXNldCBzaW5nb2xvLCBpIGRhdGkgc29ubyByZWdpc3RyYXRpIGEgbGl2ZWxsbyBkaSBjaGFydCwgY3JlbyBpbCB0b29sdGlwIGNoZSBwZXJtZXR0ZSBkaSB2ZWRlcmxpIHR1dHRpIGluc2llbWVcclxuICAgICAgICAgICAgLy9hbHRyaW1lbnRpIGFzc2Vnbm8gaSBkYXRpIGRlbGxhIHNlcmllIGRpcmV0dGFtZW50ZSBhbGxhIHNlcmllXHJcbiAgICAgICAgICAgIGlmIChzaW5nbGVEYXRhU2V0KSB7XHJcbiAgICAgICAgICAgICAgICBzZXJpZXMudG9vbHRpcC5nZXRGaWxsRnJvbU9iamVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc2VyaWVzLnRvb2x0aXAuYmFja2dyb3VuZC5maWxsID0gYW00Y29yZS5jb2xvcihcIiNlZWVcIik7XHJcbiAgICAgICAgICAgICAgICBzZXJpZXMudG9vbHRpcC5sYWJlbC5maWxsID0gYW00Y29yZS5jb2xvcihcIiMwMFwiKTtcclxuICAgICAgICAgICAgICAgIHNlcmllcy50b29sdGlwLmRlZmF1bHRTdGF0ZS50cmFuc2l0aW9uRHVyYXRpb24gPSAwO1xyXG4gICAgICAgICAgICAgICAgc2VyaWVzLnRvb2x0aXAuaGlkZGVuU3RhdGUudHJhbnNpdGlvbkR1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAvL1V0aWxpenpvIGlsIG1pbyBkYXRlU2VydmljZSBwZXIgbGEgZm9ybWF0dGF6aW9uZSBkZWxsYSBkYXRhIGluIG1vZG8gY2hlIG5vbiBkZWJiYSBtYWkgZ2VzdGlyZSBuIGZvcm1hdGkgZnJhIG4gbGlicmVyaWUuLi4gYmVsbGlzc2ltb1xyXG4gICAgICAgICAgICAgICAgc2VyaWVzLmRhdGVGb3JtYXR0ZXIuZm9ybWF0ID0gKHNvdXJjZTogRGF0ZSk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVydmFsICYmIGZpbmFsSW5zdGFudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZXBhcnQ6IFwibWludXRlXCIgfCBcImhvdXJcIiB8IFwiZGF5XCIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGludGVydmFsLnRpbWV1bml0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaG91clwiOiB0aW1lcGFydCA9ICdkYXknOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtaW51dGVcIjogdGltZXBhcnQgPSAnaG91cic7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNlY29uZFwiOiB0aW1lcGFydCA9ICdtaW51dGUnOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltZXBhcnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlRXh0cy5hZGp1c3REYXRlVG9GaW5hbEluc3RhbnQoc291cmNlLCB0aW1lcGFydCwgaW50ZXJ2YWwgPyBpbnRlcnZhbC50aW1ldW5pdCA9PSBcInNlY29uZFwiIDogZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVFeHRzLmdldEZvcm1hdHRlZChzb3VyY2UsIGZhbHNlLCBpbnRlcnZhbCA/IGludGVydmFsLnRpbWV1bml0ID09IFwic2Vjb25kXCIgOiBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgKDxhbnk+c2VyaWVzLmFkYXB0ZXIpLmFkZChcInRvb2x0aXBUZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFwiW2JvbGRde2RhdGVYLmZvcm1hdERhdGUoKX1bL11cXG5cIjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2Uuc2VyaWVzLmVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVvbSA9IFwiIFtmb250LXN0eWxlOiBpdGFsaWNdXCIgKyAoPGFueT5zZXJpZXMuZGF0YUZpZWxkcykubWVhc3VyZVVuaXQgfHwgXCJcIiArIFwiWy9dXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gXCJbXCIgKyAoPGFueT5pdGVtLnN0cm9rZSkuaGV4ICsgXCJd4pePWy9dIFwiICsgaXRlbS5uYW1lICsgXCI6IFtib2xkXXtcIiArIGl0ZW0uZGF0YUZpZWxkcy52YWx1ZVkgKyBcIn1bL11cIiArIHVvbSArIFwiXFxuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBzZXJpZXMuZGF0YSA9IHMudmFsdWVzO1xyXG5cclxuICAgICAgICAgICAgbGV0IHNlZ21lbnQgPSBzZXJpZXMuc2VnbWVudHMudGVtcGxhdGU7XHJcblxyXG4gICAgICAgICAgICBsZXQgaG92ZXJTdGF0ZSA9IHNlZ21lbnQuc3RhdGVzLmNyZWF0ZShcImhvdmVyXCIpO1xyXG4gICAgICAgICAgICBob3ZlclN0YXRlLnByb3BlcnRpZXMuc3Ryb2tlV2lkdGggPSAoc2V0dGluZ3M/LlN0cm9rZVNpemUgPz8gMSkgKyAxO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRpbW1lZCA9IHNlZ21lbnQuc3RhdGVzLmNyZWF0ZShcImRpbW1lZFwiKTtcclxuICAgICAgICAgICAgZGltbWVkLnByb3BlcnRpZXMuc3Ryb2tlID0gYW00Y29yZS5jb2xvcihcIiNkYWRhZGFcIik7XHJcblxyXG4gICAgICAgICAgICAvL1NlIGxhIHNlcmllIGhhIHVuIGNvbG9yZSwgdXNvIHF1ZWxsbywgYWx0cmltZW50aSBwZXNjbyBkYWkgY29sb3JpIGRpIGRlZmF1bHQgYW5kYW5kbyBpbiBvcmRpbmVcclxuICAgICAgICAgICAgaWYgKHMuY29sb3IpXHJcbiAgICAgICAgICAgICAgICBzZXJpZXNDb2xvcnMucHVzaChhbTRjb3JlLmNvbG9yKHMuY29sb3IpKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXJpZXNDb2xvcnMucHVzaChDaGFydEluc3RhbmNlQ2FzdGVkLmNvbG9ycy5saXN0W2RlZmF1bHRJbmRleCAlIENoYXJ0SW5zdGFuY2VDYXN0ZWQuY29sb3JzLmxpc3QubGVuZ3RoXSlcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZXJpZXNUb1B1c2gucHVzaChzZXJpZXMpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgQ2hhcnRJbnN0YW5jZUNhc3RlZC5jb2xvcnMubGlzdCA9IHNlcmllc0NvbG9ycztcclxuICAgICAgICAvL1Njcml2byBsZSBzZXJpZSBuZWwgZ3JhZmljb1xyXG4gICAgICAgIHNlcmllc1RvUHVzaC5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICBDaGFydEluc3RhbmNlQ2FzdGVkLnNlcmllcy5wdXNoKHMpO1xyXG4gICAgICAgICAgICBpZiAoc2hvd1RpbWVsaW5lKVxyXG4gICAgICAgICAgICAgICAgKDxhbTRjaGFydHMuWFlDaGFydFNjcm9sbGJhcj5DaGFydEluc3RhbmNlQ2FzdGVkLnNjcm9sbGJhclgpLnNlcmllcy5wdXNoKHMpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3MuTGVnZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQ2hhcnRJbnN0YW5jZS5sZWdlbmQgPSBuZXcgYW00Y2hhcnRzLkxlZ2VuZCgpO1xyXG4gICAgICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UubGVnZW5kLnBvc2l0aW9uID0gc2V0dGluZ3M/LkxlZ2VuZFBvc2l0aW9uID8/ICdyaWdodCc7XHJcbiAgICAgICAgICAgIHRoaXMuQ2hhcnRJbnN0YW5jZS5sZWdlbmQuc2Nyb2xsYWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UubGVnZW5kLml0ZW1Db250YWluZXJzLnRlbXBsYXRlLnRvb2x0aXBUZXh0ID0gXCJ7bmFtZX1cIjtcclxuICAgICAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlLmxlZ2VuZC5pdGVtQ29udGFpbmVycy50ZW1wbGF0ZS5ldmVudHMub24oXCJvdmVyXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNlcmllcyA9IDxhbTRjaGFydHMuTGluZVNlcmllcz5ldmVudC50YXJnZXQuZGF0YUl0ZW0uZGF0YUNvbnRleHQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsbCA9IHNlcmllcy5zdGFja2VkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzT3ZlcihzZXJpZXMsIGZpbGwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlLmxlZ2VuZC5pdGVtQ29udGFpbmVycy50ZW1wbGF0ZS5ldmVudHMub24oXCJvdXRcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2VyaWVzID0gPGFtNGNoYXJ0cy5MaW5lU2VyaWVzPmV2ZW50LnRhcmdldC5kYXRhSXRlbS5kYXRhQ29udGV4dDtcclxuICAgICAgICAgICAgICAgIGxldCBmaWxsID0gc2VyaWVzLnN0YWNrZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NPdXQoZmlsbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcpIHtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wbGF0ZSA9IHRoaXMuQ2hhcnRJbnN0YW5jZS5sZWdlbmQuaXRlbUNvbnRhaW5lcnMudGVtcGxhdGU7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5wYWRkaW5nVG9wID0gc2V0dGluZ3MuTGVnZW5kUGFkZGluZy50b3AgPz8gMDtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlLnBhZGRpbmdCb3R0b20gPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nLmJvdHRvbSA/PyAwO1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGUucGFkZGluZ0xlZnQgPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nLmxlZnQgPz8gMDtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlLnBhZGRpbmdSaWdodCA9IHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcucmlnaHQgPz8gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlLmN1cnNvciA9IG5ldyBhbTRjaGFydHMuWFlDdXJzb3IoKTtcclxuXHJcbiAgICAgICAgLy9Qcm92ZSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgIC8vIHRoaXMuQ2hhcnRJbnN0YW5jZS5jdXJzb3IuZXZlbnRzLm9uKFwiY3Vyc29ycG9zaXRpb25jaGFuZ2VkXCIsIChldikgPT4ge1xyXG4gICAgICAgIC8vICAgICAvL3ZhciB2YWx1ZSA9IGRhdGVBeGlzLnBvc2l0aW9uVG9EYXRlKGRhdGVBeGlzLnRvQXhpc1Bvc2l0aW9uKGV2LnRhcmdldC54UG9zaXRpb24pKTtcclxuICAgICAgICAvLyAgICAgdmFyIGR0ID0gZGF0ZUF4aXMuc2VyaWVzLnZhbHVlcy5maW5kKHQgPT4gdC5kYXRhSXRlbS52YWx1ZXMuZGF0ZVgpO1xyXG4gICAgICAgIC8vICAgICBpZiAoZHQgJiYgZHQuZGF0YUl0ZW0pIHtcclxuICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKGR0LmRhdGFJdGVtLnZhbHVlcyk7XHJcbiAgICAgICAgLy8gICAgICAgICAvLyB0aGlzLkNoYXJ0SW5zdGFuY2UudG9vbHRpcFRleHQgPSBkdDtcclxuICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgIC8vICAgICBlbHNlIHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuQ2hhcnRJbnN0YW5jZS50b29sdGlwVGV4dCA9IFwiXCI7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cclxuICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UuY3Vyc29yLnhBeGlzID0gZGF0ZUF4aXM7XHJcbiAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlLmN1cnNvci55QXhpcyA9IHlBeGlzO1xyXG4gICAgICAgIGlmIChzaW5nbGVEYXRhU2V0KVxyXG4gICAgICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UuY3Vyc29yLm1heFRvb2x0aXBEaXN0YW5jZSA9IC0xO1xyXG5cclxuICAgICAgICAvL1RPRE86IENlcmNhcmUgZGkgY2FwaXJlIHBlcmNow6kgw6ggZmlnbGlvIGRpIHB1dHRhbmEuLi4uLi5cclxuICAgICAgICBkYXRlQXhpcy5ldmVudHMub24oXCJzdGFydGNoYW5nZWRcIiwgdCA9PiB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkKHQsIHNldHRpbmdzKSk7XHJcbiAgICAgICAgZGF0ZUF4aXMuZXZlbnRzLm9uKFwiZW5kY2hhbmdlZFwiLCB0ID0+IHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWQodCwgc2V0dGluZ3MpKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIHJlZnJlc2hEYXRhKGRhdGE6IExpbmVDaGFydERhdGEgfCBhbnkpIHtcclxuICAgICAgICAvL1RPRE86SU1QTFxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIGVtaXRTZWxlY3Rpb25DaGFuZ2VkKGV2LCBzZXR0aW5ncykge1xyXG4gICAgICAgIGlmICgoPGFueT5zZXR0aW5ncykuT25TZWxlY3Rpb25DaGFuZ2VkQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvdHRsYShcInNlbGNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXhpcyA9IDxhbTRjaGFydHMuRGF0ZUF4aXM+ZXYudGFyZ2V0XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZShheGlzLm1pblpvb21lZCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoYXhpcy5tYXhab29tZWQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGluaXRpYWwgPSBheGlzLm1pbiA9PSBheGlzLm1pblpvb21lZCAmJiBheGlzLm1heCA9PSBheGlzLm1heFpvb21lZDtcclxuICAgICAgICAgICAgICAgICg8YW55PnNldHRpbmdzKS5PblNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayh7IGZyb206IHN0YXJ0LCB0bzogZW5kLCBpbml0aWFsOiBpbml0aWFsIH0pO1xyXG4gICAgICAgICAgICB9LCAxNTApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIHByb2Nlc3NPdmVyKGhvdmVyZWRTZXJpZXM6IGFtNGNoYXJ0cy5MaW5lU2VyaWVzLCBmaWxsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaG92ZXJlZFNlcmllcy50b0Zyb250KCk7XHJcblxyXG4gICAgICAgIGhvdmVyZWRTZXJpZXMuc2VnbWVudHMuZWFjaCgoc2VnbWVudCkgPT4ge1xyXG4gICAgICAgICAgICBzZWdtZW50LnNldFN0YXRlKFwiaG92ZXJcIik7XHJcbiAgICAgICAgICAgIGlmICghZmlsbClcclxuICAgICAgICAgICAgICAgIHNlZ21lbnQuZmlsbFNwcml0ZS5maWxsT3BhY2l0eSA9IHRoaXMuT3BhY2l0eU9uU2VsZWN0ZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFmaWxsKVxyXG4gICAgICAgICAgICBob3ZlcmVkU2VyaWVzLmxlZ2VuZERhdGFJdGVtLm1hcmtlci5jaGlsZHJlbi5nZXRJbmRleCgxKS5maWxsT3BhY2l0eSA9IHRoaXMuT3BhY2l0eU9uU2VsZWN0ZWQ7XHJcblxyXG4gICAgICAgIHRoaXMuQ2hhcnRJbnN0YW5jZS5zZXJpZXMuZWFjaCgoc2VyaWVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZXJpZXMgIT0gaG92ZXJlZFNlcmllcylcclxuICAgICAgICAgICAgICAgICg8YW00Y2hhcnRzLkxpbmVTZXJpZXM+c2VyaWVzKS5zZWdtZW50cy5lYWNoKChzZWdtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5zZXRTdGF0ZShcImRpbW1lZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQuZmlsbFNwcml0ZS5maWxsT3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBwcm9jZXNzT3V0KGZpbGw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2Uuc2VyaWVzLmVhY2goKHNlcmllcykgPT4ge1xyXG4gICAgICAgICAgICAoPGFtNGNoYXJ0cy5MaW5lU2VyaWVzPnNlcmllcykuc2VnbWVudHMuZWFjaCgoc2VnbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2VnbWVudC5zZXRTdGF0ZShcImRlZmF1bHRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5maWxsU3ByaXRlLmZpbGxPcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICghZmlsbClcclxuICAgICAgICAgICAgICAgIHNlcmllcy5sZWdlbmREYXRhSXRlbS5tYXJrZXIuY2hpbGRyZW4uZ2V0SW5kZXgoMSkuZmlsbE9wYWNpdHkgPSAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vKioqKioqKioqKioqKioqKioqKiogRnVuemlvbmUgZGkgdGhyb3R0bGluZyBwZXIgbm9uIHNwYW1tYXJlIHJpY2hpZXN0ZSBpbiBjYXNvIGRpIGFuaW1hemlvbmkgYXR0aXZhdGVcclxuICAgIC8vVE9ETzogc3Bvc3RhcmxhIGluIHVuIG1ldG9kbyBkaSB1dGlsaXTDoCAoZXNmYWVuemEvZXh0ZW5zaW9ucylcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIGV4ZWN1dGlvblRpbWVyczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSB0aHJvdHRsYShpZDogc3RyaW5nLCBmdW5jOiBGdW5jdGlvbiwgdGhyb3R0bGVUaW1lOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICAvL1NlIGhvIGxhIGZ1bnppb25lIGNoZSB2dW9sZSBlc2VndWlyZSByaXB1bGlzY28gcXVlbCB0aW1lb3V0XHJcbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSlcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSk7XHJcblxyXG4gICAgICAgIC8vUmljcmVvIGlsIHRpbWVvdXQgcGVyIGVzZWd1aXJlIHF1ZWxsYSBmdW56aW9uZSBkb3BvIHRocm90dGxlVGltZSBtaWxsaXNlY29uZGlcclxuICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBzZXRUaW1lb3V0KCgpID0+IHsgZnVuYygpOyB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBudWxsOyB9LCB0aHJvdHRsZVRpbWUpO1xyXG4gICAgfVxyXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqXHJcbn0iXX0=
@@ -256,15 +256,17 @@ class LineSerie {
256
256
  * @param {string} name Nome della serie
257
257
  * @param {DateValue[]} values Valori della serie
258
258
  * @param {BaseInterval} interval Intervallo della serie. Viene utilizzato per gestire Gap e date in Istante Finale
259
- * @param {string} color Colore della serie, verrà usato sia per la lineaa base che eventualmente per il riempimento (in caso si utilizzi l'Input **Fill** nel grafico)
259
+ * @param {string} color Colore della serie, verrà usato sia per la linea base che eventualmente per il riempimento (in caso si utilizzi l'Input **Fill** nel grafico)
260
260
  * @param {string} uom Unità di misura da presentare nell'asse delle Y
261
+ * @param {boolean} fill Override della proprietà **Fill** del grafico, specifico per ogni serie
261
262
  */
262
- constructor(name, values, interval, color, uom) {
263
+ constructor(name, values, interval, color, uom, fill) {
263
264
  this.name = name;
264
265
  this.values = values;
265
266
  this.interval = interval;
266
267
  this.color = color;
267
268
  this.uom = uom;
269
+ this.fill = fill;
268
270
  }
269
271
  }
270
272
 
@@ -449,7 +451,6 @@ class ChartThemes {
449
451
  * 4) Creazione grafico 2
450
452
  *
451
453
  */
452
- //@Injectable()
453
454
  class ChartLoader {
454
455
  /**
455
456
  * @ignore
@@ -961,7 +962,7 @@ class LineChartService {
961
962
  * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un LineChart
962
963
  */
963
964
  graphicate(data, settings) {
964
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
965
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
965
966
  let dataConverted = this.Adapter ? this.Adapter.adaptDataForLineChart(data) : data;
966
967
  let threshold = (_a = settings.DataGroupingThreshold) !== null && _a !== void 0 ? _a : 3000;
967
968
  let singleDataSet = (_b = settings.MergeDatasets) !== null && _b !== void 0 ? _b : false;
@@ -972,7 +973,6 @@ class LineChartService {
972
973
  let interval = seriesWithInterval ? dataConverted.series.find(t => t.interval).interval : null;
973
974
  let gapsAllowed = (settings === null || settings === void 0 ? void 0 : settings.AllowGaps) == null ? seriesWithInterval : settings === null || settings === void 0 ? void 0 : settings.AllowGaps;
974
975
  let finalInstant = (_c = settings === null || settings === void 0 ? void 0 : settings.FinalInstants) !== null && _c !== void 0 ? _c : true;
975
- let fill = (_d = settings === null || settings === void 0 ? void 0 : settings.Fill) !== null && _d !== void 0 ? _d : false;
976
976
  //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...
977
977
  am4core.options.autoDispose = true;
978
978
  this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);
@@ -999,11 +999,11 @@ class LineChartService {
999
999
  dateAxis.renderer.ticks.template.length = 10;
1000
1000
  dateAxis.renderer.ticks.template.location = 0;
1001
1001
  }
1002
- dateAxis.renderer.minGridDistance = (_e = settings === null || settings === void 0 ? void 0 : settings.MinGridDistance) !== null && _e !== void 0 ? _e : 50;
1002
+ dateAxis.renderer.minGridDistance = (_d = settings === null || settings === void 0 ? void 0 : settings.MinGridDistance) !== null && _d !== void 0 ? _d : 50;
1003
1003
  dateAxis.renderer.grid.template.location = 0;
1004
1004
  dateAxis.minZoomCount = 5;
1005
1005
  dateAxis.groupData = dataShouldBeGrouped;
1006
- dateAxis.groupCount = (_f = settings.DataGroupBucketSize) !== null && _f !== void 0 ? _f : this.DataGroupBucketSize;
1006
+ dateAxis.groupCount = (_e = settings.DataGroupBucketSize) !== null && _e !== void 0 ? _e : this.DataGroupBucketSize;
1007
1007
  //Se ho almeno una serie ad intervallo e i settings non mi impediscono esplicitamente di usare i gaps, visualizzo i dati col gap
1008
1008
  if (gapsAllowed) {
1009
1009
  if (!seriesWithInterval) {
@@ -1047,7 +1047,7 @@ class LineChartService {
1047
1047
  }
1048
1048
  //-- Fine generazione
1049
1049
  dataConverted.series.forEach((s, index) => {
1050
- var _a, _b;
1050
+ var _a, _b, _c;
1051
1051
  if (s.values[0] && !(s.values[0].d instanceof Date)) {
1052
1052
  for (let v = 0; v < s.values.length; v++)
1053
1053
  s.values[v].d = new Date(s.values[v].d);
@@ -1064,12 +1064,13 @@ class LineChartService {
1064
1064
  }
1065
1065
  if (!correctOrder)
1066
1066
  s.values.sort((d1, d2) => d1.d.getTime() - d2.d.getTime());
1067
+ let fill = s.fill != null && s.fill != undefined ? s.fill : ((_a = settings === null || settings === void 0 ? void 0 : settings.Fill) !== null && _a !== void 0 ? _a : false);
1067
1068
  let series = (settings === null || settings === void 0 ? void 0 : settings.Step) ? new am4charts.StepLineSeries() : new am4charts.LineSeries();
1068
1069
  series.dataFields.valueY = "v" + (singleDataSet ? index : "");
1069
1070
  series.dataFields.dateX = "d";
1070
1071
  series.dataFields.measureUnit = s.uom;
1071
1072
  series.name = s.name;
1072
- series.strokeWidth = (_a = settings === null || settings === void 0 ? void 0 : settings.StrokeSize) !== null && _a !== void 0 ? _a : 1;
1073
+ series.strokeWidth = (_b = settings === null || settings === void 0 ? void 0 : settings.StrokeSize) !== null && _b !== void 0 ? _b : 1;
1073
1074
  series.connect = !gapsAllowed;
1074
1075
  series.minBulletDistance = 10;
1075
1076
  series.tooltipText = singleDataSet ? "" : "{name}: [bold]{valueY}[/]";
@@ -1120,7 +1121,7 @@ class LineChartService {
1120
1121
  series.data = s.values;
1121
1122
  let segment = series.segments.template;
1122
1123
  let hoverState = segment.states.create("hover");
1123
- hoverState.properties.strokeWidth = ((_b = settings === null || settings === void 0 ? void 0 : settings.StrokeSize) !== null && _b !== void 0 ? _b : 1) + 1;
1124
+ hoverState.properties.strokeWidth = ((_c = settings === null || settings === void 0 ? void 0 : settings.StrokeSize) !== null && _c !== void 0 ? _c : 1) + 1;
1124
1125
  let dimmed = segment.states.create("dimmed");
1125
1126
  dimmed.properties.stroke = am4core.color("#dadada");
1126
1127
  //Se la serie ha un colore, uso quello, altrimenti pesco dai colori di default andando in ordine
@@ -1141,17 +1142,25 @@ class LineChartService {
1141
1142
  });
1142
1143
  if (settings.Legend) {
1143
1144
  this.ChartInstance.legend = new am4charts.Legend();
1144
- this.ChartInstance.legend.position = (_g = settings === null || settings === void 0 ? void 0 : settings.LegendPosition) !== null && _g !== void 0 ? _g : 'right';
1145
+ this.ChartInstance.legend.position = (_f = settings === null || settings === void 0 ? void 0 : settings.LegendPosition) !== null && _f !== void 0 ? _f : 'right';
1145
1146
  this.ChartInstance.legend.scrollable = true;
1146
1147
  this.ChartInstance.legend.itemContainers.template.tooltipText = "{name}";
1147
- this.ChartInstance.legend.itemContainers.template.events.on("over", (event) => { this.processOver(event.target.dataItem.dataContext, fill); });
1148
- this.ChartInstance.legend.itemContainers.template.events.on("out", (event) => { this.processOut(fill); });
1148
+ this.ChartInstance.legend.itemContainers.template.events.on("over", (event) => {
1149
+ let series = event.target.dataItem.dataContext;
1150
+ let fill = series.stacked;
1151
+ this.processOver(series, fill);
1152
+ });
1153
+ this.ChartInstance.legend.itemContainers.template.events.on("out", (event) => {
1154
+ let series = event.target.dataItem.dataContext;
1155
+ let fill = series.stacked;
1156
+ this.processOut(fill);
1157
+ });
1149
1158
  if (settings.LegendPadding) {
1150
1159
  let template = this.ChartInstance.legend.itemContainers.template;
1151
- template.paddingTop = (_h = settings.LegendPadding.top) !== null && _h !== void 0 ? _h : 0;
1152
- template.paddingBottom = (_j = settings.LegendPadding.bottom) !== null && _j !== void 0 ? _j : 0;
1153
- template.paddingLeft = (_k = settings.LegendPadding.left) !== null && _k !== void 0 ? _k : 0;
1154
- template.paddingRight = (_l = settings.LegendPadding.right) !== null && _l !== void 0 ? _l : 0;
1160
+ template.paddingTop = (_g = settings.LegendPadding.top) !== null && _g !== void 0 ? _g : 0;
1161
+ template.paddingBottom = (_h = settings.LegendPadding.bottom) !== null && _h !== void 0 ? _h : 0;
1162
+ template.paddingLeft = (_j = settings.LegendPadding.left) !== null && _j !== void 0 ? _j : 0;
1163
+ template.paddingRight = (_k = settings.LegendPadding.right) !== null && _k !== void 0 ? _k : 0;
1155
1164
  }
1156
1165
  }
1157
1166
  this.ChartInstance.cursor = new am4charts.XYCursor();
@@ -2566,6 +2575,7 @@ class EsChartsModule {
2566
2575
  { provide: ESC_THEME, useValue: (config === null || config === void 0 ? void 0 : config.theme) || 'spiritedaway' },
2567
2576
  { provide: ESC_LOGS, useValue: (config === null || config === void 0 ? void 0 : config.debugMode) == null ? false : config === null || config === void 0 ? void 0 : config.debugMode },
2568
2577
  { provide: BaseAdapter, useClass: (config === null || config === void 0 ? void 0 : config.adapter) || BaseAdapter },
2578
+ // Singleton cattiva by Ema. Verificare strade migliori
2569
2579
  { provide: ChartLoader, useValue: new ChartLoader((config === null || config === void 0 ? void 0 : config.debugMode) == null ? false : config === null || config === void 0 ? void 0 : config.debugMode) }
2570
2580
  ]
2571
2581
  };