ngx-histaff-alpha 1.9.5 → 1.9.7
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/esm2022/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.mjs +57 -25
- package/fesm2022/ngx-histaff-alpha.mjs +57 -25
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.d.ts +24 -6
- package/package.json +1 -1
package/esm2022/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.mjs
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { Component, Input, ViewChild } from '@angular/core';
|
|
2
2
|
import * as d3 from 'd3';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
+
export var EnumICoreStatisticWidgetDataType;
|
|
5
|
+
(function (EnumICoreStatisticWidgetDataType) {
|
|
6
|
+
EnumICoreStatisticWidgetDataType["INTEGER"] = "INTEGER";
|
|
7
|
+
EnumICoreStatisticWidgetDataType["DECIMAL"] = "DECIMAL";
|
|
8
|
+
EnumICoreStatisticWidgetDataType["PERCENTAGE"] = "PERCENTAGE";
|
|
9
|
+
})(EnumICoreStatisticWidgetDataType || (EnumICoreStatisticWidgetDataType = {}));
|
|
4
10
|
export class CoreStatisticWidgetComponent {
|
|
5
11
|
constructor() {
|
|
12
|
+
this.dataType = EnumICoreStatisticWidgetDataType.INTEGER;
|
|
13
|
+
this.value = 96;
|
|
14
|
+
this.comparisonValue = 0.54;
|
|
15
|
+
this.comparisonText = "vs. previous month";
|
|
6
16
|
this.margin = { top: 30, right: 30, bottom: 30, left: 30 };
|
|
7
17
|
this.padding = { top: 30, right: 30, bottom: 30, left: 30 };
|
|
8
18
|
this.outerWidth = 320;
|
|
@@ -11,11 +21,7 @@ export class CoreStatisticWidgetComponent {
|
|
|
11
21
|
this.titleFillColor = d3.color("black");
|
|
12
22
|
this.divisorLineStrokeColor = d3.color("gray");
|
|
13
23
|
this.divisorLineStrokeWidth = 3;
|
|
14
|
-
this.value = 96;
|
|
15
|
-
this.isPercentage = false;
|
|
16
24
|
this.valueFillColor = d3.color("black");
|
|
17
|
-
this.comparisonValue = 0.54;
|
|
18
|
-
this.comparisonText = "vs. previous month";
|
|
19
25
|
this.comparisonValueFillColor = d3.color("black");
|
|
20
26
|
this.comparisonTextFillColor = d3.color("black");
|
|
21
27
|
this.showAxes = false;
|
|
@@ -48,17 +54,19 @@ export class CoreStatisticWidgetComponent {
|
|
|
48
54
|
generateRandomInteger() {
|
|
49
55
|
return Math.floor(Math.random() * (35 - (-5) + 1)) + (-5);
|
|
50
56
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
+
/*
|
|
58
|
+
updateDataset(): any[] {
|
|
59
|
+
const newDataset: any[] = [];
|
|
60
|
+
for (let i = 1; i <= 12; i++) {
|
|
61
|
+
newDataset.push({ x: i, y: this.generateRandomInteger() });
|
|
62
|
+
}
|
|
63
|
+
return newDataset;
|
|
57
64
|
}
|
|
65
|
+
*/
|
|
58
66
|
// Function to update graph with new dataset
|
|
59
67
|
updateGraph() {
|
|
60
68
|
// Generate new dataset
|
|
61
|
-
const newDataset = this.
|
|
69
|
+
const newDataset = this.dataset;
|
|
62
70
|
// Find the lowest and highest points
|
|
63
71
|
const minPoint = newDataset.reduce((min, current) => current.y < min.y ? current : min);
|
|
64
72
|
const maxPoint = newDataset.reduce((max, current) => current.y > max.y ? current : max);
|
|
@@ -156,7 +164,7 @@ export class CoreStatisticWidgetComponent {
|
|
|
156
164
|
.attr("font-size", this.titleRectHeight)
|
|
157
165
|
.attr("text-anchor", "middle")
|
|
158
166
|
.attr("alignment-baseline", "middle")
|
|
159
|
-
.text(
|
|
167
|
+
.text(this.metric);
|
|
160
168
|
this.greenGroup.append("line")
|
|
161
169
|
.attr("x1", this.divisorLineMargin.left)
|
|
162
170
|
.attr("y1", this.graphHeight * 2 / 3)
|
|
@@ -182,7 +190,21 @@ export class CoreStatisticWidgetComponent {
|
|
|
182
190
|
.attr("font-size", this.valueRectHeight + "px")
|
|
183
191
|
.attr("text-anchor", "middle")
|
|
184
192
|
.attr("alignment-baseline", "middle");
|
|
185
|
-
|
|
193
|
+
switch (this.dataType) {
|
|
194
|
+
case EnumICoreStatisticWidgetDataType.INTEGER:
|
|
195
|
+
this.valueText.text(Math.round(this.value).toString());
|
|
196
|
+
break;
|
|
197
|
+
case EnumICoreStatisticWidgetDataType.DECIMAL:
|
|
198
|
+
this.valueText.text(this.value.toString());
|
|
199
|
+
break;
|
|
200
|
+
case EnumICoreStatisticWidgetDataType.PERCENTAGE:
|
|
201
|
+
this.valueText.text(Math.round(this.value * 10000) / 100 + "%");
|
|
202
|
+
break;
|
|
203
|
+
default:
|
|
204
|
+
this.valueText.text(this.value.toString());
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
if (this.dataType === EnumICoreStatisticWidgetDataType.PERCENTAGE) {
|
|
186
208
|
this.valueText.text(Math.round(this.value * 10000) / 100 + "%");
|
|
187
209
|
}
|
|
188
210
|
else {
|
|
@@ -244,7 +266,7 @@ export class CoreStatisticWidgetComponent {
|
|
|
244
266
|
.attr("alignment-baseline", "middle");
|
|
245
267
|
this.comparisonTextText.text(this.comparisonText);
|
|
246
268
|
/*===============================*/
|
|
247
|
-
const initialDataset = this.
|
|
269
|
+
const initialDataset = this.dataset;
|
|
248
270
|
const minPoint = initialDataset.reduce((min, current) => current.y < min.y ? current : min);
|
|
249
271
|
const maxPoint = initialDataset.reduce((max, current) => current.y > max.y ? current : max);
|
|
250
272
|
const xScale = d3.scaleLinear()
|
|
@@ -296,12 +318,30 @@ export class CoreStatisticWidgetComponent {
|
|
|
296
318
|
}
|
|
297
319
|
}
|
|
298
320
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreStatisticWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
299
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreStatisticWidgetComponent, isStandalone: true, selector: "core-statistic-widget", inputs: {
|
|
321
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreStatisticWidgetComponent, isStandalone: true, selector: "core-statistic-widget", inputs: { metric: "metric", dataType: "dataType", dataset: "dataset", value: "value", comparisonValue: "comparisonValue", comparisonText: "comparisonText", margin: "margin", padding: "padding", outerWidth: "outerWidth", outerHeight: "outerHeight", divisorLineMargin: "divisorLineMargin", titleFillColor: "titleFillColor", divisorLineStrokeColor: "divisorLineStrokeColor", divisorLineStrokeWidth: "divisorLineStrokeWidth", valueFillColor: "valueFillColor", comparisonValueFillColor: "comparisonValueFillColor", comparisonTextFillColor: "comparisonTextFillColor", showAxes: "showAxes" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<p>core-statistic-widget works!</p>\r\n", styles: [""] }); }
|
|
300
322
|
}
|
|
301
323
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreStatisticWidgetComponent, decorators: [{
|
|
302
324
|
type: Component,
|
|
303
325
|
args: [{ selector: 'core-statistic-widget', standalone: true, imports: [], template: "<p>core-statistic-widget works!</p>\r\n" }]
|
|
304
|
-
}], propDecorators: {
|
|
326
|
+
}], propDecorators: { metric: [{
|
|
327
|
+
type: Input,
|
|
328
|
+
args: [{ required: true }]
|
|
329
|
+
}], dataType: [{
|
|
330
|
+
type: Input,
|
|
331
|
+
args: [{ required: true }]
|
|
332
|
+
}], dataset: [{
|
|
333
|
+
type: Input,
|
|
334
|
+
args: [{ required: true }]
|
|
335
|
+
}], value: [{
|
|
336
|
+
type: Input,
|
|
337
|
+
args: [{ required: true }]
|
|
338
|
+
}], comparisonValue: [{
|
|
339
|
+
type: Input,
|
|
340
|
+
args: [{ required: true }]
|
|
341
|
+
}], comparisonText: [{
|
|
342
|
+
type: Input,
|
|
343
|
+
args: [{ required: true }]
|
|
344
|
+
}], margin: [{
|
|
305
345
|
type: Input
|
|
306
346
|
}], padding: [{
|
|
307
347
|
type: Input
|
|
@@ -317,16 +357,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
317
357
|
type: Input
|
|
318
358
|
}], divisorLineStrokeWidth: [{
|
|
319
359
|
type: Input
|
|
320
|
-
}], value: [{
|
|
321
|
-
type: Input
|
|
322
|
-
}], isPercentage: [{
|
|
323
|
-
type: Input
|
|
324
360
|
}], valueFillColor: [{
|
|
325
361
|
type: Input
|
|
326
|
-
}], comparisonValue: [{
|
|
327
|
-
type: Input
|
|
328
|
-
}], comparisonText: [{
|
|
329
|
-
type: Input
|
|
330
362
|
}], comparisonValueFillColor: [{
|
|
331
363
|
type: Input
|
|
332
364
|
}], comparisonTextFillColor: [{
|
|
@@ -337,4 +369,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
337
369
|
type: ViewChild,
|
|
338
370
|
args: ['container']
|
|
339
371
|
}] } });
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7O0FBa0J6QixNQUFNLE9BQU8sNEJBQTRCO0lBVHpDO1FBV1csV0FBTSxHQUF3QixFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMzRSxZQUFPLEdBQXdCLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQzVFLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFDekIsZ0JBQVcsR0FBVyxHQUFHLENBQUM7UUFDMUIsc0JBQWlCLEdBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2xGLG1CQUFjLEdBQVEs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QU1RLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHcmFwaE1hcmdpblBhZGRpbmcge1xyXG4gIHRvcDogbnVtYmVyO1xyXG4gIHJpZ2h0OiBudW1iZXI7XHJcbiAgYm90dG9tOiBudW1iZXI7XHJcbiAgbGVmdDogbnVtYmVyO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtc3RhdGlzdGljLXdpZGdldCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcblxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtc3RhdGlzdGljLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NvcmUtc3RhdGlzdGljLXdpZGdldC5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVN0YXRpc3RpY1dpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIG1hcmdpbjogSUdyYXBoTWFyZ2luUGFkZGluZyA9IHsgdG9wOiAzMCwgcmlnaHQ6IDMwLCBib3R0b206IDMwLCBsZWZ0OiAzMCB9O1xyXG4gIEBJbnB1dCgpIHBhZGRpbmc6IElHcmFwaE1hcmdpblBhZGRpbmcgPSB7IHRvcDogMzAsIHJpZ2h0OiAzMCwgYm90dG9tOiAzMCwgbGVmdDogMzAgfTtcclxuICBASW5wdXQoKSBvdXRlcldpZHRoOiBudW1iZXIgPSAzMjA7XHJcbiAgQElucHV0KCkgb3V0ZXJIZWlnaHQ6IG51bWJlciA9IDMyMDtcclxuICBASW5wdXQoKSBkaXZpc29yTGluZU1hcmdpbjogSUdyYXBoTWFyZ2luUGFkZGluZyA9IHsgdG9wOiA0LCByaWdodDogOCwgYm90dG9tOiA4LCBsZWZ0OiA4IH07XHJcbiAgQElucHV0KCkgdGl0bGVGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcbiAgQElucHV0KCkgZGl2aXNvckxpbmVTdHJva2VDb2xvcjogYW55ID0gZDMuY29sb3IoXCJncmF5XCIpO1xyXG4gIEBJbnB1dCgpIGRpdmlzb3JMaW5lU3Ryb2tlV2lkdGg6IG51bWJlciA9IDM7XHJcbiAgQElucHV0KCkgdmFsdWU6IG51bWJlciA9IDk2O1xyXG4gIEBJbnB1dCgpIGlzUGVyY2VudGFnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHZhbHVlRmlsbENvbG9yOiBhbnkgPSBkMy5jb2xvcihcImJsYWNrXCIpO1xyXG4gIEBJbnB1dCgpIGNvbXBhcmlzb25WYWx1ZTogbnVtYmVyID0gMC41NDtcclxuICBASW5wdXQoKSBjb21wYXJpc29uVGV4dDogc3RyaW5nID0gXCJ2cy4gcHJldmlvdXMgbW9udGhcIjtcclxuICBASW5wdXQoKSBjb21wYXJpc29uVmFsdWVGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcbiAgQElucHV0KCkgY29tcGFyaXNvblRleHRGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcbiAgQElucHV0KCkgc2hvd0F4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgaW5uZXJXaWR0aCA9IHRoaXMub3V0ZXJXaWR0aCAtIHRoaXMubWFyZ2luLmxlZnQgLSB0aGlzLm1hcmdpbi5yaWdodDtcclxuICBpbm5lckhlaWdodCA9IHRoaXMub3V0ZXJIZWlnaHQgLSB0aGlzLm1hcmdpbi50b3AgLSB0aGlzLm1hcmdpbi5ib3R0b207XHJcbiAgd2lkdGggPSB0aGlzLmlubmVyV2lkdGggLSB0aGlzLnBhZGRpbmcubGVmdCAtIHRoaXMucGFkZGluZy5yaWdodDtcclxuICBoZWlnaHQgPSB0aGlzLmlubmVySGVpZ2h0IC0gdGhpcy5wYWRkaW5nLnRvcCAtIHRoaXMucGFkZGluZy5ib3R0b207XHJcblxyXG4gIGdyYXBoV2lkdGggPSB0aGlzLndpZHRoIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5yaWdodDtcclxuICBncmFwaEhlaWdodCA9IHRoaXMuaGVpZ2h0IC8gNCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tO1xyXG4gIHRpdGxlUmVjdFdpZHRoID0gdGhpcy53aWR0aCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ucmlnaHQ7XHJcbiAgdGl0bGVSZWN0SGVpZ2h0ID0gdGhpcy5ncmFwaEhlaWdodCAqIDIgLyAzIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi50b3AgKiAyO1xyXG4gIHZhbHVlUmVjdFdpZHRoID0gdGhpcy50aXRsZVJlY3RXaWR0aDtcclxuICB2YWx1ZVJlY3RIZWlnaHQgPSB0aGlzLmhlaWdodCAvIDMgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbTtcclxuICBjb21wYXJpc29uVmFsdWVSZWN0V2lkdGggPSB0aGlzLnRpdGxlUmVjdFdpZHRoO1xyXG4gIGNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQgPSAodGhpcy5oZWlnaHQgLyA0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b20pIC8gMjtcclxuICBjb21wYXJpc29uVGV4dFJlY3RXaWR0aCA9IHRoaXMudGl0bGVSZWN0V2lkdGg7XHJcbiAgY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0ID0gKHRoaXMuaGVpZ2h0IC8gNCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tKSAvIDI7XHJcblxyXG4gIHggPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlKFswLCB0aGlzLmdyYXBoV2lkdGhdKTtcclxuICB5ID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZShbdGhpcy5ncmFwaEhlaWdodCwgMF0pO1xyXG5cclxuICAvL1RvIHJlbW92ZSBvbmx5IHRoZSBudW1iZXJzIHdoaWxlIGtlZXBpbmcgdGhlIHRpY2tzIG9uIHRoZSBheGVzLCBcclxuICAvL3lvdSBjYW4gc2VsZWN0IHRoZSB0ZXh0IGVsZW1lbnRzIG9mIHRoZSB0aWNrcyBhbmQgaGlkZSB0aGVtIHVzaW5nIENTUy4gXHJcbiAgLy9IZXJlJ3MgaG93IHlvdSBjYW4gbW9kaWZ5IHRoZSBjb2RlIHRvIGFjaGlldmUgdGhhdDpcclxuXHJcbiAgeEF4aXNDYWxsID0gZDMuYXhpc0JvdHRvbSh0aGlzLngpXHJcbiAgICAudGlja1NpemVJbm5lcigxMCkgLy8gQWRqdXN0IHRoZSBsZW5ndGggb2YgdGhlIHRpY2tzIGFzIG5lZWRlZFxyXG4gICAgLnRpY2tTaXplT3V0ZXIoMCk7IC8vIEhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgeUF4aXNDYWxsID0gZDMuYXhpc0xlZnQodGhpcy55KVxyXG4gICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgIC50aWNrU2l6ZU91dGVyKDEwKTsgLy8gSGlkZSBvdXRlciB0aWNrc1xyXG5cclxuICBnZW5lcmF0ZVJhbmRvbUludGVnZXIoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoMzUgLSAoLTUpICsgMSkpICsgKC01KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZURhdGFzZXQoKTogYW55W10ge1xyXG4gICAgY29uc3QgbmV3RGF0YXNldDogYW55W10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcclxuICAgICAgbmV3RGF0YXNldC5wdXNoKHsgeDogaSwgeTogdGhpcy5nZW5lcmF0ZVJhbmRvbUludGVnZXIoKSB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXdEYXRhc2V0O1xyXG4gIH1cclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gdXBkYXRlIGdyYXBoIHdpdGggbmV3IGRhdGFzZXRcclxuICB1cGRhdGVHcmFwaCgpOiB2b2lkIHtcclxuICAgIC8vIEdlbmVyYXRlIG5ldyBkYXRhc2V0XHJcbiAgICBjb25zdCBuZXdEYXRhc2V0OiBhbnlbXSA9IHRoaXMudXBkYXRlRGF0YXNldCgpO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGxvd2VzdCBhbmQgaGlnaGVzdCBwb2ludHNcclxuICAgIGNvbnN0IG1pblBvaW50ID0gbmV3RGF0YXNldC5yZWR1Y2UoKG1pbiwgY3VycmVudCkgPT4gY3VycmVudC55IDwgbWluLnkgPyBjdXJyZW50IDogbWluKTtcclxuICAgIGNvbnN0IG1heFBvaW50ID0gbmV3RGF0YXNldC5yZWR1Y2UoKG1heCwgY3VycmVudCkgPT4gY3VycmVudC55ID4gbWF4LnkgPyBjdXJyZW50IDogbWF4KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgc2NhbGVzXHJcbiAgICBjb25zdCB4U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5kb21haW4oWzAsIGQzLm1heChuZXdEYXRhc2V0LCBkID0+IGQueCldKVxyXG4gICAgICAucmFuZ2UoWzAsIHRoaXMuZ3JhcGhXaWR0aF0pO1xyXG5cclxuICAgIGNvbnN0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgICAgLmRvbWFpbihbbWluUG9pbnQueSwgbWF4UG9pbnQueV0pXHJcbiAgICAgIC5yYW5nZShbdGhpcy5ncmFwaEhlaWdodCwgMF0pO1xyXG5cclxuXHJcbiAgICBjb25zdCB4QXhpc0NhbGwgPSBkMy5heGlzQm90dG9tKHhTY2FsZSlcclxuICAgICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgICAgLnRpY2tTaXplT3V0ZXIoMCk7IC8vIEhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgICBjb25zdCB5QXhpc0NhbGwgPSBkMy5heGlzTGVmdCh5U2NhbGUpXHJcbiAgICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAgIC50aWNrU2l6ZU91dGVyKDEwKTsgLy8gRG8gbm90IGhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgICAvLyBVcGRhdGUgYXhlc1xyXG4gICAgLy94QXhpcy5jYWxsKHhBeGlzQ2FsbCk7XHJcbiAgICAvL3lBeGlzLmNhbGwoeUF4aXNDYWxsKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgY29ubmVjdGluZyBsaW5lXHJcbiAgICB0aGlzLmNvbm5lY3RpbmdMaW5lID0gZDMubGluZSgpXHJcbiAgICAgIC54KGQgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC55KGQgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgIC5kZWZpbmVkKChkLCBpKSA9PiBpID49IDAgJiYgaSA8IG5ld0RhdGFzZXQubGVuZ3RoKTtcclxuXHJcbiAgICB0aGlzLmdyYXlHcm91cC5zZWxlY3QoXCJwYXRoXCIpXHJcbiAgICAgIC5kYXR1bShuZXdEYXRhc2V0KVxyXG4gICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgIC5hdHRyKFwiZFwiLCB0aGlzLmNvbm5lY3RpbmdMaW5lKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgY2lyY2xlc1xyXG4gICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuZ3JheUdyb3VwLnNlbGVjdEFsbChcImNpcmNsZVwiKVxyXG4gICAgICAuZGF0YShuZXdEYXRhc2V0KTtcclxuXHJcbiAgICBjaXJjbGVzLmVudGVyKClcclxuICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAubWVyZ2UoY2lyY2xlcylcclxuICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAuYXR0cihcImN4XCIsIGQgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC5hdHRyKFwiY3lcIiwgZCA9PiB5U2NhbGUoZC55KSlcclxuICAgICAgLmF0dHIoXCJyXCIsIDUpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBkID0+IHtcclxuICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBcIiNGRjhDMDBcIjsgLy8gU2V0IGxvd2VzdCBwb2ludCB0byAjRkY4QzAwXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gXCIjMzE1ODk3XCI7IC8vIFNldCBoaWdoZXN0IHBvaW50IHRvICMzMTU4OTdcclxuICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE1ha2UgdGhlIG90aGVyIHBvaW50cyB0cmFuc3BhcmVudFxyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkID09PSBtaW5Qb2ludCkgcmV0dXJuIGQzLmNvbG9yKFwiI0ZGOEMwMFwiKS5kYXJrZXIoMC4yKTsgLy8gRGFya2VuICNGRjhDMDAgY29sb3JcclxuICAgICAgICBpZiAoZCA9PT0gbWF4UG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiMzMTU4OTdcIikuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjMzE1ODk3IGNvbG9yXHJcbiAgICAgICAgcmV0dXJuIFwibm9uZVwiOyAvLyBObyBzdHJva2UgZm9yIG90aGVyIHBvaW50c1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKTsgLy8gU2V0IHN0cm9rZSB3aWR0aFxyXG4gIH1cclxuXHJcbiAgc3ZnOiBhbnk7XHJcbiAgaW5uZXJHcm91cDogYW55O1xyXG4gIGdyZWVuR3JvdXA6IGFueTtcclxuICB0aXRsZUdyb3VwOiBhbnk7XHJcbiAgdmFsdWVHcm91cDogYW55O1xyXG4gIHZhbHVlVGV4dDogYW55O1xyXG4gIGdyYXlHcm91cDogYW55O1xyXG4gIGNvbXBhcmlzb25WYWx1ZUdyb3VwOiBhbnk7XHJcbiAgY29tcGFyaXNvblRleHRHcm91cDogYW55O1xyXG4gIGNvbXBhcmlzb25WYWx1ZVRleHQ6IGFueTtcclxuICBjb21wYXJpc29uVGV4dFRleHQ6IGFueTtcclxuICBjb25uZWN0aW5nTGluZTogYW55O1xyXG5cclxuICBpbnRlcnZhbElkOiBhbnk7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5zdmcgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudClcclxuICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLm91dGVyV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5vdXRlckhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLnN2Zy5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLm91dGVyV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5vdXRlckhlaWdodClcclxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKTtcclxuXHJcbiAgICAgIHRoaXMuaW5uZXJHcm91cCA9IHRoaXMuc3ZnLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMubWFyZ2luLmxlZnQgKyBcIixcIiArIHRoaXMubWFyZ2luLnRvcCArIFwiKVwiKTtcclxuXHJcbiAgICAgIHRoaXMuaW5uZXJHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImJsdWUtcmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmlubmVyV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5pbm5lckhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLmdyZWVuR3JvdXAgPSB0aGlzLmlubmVyR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5wYWRkaW5nLmxlZnQgKyBcIixcIiArIHRoaXMucGFkZGluZy50b3AgKyBcIilcIik7XHJcblxyXG4gICAgICB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmVlbi1yZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMud2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy50aXRsZUdyb3VwID0gdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidGl0bGUtZ3JvdXBcIilcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCArIFwiLFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi50b3AgKyBcIilcIik7XHJcblxyXG4gICAgICB0aGlzLnRpdGxlR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZS1yZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLnRpdGxlUmVjdFdpZHRoKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMudGl0bGVSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICAgIHRoaXMudGl0bGVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMudGl0bGVSZWN0V2lkdGggLyAyKVxyXG4gICAgICAgIC5hdHRyKFwieVwiLCB0aGlzLnRpdGxlUmVjdEhlaWdodCAvIDIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXRpdGxlXCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMudGl0bGVGaWxsQ29sb3IpXHJcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgdGhpcy50aXRsZVJlY3RIZWlnaHQpXHJcbiAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgICAgLnRleHQoXCJUb3RhbCBuZXcgaGlyZVwiKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJsaW5lXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ4MVwiLCB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQpXHJcbiAgICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLmdyYXBoSGVpZ2h0ICogMiAvIDMpXHJcbiAgICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLndpZHRoIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5yaWdodClcclxuICAgICAgICAuYXR0cihcInkyXCIsIHRoaXMuZ3JhcGhIZWlnaHQgKiAyIC8gMylcclxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCB0aGlzLmRpdmlzb3JMaW5lU3Ryb2tlQ29sb3IpXHJcbiAgICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgdGhpcy5kaXZpc29yTGluZVN0cm9rZVdpZHRoKTtcclxuXHJcbiAgICAgIGNvbnN0IHZhbHVlR3JvdXBUcmFuc2xhdGVZID0gdGhpcy5oZWlnaHQgLyAyIC8gMyArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tO1xyXG4gICAgICB0aGlzLnZhbHVlR3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ2YWx1ZS1ncm91cFwiKVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsXCIgKyB2YWx1ZUdyb3VwVHJhbnNsYXRlWSArIFwiKVwiKTtcclxuXHJcbiAgICAgIHRoaXMudmFsdWVHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZhbHVlLXJlY3RcIilcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMudmFsdWVSZWN0V2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy52YWx1ZVJlY3RIZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy52YWx1ZVRleHQgPSB0aGlzLnZhbHVlR3JvdXAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnZhbHVlUmVjdFdpZHRoIC8gMilcclxuICAgICAgICAuYXR0cihcInlcIiwgdGhpcy52YWx1ZVJlY3RIZWlnaHQgLyAyKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC12YWx1ZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLnZhbHVlRmlsbENvbG9yKVxyXG4gICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIHRoaXMudmFsdWVSZWN0SGVpZ2h0ICsgXCJweFwiKVxyXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcclxuICAgICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzUGVyY2VudGFnZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZCh0aGlzLnZhbHVlICogMTAwMDApIC8gMTAwICsgXCIlXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmFsdWVUZXh0LnRleHQodGhpcy52YWx1ZS50b1N0cmluZygpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5ncmF5R3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJzY2F0dGVyLXBsb3RcIilcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCArIFwiLCBcIiArIHRoaXMuaGVpZ2h0IC8gMiArIFwiKVwiKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZ3JhcGgtY29udGFpbmVyXCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIGQzLmNvbG9yKFwidHJhbnNwYXJlbnRcIikuYnJpZ2h0ZXIoMSkpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmdyYXBoV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5ncmFwaEhlaWdodCk7XHJcblxyXG5cclxuICAgICAgY29uc3QgeEF4aXMgPSB0aGlzLmdyYXlHcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInggYXhpc1wiKVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKDAsXCIgKyB0aGlzLmdyYXBoSGVpZ2h0ICsgXCIpXCIpO1xyXG5cclxuICAgICAgY29uc3QgeUF4aXMgPSB0aGlzLmdyYXlHcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInkgYXhpc1wiKTtcclxuXHJcbiAgICAgIC8veEF4aXMuY2FsbCh4QXhpc0NhbGwpO1xyXG4gICAgICAvL3lBeGlzLmNhbGwoeUF4aXNDYWxsKTtcclxuXHJcbiAgICAgIC8vIFNlbGVjdCB0ZXh0IGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aWNrcyBhbmQgaGlkZSB0aGVtXHJcbiAgICAgIHRoaXMuZ3JheUdyb3VwLnNlbGVjdEFsbChcIi50aWNrIHRleHRcIikuYXR0cihcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG5cclxuICAgICAgY29uc3QgY29tcGFyaXNvblZhbHVlR3JvdXBUcmFuc2xhdGVZID0gdGhpcy5oZWlnaHQgKiAzIC8gNCArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tO1xyXG4gICAgICB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwID0gdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiY29tcGFyaXNvbi12YWx1ZS1ncm91cFwiKVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsXCIgKyBjb21wYXJpc29uVmFsdWVHcm91cFRyYW5zbGF0ZVkgKyBcIilcIik7XHJcblxyXG4gICAgICB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmFsdWUtcmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5jb21wYXJpc29uVmFsdWVSZWN0V2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5jb21wYXJpc29uVmFsdWVSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbXBhcmlzb25WYWx1ZVRleHQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAuYXR0cihcInhcIiwgdGhpcy5jb21wYXJpc29uVmFsdWVSZWN0V2lkdGggLyAyKVxyXG4gICAgICAgIC5hdHRyKFwieVwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQgLyAyKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC12YWx1ZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZUZpbGxDb2xvcilcclxuICAgICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQgKyBcInB4XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpO1xyXG5cclxuICAgICAgY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KE1hdGgucm91bmQodGhpcy5jb21wYXJpc29uVmFsdWUgKiAxMDAwMCkgLyAxMDAgKyBcIiVcIik7XHJcblxyXG4gICAgICBjb25zdCBjb21wYXJpc29uVGV4dEdyb3VwVHJhbnNsYXRlWSA9IHRoaXMuaGVpZ2h0ICogMyAvIDQgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbSArIHRoaXMuY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0O1xyXG4gICAgICB0aGlzLmNvbXBhcmlzb25UZXh0R3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb21wYXJpc29uLXRleHQtZ3JvdXBcIilcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCArIFwiLFwiICsgY29tcGFyaXNvblRleHRHcm91cFRyYW5zbGF0ZVkgKyBcIilcIik7XHJcblxyXG4gICAgICB0aGlzLmNvbXBhcmlzb25UZXh0R3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0ZXh0LXJlY3RcIilcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0V2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RIZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy5jb21wYXJpc29uVGV4dFRleHQgPSB0aGlzLmNvbXBhcmlzb25UZXh0R3JvdXAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdFdpZHRoIC8gMilcclxuICAgICAgICAuYXR0cihcInlcIiwgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RIZWlnaHQgLyAyKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC10ZXh0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMuY29tcGFyaXNvblRleHRGaWxsQ29sb3IpXHJcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RIZWlnaHQgLyAyICsgXCJweFwiKVxyXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcclxuICAgICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKTtcclxuXHJcbiAgICAgIHRoaXMuY29tcGFyaXNvblRleHRUZXh0LnRleHQodGhpcy5jb21wYXJpc29uVGV4dCk7XHJcblxyXG4gICAgICAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xyXG5cclxuICAgICAgY29uc3QgaW5pdGlhbERhdGFzZXQ6IGFueSA9IHRoaXMudXBkYXRlRGF0YXNldCgpO1xyXG4gICAgICBjb25zdCBtaW5Qb2ludDogYW55ID0gaW5pdGlhbERhdGFzZXQucmVkdWNlKChtaW4sIGN1cnJlbnQpID0+IGN1cnJlbnQueSA8IG1pbi55ID8gY3VycmVudCA6IG1pbik7XHJcbiAgICAgIGNvbnN0IG1heFBvaW50OiBhbnkgPSBpbml0aWFsRGF0YXNldC5yZWR1Y2UoKG1heCwgY3VycmVudCkgPT4gY3VycmVudC55ID4gbWF4LnkgPyBjdXJyZW50IDogbWF4KTtcclxuXHJcbiAgICAgIGNvbnN0IHhTY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgICAgICAuZG9tYWluKFswLCBkMy5tYXgoaW5pdGlhbERhdGFzZXQsIGQgPT4gZC54KV0pXHJcbiAgICAgICAgLnJhbmdlKFswLCB0aGlzLmdyYXBoV2lkdGhdKTtcclxuXHJcbiAgICAgIGNvbnN0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgICAgICAuZG9tYWluKFttaW5Qb2ludC55LCBtYXhQb2ludC55XSlcclxuICAgICAgICAucmFuZ2UoW3RoaXMuZ3JhcGhIZWlnaHQsIDBdKTtcclxuXHJcbiAgICAgIHRoaXMuY29ubmVjdGluZ0xpbmUgPSBkMy5saW5lKClcclxuICAgICAgICAueChkID0+IHhTY2FsZShkLngpKVxyXG4gICAgICAgIC55KGQgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgICAgLmRlZmluZWQoKGQsIGkpID0+IGkgPj0gMCAmJiBpIDwgaW5pdGlhbERhdGFzZXQubGVuZ3RoKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcInBhdGhcIilcclxuICAgICAgICAuZGF0dW0oaW5pdGlhbERhdGFzZXQpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxyXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiZGFya2dyYXlcIilcclxuICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKVxyXG4gICAgICAgIC5hdHRyKFwiZFwiLCB0aGlzLmNvbm5lY3RpbmdMaW5lKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JheUdyb3VwLnNlbGVjdEFsbChcImNpcmNsZVwiKVxyXG4gICAgICAgIC5kYXRhKGluaXRpYWxEYXRhc2V0KVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiY3hcIiwgZCA9PiB4U2NhbGUoZC54KSlcclxuICAgICAgICAuYXR0cihcImN5XCIsIGQgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgICAgLmF0dHIoXCJyXCIsIDUpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIGQgPT4ge1xyXG4gICAgICAgICAgaWYgKGQgPT09IG1pblBvaW50KSByZXR1cm4gXCIjRkY4QzAwXCI7IC8vIFNldCBsb3dlc3QgcG9pbnQgdG8gI0ZGOEMwMFxyXG4gICAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gXCIjMzE1ODk3XCI7IC8vIFNldCBoaWdoZXN0IHBvaW50IHRvICMzMTU4OTdcclxuICAgICAgICAgIHJldHVybiBcImdyYXlcIjsgLy8gU2V0IHRoZSBvdGhlciBwb2ludHMgdHJhbnNwYXJlbnRcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiNGRjhDMDBcIikuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjRkY4QzAwIGNvbG9yXHJcbiAgICAgICAgICBpZiAoZCA9PT0gbWF4UG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiMzMTU4OTdcIikuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjMzE1ODk3IGNvbG9yXHJcbiAgICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE5vIHN0cm9rZSBmb3Igb3RoZXIgcG9pbnRzXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKTsgLy8gU2V0IHN0cm9rZSB3aWR0aFxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlR3JhcGgoKTtcclxuICAgIH0sIDEwMDApXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAoISF0aGlzLmludGVydmFsSWQpIHtcclxuICAgICAgdGhpcy5pbnRlcnZhbElkLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxwPmNvcmUtc3RhdGlzdGljLXdpZGdldCB3b3JrcyE8L3A+XHJcbiJdfQ==
|
|
372
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7O0FBRXpCLE1BQU0sQ0FBTixJQUFZLGdDQUlYO0FBSkQsV0FBWSxnQ0FBZ0M7SUFDMUMsdURBQW1CLENBQUE7SUFDbkIsdURBQW1CLENBQUE7SUFDbkIsNkRBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUpXLGdDQUFnQyxLQUFoQyxnQ0FBZ0MsUUFJM0M7QUFnQ0QsTUFBTSxPQUFPLDRCQUE0QjtJQVR6QztRQVk2QixhQUFRLEdBQXFDLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQztRQUV0RixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLG9CQUFlLEdBQVcsSUFBSSxDQUFDO1FBQy9CLG1CQUFjLEdBQVcsb0JBQW9CLENBQUM7UUFFaEUsV0FBTSxHQUF3QixFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMzRSxZQUFPLEdBQXdCLEVBQUUsR0FB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QUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFa0IsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5cclxuZXhwb3J0IGVudW0gRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUge1xyXG4gIElOVEVHRVIgPSAnSU5URUdFUicsXHJcbiAgREVDSU1BTCA9ICdERUNJTUFMJyxcclxuICBQRVJDRU5UQUdFID0gJ1BFUkNFTlRBR0UnLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHcmFwaE1hcmdpblBhZGRpbmcge1xyXG4gIHRvcDogbnVtYmVyO1xyXG4gIHJpZ2h0OiBudW1iZXI7XHJcbiAgYm90dG9tOiBudW1iZXI7XHJcbiAgbGVmdDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YXNldCB7XHJcbiAgeDogbnVtYmVyO1xyXG4gIHk6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVN0YXRpc3RpY1dpZGdldElucHV0cyB7XHJcbiAgbWV0cmljOiBzdHJpbmc7XHJcbiAgZGF0YVR5cGU6IEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlO1xyXG4gIGRhdGFzZXQ6IElDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YXNldFtdO1xyXG4gIHZhbHVlOiBudW1iZXI7XHJcbiAgY29tcGFyaXNvblZhbHVlOiBudW1iZXI7XHJcbiAgY29tcGFyaXNvblRleHQ6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXN0YXRpc3RpYy13aWRnZXQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG5cclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXN0YXRpc3RpYy13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jb3JlLXN0YXRpc3RpYy13aWRnZXQuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVTdGF0aXN0aWNXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBtZXRyaWMhOiBzdHJpbmc7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZGF0YVR5cGU6IEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlID0gRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuSU5URUdFUjtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBkYXRhc2V0ITogSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhc2V0W107XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgdmFsdWU6IG51bWJlciA9IDk2O1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbXBhcmlzb25WYWx1ZTogbnVtYmVyID0gMC41NDtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb21wYXJpc29uVGV4dDogc3RyaW5nID0gXCJ2cy4gcHJldmlvdXMgbW9udGhcIjtcclxuXHJcbiAgQElucHV0KCkgbWFyZ2luOiBJR3JhcGhNYXJnaW5QYWRkaW5nID0geyB0b3A6IDMwLCByaWdodDogMzAsIGJvdHRvbTogMzAsIGxlZnQ6IDMwIH07XHJcbiAgQElucHV0KCkgcGFkZGluZzogSUdyYXBoTWFyZ2luUGFkZGluZyA9IHsgdG9wOiAzMCwgcmlnaHQ6IDMwLCBib3R0b206IDMwLCBsZWZ0OiAzMCB9O1xyXG4gIEBJbnB1dCgpIG91dGVyV2lkdGg6IG51bWJlciA9IDMyMDtcclxuICBASW5wdXQoKSBvdXRlckhlaWdodDogbnVtYmVyID0gMzIwO1xyXG4gIEBJbnB1dCgpIGRpdmlzb3JMaW5lTWFyZ2luOiBJR3JhcGhNYXJnaW5QYWRkaW5nID0geyB0b3A6IDQsIHJpZ2h0OiA4LCBib3R0b206IDgsIGxlZnQ6IDggfTtcclxuICBASW5wdXQoKSB0aXRsZUZpbGxDb2xvcjogYW55ID0gZDMuY29sb3IoXCJibGFja1wiKTtcclxuICBASW5wdXQoKSBkaXZpc29yTGluZVN0cm9rZUNvbG9yOiBhbnkgPSBkMy5jb2xvcihcImdyYXlcIik7XHJcbiAgQElucHV0KCkgZGl2aXNvckxpbmVTdHJva2VXaWR0aDogbnVtYmVyID0gMztcclxuICBASW5wdXQoKSB2YWx1ZUZpbGxDb2xvcjogYW55ID0gZDMuY29sb3IoXCJibGFja1wiKTtcclxuXHJcbiAgQElucHV0KCkgY29tcGFyaXNvblZhbHVlRmlsbENvbG9yOiBhbnkgPSBkMy5jb2xvcihcImJsYWNrXCIpO1xyXG4gIEBJbnB1dCgpIGNvbXBhcmlzb25UZXh0RmlsbENvbG9yOiBhbnkgPSBkMy5jb2xvcihcImJsYWNrXCIpO1xyXG4gIEBJbnB1dCgpIHNob3dBeGVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGlubmVyV2lkdGggPSB0aGlzLm91dGVyV2lkdGggLSB0aGlzLm1hcmdpbi5sZWZ0IC0gdGhpcy5tYXJnaW4ucmlnaHQ7XHJcbiAgaW5uZXJIZWlnaHQgPSB0aGlzLm91dGVySGVpZ2h0IC0gdGhpcy5tYXJnaW4udG9wIC0gdGhpcy5tYXJnaW4uYm90dG9tO1xyXG4gIHdpZHRoID0gdGhpcy5pbm5lcldpZHRoIC0gdGhpcy5wYWRkaW5nLmxlZnQgLSB0aGlzLnBhZGRpbmcucmlnaHQ7XHJcbiAgaGVpZ2h0ID0gdGhpcy5pbm5lckhlaWdodCAtIHRoaXMucGFkZGluZy50b3AgLSB0aGlzLnBhZGRpbmcuYm90dG9tO1xyXG5cclxuICBncmFwaFdpZHRoID0gdGhpcy53aWR0aCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ucmlnaHQ7XHJcbiAgZ3JhcGhIZWlnaHQgPSB0aGlzLmhlaWdodCAvIDQgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbTtcclxuICB0aXRsZVJlY3RXaWR0aCA9IHRoaXMud2lkdGggLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLnJpZ2h0O1xyXG4gIHRpdGxlUmVjdEhlaWdodCA9IHRoaXMuZ3JhcGhIZWlnaHQgKiAyIC8gMyAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4udG9wICogMjtcclxuICB2YWx1ZVJlY3RXaWR0aCA9IHRoaXMudGl0bGVSZWN0V2lkdGg7XHJcbiAgdmFsdWVSZWN0SGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyAzIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgY29tcGFyaXNvblZhbHVlUmVjdFdpZHRoID0gdGhpcy50aXRsZVJlY3RXaWR0aDtcclxuICBjb21wYXJpc29uVmFsdWVSZWN0SGVpZ2h0ID0gKHRoaXMuaGVpZ2h0IC8gNCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tKSAvIDI7XHJcbiAgY29tcGFyaXNvblRleHRSZWN0V2lkdGggPSB0aGlzLnRpdGxlUmVjdFdpZHRoO1xyXG4gIGNvbXBhcmlzb25UZXh0UmVjdEhlaWdodCA9ICh0aGlzLmhlaWdodCAvIDQgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbSkgLyAyO1xyXG5cclxuICB4ID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZShbMCwgdGhpcy5ncmFwaFdpZHRoXSk7XHJcbiAgeSA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2UoW3RoaXMuZ3JhcGhIZWlnaHQsIDBdKTtcclxuXHJcbiAgLy9UbyByZW1vdmUgb25seSB0aGUgbnVtYmVycyB3aGlsZSBrZWVwaW5nIHRoZSB0aWNrcyBvbiB0aGUgYXhlcywgXHJcbiAgLy95b3UgY2FuIHNlbGVjdCB0aGUgdGV4dCBlbGVtZW50cyBvZiB0aGUgdGlja3MgYW5kIGhpZGUgdGhlbSB1c2luZyBDU1MuIFxyXG4gIC8vSGVyZSdzIGhvdyB5b3UgY2FuIG1vZGlmeSB0aGUgY29kZSB0byBhY2hpZXZlIHRoYXQ6XHJcblxyXG4gIHhBeGlzQ2FsbCA9IGQzLmF4aXNCb3R0b20odGhpcy54KVxyXG4gICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgIC50aWNrU2l6ZU91dGVyKDApOyAvLyBIaWRlIG91dGVyIHRpY2tzXHJcblxyXG4gIHlBeGlzQ2FsbCA9IGQzLmF4aXNMZWZ0KHRoaXMueSlcclxuICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAudGlja1NpemVPdXRlcigxMCk7IC8vIEhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgZ2VuZXJhdGVSYW5kb21JbnRlZ2VyKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDM1IC0gKC01KSArIDEpKSArICgtNSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIHVwZGF0ZURhdGFzZXQoKTogYW55W10ge1xyXG4gICAgY29uc3QgbmV3RGF0YXNldDogYW55W10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcclxuICAgICAgbmV3RGF0YXNldC5wdXNoKHsgeDogaSwgeTogdGhpcy5nZW5lcmF0ZVJhbmRvbUludGVnZXIoKSB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXdEYXRhc2V0O1xyXG4gIH1cclxuICAqL1xyXG5cclxuICAvLyBGdW5jdGlvbiB0byB1cGRhdGUgZ3JhcGggd2l0aCBuZXcgZGF0YXNldFxyXG4gIHVwZGF0ZUdyYXBoKCk6IHZvaWQge1xyXG4gICAgLy8gR2VuZXJhdGUgbmV3IGRhdGFzZXRcclxuICAgIGNvbnN0IG5ld0RhdGFzZXQ6IGFueVtdID0gdGhpcy5kYXRhc2V0O1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGxvd2VzdCBhbmQgaGlnaGVzdCBwb2ludHNcclxuICAgIGNvbnN0IG1pblBvaW50ID0gbmV3RGF0YXNldC5yZWR1Y2UoKG1pbiwgY3VycmVudCkgPT4gY3VycmVudC55IDwgbWluLnkgPyBjdXJyZW50IDogbWluKTtcclxuICAgIGNvbnN0IG1heFBvaW50ID0gbmV3RGF0YXNldC5yZWR1Y2UoKG1heCwgY3VycmVudCkgPT4gY3VycmVudC55ID4gbWF4LnkgPyBjdXJyZW50IDogbWF4KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgc2NhbGVzXHJcbiAgICBjb25zdCB4U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5kb21haW4oWzAsIGQzLm1heChuZXdEYXRhc2V0LCBkID0+IGQueCldKVxyXG4gICAgICAucmFuZ2UoWzAsIHRoaXMuZ3JhcGhXaWR0aF0pO1xyXG5cclxuICAgIGNvbnN0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgICAgLmRvbWFpbihbbWluUG9pbnQueSwgbWF4UG9pbnQueV0pXHJcbiAgICAgIC5yYW5nZShbdGhpcy5ncmFwaEhlaWdodCwgMF0pO1xyXG5cclxuXHJcbiAgICBjb25zdCB4QXhpc0NhbGwgPSBkMy5heGlzQm90dG9tKHhTY2FsZSlcclxuICAgICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgICAgLnRpY2tTaXplT3V0ZXIoMCk7IC8vIEhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgICBjb25zdCB5QXhpc0NhbGwgPSBkMy5heGlzTGVmdCh5U2NhbGUpXHJcbiAgICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAgIC50aWNrU2l6ZU91dGVyKDEwKTsgLy8gRG8gbm90IGhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgICAvLyBVcGRhdGUgYXhlc1xyXG4gICAgLy94QXhpcy5jYWxsKHhBeGlzQ2FsbCk7XHJcbiAgICAvL3lBeGlzLmNhbGwoeUF4aXNDYWxsKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgY29ubmVjdGluZyBsaW5lXHJcbiAgICB0aGlzLmNvbm5lY3RpbmdMaW5lID0gZDMubGluZSgpXHJcbiAgICAgIC54KGQgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC55KGQgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgIC5kZWZpbmVkKChkLCBpKSA9PiBpID49IDAgJiYgaSA8IG5ld0RhdGFzZXQubGVuZ3RoKTtcclxuXHJcbiAgICB0aGlzLmdyYXlHcm91cC5zZWxlY3QoXCJwYXRoXCIpXHJcbiAgICAgIC5kYXR1bShuZXdEYXRhc2V0KVxyXG4gICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgIC5hdHRyKFwiZFwiLCB0aGlzLmNvbm5lY3RpbmdMaW5lKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgY2lyY2xlc1xyXG4gICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuZ3JheUdyb3VwLnNlbGVjdEFsbChcImNpcmNsZVwiKVxyXG4gICAgICAuZGF0YShuZXdEYXRhc2V0KTtcclxuXHJcbiAgICBjaXJjbGVzLmVudGVyKClcclxuICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAubWVyZ2UoY2lyY2xlcylcclxuICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAuYXR0cihcImN4XCIsIGQgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC5hdHRyKFwiY3lcIiwgZCA9PiB5U2NhbGUoZC55KSlcclxuICAgICAgLmF0dHIoXCJyXCIsIDUpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBkID0+IHtcclxuICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBcIiNGRjhDMDBcIjsgLy8gU2V0IGxvd2VzdCBwb2ludCB0byAjRkY4QzAwXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gXCIjMzE1ODk3XCI7IC8vIFNldCBoaWdoZXN0IHBvaW50IHRvICMzMTU4OTdcclxuICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE1ha2UgdGhlIG90aGVyIHBvaW50cyB0cmFuc3BhcmVudFxyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkID09PSBtaW5Qb2ludCkgcmV0dXJuIGQzLmNvbG9yKFwiI0ZGOEMwMFwiKS5kYXJrZXIoMC4yKTsgLy8gRGFya2VuICNGRjhDMDAgY29sb3JcclxuICAgICAgICBpZiAoZCA9PT0gbWF4UG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiMzMTU4OTdcIikuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjMzE1ODk3IGNvbG9yXHJcbiAgICAgICAgcmV0dXJuIFwibm9uZVwiOyAvLyBObyBzdHJva2UgZm9yIG90aGVyIHBvaW50c1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKTsgLy8gU2V0IHN0cm9rZSB3aWR0aFxyXG4gIH1cclxuXHJcbiAgc3ZnOiBhbnk7XHJcbiAgaW5uZXJHcm91cDogYW55O1xyXG4gIGdyZWVuR3JvdXA6IGFueTtcclxuICB0aXRsZUdyb3VwOiBhbnk7XHJcbiAgdmFsdWVHcm91cDogYW55O1xyXG4gIHZhbHVlVGV4dDogYW55O1xyXG4gIGdyYXlHcm91cDogYW55O1xyXG4gIGNvbXBhcmlzb25WYWx1ZUdyb3VwOiBhbnk7XHJcbiAgY29tcGFyaXNvblRleHRHcm91cDogYW55O1xyXG4gIGNvbXBhcmlzb25WYWx1ZVRleHQ6IGFueTtcclxuICBjb21wYXJpc29uVGV4dFRleHQ6IGFueTtcclxuICBjb25uZWN0aW5nTGluZTogYW55O1xyXG5cclxuICBpbnRlcnZhbElkOiBhbnk7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5zdmcgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudClcclxuICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLm91dGVyV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5vdXRlckhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLnN2Zy5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLm91dGVyV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5vdXRlckhlaWdodClcclxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKTtcclxuXHJcbiAgICAgIHRoaXMuaW5uZXJHcm91cCA9IHRoaXMuc3ZnLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMubWFyZ2luLmxlZnQgKyBcIixcIiArIHRoaXMubWFyZ2luLnRvcCArIFwiKVwiKTtcclxuXHJcbiAgICAgIHRoaXMuaW5uZXJHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImJsdWUtcmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmlubmVyV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5pbm5lckhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLmdyZWVuR3JvdXAgPSB0aGlzLmlubmVyR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5wYWRkaW5nLmxlZnQgKyBcIixcIiArIHRoaXMucGFkZGluZy50b3AgKyBcIilcIik7XHJcblxyXG4gICAgICB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmVlbi1yZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMud2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy50aXRsZUdyb3VwID0gdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidGl0bGUtZ3JvdXBcIilcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCArIFwiLFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi50b3AgKyBcIilcIik7XHJcblxyXG4gICAgICB0aGlzLnRpdGxlR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZS1yZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLnRpdGxlUmVjdFdpZHRoKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMudGl0bGVSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICAgIHRoaXMudGl0bGVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMudGl0bGVSZWN0V2lkdGggLyAyKVxyXG4gICAgICAgIC5hdHRyKFwieVwiLCB0aGlzLnRpdGxlUmVjdEhlaWdodCAvIDIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXRpdGxlXCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMudGl0bGVGaWxsQ29sb3IpXHJcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgdGhpcy50aXRsZVJlY3RIZWlnaHQpXHJcbiAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgICAgLnRleHQodGhpcy5tZXRyaWMpO1xyXG5cclxuICAgICAgdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImxpbmVcIilcclxuICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdClcclxuICAgICAgICAuYXR0cihcInkxXCIsIHRoaXMuZ3JhcGhIZWlnaHQgKiAyIC8gMylcclxuICAgICAgICAuYXR0cihcIngyXCIsIHRoaXMud2lkdGggLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLnJpZ2h0KVxyXG4gICAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5ncmFwaEhlaWdodCAqIDIgLyAzKVxyXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIHRoaXMuZGl2aXNvckxpbmVTdHJva2VDb2xvcilcclxuICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCB0aGlzLmRpdmlzb3JMaW5lU3Ryb2tlV2lkdGgpO1xyXG5cclxuICAgICAgY29uc3QgdmFsdWVHcm91cFRyYW5zbGF0ZVkgPSB0aGlzLmhlaWdodCAvIDIgLyAzICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgICAgIHRoaXMudmFsdWVHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZhbHVlLWdyb3VwXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIHZhbHVlR3JvdXBUcmFuc2xhdGVZICsgXCIpXCIpO1xyXG5cclxuICAgICAgdGhpcy52YWx1ZUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmFsdWUtcmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy52YWx1ZVJlY3RXaWR0aClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLnZhbHVlUmVjdEhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLnZhbHVlVGV4dCA9IHRoaXMudmFsdWVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMudmFsdWVSZWN0V2lkdGggLyAyKVxyXG4gICAgICAgIC5hdHRyKFwieVwiLCB0aGlzLnZhbHVlUmVjdEhlaWdodCAvIDIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXZhbHVlXCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMudmFsdWVGaWxsQ29sb3IpXHJcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgdGhpcy52YWx1ZVJlY3RIZWlnaHQgKyBcInB4XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpO1xyXG5cclxuICAgICAgc3dpdGNoICh0aGlzLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5JTlRFR0VSOlxyXG4gICAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKHRoaXMudmFsdWUpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5ERUNJTUFMOlxyXG4gICAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dCh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5QRVJDRU5UQUdFOlxyXG4gICAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKHRoaXMudmFsdWUgKiAxMDAwMCkgLyAxMDAgKyBcIiVcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dCh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5QRVJDRU5UQUdFKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKHRoaXMudmFsdWUgKiAxMDAwMCkgLyAxMDAgKyBcIiVcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dCh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmdyYXlHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInNjYXR0ZXItcGxvdFwiKVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsIFwiICsgdGhpcy5oZWlnaHQgLyAyICsgXCIpXCIpO1xyXG5cclxuICAgICAgdGhpcy5ncmF5R3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC1jb250YWluZXJcIilcclxuICAgICAgICAuYXR0cihcImZpbGxcIiwgZDMuY29sb3IoXCJ0cmFuc3BhcmVudFwiKS5icmlnaHRlcigxKSlcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMuZ3JhcGhXaWR0aClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmdyYXBoSGVpZ2h0KTtcclxuXHJcblxyXG4gICAgICBjb25zdCB4QXhpcyA9IHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwieCBheGlzXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoMCxcIiArIHRoaXMuZ3JhcGhIZWlnaHQgKyBcIilcIik7XHJcblxyXG4gICAgICBjb25zdCB5QXhpcyA9IHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwieSBheGlzXCIpO1xyXG5cclxuICAgICAgLy94QXhpcy5jYWxsKHhBeGlzQ2FsbCk7XHJcbiAgICAgIC8veUF4aXMuY2FsbCh5QXhpc0NhbGwpO1xyXG5cclxuICAgICAgLy8gU2VsZWN0IHRleHQgZWxlbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRpY2tzIGFuZCBoaWRlIHRoZW1cclxuICAgICAgdGhpcy5ncmF5R3JvdXAuc2VsZWN0QWxsKFwiLnRpY2sgdGV4dFwiKS5hdHRyKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcblxyXG4gICAgICBjb25zdCBjb21wYXJpc29uVmFsdWVHcm91cFRyYW5zbGF0ZVkgPSB0aGlzLmhlaWdodCAqIDMgLyA0ICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgICAgIHRoaXMuY29tcGFyaXNvblZhbHVlR3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb21wYXJpc29uLXZhbHVlLWdyb3VwXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIGNvbXBhcmlzb25WYWx1ZUdyb3VwVHJhbnNsYXRlWSArIFwiKVwiKTtcclxuXHJcbiAgICAgIHRoaXMuY29tcGFyaXNvblZhbHVlR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ2YWx1ZS1yZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RXaWR0aClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQpO1xyXG5cclxuICAgICAgY29uc3QgY29tcGFyaXNvblZhbHVlVGV4dCA9IHRoaXMuY29tcGFyaXNvblZhbHVlR3JvdXAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RXaWR0aCAvIDIpXHJcbiAgICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMuY29tcGFyaXNvblZhbHVlUmVjdEhlaWdodCAvIDIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXZhbHVlXCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMuY29tcGFyaXNvblZhbHVlRmlsbENvbG9yKVxyXG4gICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIHRoaXMuY29tcGFyaXNvblZhbHVlUmVjdEhlaWdodCArIFwicHhcIilcclxuICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgICAgLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIik7XHJcblxyXG4gICAgICBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZCh0aGlzLmNvbXBhcmlzb25WYWx1ZSAqIDEwMDAwKSAvIDEwMCArIFwiJVwiKTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbXBhcmlzb25UZXh0R3JvdXBUcmFuc2xhdGVZID0gdGhpcy5oZWlnaHQgKiAzIC8gNCArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tICsgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RIZWlnaHQ7XHJcbiAgICAgIHRoaXMuY29tcGFyaXNvblRleHRHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImNvbXBhcmlzb24tdGV4dC1ncm91cFwiKVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsXCIgKyBjb21wYXJpc29uVGV4dEdyb3VwVHJhbnNsYXRlWSArIFwiKVwiKTtcclxuXHJcbiAgICAgIHRoaXMuY29tcGFyaXNvblRleHRHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRleHQtcmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RXaWR0aClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLmNvbXBhcmlzb25UZXh0VGV4dCA9IHRoaXMuY29tcGFyaXNvblRleHRHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0V2lkdGggLyAyKVxyXG4gICAgICAgIC5hdHRyKFwieVwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodCAvIDIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXRleHRcIilcclxuICAgICAgICAuYXR0cihcImZpbGxcIiwgdGhpcy5jb21wYXJpc29uVGV4dEZpbGxDb2xvcilcclxuICAgICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodCAvIDIgKyBcInB4XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpO1xyXG5cclxuICAgICAgdGhpcy5jb21wYXJpc29uVGV4dFRleHQudGV4dCh0aGlzLmNvbXBhcmlzb25UZXh0KTtcclxuXHJcbiAgICAgIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXHJcblxyXG4gICAgICBjb25zdCBpbml0aWFsRGF0YXNldDogYW55ID0gdGhpcy5kYXRhc2V0O1xyXG4gICAgICBjb25zdCBtaW5Qb2ludDogYW55ID0gaW5pdGlhbERhdGFzZXQucmVkdWNlKChtaW4sIGN1cnJlbnQpID0+IGN1cnJlbnQueSA8IG1pbi55ID8gY3VycmVudCA6IG1pbik7XHJcbiAgICAgIGNvbnN0IG1heFBvaW50OiBhbnkgPSBpbml0aWFsRGF0YXNldC5yZWR1Y2UoKG1heCwgY3VycmVudCkgPT4gY3VycmVudC55ID4gbWF4LnkgPyBjdXJyZW50IDogbWF4KTtcclxuXHJcbiAgICAgIGNvbnN0IHhTY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgICAgICAuZG9tYWluKFswLCBkMy5tYXgoaW5pdGlhbERhdGFzZXQsIGQgPT4gZC54KV0pXHJcbiAgICAgICAgLnJhbmdlKFswLCB0aGlzLmdyYXBoV2lkdGhdKTtcclxuXHJcbiAgICAgIGNvbnN0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgICAgICAuZG9tYWluKFttaW5Qb2ludC55LCBtYXhQb2ludC55XSlcclxuICAgICAgICAucmFuZ2UoW3RoaXMuZ3JhcGhIZWlnaHQsIDBdKTtcclxuXHJcbiAgICAgIHRoaXMuY29ubmVjdGluZ0xpbmUgPSBkMy5saW5lKClcclxuICAgICAgICAueChkID0+IHhTY2FsZShkLngpKVxyXG4gICAgICAgIC55KGQgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgICAgLmRlZmluZWQoKGQsIGkpID0+IGkgPj0gMCAmJiBpIDwgaW5pdGlhbERhdGFzZXQubGVuZ3RoKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcInBhdGhcIilcclxuICAgICAgICAuZGF0dW0oaW5pdGlhbERhdGFzZXQpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxyXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiZGFya2dyYXlcIilcclxuICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKVxyXG4gICAgICAgIC5hdHRyKFwiZFwiLCB0aGlzLmNvbm5lY3RpbmdMaW5lKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JheUdyb3VwLnNlbGVjdEFsbChcImNpcmNsZVwiKVxyXG4gICAgICAgIC5kYXRhKGluaXRpYWxEYXRhc2V0KVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiY3hcIiwgZCA9PiB4U2NhbGUoZC54KSlcclxuICAgICAgICAuYXR0cihcImN5XCIsIGQgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgICAgLmF0dHIoXCJyXCIsIDUpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIGQgPT4ge1xyXG4gICAgICAgICAgaWYgKGQgPT09IG1pblBvaW50KSByZXR1cm4gXCIjRkY4QzAwXCI7IC8vIFNldCBsb3dlc3QgcG9pbnQgdG8gI0ZGOEMwMFxyXG4gICAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gXCIjMzE1ODk3XCI7IC8vIFNldCBoaWdoZXN0IHBvaW50IHRvICMzMTU4OTdcclxuICAgICAgICAgIHJldHVybiBcImdyYXlcIjsgLy8gU2V0IHRoZSBvdGhlciBwb2ludHMgdHJhbnNwYXJlbnRcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiNGRjhDMDBcIikuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjRkY4QzAwIGNvbG9yXHJcbiAgICAgICAgICBpZiAoZCA9PT0gbWF4UG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiMzMTU4OTdcIikuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjMzE1ODk3IGNvbG9yXHJcbiAgICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE5vIHN0cm9rZSBmb3Igb3RoZXIgcG9pbnRzXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKTsgLy8gU2V0IHN0cm9rZSB3aWR0aFxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlR3JhcGgoKTtcclxuICAgIH0sIDEwMDApXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAoISF0aGlzLmludGVydmFsSWQpIHtcclxuICAgICAgdGhpcy5pbnRlcnZhbElkLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxwPmNvcmUtc3RhdGlzdGljLXdpZGdldCB3b3JrcyE8L3A+XHJcbiJdfQ==
|
|
@@ -22067,8 +22067,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
22067
22067
|
args: ['container']
|
|
22068
22068
|
}] } });
|
|
22069
22069
|
|
|
22070
|
+
var EnumICoreStatisticWidgetDataType;
|
|
22071
|
+
(function (EnumICoreStatisticWidgetDataType) {
|
|
22072
|
+
EnumICoreStatisticWidgetDataType["INTEGER"] = "INTEGER";
|
|
22073
|
+
EnumICoreStatisticWidgetDataType["DECIMAL"] = "DECIMAL";
|
|
22074
|
+
EnumICoreStatisticWidgetDataType["PERCENTAGE"] = "PERCENTAGE";
|
|
22075
|
+
})(EnumICoreStatisticWidgetDataType || (EnumICoreStatisticWidgetDataType = {}));
|
|
22070
22076
|
class CoreStatisticWidgetComponent {
|
|
22071
22077
|
constructor() {
|
|
22078
|
+
this.dataType = EnumICoreStatisticWidgetDataType.INTEGER;
|
|
22079
|
+
this.value = 96;
|
|
22080
|
+
this.comparisonValue = 0.54;
|
|
22081
|
+
this.comparisonText = "vs. previous month";
|
|
22072
22082
|
this.margin = { top: 30, right: 30, bottom: 30, left: 30 };
|
|
22073
22083
|
this.padding = { top: 30, right: 30, bottom: 30, left: 30 };
|
|
22074
22084
|
this.outerWidth = 320;
|
|
@@ -22077,11 +22087,7 @@ class CoreStatisticWidgetComponent {
|
|
|
22077
22087
|
this.titleFillColor = d3.color("black");
|
|
22078
22088
|
this.divisorLineStrokeColor = d3.color("gray");
|
|
22079
22089
|
this.divisorLineStrokeWidth = 3;
|
|
22080
|
-
this.value = 96;
|
|
22081
|
-
this.isPercentage = false;
|
|
22082
22090
|
this.valueFillColor = d3.color("black");
|
|
22083
|
-
this.comparisonValue = 0.54;
|
|
22084
|
-
this.comparisonText = "vs. previous month";
|
|
22085
22091
|
this.comparisonValueFillColor = d3.color("black");
|
|
22086
22092
|
this.comparisonTextFillColor = d3.color("black");
|
|
22087
22093
|
this.showAxes = false;
|
|
@@ -22114,17 +22120,19 @@ class CoreStatisticWidgetComponent {
|
|
|
22114
22120
|
generateRandomInteger() {
|
|
22115
22121
|
return Math.floor(Math.random() * (35 - (-5) + 1)) + (-5);
|
|
22116
22122
|
}
|
|
22117
|
-
|
|
22118
|
-
|
|
22119
|
-
|
|
22120
|
-
|
|
22121
|
-
}
|
|
22122
|
-
|
|
22123
|
+
/*
|
|
22124
|
+
updateDataset(): any[] {
|
|
22125
|
+
const newDataset: any[] = [];
|
|
22126
|
+
for (let i = 1; i <= 12; i++) {
|
|
22127
|
+
newDataset.push({ x: i, y: this.generateRandomInteger() });
|
|
22128
|
+
}
|
|
22129
|
+
return newDataset;
|
|
22123
22130
|
}
|
|
22131
|
+
*/
|
|
22124
22132
|
// Function to update graph with new dataset
|
|
22125
22133
|
updateGraph() {
|
|
22126
22134
|
// Generate new dataset
|
|
22127
|
-
const newDataset = this.
|
|
22135
|
+
const newDataset = this.dataset;
|
|
22128
22136
|
// Find the lowest and highest points
|
|
22129
22137
|
const minPoint = newDataset.reduce((min, current) => current.y < min.y ? current : min);
|
|
22130
22138
|
const maxPoint = newDataset.reduce((max, current) => current.y > max.y ? current : max);
|
|
@@ -22222,7 +22230,7 @@ class CoreStatisticWidgetComponent {
|
|
|
22222
22230
|
.attr("font-size", this.titleRectHeight)
|
|
22223
22231
|
.attr("text-anchor", "middle")
|
|
22224
22232
|
.attr("alignment-baseline", "middle")
|
|
22225
|
-
.text(
|
|
22233
|
+
.text(this.metric);
|
|
22226
22234
|
this.greenGroup.append("line")
|
|
22227
22235
|
.attr("x1", this.divisorLineMargin.left)
|
|
22228
22236
|
.attr("y1", this.graphHeight * 2 / 3)
|
|
@@ -22248,7 +22256,21 @@ class CoreStatisticWidgetComponent {
|
|
|
22248
22256
|
.attr("font-size", this.valueRectHeight + "px")
|
|
22249
22257
|
.attr("text-anchor", "middle")
|
|
22250
22258
|
.attr("alignment-baseline", "middle");
|
|
22251
|
-
|
|
22259
|
+
switch (this.dataType) {
|
|
22260
|
+
case EnumICoreStatisticWidgetDataType.INTEGER:
|
|
22261
|
+
this.valueText.text(Math.round(this.value).toString());
|
|
22262
|
+
break;
|
|
22263
|
+
case EnumICoreStatisticWidgetDataType.DECIMAL:
|
|
22264
|
+
this.valueText.text(this.value.toString());
|
|
22265
|
+
break;
|
|
22266
|
+
case EnumICoreStatisticWidgetDataType.PERCENTAGE:
|
|
22267
|
+
this.valueText.text(Math.round(this.value * 10000) / 100 + "%");
|
|
22268
|
+
break;
|
|
22269
|
+
default:
|
|
22270
|
+
this.valueText.text(this.value.toString());
|
|
22271
|
+
break;
|
|
22272
|
+
}
|
|
22273
|
+
if (this.dataType === EnumICoreStatisticWidgetDataType.PERCENTAGE) {
|
|
22252
22274
|
this.valueText.text(Math.round(this.value * 10000) / 100 + "%");
|
|
22253
22275
|
}
|
|
22254
22276
|
else {
|
|
@@ -22310,7 +22332,7 @@ class CoreStatisticWidgetComponent {
|
|
|
22310
22332
|
.attr("alignment-baseline", "middle");
|
|
22311
22333
|
this.comparisonTextText.text(this.comparisonText);
|
|
22312
22334
|
/*===============================*/
|
|
22313
|
-
const initialDataset = this.
|
|
22335
|
+
const initialDataset = this.dataset;
|
|
22314
22336
|
const minPoint = initialDataset.reduce((min, current) => current.y < min.y ? current : min);
|
|
22315
22337
|
const maxPoint = initialDataset.reduce((max, current) => current.y > max.y ? current : max);
|
|
22316
22338
|
const xScale = d3.scaleLinear()
|
|
@@ -22362,12 +22384,30 @@ class CoreStatisticWidgetComponent {
|
|
|
22362
22384
|
}
|
|
22363
22385
|
}
|
|
22364
22386
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreStatisticWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22365
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreStatisticWidgetComponent, isStandalone: true, selector: "core-statistic-widget", inputs: {
|
|
22387
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreStatisticWidgetComponent, isStandalone: true, selector: "core-statistic-widget", inputs: { metric: "metric", dataType: "dataType", dataset: "dataset", value: "value", comparisonValue: "comparisonValue", comparisonText: "comparisonText", margin: "margin", padding: "padding", outerWidth: "outerWidth", outerHeight: "outerHeight", divisorLineMargin: "divisorLineMargin", titleFillColor: "titleFillColor", divisorLineStrokeColor: "divisorLineStrokeColor", divisorLineStrokeWidth: "divisorLineStrokeWidth", valueFillColor: "valueFillColor", comparisonValueFillColor: "comparisonValueFillColor", comparisonTextFillColor: "comparisonTextFillColor", showAxes: "showAxes" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<p>core-statistic-widget works!</p>\r\n", styles: [""] }); }
|
|
22366
22388
|
}
|
|
22367
22389
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreStatisticWidgetComponent, decorators: [{
|
|
22368
22390
|
type: Component,
|
|
22369
22391
|
args: [{ selector: 'core-statistic-widget', standalone: true, imports: [], template: "<p>core-statistic-widget works!</p>\r\n" }]
|
|
22370
|
-
}], propDecorators: {
|
|
22392
|
+
}], propDecorators: { metric: [{
|
|
22393
|
+
type: Input,
|
|
22394
|
+
args: [{ required: true }]
|
|
22395
|
+
}], dataType: [{
|
|
22396
|
+
type: Input,
|
|
22397
|
+
args: [{ required: true }]
|
|
22398
|
+
}], dataset: [{
|
|
22399
|
+
type: Input,
|
|
22400
|
+
args: [{ required: true }]
|
|
22401
|
+
}], value: [{
|
|
22402
|
+
type: Input,
|
|
22403
|
+
args: [{ required: true }]
|
|
22404
|
+
}], comparisonValue: [{
|
|
22405
|
+
type: Input,
|
|
22406
|
+
args: [{ required: true }]
|
|
22407
|
+
}], comparisonText: [{
|
|
22408
|
+
type: Input,
|
|
22409
|
+
args: [{ required: true }]
|
|
22410
|
+
}], margin: [{
|
|
22371
22411
|
type: Input
|
|
22372
22412
|
}], padding: [{
|
|
22373
22413
|
type: Input
|
|
@@ -22383,16 +22423,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
22383
22423
|
type: Input
|
|
22384
22424
|
}], divisorLineStrokeWidth: [{
|
|
22385
22425
|
type: Input
|
|
22386
|
-
}], value: [{
|
|
22387
|
-
type: Input
|
|
22388
|
-
}], isPercentage: [{
|
|
22389
|
-
type: Input
|
|
22390
22426
|
}], valueFillColor: [{
|
|
22391
22427
|
type: Input
|
|
22392
|
-
}], comparisonValue: [{
|
|
22393
|
-
type: Input
|
|
22394
|
-
}], comparisonText: [{
|
|
22395
|
-
type: Input
|
|
22396
22428
|
}], comparisonValueFillColor: [{
|
|
22397
22429
|
type: Input
|
|
22398
22430
|
}], comparisonTextFillColor: [{
|
|
@@ -23228,5 +23260,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
23228
23260
|
* Generated bundle index. Do not edit.
|
|
23229
23261
|
*/
|
|
23230
23262
|
|
|
23231
|
-
export { AlertComponent, AlertService, AnimatedTextComponent, AnimatedTextService, AppConfigService, AppInitializationService, AppService, AuthService, BaseComponent, BaseDropdownComponent, BaseEditComponent, ButtonGroupComponent, ButtonGroupModule, ButtonGroupService, CORE_VNS_BUTTONS, CacheService, CanActivateFunctionUrlMapperGuard, CanDeactivateGuard, CheckForUpdateService, CommonHttpRequestService, ConfigService, ConfirmDialogStateComponent, ControlBase, CoreAccordionComponent, CoreAccordionService, CoreApiProgressComponent, CoreAttachmentComponent, CoreButtonComponent, CoreButtonGroupComponent, CoreButtonGroupService, CoreButtonGroupVnsComponent, CoreButtonVnsComponent, CoreCheckboxComponent, CoreChecklistComponent, CoreCommonParamKitComponent, CoreCompositionComponent, CoreCompositionService, CoreCompositionState, CoreConfirmDialogComponent, CoreContractSeekerComponent, CoreControlComponent, CoreControlNoGridBufferComponent, CoreControlNoSeekerComponent, CoreControlService, CoreCurrencyInputComponent, CoreDatePickerComponent, CoreDatetimeService, CoreDropdownComponent, CoreEmployeeSeekerComponent, CoreFileUploaderComponent, CoreFormComponent, CoreFormControlBaseComponent, CoreFormControlSeekerComponent, CoreFormLiteComponent, CoreFormService, CoreGridBufferComponent, CoreHeaderParamsComponent, CoreIosSwitcherComponent, CoreLineComponent, CoreListComponent, CoreListLazyComponent, CoreLoadingSurfaceComponent, CoreMccComponent, CoreMonthPickerComponent, CoreMonthSelectorComponent, CoreNavigationTrackerComponent, CoreOrgTreeComponent, CoreOrgTreeService, CoreOrgTreeState, CoreOrgUnitSeekerComponent, CoreOrgchartflexComponent, CorePageEditComponent, CorePageEditLiteComponent, CorePageEditService, CorePageHeaderComponent, CorePageListComponent, CorePageListContentComponent, CorePageListService, CorePageListState, CorePageViewComponent, CorePaginationComponent, CorePaginationFullComponent, CorePaginationFullService, CoreParamControlComponent, CorePermissionActionsComponent, CorePermissionComponent, CorePermissionService, CorePositionConcurrentSeekerComponent, CorePositionSeekerComponent, CoreQueryBuilderComponent, CoreRadioGroupComponent, CoreReducerIconComponent, CoreRoutingHistoryComponent, CoreScrollComponent, CoreScrollLazyComponent, CoreStatisticWidgetComponent, CoreStatusStickerComponent, CoreSubFormGroupComponent, CoreTableComponent, CoreTabsComponent, CoreTagsComponent, CoreTopicPickerComponent, CoreTopicTreeComponent, CoreTreeComponent, CoreTreeGridComponent, CoreWageSeekerComponent, CoreWorkingSeekerComponent, CoreYearPickerComponent, CustomValidators, DATE_VALUE_ACCESSOR, DESKTOP_SCREEN_HEDER_HEIGHT, DateValueAccessor, DecisionComponent, DialogService, DialogStateComponent, DomService, ECoreTableToolClass, ECoreTableToolCode, EnumAlertType, EnumButtonCaptionCode, EnumCoreArticleCategoryTreeaAccessorMode, EnumCoreButtonCode, EnumCoreButtonVNSCode, EnumCoreFileUploaderType, EnumCoreFormControlSeekerSourceType, EnumCoreOrgTreeaAccessorMode, EnumCorePageEditBootstrapClass, EnumCorePageEditFieldType, EnumCorePageEditMode, EnumCoreTablePipeType, EnumCoreViewItemType, EnumErrorType, EnumExType, EnumFilterOperator, EnumFormBaseContolType, EnumIconClass, EnumOparator, EnumPermissionObjectType, EnumProfileInfoSector, EnumRecursiveFields, EnumSignalRType, EnumSortDirection, EnumStyleButtonClass, EnumSwUpdateVersionUpdatesEventType, EvaluateDialogComponent, EvaluateDialogService, FileService, FilterPipe, FooterComponent, FullscreenModalLoaderComponent, FunctionComponent, FunctionEditComponent, FunctionEditService, FunctionIgnoreComponent, FunctionIgnoreEditComponent, GroupFunctionComponent, GroupFunctionEditComponent, GrpcService, HeaderService, HistoryService, HttpErrorHandler, HubConnectionService, HuconcurrentlyComponent, IAlertOptions, ImageErrorResolverDirective, InMemoryComponent, InitializationCanActivateFn, InitializationCanMatchFn, InterceptorSkipHeader, IpServiceService, ItemComponent, JsonService, LanguageChangerComponent, LanguageComponent, LanguageEditComponent, LayoutService, LongTaskService, MOBILE_SCREEN_HEDER_HEIGHT, MapAvatarToServerPipe, MapService, MenuComponent, MenuEditComponent, MenuService, MessageService, ModalService, MultiLanguageService, MutationLogComponent, MutationViewComponent, NavigatorComponent, NavigatorService, NgxHistaffAlphaComponent, NgxHistaffAlphaService, NormalizeHumanNamePipe, OnlineUsersComponent, OrganizationService, PageTitleComponent, PaginationComponent, PortalRouteComponent, PortalRouteEditComponent, PositionComponent, PositionEditService, PositionTransferService, PushNotificationService, RandomAvatarService, RecursiveService, RequestCache, RequestCacheWithMap, ResponseService, RightchatComponent, RoutingService, STICKER_COLOR_SCHEMA, SeekerService, SocketService, StaffProfileComponent, StringService, SysActionComponent, SysActionEditComponent, SysFunctionActionComponent, SysFunctionActionEditComponent, SysFunctionActionMapperComponent, SysFunctionUrlMapperComponent, SysMenuService, SysModuleComponent, SysModuleEditComponent, TLA_CONFIG, TableCellPipe, Textbox, ThreedotsComponent, TimeSheetService, TooltipComponent, TooltipDirective, TopicPermissionService, TopicTreeService, TranslatePipe, UnicodeService, UrlService, UserActivityComponent, UserActivityService, WageComponent, WaittingScreenComponent, alertOptions, attachmentOptions, blob_to_base64_script, defaultPaging, httpInterceptorProviders, liner_to_nested_array_script, longAlertOptions, noneAutoClosedAlertOptions, normalizeHumanName, themeBlue };
|
|
23263
|
+
export { AlertComponent, AlertService, AnimatedTextComponent, AnimatedTextService, AppConfigService, AppInitializationService, AppService, AuthService, BaseComponent, BaseDropdownComponent, BaseEditComponent, ButtonGroupComponent, ButtonGroupModule, ButtonGroupService, CORE_VNS_BUTTONS, CacheService, CanActivateFunctionUrlMapperGuard, CanDeactivateGuard, CheckForUpdateService, CommonHttpRequestService, ConfigService, ConfirmDialogStateComponent, ControlBase, CoreAccordionComponent, CoreAccordionService, CoreApiProgressComponent, CoreAttachmentComponent, CoreButtonComponent, CoreButtonGroupComponent, CoreButtonGroupService, CoreButtonGroupVnsComponent, CoreButtonVnsComponent, CoreCheckboxComponent, CoreChecklistComponent, CoreCommonParamKitComponent, CoreCompositionComponent, CoreCompositionService, CoreCompositionState, CoreConfirmDialogComponent, CoreContractSeekerComponent, CoreControlComponent, CoreControlNoGridBufferComponent, CoreControlNoSeekerComponent, CoreControlService, CoreCurrencyInputComponent, CoreDatePickerComponent, CoreDatetimeService, CoreDropdownComponent, CoreEmployeeSeekerComponent, CoreFileUploaderComponent, CoreFormComponent, CoreFormControlBaseComponent, CoreFormControlSeekerComponent, CoreFormLiteComponent, CoreFormService, CoreGridBufferComponent, CoreHeaderParamsComponent, CoreIosSwitcherComponent, CoreLineComponent, CoreListComponent, CoreListLazyComponent, CoreLoadingSurfaceComponent, CoreMccComponent, CoreMonthPickerComponent, CoreMonthSelectorComponent, CoreNavigationTrackerComponent, CoreOrgTreeComponent, CoreOrgTreeService, CoreOrgTreeState, CoreOrgUnitSeekerComponent, CoreOrgchartflexComponent, CorePageEditComponent, CorePageEditLiteComponent, CorePageEditService, CorePageHeaderComponent, CorePageListComponent, CorePageListContentComponent, CorePageListService, CorePageListState, CorePageViewComponent, CorePaginationComponent, CorePaginationFullComponent, CorePaginationFullService, CoreParamControlComponent, CorePermissionActionsComponent, CorePermissionComponent, CorePermissionService, CorePositionConcurrentSeekerComponent, CorePositionSeekerComponent, CoreQueryBuilderComponent, CoreRadioGroupComponent, CoreReducerIconComponent, CoreRoutingHistoryComponent, CoreScrollComponent, CoreScrollLazyComponent, CoreStatisticWidgetComponent, CoreStatusStickerComponent, CoreSubFormGroupComponent, CoreTableComponent, CoreTabsComponent, CoreTagsComponent, CoreTopicPickerComponent, CoreTopicTreeComponent, CoreTreeComponent, CoreTreeGridComponent, CoreWageSeekerComponent, CoreWorkingSeekerComponent, CoreYearPickerComponent, CustomValidators, DATE_VALUE_ACCESSOR, DESKTOP_SCREEN_HEDER_HEIGHT, DateValueAccessor, DecisionComponent, DialogService, DialogStateComponent, DomService, ECoreTableToolClass, ECoreTableToolCode, EnumAlertType, EnumButtonCaptionCode, EnumCoreArticleCategoryTreeaAccessorMode, EnumCoreButtonCode, EnumCoreButtonVNSCode, EnumCoreFileUploaderType, EnumCoreFormControlSeekerSourceType, EnumCoreOrgTreeaAccessorMode, EnumCorePageEditBootstrapClass, EnumCorePageEditFieldType, EnumCorePageEditMode, EnumCoreTablePipeType, EnumCoreViewItemType, EnumErrorType, EnumExType, EnumFilterOperator, EnumFormBaseContolType, EnumICoreStatisticWidgetDataType, EnumIconClass, EnumOparator, EnumPermissionObjectType, EnumProfileInfoSector, EnumRecursiveFields, EnumSignalRType, EnumSortDirection, EnumStyleButtonClass, EnumSwUpdateVersionUpdatesEventType, EvaluateDialogComponent, EvaluateDialogService, FileService, FilterPipe, FooterComponent, FullscreenModalLoaderComponent, FunctionComponent, FunctionEditComponent, FunctionEditService, FunctionIgnoreComponent, FunctionIgnoreEditComponent, GroupFunctionComponent, GroupFunctionEditComponent, GrpcService, HeaderService, HistoryService, HttpErrorHandler, HubConnectionService, HuconcurrentlyComponent, IAlertOptions, ImageErrorResolverDirective, InMemoryComponent, InitializationCanActivateFn, InitializationCanMatchFn, InterceptorSkipHeader, IpServiceService, ItemComponent, JsonService, LanguageChangerComponent, LanguageComponent, LanguageEditComponent, LayoutService, LongTaskService, MOBILE_SCREEN_HEDER_HEIGHT, MapAvatarToServerPipe, MapService, MenuComponent, MenuEditComponent, MenuService, MessageService, ModalService, MultiLanguageService, MutationLogComponent, MutationViewComponent, NavigatorComponent, NavigatorService, NgxHistaffAlphaComponent, NgxHistaffAlphaService, NormalizeHumanNamePipe, OnlineUsersComponent, OrganizationService, PageTitleComponent, PaginationComponent, PortalRouteComponent, PortalRouteEditComponent, PositionComponent, PositionEditService, PositionTransferService, PushNotificationService, RandomAvatarService, RecursiveService, RequestCache, RequestCacheWithMap, ResponseService, RightchatComponent, RoutingService, STICKER_COLOR_SCHEMA, SeekerService, SocketService, StaffProfileComponent, StringService, SysActionComponent, SysActionEditComponent, SysFunctionActionComponent, SysFunctionActionEditComponent, SysFunctionActionMapperComponent, SysFunctionUrlMapperComponent, SysMenuService, SysModuleComponent, SysModuleEditComponent, TLA_CONFIG, TableCellPipe, Textbox, ThreedotsComponent, TimeSheetService, TooltipComponent, TooltipDirective, TopicPermissionService, TopicTreeService, TranslatePipe, UnicodeService, UrlService, UserActivityComponent, UserActivityService, WageComponent, WaittingScreenComponent, alertOptions, attachmentOptions, blob_to_base64_script, defaultPaging, httpInterceptorProviders, liner_to_nested_array_script, longAlertOptions, noneAutoClosedAlertOptions, normalizeHumanName, themeBlue };
|
|
23232
23264
|
//# sourceMappingURL=ngx-histaff-alpha.mjs.map
|