@acorex/components 18.10.8 → 18.10.9
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/alert/lib/alert.component.mjs +7 -5
- package/esm2022/map/lib/map.component.mjs +139 -38
- package/esm2022/range-slider/lib/range-slider.component.mjs +50 -24
- package/esm2022/rate-picker/lib/rate-picker.component.mjs +88 -26
- package/esm2022/side-menu/lib/side-menu-item/side-menu-item.compoent.mjs +10 -4
- package/esm2022/side-menu/lib/side-menu.component.mjs +2 -2
- package/fesm2022/acorex-components-alert.mjs +6 -4
- package/fesm2022/acorex-components-alert.mjs.map +1 -1
- package/fesm2022/acorex-components-map.mjs +138 -37
- package/fesm2022/acorex-components-map.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +49 -23
- package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-rate-picker.mjs +87 -25
- package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-side-menu.mjs +11 -5
- package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
- package/map/lib/map.component.d.ts +94 -3
- package/package.json +51 -51
- package/range-slider/lib/range-slider.component.d.ts +47 -21
- package/rate-picker/lib/rate-picker.component.d.ts +77 -16
- package/side-menu/lib/side-menu-item/side-menu-item.compoent.d.ts +1 -0
@@ -5,72 +5,98 @@ import { classes } from 'polytype';
|
|
5
5
|
import * as i0 from "@angular/core";
|
6
6
|
import * as i1 from "@angular/common";
|
7
7
|
/**
|
8
|
-
* @
|
9
|
-
*
|
8
|
+
* @description
|
9
|
+
* A range slider for selecting a range of values, supporting both single and dual modes.
|
10
|
+
* The slider offers step, snap, and tooltip configurations.
|
11
|
+
*
|
12
|
+
* @example
|
13
|
+
* <ax-range-slider [min]="0" [max]="100" [step]="1" [mode]="'dual'"></ax-range-slider>
|
10
14
|
*/
|
11
15
|
export class AXRangeSliderComponent extends classes((MXValueComponent)) {
|
12
16
|
constructor() {
|
13
17
|
super();
|
14
|
-
/**
|
15
|
-
* @ignore
|
16
|
-
*/
|
17
18
|
this.zone = inject(NgZone);
|
18
19
|
/**
|
19
|
-
* @description
|
20
|
+
* @description
|
21
|
+
* The orientation of the slider, either 'horizontal' or 'vertical'.
|
22
|
+
* @default 'horizontal'
|
20
23
|
*/
|
21
24
|
this.orientation = input('horizontal');
|
22
25
|
/**
|
23
|
-
* @description
|
26
|
+
* @description
|
27
|
+
* Color theme for the slider, affecting highlight, tooltip, and handler.
|
28
|
+
* @default 'primary'
|
24
29
|
*/
|
25
30
|
this.color = input('primary');
|
26
31
|
/**
|
27
|
-
* @description
|
28
|
-
*
|
32
|
+
* @description
|
33
|
+
* The value(s) of the slider. Can be a single number for single mode or an array of two numbers for dual mode.
|
29
34
|
*/
|
30
35
|
this.values = model(this.value);
|
31
36
|
/**
|
32
|
-
* @description
|
37
|
+
* @description
|
38
|
+
* The mode of the slider, either 'single' or 'dual'.
|
39
|
+
* @default 'single'
|
33
40
|
*/
|
34
41
|
this.mode = input('single');
|
35
42
|
/**
|
36
|
-
* @description
|
43
|
+
* @description
|
44
|
+
* The minimum value of the slider.
|
45
|
+
* @default 0
|
37
46
|
*/
|
38
47
|
this.min = input(0);
|
39
48
|
/**
|
40
|
-
* @description
|
49
|
+
* @description
|
50
|
+
* The maximum value of the slider.
|
51
|
+
* @default 100
|
41
52
|
*/
|
42
53
|
this.max = input(100);
|
43
54
|
/**
|
44
|
-
* @description
|
55
|
+
* @description
|
56
|
+
* The step increment for value changes.
|
57
|
+
* @default 1
|
45
58
|
*/
|
46
59
|
this.step = input(1);
|
47
60
|
/**
|
48
|
-
* @description
|
49
|
-
*
|
61
|
+
* @description
|
62
|
+
* The snapping increment for the slider.
|
63
|
+
* @default 1
|
50
64
|
*/
|
51
65
|
this.snap = input(1);
|
52
66
|
/**
|
53
|
-
* @description
|
67
|
+
* @description
|
68
|
+
* Mode for displaying tooltips, can be at the start, end, or both.
|
69
|
+
* @default 'end'
|
54
70
|
*/
|
55
71
|
this.tooltipMode = input('end');
|
56
72
|
/**
|
57
|
-
* @description
|
73
|
+
* @description
|
74
|
+
* Mode for snapping, can snap at the start, end, or both.
|
75
|
+
* @default 'start'
|
58
76
|
*/
|
59
77
|
this.snapMode = input('start');
|
60
78
|
/**
|
61
|
-
* @description
|
79
|
+
* @description
|
80
|
+
* Whether the slider should have steps.
|
81
|
+
* @default true
|
62
82
|
*/
|
63
83
|
this.hasStep = input(true);
|
64
84
|
/**
|
65
|
-
* @description
|
85
|
+
* @description
|
86
|
+
* Whether the slider should display snapping.
|
87
|
+
* @default false
|
66
88
|
*/
|
67
89
|
this.hasSnap = input(false);
|
68
90
|
/**
|
69
|
-
* @description
|
91
|
+
* @description
|
92
|
+
* Whether the slider should display labels for snapping points.
|
93
|
+
* @default Value derived from `hasSnap()`
|
70
94
|
*/
|
71
95
|
this.hasLable = input(this.hasSnap());
|
72
96
|
/**
|
73
|
-
* @description
|
97
|
+
* @description
|
98
|
+
* Whether the slider should display tooltips.
|
99
|
+
* @default false
|
74
100
|
*/
|
75
101
|
this.hasTooltip = input(false);
|
76
102
|
/**
|
@@ -594,7 +620,7 @@ export class AXRangeSliderComponent extends classes((MXValueComponent)) {
|
|
594
620
|
useExisting: forwardRef(() => AXRangeSliderComponent),
|
595
621
|
multi: true,
|
596
622
|
},
|
597
|
-
], usesInheritance: true, ngImport: i0, template: "@if (correctMinMax()) {\n <div class=\"ax-range-slider\" [class]=\"'ax-orientation-' + orientation()\">\n <div class=\"ax-range-slider-bar\" (mousedown)=\"onStartBar($event)\" (touchstart)=\"onStartBar($event)\"></div>\n <div\n class=\"ax-range-slider-highlight\"\n [ngStyle]=\"AXRangeSliderHighlight()\"\n (mousedown)=\"onStartBar($event)\"\n (touchstart)=\"onStartBar($event)\"\n ></div>\n\n <div\n class=\"ax-range-slider-handler\"\n [ngStyle]=\"AXRangeSliderHandler1()\"\n name=\"first\"\n (mousedown)=\"onStartHandler($event, 'first')\"\n (touchstart)=\"onStartHandler($event, 'first')\"\n >\n @if (hasTooltip()) {\n <div class=\"ax-range-slider-tooltip\">{{ isDual() ? values()[0] : values() }}</div>\n }\n </div>\n\n @if (isDual()) {\n <div\n class=\"ax-range-slider-handler\"\n [ngStyle]=\"AXRangeSliderHandler2()\"\n name=\"second\"\n (mousedown)=\"onStartHandler($event, 'second')\"\n (touchstart)=\"onStartHandler($event, 'second')\"\n >\n @if (hasTooltip()) {\n <div class=\"ax-range-slider-tooltip\">{{ values()[1] }}</div>\n }\n </div>\n }\n @if (hasSnap()) {\n <div class=\"ax-range-slider-step\" [ngStyle]=\"AXRangeSliderStep()\">\n @for (item of calculateSnapBar(); track $index) {\n <div\n class=\"ax-range-slider-steps\"\n [ngStyle]=\"\n isHorizontal() ? { left: getPercantage(item) + '%' } : { bottom: getPercantage(item) + '%' }\n \"\n >\n @if (hasLable()) {\n <div class=\"ax-range-slider-label\" [ngStyle]=\"AXRangeLabel()\">\n {{ item + min() }}\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [":root{--ax-range-slider-base-thickness: .25rem}ax-range-slider{display:flex;align-items:center;justify-content:center;padding:1rem;font-size:small}ax-range-slider .ax-range-slider.ax-orientation-horizontal{position:relative;width:100%;height:calc(var(--ax-range-slider-base-thickness) * 4)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-bar{position:absolute;top:50%;left:0;width:100.1%;height:var(--ax-range-slider-base-thickness);transform:translateY(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-bg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-highlight{position:absolute;top:50%;height:calc(var(--ax-range-slider-base-thickness) * 3 / 2);transform:translateY(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-fg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler{position:absolute;top:50%;width:calc(var(--ax-range-slider-base-thickness) * 6);height:calc(var(--ax-range-slider-base-thickness) * 6);z-index:20;background:#fff;border:1px solid gray;border-radius:50%;cursor:pointer;transform:translate(-45%,-50%);transition:box-shadow .1s linear}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler:hover{box-shadow:var(--tw-ring-inset) 0 0 0 calc(.6rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler:active{box-shadow:var(--tw-ring-inset) 0 0 0 calc(.6rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-tooltip{position:absolute;left:calc(var(--ax-range-slider-base-thickness) * 2.8);top:calc(var(--ax-range-slider-base-thickness) * -2);background-color:rgb(var(--ax-range-slider-fg));color:rgb(var(--ax-range-tooltip-text));padding:5px 10px;border-radius:3px;white-space:nowrap;font-weight:600;transform:translate(-50%,-125%)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-tooltip:after{content:\"\";position:absolute;top:calc(var(--ax-range-slider-base-thickness) * 7);left:50%;transform:translate(-50%);border-width:.5rem;border-style:solid;border-color:rgb(var(--ax-range-slider-fg)) transparent transparent transparent}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-step{position:absolute;display:flex;flex-direction:row;width:100%;z-index:10}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-step .ax-range-slider-steps{position:absolute;border-left:calc(var(--ax-range-slider-base-thickness) / 2) solid rgb(var(--ax-color-border-default));height:50%}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-step .ax-range-slider-steps .ax-range-slider-label{position:relative;text-align:center;top:calc(var(--ax-range-slider-base-thickness) * 2);left:-50%}ax-range-slider .ax-range-slider.ax-orientation-vertical{position:relative;width:calc(var(--ax-range-slider-base-thickness) * 4);height:100%}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-bar{position:absolute;top:0;left:50%;width:var(--ax-range-slider-base-thickness);height:100.1%;transform:translate(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-bg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-highlight{position:absolute;left:50%;width:calc(var(--ax-range-slider-base-thickness) * 3 / 2);transform:translate(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-fg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-handler{position:absolute;left:50%;width:calc(var(--ax-range-slider-base-thickness) * 6);height:calc(var(--ax-range-slider-base-thickness) * 6);z-index:20;background:#fff;border:1px solid gray;border-radius:50%;cursor:pointer;transform:translate(-50%,-55%);transition:background-color .2s ease}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-handler:active{border:1px solid transparent;box-shadow:var(--tw-ring-inset) 0 0 0 calc(.5rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-tooltip{position:absolute;top:calc(var(--ax-range-slider-base-thickness) * 8.5);left:calc(var(--ax-range-slider-base-thickness) * -8);background-color:rgb(var(--ax-range-slider-fg));color:rgb(var(--ax-range-tooltip-text));padding:5px 10px;border-radius:3px;font-weight:600;white-space:nowrap;transform:translate(-50%,-125%)}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-tooltip:after{content:\"\";position:absolute;top:50%;left:97%;transform:translateY(-50%);border-width:.5rem;border-style:solid;border-color:transparent transparent transparent rgb(var(--ax-range-slider-fg))}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-step{position:absolute;display:flex;flex-direction:column;height:100%;z-index:10}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-step .ax-range-slider-steps{position:absolute;width:50%;border-top:calc(var(--ax-range-slider-base-thickness) / 2) solid rgb(var(--ax-color-border-default))}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-step .ax-range-slider-steps .ax-range-slider-label{position:absolute;left:150%;top:calc(var(--ax-range-slider-base-thickness) * -3)}ax-range-slider.ax-primary-solid{--ax-range-slider-bg: var(--ax-color-primary-200);--ax-range-slider-fg: var(--ax-color-primary-500);--ax-range-tooltip-text: var(--ax-color-primary-fore)}ax-range-slider.ax-secondary-solid{--ax-range-slider-bg: var(--ax-color-secondary-200);--ax-range-slider-fg: var(--ax-color-secondary-500);--ax-range-tooltip-text: var(--ax-color-secondary-fore)}ax-range-slider.ax-success-solid{--ax-range-slider-bg: var(--ax-color-success-200);--ax-range-slider-fg: var(--ax-color-success-500);--ax-range-tooltip-text: var(--ax-color-success-fore)}ax-range-slider.ax-warning-solid{--ax-range-slider-bg: var(--ax-color-warning-200);--ax-range-slider-fg: var(--ax-color-warning-500);--ax-range-tooltip-text: var(--ax-color-warning-fore)}ax-range-slider.ax-danger-solid{--ax-range-slider-bg: var(--ax-color-danger-200);--ax-range-slider-fg: var(--ax-color-danger-500);--ax-range-tooltip-text: var(--ax-color-danger-fore)}ax-range-slider.ax-info-solid{--ax-range-slider-bg: var(--ax-color-info-200);--ax-range-slider-fg: var(--ax-color-info-500);--ax-range-tooltip-text: var(--ax-color-info-fore)}ax-range-slider.ax-state-disabled{opacity:.5;cursor:not-allowed}ax-range-slider.ax-state-readonly{opacity:.75}.ax-dark ax-range-slider.ax-primary-solid{--ax-range-slider-bg: var(--ax-color-primary-700);--ax-range-slider-fg: var(--ax-color-primary-200);--ax-range-tooltip-text: var(--ax-color-primary-fore-tint)}.ax-dark ax-range-slider.ax-secondary-solid{--ax-range-slider-bg: var(--ax-color-secondary-700);--ax-range-slider-fg: var(--ax-color-secondary-200);--ax-range-tooltip-text: var(--ax-color-secondary-fore-tint)}.ax-dark ax-range-slider.ax-success-solid{--ax-range-slider-bg: var(--ax-color-success-700);--ax-range-slider-fg: var(--ax-color-success-200);--ax-range-tooltip-text: var(--ax-color-success-fore-tint)}.ax-dark ax-range-slider.ax-warning-solid{--ax-range-slider-bg: var(--ax-color-warning-700);--ax-range-slider-fg: var(--ax-color-warning-200);--ax-range-tooltip-text: var(--ax-color-warning-fore-tint)}.ax-dark ax-range-slider.ax-danger-solid{--ax-range-slider-bg: var(--ax-color-danger-700);--ax-range-slider-fg: var(--ax-color-danger-200);--ax-range-tooltip-text: var(--ax-color-danger-fore-tint)}.ax-dark ax-range-slider.ax-info-solid{--ax-range-slider-bg: var(--ax-color-info-700);--ax-range-slider-fg: var(--ax-color-info-200);--ax-range-tooltip-text: var(--ax-color-info-fore-tint)}\n"], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
623
|
+
], usesInheritance: true, ngImport: i0, template: "@if (correctMinMax()) {\n <div class=\"ax-range-slider\" [class]=\"'ax-orientation-' + orientation()\">\n <div class=\"ax-range-slider-bar\" (mousedown)=\"onStartBar($event)\" (touchstart)=\"onStartBar($event)\"></div>\n <div\n class=\"ax-range-slider-highlight\"\n [ngStyle]=\"AXRangeSliderHighlight()\"\n (mousedown)=\"onStartBar($event)\"\n (touchstart)=\"onStartBar($event)\"\n ></div>\n\n <div\n class=\"ax-range-slider-handler\"\n [ngStyle]=\"AXRangeSliderHandler1()\"\n name=\"first\"\n (mousedown)=\"onStartHandler($event, 'first')\"\n (touchstart)=\"onStartHandler($event, 'first')\"\n >\n @if (hasTooltip()) {\n <div class=\"ax-range-slider-tooltip\">{{ isDual() ? values()[0] : values() }}</div>\n }\n </div>\n\n @if (isDual()) {\n <div\n class=\"ax-range-slider-handler\"\n [ngStyle]=\"AXRangeSliderHandler2()\"\n name=\"second\"\n (mousedown)=\"onStartHandler($event, 'second')\"\n (touchstart)=\"onStartHandler($event, 'second')\"\n >\n @if (hasTooltip()) {\n <div class=\"ax-range-slider-tooltip\">{{ values()[1] }}</div>\n }\n </div>\n }\n @if (hasSnap()) {\n <div class=\"ax-range-slider-step\" [ngStyle]=\"AXRangeSliderStep()\">\n @for (item of calculateSnapBar(); track $index) {\n <div\n class=\"ax-range-slider-steps\"\n [ngStyle]=\"\n isHorizontal() ? { left: getPercantage(item) + '%' } : { bottom: getPercantage(item) + '%' }\n \"\n >\n @if (hasLable()) {\n <div class=\"ax-range-slider-label\" [ngStyle]=\"AXRangeLabel()\">\n {{ item + min() }}\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [":root{--ax-range-slider-base-thickness: .25rem}ax-range-slider{display:flex;align-items:center;justify-content:center;padding:1rem;font-size:small}ax-range-slider .ax-range-slider.ax-orientation-horizontal{position:relative;width:100%;height:calc(var(--ax-range-slider-base-thickness) * 4)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-bar{position:absolute;top:50%;left:0;width:100.1%;height:var(--ax-range-slider-base-thickness);transform:translateY(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-bg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-highlight{position:absolute;top:50%;height:calc(var(--ax-range-slider-base-thickness) * 3 / 2);transform:translateY(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-fg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler{position:absolute;top:50%;width:calc(var(--ax-range-slider-base-thickness) * 6);height:calc(var(--ax-range-slider-base-thickness) * 6);z-index:20;background:#fff;border:1px solid gray;border-radius:50%;cursor:pointer;transform:translate(-45%,-50%);transition:box-shadow .1s linear}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler:hover{box-shadow:var(--tw-ring-inset) 0 0 0 calc(.6rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler:active{box-shadow:var(--tw-ring-inset) 0 0 0 calc(.6rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-tooltip{position:absolute;left:calc(var(--ax-range-slider-base-thickness) * 2.8);top:calc(var(--ax-range-slider-base-thickness) * -2);background-color:rgb(var(--ax-range-slider-fg));color:rgb(var(--ax-range-tooltip-fore));padding:5px 10px;border-radius:3px;white-space:nowrap;font-weight:600;transform:translate(-50%,-125%)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-tooltip:after{content:\"\";position:absolute;top:calc(var(--ax-range-slider-base-thickness) * 7);left:50%;transform:translate(-50%);border-width:.5rem;border-style:solid;border-color:rgb(var(--ax-range-slider-fg)) transparent transparent transparent}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-step{position:absolute;display:flex;flex-direction:row;width:100%;z-index:10}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-step .ax-range-slider-steps{position:absolute;border-left:calc(var(--ax-range-slider-base-thickness) / 2) solid rgb(var(--ax-color-border-default));height:50%}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-step .ax-range-slider-steps .ax-range-slider-label{position:relative;text-align:center;top:calc(var(--ax-range-slider-base-thickness) * 2);left:-50%}ax-range-slider .ax-range-slider.ax-orientation-vertical{position:relative;width:calc(var(--ax-range-slider-base-thickness) * 4);height:100%}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-bar{position:absolute;top:0;left:50%;width:var(--ax-range-slider-base-thickness);height:100.1%;transform:translate(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-bg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-highlight{position:absolute;left:50%;width:calc(var(--ax-range-slider-base-thickness) * 3 / 2);transform:translate(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-fg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-handler{position:absolute;left:50%;width:calc(var(--ax-range-slider-base-thickness) * 6);height:calc(var(--ax-range-slider-base-thickness) * 6);z-index:20;background:#fff;border:1px solid gray;border-radius:50%;cursor:pointer;transform:translate(-50%,-55%);transition:background-color .2s ease}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-handler:active{border:1px solid transparent;box-shadow:var(--tw-ring-inset) 0 0 0 calc(.5rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-tooltip{position:absolute;top:calc(var(--ax-range-slider-base-thickness) * 8.5);left:calc(var(--ax-range-slider-base-thickness) * -8);background-color:rgb(var(--ax-range-slider-fg));color:rgb(var(--ax-range-tooltip-fore));padding:5px 10px;border-radius:3px;font-weight:600;white-space:nowrap;transform:translate(-50%,-125%)}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-tooltip:after{content:\"\";position:absolute;top:50%;left:97%;transform:translateY(-50%);border-width:.5rem;border-style:solid;border-color:transparent transparent transparent rgb(var(--ax-range-slider-fg))}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-step{position:absolute;display:flex;flex-direction:column;height:100%;z-index:10}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-step .ax-range-slider-steps{position:absolute;width:50%;border-top:calc(var(--ax-range-slider-base-thickness) / 2) solid rgb(var(--ax-color-border-default))}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-step .ax-range-slider-steps .ax-range-slider-label{position:absolute;left:150%;top:calc(var(--ax-range-slider-base-thickness) * -3)}ax-range-slider.ax-primary-solid{--ax-range-slider-bg: var(--ax-color-primary-200);--ax-range-slider-fg: var(--ax-color-primary-500);--ax-range-tooltip-fore: var(--ax-color-primary-fore)}ax-range-slider.ax-secondary-solid{--ax-range-slider-bg: var(--ax-color-secondary-200);--ax-range-slider-fg: var(--ax-color-secondary-500);--ax-range-tooltip-fore: var(--ax-color-secondary-fore)}ax-range-slider.ax-success-solid{--ax-range-slider-bg: var(--ax-color-success-200);--ax-range-slider-fg: var(--ax-color-success-500);--ax-range-tooltip-fore: var(--ax-color-success-fore)}ax-range-slider.ax-warning-solid{--ax-range-slider-bg: var(--ax-color-warning-200);--ax-range-slider-fg: var(--ax-color-warning-500);--ax-range-tooltip-fore: var(--ax-color-warning-fore)}ax-range-slider.ax-danger-solid{--ax-range-slider-bg: var(--ax-color-danger-200);--ax-range-slider-fg: var(--ax-color-danger-500);--ax-range-tooltip-fore: var(--ax-color-danger-fore)}ax-range-slider.ax-info-solid{--ax-range-slider-bg: var(--ax-color-info-200);--ax-range-slider-fg: var(--ax-color-info-500);--ax-range-tooltip-fore: var(--ax-color-info-fore)}ax-range-slider.ax-state-disabled{opacity:.5;cursor:not-allowed}ax-range-slider.ax-state-readonly{opacity:.75}.ax-dark ax-range-slider.ax-primary-solid{--ax-range-slider-bg: var(--ax-color-primary-700);--ax-range-slider-fg: var(--ax-color-primary-200);--ax-range-tooltip-fore: var(--ax-color-primary-fore-tint)}.ax-dark ax-range-slider.ax-secondary-solid{--ax-range-slider-bg: var(--ax-color-secondary-700);--ax-range-slider-fg: var(--ax-color-secondary-200);--ax-range-tooltip-fore: var(--ax-color-secondary-fore-tint)}.ax-dark ax-range-slider.ax-success-solid{--ax-range-slider-bg: var(--ax-color-success-700);--ax-range-slider-fg: var(--ax-color-success-200);--ax-range-tooltip-fore: var(--ax-color-success-fore-tint)}.ax-dark ax-range-slider.ax-warning-solid{--ax-range-slider-bg: var(--ax-color-warning-700);--ax-range-slider-fg: var(--ax-color-warning-200);--ax-range-tooltip-fore: var(--ax-color-warning-fore-tint)}.ax-dark ax-range-slider.ax-danger-solid{--ax-range-slider-bg: var(--ax-color-danger-700);--ax-range-slider-fg: var(--ax-color-danger-200);--ax-range-tooltip-fore: var(--ax-color-danger-fore-tint)}.ax-dark ax-range-slider.ax-info-solid{--ax-range-slider-bg: var(--ax-color-info-700);--ax-range-slider-fg: var(--ax-color-info-200);--ax-range-tooltip-fore: var(--ax-color-info-fore-tint)}\n"], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
598
624
|
}
|
599
625
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXRangeSliderComponent, decorators: [{
|
600
626
|
type: Component,
|
@@ -605,7 +631,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
605
631
|
useExisting: forwardRef(() => AXRangeSliderComponent),
|
606
632
|
multi: true,
|
607
633
|
},
|
608
|
-
], template: "@if (correctMinMax()) {\n <div class=\"ax-range-slider\" [class]=\"'ax-orientation-' + orientation()\">\n <div class=\"ax-range-slider-bar\" (mousedown)=\"onStartBar($event)\" (touchstart)=\"onStartBar($event)\"></div>\n <div\n class=\"ax-range-slider-highlight\"\n [ngStyle]=\"AXRangeSliderHighlight()\"\n (mousedown)=\"onStartBar($event)\"\n (touchstart)=\"onStartBar($event)\"\n ></div>\n\n <div\n class=\"ax-range-slider-handler\"\n [ngStyle]=\"AXRangeSliderHandler1()\"\n name=\"first\"\n (mousedown)=\"onStartHandler($event, 'first')\"\n (touchstart)=\"onStartHandler($event, 'first')\"\n >\n @if (hasTooltip()) {\n <div class=\"ax-range-slider-tooltip\">{{ isDual() ? values()[0] : values() }}</div>\n }\n </div>\n\n @if (isDual()) {\n <div\n class=\"ax-range-slider-handler\"\n [ngStyle]=\"AXRangeSliderHandler2()\"\n name=\"second\"\n (mousedown)=\"onStartHandler($event, 'second')\"\n (touchstart)=\"onStartHandler($event, 'second')\"\n >\n @if (hasTooltip()) {\n <div class=\"ax-range-slider-tooltip\">{{ values()[1] }}</div>\n }\n </div>\n }\n @if (hasSnap()) {\n <div class=\"ax-range-slider-step\" [ngStyle]=\"AXRangeSliderStep()\">\n @for (item of calculateSnapBar(); track $index) {\n <div\n class=\"ax-range-slider-steps\"\n [ngStyle]=\"\n isHorizontal() ? { left: getPercantage(item) + '%' } : { bottom: getPercantage(item) + '%' }\n \"\n >\n @if (hasLable()) {\n <div class=\"ax-range-slider-label\" [ngStyle]=\"AXRangeLabel()\">\n {{ item + min() }}\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [":root{--ax-range-slider-base-thickness: .25rem}ax-range-slider{display:flex;align-items:center;justify-content:center;padding:1rem;font-size:small}ax-range-slider .ax-range-slider.ax-orientation-horizontal{position:relative;width:100%;height:calc(var(--ax-range-slider-base-thickness) * 4)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-bar{position:absolute;top:50%;left:0;width:100.1%;height:var(--ax-range-slider-base-thickness);transform:translateY(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-bg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-highlight{position:absolute;top:50%;height:calc(var(--ax-range-slider-base-thickness) * 3 / 2);transform:translateY(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-fg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler{position:absolute;top:50%;width:calc(var(--ax-range-slider-base-thickness) * 6);height:calc(var(--ax-range-slider-base-thickness) * 6);z-index:20;background:#fff;border:1px solid gray;border-radius:50%;cursor:pointer;transform:translate(-45%,-50%);transition:box-shadow .1s linear}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler:hover{box-shadow:var(--tw-ring-inset) 0 0 0 calc(.6rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler:active{box-shadow:var(--tw-ring-inset) 0 0 0 calc(.6rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-tooltip{position:absolute;left:calc(var(--ax-range-slider-base-thickness) * 2.8);top:calc(var(--ax-range-slider-base-thickness) * -2);background-color:rgb(var(--ax-range-slider-fg));color:rgb(var(--ax-range-tooltip-
|
634
|
+
], template: "@if (correctMinMax()) {\n <div class=\"ax-range-slider\" [class]=\"'ax-orientation-' + orientation()\">\n <div class=\"ax-range-slider-bar\" (mousedown)=\"onStartBar($event)\" (touchstart)=\"onStartBar($event)\"></div>\n <div\n class=\"ax-range-slider-highlight\"\n [ngStyle]=\"AXRangeSliderHighlight()\"\n (mousedown)=\"onStartBar($event)\"\n (touchstart)=\"onStartBar($event)\"\n ></div>\n\n <div\n class=\"ax-range-slider-handler\"\n [ngStyle]=\"AXRangeSliderHandler1()\"\n name=\"first\"\n (mousedown)=\"onStartHandler($event, 'first')\"\n (touchstart)=\"onStartHandler($event, 'first')\"\n >\n @if (hasTooltip()) {\n <div class=\"ax-range-slider-tooltip\">{{ isDual() ? values()[0] : values() }}</div>\n }\n </div>\n\n @if (isDual()) {\n <div\n class=\"ax-range-slider-handler\"\n [ngStyle]=\"AXRangeSliderHandler2()\"\n name=\"second\"\n (mousedown)=\"onStartHandler($event, 'second')\"\n (touchstart)=\"onStartHandler($event, 'second')\"\n >\n @if (hasTooltip()) {\n <div class=\"ax-range-slider-tooltip\">{{ values()[1] }}</div>\n }\n </div>\n }\n @if (hasSnap()) {\n <div class=\"ax-range-slider-step\" [ngStyle]=\"AXRangeSliderStep()\">\n @for (item of calculateSnapBar(); track $index) {\n <div\n class=\"ax-range-slider-steps\"\n [ngStyle]=\"\n isHorizontal() ? { left: getPercantage(item) + '%' } : { bottom: getPercantage(item) + '%' }\n \"\n >\n @if (hasLable()) {\n <div class=\"ax-range-slider-label\" [ngStyle]=\"AXRangeLabel()\">\n {{ item + min() }}\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [":root{--ax-range-slider-base-thickness: .25rem}ax-range-slider{display:flex;align-items:center;justify-content:center;padding:1rem;font-size:small}ax-range-slider .ax-range-slider.ax-orientation-horizontal{position:relative;width:100%;height:calc(var(--ax-range-slider-base-thickness) * 4)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-bar{position:absolute;top:50%;left:0;width:100.1%;height:var(--ax-range-slider-base-thickness);transform:translateY(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-bg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-highlight{position:absolute;top:50%;height:calc(var(--ax-range-slider-base-thickness) * 3 / 2);transform:translateY(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-fg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler{position:absolute;top:50%;width:calc(var(--ax-range-slider-base-thickness) * 6);height:calc(var(--ax-range-slider-base-thickness) * 6);z-index:20;background:#fff;border:1px solid gray;border-radius:50%;cursor:pointer;transform:translate(-45%,-50%);transition:box-shadow .1s linear}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler:hover{box-shadow:var(--tw-ring-inset) 0 0 0 calc(.6rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-handler:active{box-shadow:var(--tw-ring-inset) 0 0 0 calc(.6rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-tooltip{position:absolute;left:calc(var(--ax-range-slider-base-thickness) * 2.8);top:calc(var(--ax-range-slider-base-thickness) * -2);background-color:rgb(var(--ax-range-slider-fg));color:rgb(var(--ax-range-tooltip-fore));padding:5px 10px;border-radius:3px;white-space:nowrap;font-weight:600;transform:translate(-50%,-125%)}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-tooltip:after{content:\"\";position:absolute;top:calc(var(--ax-range-slider-base-thickness) * 7);left:50%;transform:translate(-50%);border-width:.5rem;border-style:solid;border-color:rgb(var(--ax-range-slider-fg)) transparent transparent transparent}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-step{position:absolute;display:flex;flex-direction:row;width:100%;z-index:10}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-step .ax-range-slider-steps{position:absolute;border-left:calc(var(--ax-range-slider-base-thickness) / 2) solid rgb(var(--ax-color-border-default));height:50%}ax-range-slider .ax-range-slider.ax-orientation-horizontal .ax-range-slider-step .ax-range-slider-steps .ax-range-slider-label{position:relative;text-align:center;top:calc(var(--ax-range-slider-base-thickness) * 2);left:-50%}ax-range-slider .ax-range-slider.ax-orientation-vertical{position:relative;width:calc(var(--ax-range-slider-base-thickness) * 4);height:100%}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-bar{position:absolute;top:0;left:50%;width:var(--ax-range-slider-base-thickness);height:100.1%;transform:translate(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-bg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-highlight{position:absolute;left:50%;width:calc(var(--ax-range-slider-base-thickness) * 3 / 2);transform:translate(-50%);z-index:20;border-radius:9999rem;background-color:rgb(var(--ax-range-slider-fg));cursor:pointer}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-handler{position:absolute;left:50%;width:calc(var(--ax-range-slider-base-thickness) * 6);height:calc(var(--ax-range-slider-base-thickness) * 6);z-index:20;background:#fff;border:1px solid gray;border-radius:50%;cursor:pointer;transform:translate(-50%,-55%);transition:background-color .2s ease}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-handler:active{border:1px solid transparent;box-shadow:var(--tw-ring-inset) 0 0 0 calc(.5rem + var(--tw-ring-offset-width)) rgba(var(--ax-range-slider-fg),.25)}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-tooltip{position:absolute;top:calc(var(--ax-range-slider-base-thickness) * 8.5);left:calc(var(--ax-range-slider-base-thickness) * -8);background-color:rgb(var(--ax-range-slider-fg));color:rgb(var(--ax-range-tooltip-fore));padding:5px 10px;border-radius:3px;font-weight:600;white-space:nowrap;transform:translate(-50%,-125%)}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-tooltip:after{content:\"\";position:absolute;top:50%;left:97%;transform:translateY(-50%);border-width:.5rem;border-style:solid;border-color:transparent transparent transparent rgb(var(--ax-range-slider-fg))}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-step{position:absolute;display:flex;flex-direction:column;height:100%;z-index:10}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-step .ax-range-slider-steps{position:absolute;width:50%;border-top:calc(var(--ax-range-slider-base-thickness) / 2) solid rgb(var(--ax-color-border-default))}ax-range-slider .ax-range-slider.ax-orientation-vertical .ax-range-slider-step .ax-range-slider-steps .ax-range-slider-label{position:absolute;left:150%;top:calc(var(--ax-range-slider-base-thickness) * -3)}ax-range-slider.ax-primary-solid{--ax-range-slider-bg: var(--ax-color-primary-200);--ax-range-slider-fg: var(--ax-color-primary-500);--ax-range-tooltip-fore: var(--ax-color-primary-fore)}ax-range-slider.ax-secondary-solid{--ax-range-slider-bg: var(--ax-color-secondary-200);--ax-range-slider-fg: var(--ax-color-secondary-500);--ax-range-tooltip-fore: var(--ax-color-secondary-fore)}ax-range-slider.ax-success-solid{--ax-range-slider-bg: var(--ax-color-success-200);--ax-range-slider-fg: var(--ax-color-success-500);--ax-range-tooltip-fore: var(--ax-color-success-fore)}ax-range-slider.ax-warning-solid{--ax-range-slider-bg: var(--ax-color-warning-200);--ax-range-slider-fg: var(--ax-color-warning-500);--ax-range-tooltip-fore: var(--ax-color-warning-fore)}ax-range-slider.ax-danger-solid{--ax-range-slider-bg: var(--ax-color-danger-200);--ax-range-slider-fg: var(--ax-color-danger-500);--ax-range-tooltip-fore: var(--ax-color-danger-fore)}ax-range-slider.ax-info-solid{--ax-range-slider-bg: var(--ax-color-info-200);--ax-range-slider-fg: var(--ax-color-info-500);--ax-range-tooltip-fore: var(--ax-color-info-fore)}ax-range-slider.ax-state-disabled{opacity:.5;cursor:not-allowed}ax-range-slider.ax-state-readonly{opacity:.75}.ax-dark ax-range-slider.ax-primary-solid{--ax-range-slider-bg: var(--ax-color-primary-700);--ax-range-slider-fg: var(--ax-color-primary-200);--ax-range-tooltip-fore: var(--ax-color-primary-fore-tint)}.ax-dark ax-range-slider.ax-secondary-solid{--ax-range-slider-bg: var(--ax-color-secondary-700);--ax-range-slider-fg: var(--ax-color-secondary-200);--ax-range-tooltip-fore: var(--ax-color-secondary-fore-tint)}.ax-dark ax-range-slider.ax-success-solid{--ax-range-slider-bg: var(--ax-color-success-700);--ax-range-slider-fg: var(--ax-color-success-200);--ax-range-tooltip-fore: var(--ax-color-success-fore-tint)}.ax-dark ax-range-slider.ax-warning-solid{--ax-range-slider-bg: var(--ax-color-warning-700);--ax-range-slider-fg: var(--ax-color-warning-200);--ax-range-tooltip-fore: var(--ax-color-warning-fore-tint)}.ax-dark ax-range-slider.ax-danger-solid{--ax-range-slider-bg: var(--ax-color-danger-700);--ax-range-slider-fg: var(--ax-color-danger-200);--ax-range-tooltip-fore: var(--ax-color-danger-fore-tint)}.ax-dark ax-range-slider.ax-info-solid{--ax-range-slider-bg: var(--ax-color-info-700);--ax-range-slider-fg: var(--ax-color-info-200);--ax-range-tooltip-fore: var(--ax-color-info-fore-tint)}\n"] }]
|
609
635
|
}], ctorParameters: () => [], propDecorators: { onWheel: [{
|
610
636
|
type: HostListener,
|
611
637
|
args: ['wheel', ['$event']]
|
@@ -613,4 +639,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
613
639
|
type: HostBinding,
|
614
640
|
args: ['class']
|
615
641
|
}] } });
|
616
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9yYW5nZS1zbGlkZXIvc3JjL2xpYi9yYW5nZS1zbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3JhbmdlLXNsaWRlci9zcmMvbGliL3JhbmdlLXNsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUNqQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFRbkM7OztHQUdHO0FBaUJILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxPQUFPLENBQUMsQ0FBQSxnQkFBb0MsQ0FBQSxDQUFDO0lBZ092RjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBaE9WOztXQUVHO1FBQ0ssU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5Qjs7V0FFRztRQUNILGdCQUFXLEdBQUcsS0FBSyxDQUFnQixZQUFZLENBQUMsQ0FBQztRQUNqRDs7V0FFRztRQUNILFVBQUssR0FBRyxLQUFLLENBQW1CLFNBQVMsQ0FBQyxDQUFDO1FBQzNDOzs7V0FHRztRQUNILFdBQU0sR0FBRyxLQUFLLENBQXFCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQzs7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RTt3QkFDckU7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3dEQTBmRCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTBEckIsV0FBVztzQkFEdEIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVhPcmllbnRhdGlvbixcbiAgQVhTdHlsZUNvbG9yVHlwZSxcbiAgQVhWYWx1YWJsZUNvbXBvbmVudCxcbiAgTVhWYWx1ZUNvbXBvbmVudCxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBOZ1pvbmUsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBtb2RlbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNsYXNzZXMgfSBmcm9tICdwb2x5dHlwZSc7XG5pbXBvcnQge1xuICBBWFJhbmdlU2xpZGVyTW9kZSxcbiAgQVhSYW5nZVNsaWRlclNuYXBNb2RlLFxuICBBWFJhbmdlU2xpZGVyVG9vbHRpcE1vZGUsXG4gIEFYUmFuZ2VTbGlkZXJWYWx1ZSxcbn0gZnJvbSAnLi9yYW5nZS1zbGlkZXIuY2xhc3MnO1xuXG4vKipcbiAqIEBjYXRlZ29yeVxuICogUmFuZ2Ugc2xpZGVyIGZvciBzZWxlY3RpbmcgYSByYW5nZSBvZiB2YWx1ZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXJhbmdlLXNsaWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYW5nZS1zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yYW5nZS1zbGlkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgaW5wdXRzOiBbJ2Rpc2FibGVkJywgJ3JlYWRvbmx5J10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEFYVmFsdWFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFJhbmdlU2xpZGVyQ29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBWFJhbmdlU2xpZGVyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYUmFuZ2VTbGlkZXJDb21wb25lbnQgZXh0ZW5kcyBjbGFzc2VzKE1YVmFsdWVDb21wb25lbnQ8QVhSYW5nZVNsaWRlclZhbHVlPikge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBvcmllbnRhdGlvbiBpbmNsdWRpbmcgdmVydGljYWwgYW5kIGhvcml6b250YWxcbiAgICovXG4gIG9yaWVudGF0aW9uID0gaW5wdXQ8QVhPcmllbnRhdGlvbj4oJ2hvcml6b250YWwnKTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBjb2xvciBmb3IgaGlnaGxpZ2h0IGFuZCB0b29sdGlwIGFuZCBoYW5kbGVyXG4gICAqL1xuICBjb2xvciA9IGlucHV0PEFYU3R5bGVDb2xvclR5cGU+KCdwcmltYXJ5Jyk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gdmFsdWVzIGlzIGEgbnVtYmVyIHNpbmdsZSBtb2RlXG4gICAqIGFuZCBhcnJheSBvZiAyIG51bWJlciBmb3IgZHVhbCBtb2RlXG4gICAqL1xuICB2YWx1ZXMgPSBtb2RlbDxBWFJhbmdlU2xpZGVyVmFsdWU+KHRoaXMudmFsdWUpO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIG1vZGUgaW5jbHVkaW5nIHNpbmdsZSBhbmQgZHVhbFxuICAgKi9cbiAgbW9kZSA9IGlucHV0PEFYUmFuZ2VTbGlkZXJNb2RlPignc2luZ2xlJyk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gbWluaW11bSB2YWx1ZVxuICAgKi9cbiAgbWluID0gaW5wdXQ8bnVtYmVyPigwKTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICBtYXggPSBpbnB1dDxudW1iZXI+KDEwMCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gc3RlcCBmb3IgY2hhbmdpbmcgdmFsdWVzXG4gICAqL1xuICBzdGVwID0gaW5wdXQ8bnVtYmVyPigxKTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBhY3QgYXMgcnVsZXIgZm9yIHJhbmdlIHNsaWRlcixcbiAgICogaXRzIHJhbmdlIG9mIHNob3dpbmcgdG8gdXNlclxuICAgKi9cbiAgc25hcCA9IGlucHV0PG51bWJlcj4oMSk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gdG9vbHRpcCBmb3Igc2hvd2luZyB2YWx1ZSBvZiBoYW5kbGVyc1xuICAgKi9cbiAgdG9vbHRpcE1vZGUgPSBpbnB1dDxBWFJhbmdlU2xpZGVyVG9vbHRpcE1vZGU+KCdlbmQnKTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBkZWZlcmVudCBtb2RlcyBmb3Igc25hcCBpbmNsdWRpbmcgc3RhcnQsIGVuZCBhbmQgYm90aFxuICAgKi9cbiAgc25hcE1vZGUgPSBpbnB1dDxBWFJhbmdlU2xpZGVyU25hcE1vZGU+KCdzdGFydCcpO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIGEgZmxhZyBmb3IgaGF2aW5nIHN0ZXBcbiAgICovXG4gIGhhc1N0ZXAgPSBpbnB1dCh0cnVlKTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBhIGZsYWcgZm9yIHNob3dpbmcgc25hcFxuICAgKi9cbiAgaGFzU25hcCA9IGlucHV0KGZhbHNlKTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBhIGZsYWcgZm9yIHNob3dpbmcgc25hcCBsYWJlbHNcbiAgICovXG4gIGhhc0xhYmxlID0gaW5wdXQodGhpcy5oYXNTbmFwKCkpO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIGEgZmxhZyBmb3Igc2hvd2luZyB0b29sdGlwIGZvciB2YWx1ZXNcbiAgICovXG4gIGhhc1Rvb2x0aXAgPSBpbnB1dChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhlaWdodCA9IDAuMjU7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZXdIZWlnaHQgPSAndmFyKC0tYXgtcmFuZ2Utc2xpZGVyLWJhc2UtdGhpY2tuZXNzKSc7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByYW5nZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWF4KCkgLSB0aGlzLm1pbigpKTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGlzSG9yaXpvbnRhbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGlzRHVhbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubW9kZSgpID09PSAnZHVhbCcpO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29ycmVjdE1pbk1heCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWF4KCkgLSB0aGlzLm1pbigpID4gMCk7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuXG4gIHByb3RlY3RlZCBjYWxjdWxhdGVTbmFwQmFyID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmhhc1NuYXAoKSkge1xuICAgICAgbGV0IGFycmF5ID0gW107XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5taW4oKTsgaSA8IHRoaXMubWF4KCk7IGkgKz0gdGhpcy5zbmFwKCkpIHtcbiAgICAgICAgYXJyYXkucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIGFycmF5ID0gWy4uLmFycmF5LCB0aGlzLm1heCgpXTtcbiAgICAgIGlmIChhcnJheVswXSA8IDApIHtcbiAgICAgICAgYXJyYXkgPSBhcnJheS5tYXAoKGkpID0+IGkgKyAtYXJyYXlbMF0pLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcnJheVswXSA+IDApIHtcbiAgICAgICAgYXJyYXkgPSBhcnJheS5tYXAoKGkpID0+IGkgLSBhcnJheVswXSkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FsY3VsYXRlUG9zID0gY29tcHV0ZWQ8QVhSYW5nZVNsaWRlclZhbHVlPigoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEdWFsKCkgJiYgdGhpcy52YWx1ZXMoKSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgKCh0aGlzLnZhbHVlcygpWzBdIC0gdGhpcy5taW4oKSkgLyB0aGlzLnJhbmdlKCkpICogMTAwLFxuICAgICAgICAoKHRoaXMudmFsdWVzKClbMV0gLSB0aGlzLm1pbigpKSAvIHRoaXMucmFuZ2UoKSkgKiAxMDAsXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKCgodGhpcy52YWx1ZXMoKSBhcyBudW1iZXIpIC0gdGhpcy5taW4oKSkgLyB0aGlzLnJhbmdlKCkpICogMTAwO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGNob29zZW5IYW5kbGVyOiAnZmlyc3QnIHwgJ3NlY29uZCcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIHNsaWRlckVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgQVhSYW5nZVNsaWRlckhpZ2hsaWdodCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5pc0hvcml6b250YWwoKVxuICAgICAgPyB7XG4gICAgICAgICAgbGVmdDogdGhpcy5pc0R1YWwoKSA/IHRoaXMuY2FsY3VsYXRlUG9zKClbMF0gKyAnJScgOiAnMCUnLFxuICAgICAgICAgIHdpZHRoOiB0aGlzLmlzRHVhbCgpXG4gICAgICAgICAgICA/IHRoaXMuY2FsY3VsYXRlUG9zKClbMV0gLSB0aGlzLmNhbGN1bGF0ZVBvcygpWzBdICsgJyUnXG4gICAgICAgICAgICA6IHRoaXMuY2FsY3VsYXRlUG9zKCkgKyAnJScsXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIGhlaWdodDogdGhpcy5pc0R1YWwoKVxuICAgICAgICAgICAgPyB0aGlzLmNhbGN1bGF0ZVBvcygpWzFdIC0gdGhpcy5jYWxjdWxhdGVQb3MoKVswXSArICclJ1xuICAgICAgICAgICAgOiB0aGlzLmNhbGN1bGF0ZVBvcygpICsgJyUnLFxuICAgICAgICAgIGJvdHRvbTogdGhpcy5tb2RlKCkgPT09ICdkdWFsJyA/IHRoaXMuY2FsY3VsYXRlUG9zKClbMF0gKyAnJScgOiAnMCUnLFxuICAgICAgICB9LFxuICApO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIEFYUmFuZ2VTbGlkZXJIYW5kbGVyMSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5pc0hvcml6b250YWwoKVxuICAgICAgPyB7XG4gICAgICAgICAgbGVmdDogdGhpcy5pc0R1YWwoKSA/IHRoaXMuY2FsY3VsYXRlUG9zKClbMF0gKyAnJScgOiAodGhpcy5jYWxjdWxhdGVQb3MoKSBhcyBudW1iZXIpICsgJyUnLFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICBib3R0b206IHRoaXMuaXNEdWFsKClcbiAgICAgICAgICAgID8gJ2NhbGMoJyArIHRoaXMuY2FsY3VsYXRlUG9zKClbMF0gKyAnJSAtICcgKyA2ICogdGhpcy5oZWlnaHQgKyAncmVtKSdcbiAgICAgICAgICAgIDogJ2NhbGMoJyArIHRoaXMuY2FsY3VsYXRlUG9zKCkgKyAnJSAtICcgKyA2ICogdGhpcy5oZWlnaHQgKyAncmVtKScsXG4gICAgICAgIH0sXG4gICk7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgQVhSYW5nZVNsaWRlckhhbmRsZXIyID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmlzSG9yaXpvbnRhbCgpXG4gICAgICA/IHtcbiAgICAgICAgICBsZWZ0OiB0aGlzLmNhbGN1bGF0ZVBvcygpWzFdICsgJyUnLFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICBib3R0b206ICdjYWxjKCcgKyB0aGlzLmNhbGN1bGF0ZVBvcygpWzFdICsgJyUgLSAnICsgNiAqIHRoaXMuaGVpZ2h0ICsgJ3JlbSknLFxuICAgICAgICB9LFxuICApO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIEFYUmFuZ2VTbGlkZXJTdGVwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuc25hcE1vZGUoKSkge1xuICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICByZXR1cm4geyB0b3A6ICcwJywgaGVpZ2h0OiA4ICogdGhpcy5oZWlnaHQgKyAncmVtJyB9O1xuICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgcmV0dXJuIHsgdG9wOiA0ICogdGhpcy5oZWlnaHQgKyAncmVtJywgaGVpZ2h0OiA0ICogdGhpcy5oZWlnaHQgKyAncmVtJyB9O1xuICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgIHJldHVybiB7IHRvcDogLTIgKiB0aGlzLmhlaWdodCArICdyZW0nLCBoZWlnaHQ6IDQgKiB0aGlzLmhlaWdodCArICdyZW0nIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAodGhpcy5zbmFwTW9kZSgpKSB7XG4gICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgIHJldHVybiB7IHRvcDogJzAnLCB3aWR0aDogOCAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScgfTtcbiAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgIHJldHVybiB7IGxlZnQ6IDQgKiB0aGlzLmhlaWdodCArICdyZW0nLCB3aWR0aDogNCAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScgfTtcbiAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICByZXR1cm4geyBsZWZ0OiAtMiAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScsIHdpZHRoOiA0ICogdGhpcy5oZWlnaHQgKyAncmVtJyB9O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgQVhSYW5nZUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuc25hcE1vZGUoKSkge1xuICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICByZXR1cm4geyB0b3A6IDYgKiB0aGlzLmhlaWdodCArICdyZW0nIH07XG4gICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICByZXR1cm4geyB0b3A6IDQgKiB0aGlzLmhlaWdodCArICdyZW0nIH07XG4gICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgcmV0dXJuIHsgdG9wOiAtNiAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0aGlzLnNuYXBNb2RlKCkpIHtcbiAgICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgICAgcmV0dXJuIHsgbGVmdDogOCAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScgfTtcbiAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgIHJldHVybiB7IGxlZnQ6IDQgKiB0aGlzLmhlaWdodCArICdyZW0nIH07XG4gICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgcmV0dXJuIHsgbGVmdDogLTggKiB0aGlzLmhlaWdodCArICdyZW0nIH07XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5jb21taXRWYWx1ZSh0aGlzLnZhbHVlcygpKSk7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb3JyZWN0TWluTWF4KCkpIHtcbiAgICAgICAgICB0aGlzLmZpeEluaXRpYWxpemVWYWx1ZXMoKTtcbiAgICAgICAgICB0aGlzLmZpeENoYW5naW5nTW9kZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE1pbiA9ICR7dGhpcy5taW4oKX0gQW5kIE1heCA9ICR7dGhpcy5tYXgoKX0gaXMgbm90IGNvcnJlY3QgaW5wdXRzLmApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWU/LnZhbHVlICE9IHVuZGVmaW5lZCAmJiB2YWx1ZT8udmFsdWUgIT0gbnVsbCAmJiB0aGlzLnZhbHVlcygpICE9PSB2YWx1ZS52YWx1ZSlcbiAgICAgICAgdGhpcy52YWx1ZXMuc2V0KHZhbHVlLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgLy8od2luZG93IGFzIGFueSkucmFuZ2VTbGlkZXIgPSB0aGlzOyAvL2ZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5XG4gICAgaWYgKCF0aGlzLmNvcnJlY3RNaW5NYXgoKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgTWluID0gJHt0aGlzLm1pbigpfSBBbmQgTWF4ID0gJHt0aGlzLm1heCgpfSBpcyBub3QgY29ycmVjdCBpbnB1dHMuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVZhbHVlcygpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIG9uU3RhcnRIYW5kbGVyKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCwgY2lyY2xlOiAnZmlyc3QnIHwgJ3NlY29uZCcpOiB2b2lkIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSB8fCAhdGhpcy5jb3JyZWN0TWluTWF4KCkpIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNsaWRlckVsZW1lbnQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcuYXgtcmFuZ2Utc2xpZGVyJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAodGhpcy5zbGlkZXJFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY2hvb3NlbkhhbmRsZXIgPSBjaXJjbGU7XG4gICAgICAgIGNvbnN0IG1vdmVMaXN0ZW5lciA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB0aGlzLm9uTW92ZShtb3ZlRXZlbnQsIGNpcmNsZSk7XG4gICAgICAgIGNvbnN0IGVuZExpc3RlbmVyID0gKCkgPT4gdGhpcy5vbkVuZChtb3ZlTGlzdGVuZXIsIGVuZExpc3RlbmVyKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdmVMaXN0ZW5lcik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZW5kTGlzdGVuZXIpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgbW92ZUxpc3RlbmVyLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGVuZExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIG9uU3RhcnRCYXIoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgbGV0IGNpcmNsZTogJ2ZpcnN0JyB8ICdzZWNvbmQnID0gJ2ZpcnN0JztcbiAgICB0aGlzLnNsaWRlckVsZW1lbnQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcuYXgtcmFuZ2Utc2xpZGVyJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zbGlkZXJFbGVtZW50IHx8IHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuY29ycmVjdE1pbk1heCgpKSByZXR1cm47XG4gICAgICBjb25zdCBjYWxjdWxhdGVQZXJjZW50ID0gdGhpcy5jYWxjdWxhdGVQZXJjZW50T25Nb3ZlKGV2ZW50KTtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tUGVyY2VudChjYWxjdWxhdGVQZXJjZW50KTtcbiAgICAgIHZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUudG9GaXhlZCgyKSk7XG4gICAgICBpZiAodGhpcy5oYXNTdGVwKCkpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLnJvdW5kVG9TdGVwKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzRHVhbCgpKSB7XG4gICAgICAgIGlmICh2YWx1ZSA+PSAodGhpcy52YWx1ZXMoKVsxXSAtIHRoaXMudmFsdWVzKClbMF0pIC8gMikge1xuICAgICAgICAgIHRoaXMudmFsdWVzLnNldChbdGhpcy52YWx1ZXMoKVswXSwgdmFsdWVdKTtcbiAgICAgICAgICBjaXJjbGUgPSAnc2Vjb25kJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlcy5zZXQoW3ZhbHVlLCB0aGlzLnZhbHVlcygpWzFdXSk7XG4gICAgICAgICAgY2lyY2xlID0gJ2ZpcnN0JztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZXMuc2V0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9uU3RhcnRIYW5kbGVyKGV2ZW50LCBjaXJjbGUpO1xuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb25Nb3ZlKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCwgY2lyY2xlOiAnZmlyc3QnIHwgJ3NlY29uZCcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2xpZGVyRWxlbWVudCkgcmV0dXJuO1xuICAgIGNvbnN0IGNhbGN1bGF0ZVBlcmNlbnQgPSB0aGlzLmNhbGN1bGF0ZVBlcmNlbnRPbk1vdmUoZXZlbnQpO1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tUGVyY2VudChjYWxjdWxhdGVQZXJjZW50KTtcbiAgICB2YWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KHZhbHVlLnRvRml4ZWQoMikpO1xuICAgIGlmICh0aGlzLmhhc1N0ZXAoKSkge1xuICAgICAgdmFsdWUgPSB0aGlzLnJvdW5kVG9TdGVwKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEdWFsKCkpIHtcbiAgICAgIGlmIChjaXJjbGUgPT09ICdmaXJzdCcgJiYgdmFsdWUgPCB0aGlzLnZhbHVlcygpWzFdKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrVmFsdWVzKHZhbHVlLCAnZmlyc3QnLCB0aGlzLnZhbHVlcygpWzFdKSAmJiB0aGlzLnZhbHVlcygpWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWVzLnNldChbdmFsdWUsIHRoaXMudmFsdWVzKClbMV1dKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaXJjbGUgPT09ICdzZWNvbmQnICYmIHZhbHVlID4gdGhpcy52YWx1ZXMoKVswXSAmJiB0aGlzLnZhbHVlcygpWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgJ3NlY29uZCcsIHRoaXMudmFsdWVzKClbMF0pKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZXMuc2V0KFt0aGlzLnZhbHVlcygpWzBdLCB2YWx1ZV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsdWUodmFsdWUpICYmIHRoaXMudmFsdWVzKCkgIT09IHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWVzLnNldCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb25FbmQobW92ZUxpc3RlbmVyOiAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB2b2lkLCBlbmRMaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3ZlTGlzdGVuZXIpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZW5kTGlzdGVuZXIpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBtb3ZlTGlzdGVuZXIpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGVuZExpc3RlbmVyKTtcbiAgICB0aGlzLnNsaWRlckVsZW1lbnQgPSBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVWYWx1ZXMoKSB7XG4gICAgdGhpcy5maXhJbml0aWFsaXplVW5kZWZpbmVkKCk7XG4gICAgdGhpcy5maXhJbml0aWFsaXplVmFsdWVzKCk7XG4gICAgdGhpcy5maXhJbml0aWFsaXplU3RlcCgpO1xuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGZpeEluaXRpYWxpemVVbmRlZmluZWQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlcygpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMuaXNEdWFsKCkpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMuc2V0KFt0aGlzLm1pbigpLCB0aGlzLm1heCgpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlcy5zZXQodGhpcy5taW4oKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGZpeEluaXRpYWxpemVWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMuaXNEdWFsKCkgJiYgdGhpcy52YWx1ZXMoKVswXSA+IHRoaXMudmFsdWVzKClbMV0pIHtcbiAgICAgIHRoaXMudmFsdWVzLnNldChbdGhpcy52YWx1ZXMoKVsxXSwgdGhpcy52YWx1ZXMoKVswXV0pO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMudmFsdWVzKCkgPT09ICdudW1iZXInICYmICF0aGlzLmNoZWNrVmFsdWUodGhpcy52YWx1ZXMoKSBhcyBudW1iZXIpKSB7XG4gICAgICB0aGlzLnZhbHVlcy5zZXQodGhpcy5taW4oKSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVvZiB0aGlzLnZhbHVlcygpICE9PSAnbnVtYmVyJyAmJlxuICAgICAgIXRoaXMuY2hlY2tWYWx1ZXModGhpcy52YWx1ZXMoKVswXSwgJ2ZpcnN0JywgdGhpcy52YWx1ZXMoKVsxXSlcbiAgICApIHtcbiAgICAgIHRoaXMudmFsdWVzLnNldChbdGhpcy5taW4oKSwgdGhpcy5tYXgoKV0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBmaXhJbml0aWFsaXplU3RlcCgpIHtcbiAgICBpZiAodGhpcy5zdGVwKCkgIT09IDEpIHtcbiAgICAgIGlmICh0aGlzLmlzRHVhbCgpKSB7XG4gICAgICAgIHRoaXMudmFsdWVzLnVwZGF0ZSgob2xkKSA9PiBbdGhpcy5yb3VuZFRvU3RlcChvbGRbMF0pLCB0aGlzLnJvdW5kVG9TdGVwKG9sZFsxXSldKTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzKClbMF0gPT09IHRoaXMudmFsdWVzKClbMV0pIHtcbiAgICAgICAgICB0aGlzLnZhbHVlcy51cGRhdGUoKG9sZCkgPT4gW3RoaXMucm91bmRUb1N0ZXAob2xkWzBdKSwgdGhpcy5yb3VuZFRvU3RlcChvbGRbMV0pICsgdGhpcy5zdGVwKCldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZXMudXBkYXRlKChvbGQpID0+IHRoaXMucm91bmRUb1N0ZXAob2xkIGFzIG51bWJlcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBmaXhDaGFuZ2luZ01vZGUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlcygpID09PSAnbnVtYmVyJyAmJiB0aGlzLmlzRHVhbCgpKSB7XG4gICAgICB0aGlzLnZhbHVlcy5zZXQoW3RoaXMubWluKCksIHRoaXMubWF4KCldKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnZhbHVlcygpICE9PSAnbnVtYmVyJyAmJiAhdGhpcy5pc0R1YWwoKSkge1xuICAgICAgdGhpcy52YWx1ZXMuc2V0KHRoaXMubWluKCkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVQZXJjZW50T25Nb3ZlKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IG51bWJlciB7XG4gICAgY29uc3Qgc2xpZGVyUmVjdCA9IHRoaXMuc2xpZGVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBsZXQgcGVyY2VudDogbnVtYmVyO1xuICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICBjb25zdCBjbGllbnRYID0gZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ID8gZXZlbnQuY2xpZW50WCA6IChldmVudCBhcyBUb3VjaEV2ZW50KS50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICBjb25zdCB4ID0gY2xpZW50WCAtIHNsaWRlclJlY3QubGVmdDtcbiAgICAgIHBlcmNlbnQgPSAoeCAvIHNsaWRlclJlY3Qud2lkdGgpICogMTAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGllbnRZID0gZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ID8gZXZlbnQuY2xpZW50WSA6IChldmVudCBhcyBUb3VjaEV2ZW50KS50b3VjaGVzWzBdLmNsaWVudFk7XG4gICAgICBjb25zdCB5ID0gLShjbGllbnRZIC0gc2xpZGVyUmVjdC5ib3R0b20pOyAvL3JldmVyY2Ugc2xpZGVyIGZyb20gYm90dG9tIHRvIHRvcFxuICAgICAgcGVyY2VudCA9ICh5IC8gc2xpZGVyUmVjdC5oZWlnaHQpICogMTAwO1xuICAgIH1cbiAgICBpZiAocGVyY2VudCA8IDApIHtcbiAgICAgIHBlcmNlbnQgPSAwO1xuICAgIH0gZWxzZSBpZiAocGVyY2VudCA+IDEwMCkge1xuICAgICAgcGVyY2VudCA9IDEwMDtcbiAgICB9XG4gICAgcmV0dXJuIHBlcmNlbnQ7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSByb3VuZFRvU3RlcCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBsb3dlciA9IE1hdGgubWF4KFxuICAgICAgdGhpcy5taW4oKSxcbiAgICAgIE1hdGguZmxvb3IoKHZhbHVlIC0gdGhpcy5taW4oKSkgLyB0aGlzLnN0ZXAoKSkgKiB0aGlzLnN0ZXAoKSArIHRoaXMubWluKCksXG4gICAgKTtcbiAgICBjb25zdCB1cHBlciA9IE1hdGgubWluKHRoaXMubWF4KCksIGxvd2VyICsgdGhpcy5zdGVwKCkpO1xuICAgIGlmICh2YWx1ZSAtIGxvd2VyIDwgdXBwZXIgLSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGxvd2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdXBwZXI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgY2hlY2tWYWx1ZSh4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoeCA+PSB0aGlzLm1pbigpICYmIHggPD0gdGhpcy5tYXgoKSkgcmV0dXJuIHRydWU7XG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgY2hlY2tWYWx1ZXModmFsdWUxOiBudW1iZXIsIHk6ICdmaXJzdCcgfCAnc2Vjb25kJywgdmFsdWUyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAodmFsdWUxID49IHRoaXMubWluKCkgJiYgdmFsdWUxIDw9IHRoaXMubWF4KCkpIHtcbiAgICAgIGlmICh5ID09PSAnZmlyc3QnKSB7XG4gICAgICAgIGlmICh2YWx1ZTEgPCB2YWx1ZTIgJiYgdmFsdWUyIDw9IHRoaXMubWF4KCkpIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZTEgPiB2YWx1ZTIgJiYgdmFsdWUyID49IHRoaXMubWluKCkpIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VmFsdWVGcm9tUGVyY2VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMubWluKCkgKyAodmFsdWUgKiAodGhpcy5tYXgoKSAtIHRoaXMubWluKCkpKSAvIDEwMDtcbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFBlcmNhbnRhZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2UoKSAhPT0gMCA/ICh2YWx1ZSAvIHRoaXMucmFuZ2UoKSkgKiAxMDAgOiAwO1xuICB9XG4gIC8qKlxuICAgKiBJbmNyZWFzZSBhIHN0ZXAgdG8gdmFsdWUgaWYgc2xpZGVyIGluIHNpbmdsZSBtb2RlXG4gICAqIGFuZCBpbmNyZWFzZSBhIHN0ZXAgdGhlIHNlY29uZCB2YWx1ZSBpZiBzbGlkZXIgaW4gZHVhbCBtb2RlXG4gICAqIEBtZXRob2QgaW5jcmVhc2VTdGVwXG4gICAqL1xuICBwdWJsaWMgaW5jcmVhc2VTdGVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRHVhbCgpKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMucm91bmRUb1N0ZXAodGhpcy52YWx1ZXMoKVsxXSArIHRoaXMuc3RlcCgpKTtcbiAgICAgIHRoaXMudmFsdWVzLnNldChbdGhpcy52YWx1ZXMoKVswXSwgbmV3VmFsdWVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnJvdW5kVG9TdGVwKCh0aGlzLnZhbHVlcygpIGFzIG51bWJlcikgKyB0aGlzLnN0ZXAoKSk7XG4gICAgICB0aGlzLnZhbHVlcy5zZXQobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGVjcmVhc2UgYSBzdGVwIHRvIHZhbHVlIGlmIHNsaWRlciBpbiBzaW5nbGUgbW9kZVxuICAgKiBhbmQgZGVjcmVhc2UgYSBzdGVwIHRoZSBzZWNvbmQgdmFsdWUgaWYgc2xpZGVyIGluIGR1YWwgbW9kZVxuICAgKiBAbWV0aG9kIGRlY3JlYXNlU3RlcFxuICAgKi9cbiAgcHVibGljIGRlY3JlYXNlU3RlcCgpIHtcbiAgICBpZiAodGhpcy5pc0R1YWwoKSkge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnJvdW5kVG9TdGVwKHRoaXMudmFsdWVzKClbMF0gLSB0aGlzLnN0ZXAoKSk7XG4gICAgICB0aGlzLnZhbHVlcy5zZXQoW25ld1ZhbHVlLCB0aGlzLnZhbHVlcygpWzFdXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5yb3VuZFRvU3RlcCgodGhpcy52YWx1ZXMoKSBhcyBudW1iZXIpIC0gdGhpcy5zdGVwKCkpO1xuICAgICAgdGhpcy52YWx1ZXMuc2V0KG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ3doZWVsJywgWyckZXZlbnQnXSlcbiAgb25XaGVlbChldmVudDogV2hlZWxFdmVudCkge1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKCF0aGlzLmNob29zZW5IYW5kbGVyIHx8IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5jb3JyZWN0TWluTWF4KCkpIHJldHVybjtcbiAgICAgIGxldCBuZXdWYWx1ZTtcbiAgICAgIGlmICh0aGlzLmlzRHVhbCgpKSB7XG4gICAgICAgIGlmIChldmVudC5kZWx0YVkgPCAwKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hvb3NlbkhhbmRsZXIgPT09ICdmaXJzdCcpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5yb3VuZFRvU3RlcCgodGhpcy52YWx1ZXMoKVswXSBhcyBudW1iZXIpICsgdGhpcy5zdGVwKCkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmNoZWNrVmFsdWVzKG5ld1ZhbHVlLCB0aGlzLmNob29zZW5IYW5kbGVyLCB0aGlzLnZhbHVlcygpWzFdKSAmJlxuICAgICAgICAgICAgICB0aGlzLnZhbHVlcygpWzBdICE9PSBuZXdWYWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWVzLnVwZGF0ZSgob2xkKSA9PiBbdGhpcy5yb3VuZFRvU3RlcCgob2xkWzBdIGFzIG51bWJlcikgKyB0aGlzLnN0ZXAoKSksIG9sZFsxXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMucm91bmRUb1N0ZXAoKHRoaXMudmFsdWVzKClbMV0gYXMgbnVtYmVyKSArIHRoaXMuc3RlcCgpKTtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA8PSB0aGlzLm1heCgpICYmIHRoaXMudmFsdWVzKClbMV0gIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWVzLnVwZGF0ZSgob2xkKSA9PiBbb2xkWzBdLCB0aGlzLnJvdW5kVG9TdGVwKChvbGRbMV0gYXMgbnVtYmVyKSArIHRoaXMuc3RlcCgpKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5jaG9vc2VuSGFuZGxlciA9PT0gJ2ZpcnN0Jykge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnJvdW5kVG9TdGVwKCh0aGlzLnZhbHVlcygpWzBdIGFzIG51bWJlcikgLSB0aGlzLnN0ZXAoKSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZXMobmV3VmFsdWUsIHRoaXMuY2hvb3NlbkhhbmRsZXIsIHRoaXMudmFsdWVzKClbMV0pICYmXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVzKCkgIT09IG5ld1ZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZXMudXBkYXRlKChvbGQpID0+IFt0aGlzLnJvdW5kVG9TdGVwKChvbGRbMF0gYXMgbnVtYmVyKSAtIHRoaXMuc3RlcCgpKSwgb2xkWzFdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5yb3VuZFRvU3RlcCgodGhpcy52YWx1ZXMoKVsxXSBhcyBudW1iZXIpIC0gdGhpcy5zdGVwKCkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmNoZWNrVmFsdWVzKG5ld1ZhbHVlLCB0aGlzLmNob29zZW5IYW5kbGVyLCB0aGlzLnZhbHVlcygpWzBdKSAmJlxuICAgICAgICAgICAgICB0aGlzLnZhbHVlcygpWzFdICE9PSBuZXdWYWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWVzLnVwZGF0ZSgob2xkKSA9PiBbb2xkWzBdLCB0aGlzLnJvdW5kVG9TdGVwKChvbGRbMV0gYXMgbnVtYmVyKSAtIHRoaXMuc3RlcCgpKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcbiAgICAgICAgICBpZiAodGhpcy5jaGVja1ZhbHVlKHRoaXMucm91bmRUb1N0ZXAoKHRoaXMudmFsdWVzKCkgYXMgbnVtYmVyKSArIHRoaXMuc3RlcCgpKSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnVwZGF0ZSgob2xkKSA9PiB0aGlzLnJvdW5kVG9TdGVwKChvbGQgYXMgbnVtYmVyKSArIHRoaXMuc3RlcCgpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmNoZWNrVmFsdWUodGhpcy5yb3VuZFRvU3RlcCgodGhpcy52YWx1ZXMoKSBhcyBudW1iZXIpIC0gdGhpcy5zdGVwKCkpKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMudXBkYXRlKChvbGQpID0+IHRoaXMucm91bmRUb1N0ZXAoKG9sZCBhcyBudW1iZXIpIC0gdGhpcy5zdGVwKCkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIHByaXZhdGUgZ2V0IF9faG9zdENsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgYGF4LSR7dGhpcy5jb2xvcigpfS1zb2xpZGAsXG4gICAgICBgJHt0aGlzLmRpc2FibGVkID8gJ2F4LXN0YXRlLWRpc2FibGVkJyA6ICcnfWAsXG4gICAgICBgJHt0aGlzLnJlYWRvbmx5ID8gJ2F4LXN0YXRlLXJlYWRvbmx5JyA6ICcnfWAsXG4gICAgXTtcbiAgfVxufVxuIiwiQGlmIChjb3JyZWN0TWluTWF4KCkpIHtcbiAgPGRpdiBjbGFzcz1cImF4LXJhbmdlLXNsaWRlclwiIFtjbGFzc109XCInYXgtb3JpZW50YXRpb24tJyArIG9yaWVudGF0aW9uKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtcmFuZ2Utc2xpZGVyLWJhclwiIChtb3VzZWRvd24pPVwib25TdGFydEJhcigkZXZlbnQpXCIgKHRvdWNoc3RhcnQpPVwib25TdGFydEJhcigkZXZlbnQpXCI+PC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJheC1yYW5nZS1zbGlkZXItaGlnaGxpZ2h0XCJcbiAgICAgIFtuZ1N0eWxlXT1cIkFYUmFuZ2VTbGlkZXJIaWdobGlnaHQoKVwiXG4gICAgICAobW91c2Vkb3duKT1cIm9uU3RhcnRCYXIoJGV2ZW50KVwiXG4gICAgICAodG91Y2hzdGFydCk9XCJvblN0YXJ0QmFyKCRldmVudClcIlxuICAgID48L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYXgtcmFuZ2Utc2xpZGVyLWhhbmRsZXJcIlxuICAgICAgW25nU3R5bGVdPVwiQVhSYW5nZVNsaWRlckhhbmRsZXIxKClcIlxuICAgICAgbmFtZT1cImZpcnN0XCJcbiAgICAgIChtb3VzZWRvd24pPVwib25TdGFydEhhbmRsZXIoJGV2ZW50LCAnZmlyc3QnKVwiXG4gICAgICAodG91Y2hzdGFydCk9XCJvblN0YXJ0SGFuZGxlcigkZXZlbnQsICdmaXJzdCcpXCJcbiAgICA+XG4gICAgICBAaWYgKGhhc1Rvb2x0aXAoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtcmFuZ2Utc2xpZGVyLXRvb2x0aXBcIj57eyBpc0R1YWwoKSA/IHZhbHVlcygpWzBdIDogdmFsdWVzKCkgfX08L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoaXNEdWFsKCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJheC1yYW5nZS1zbGlkZXItaGFuZGxlclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIkFYUmFuZ2VTbGlkZXJIYW5kbGVyMigpXCJcbiAgICAgICAgbmFtZT1cInNlY29uZFwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25TdGFydEhhbmRsZXIoJGV2ZW50LCAnc2Vjb25kJylcIlxuICAgICAgICAodG91Y2hzdGFydCk9XCJvblN0YXJ0SGFuZGxlcigkZXZlbnQsICdzZWNvbmQnKVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoaGFzVG9vbHRpcCgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXJhbmdlLXNsaWRlci10b29sdGlwXCI+e3sgdmFsdWVzKClbMV0gfX08L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoaGFzU25hcCgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtcmFuZ2Utc2xpZGVyLXN0ZXBcIiBbbmdTdHlsZV09XCJBWFJhbmdlU2xpZGVyU3RlcCgpXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgY2FsY3VsYXRlU25hcEJhcigpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImF4LXJhbmdlLXNsaWRlci1zdGVwc1wiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJcbiAgICAgICAgICAgICAgaXNIb3Jpem9udGFsKCkgPyB7IGxlZnQ6IGdldFBlcmNhbnRhZ2UoaXRlbSkgKyAnJScgfSA6IHsgYm90dG9tOiBnZXRQZXJjYW50YWdlKGl0ZW0pICsgJyUnIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChoYXNMYWJsZSgpKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1yYW5nZS1zbGlkZXItbGFiZWxcIiBbbmdTdHlsZV09XCJBWFJhbmdlTGFiZWwoKVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0gKyBtaW4oKSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbn1cbiJdfQ==
|
642
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9yYW5nZS1zbGlkZXIvc3JjL2xpYi9yYW5nZS1zbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3JhbmdlLXNsaWRlci9zcmMvbGliL3JhbmdlLXNsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUNqQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFRbkM7Ozs7Ozs7R0FPRztBQWlCSCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsT0FBTyxDQUFDLENBQUEsZ0JBQW9DLENBQUEsQ0FBQztJQW1RdkY7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQW5RRixTQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlCOzs7O1dBSUc7UUFDSCxnQkFBVyxHQUFHLEtBQUssQ0FBZ0IsWUFBWSxDQUFDLENBQUM7UUFFakQ7Ozs7V0FJRztRQUNILFVBQUssR0FBRyxLQUFLLENBQW1CLFNBQVMsQ0FBQyxDQUFDO1FBRTNDOzs7V0FHRztRQUNILFdBQU0sR0FBRyxLQUFLLENBQXFCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQzs7OztX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QUUsV0FBVyx3QkFBd0IsRUFBRTt3QkFDckU7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3dEQTZoQkQsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkEwRHJCLFdBQVc7c0JBRHRCLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFYT3JpZW50YXRpb24sXG4gIEFYU3R5bGVDb2xvclR5cGUsXG4gIEFYVmFsdWFibGVDb21wb25lbnQsXG4gIE1YVmFsdWVDb21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgTmdab25lLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbW9kZWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbGFzc2VzIH0gZnJvbSAncG9seXR5cGUnO1xuaW1wb3J0IHtcbiAgQVhSYW5nZVNsaWRlck1vZGUsXG4gIEFYUmFuZ2VTbGlkZXJTbmFwTW9kZSxcbiAgQVhSYW5nZVNsaWRlclRvb2x0aXBNb2RlLFxuICBBWFJhbmdlU2xpZGVyVmFsdWUsXG59IGZyb20gJy4vcmFuZ2Utc2xpZGVyLmNsYXNzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgcmFuZ2Ugc2xpZGVyIGZvciBzZWxlY3RpbmcgYSByYW5nZSBvZiB2YWx1ZXMsIHN1cHBvcnRpbmcgYm90aCBzaW5nbGUgYW5kIGR1YWwgbW9kZXMuXG4gKiBUaGUgc2xpZGVyIG9mZmVycyBzdGVwLCBzbmFwLCBhbmQgdG9vbHRpcCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogPGF4LXJhbmdlLXNsaWRlciBbbWluXT1cIjBcIiBbbWF4XT1cIjEwMFwiIFtzdGVwXT1cIjFcIiBbbW9kZV09XCInZHVhbCdcIj48L2F4LXJhbmdlLXNsaWRlcj5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtcmFuZ2Utc2xpZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhbmdlLXNsaWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhbmdlLXNsaWRlci5jb21wb25lbnQuc2NzcyddLFxuICBpbnB1dHM6IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogQVhWYWx1YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYUmFuZ2VTbGlkZXJDb21wb25lbnQgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFYUmFuZ2VTbGlkZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhSYW5nZVNsaWRlckNvbXBvbmVudCBleHRlbmRzIGNsYXNzZXMoTVhWYWx1ZUNvbXBvbmVudDxBWFJhbmdlU2xpZGVyVmFsdWU+KSB7XG4gIHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIG9yaWVudGF0aW9uIG9mIHRoZSBzbGlkZXIsIGVpdGhlciAnaG9yaXpvbnRhbCcgb3IgJ3ZlcnRpY2FsJy5cbiAgICogQGRlZmF1bHQgJ2hvcml6b250YWwnXG4gICAqL1xuICBvcmllbnRhdGlvbiA9IGlucHV0PEFYT3JpZW50YXRpb24+KCdob3Jpem9udGFsJyk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDb2xvciB0aGVtZSBmb3IgdGhlIHNsaWRlciwgYWZmZWN0aW5nIGhpZ2hsaWdodCwgdG9vbHRpcCwgYW5kIGhhbmRsZXIuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3IgPSBpbnB1dDxBWFN0eWxlQ29sb3JUeXBlPigncHJpbWFyeScpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIHZhbHVlKHMpIG9mIHRoZSBzbGlkZXIuIENhbiBiZSBhIHNpbmdsZSBudW1iZXIgZm9yIHNpbmdsZSBtb2RlIG9yIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIGZvciBkdWFsIG1vZGUuXG4gICAqL1xuICB2YWx1ZXMgPSBtb2RlbDxBWFJhbmdlU2xpZGVyVmFsdWU+KHRoaXMudmFsdWUpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIG1vZGUgb2YgdGhlIHNsaWRlciwgZWl0aGVyICdzaW5nbGUnIG9yICdkdWFsJy5cbiAgICogQGRlZmF1bHQgJ3NpbmdsZSdcbiAgICovXG4gIG1vZGUgPSBpbnB1dDxBWFJhbmdlU2xpZGVyTW9kZT4oJ3NpbmdsZScpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIHNsaWRlci5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgbWluID0gaW5wdXQ8bnVtYmVyPigwKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBzbGlkZXIuXG4gICAqIEBkZWZhdWx0IDEwMFxuICAgKi9cbiAgbWF4ID0gaW5wdXQ8bnVtYmVyPigxMDApO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIHN0ZXAgaW5jcmVtZW50IGZvciB2YWx1ZSBjaGFuZ2VzLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBzdGVwID0gaW5wdXQ8bnVtYmVyPigxKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBzbmFwcGluZyBpbmNyZW1lbnQgZm9yIHRoZSBzbGlkZXIuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHNuYXAgPSBpbnB1dDxudW1iZXI+KDEpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTW9kZSBmb3IgZGlzcGxheWluZyB0b29sdGlwcywgY2FuIGJlIGF0IHRoZSBzdGFydCwgZW5kLCBvciBib3RoLlxuICAgKiBAZGVmYXVsdCAnZW5kJ1xuICAgKi9cbiAgdG9vbHRpcE1vZGUgPSBpbnB1dDxBWFJhbmdlU2xpZGVyVG9vbHRpcE1vZGU+KCdlbmQnKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE1vZGUgZm9yIHNuYXBwaW5nLCBjYW4gc25hcCBhdCB0aGUgc3RhcnQsIGVuZCwgb3IgYm90aC5cbiAgICogQGRlZmF1bHQgJ3N0YXJ0J1xuICAgKi9cbiAgc25hcE1vZGUgPSBpbnB1dDxBWFJhbmdlU2xpZGVyU25hcE1vZGU+KCdzdGFydCcpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hldGhlciB0aGUgc2xpZGVyIHNob3VsZCBoYXZlIHN0ZXBzLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBoYXNTdGVwID0gaW5wdXQodHJ1ZSk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGV0aGVyIHRoZSBzbGlkZXIgc2hvdWxkIGRpc3BsYXkgc25hcHBpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoYXNTbmFwID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hldGhlciB0aGUgc2xpZGVyIHNob3VsZCBkaXNwbGF5IGxhYmVscyBmb3Igc25hcHBpbmcgcG9pbnRzLlxuICAgKiBAZGVmYXVsdCBWYWx1ZSBkZXJpdmVkIGZyb20gYGhhc1NuYXAoKWBcbiAgICovXG4gIGhhc0xhYmxlID0gaW5wdXQodGhpcy5oYXNTbmFwKCkpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hldGhlciB0aGUgc2xpZGVyIHNob3VsZCBkaXNwbGF5IHRvb2x0aXBzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGFzVG9vbHRpcCA9IGlucHV0KGZhbHNlKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaGVpZ2h0ID0gMC4yNTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5ld0hlaWdodCA9ICd2YXIoLS1heC1yYW5nZS1zbGlkZXItYmFzZS10aGlja25lc3MpJztcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJhbmdlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tYXgoKSAtIHRoaXMubWluKCkpO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaXNIb3Jpem9udGFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcpO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaXNEdWFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tb2RlKCkgPT09ICdkdWFsJyk7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb3JyZWN0TWluTWF4ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tYXgoKSAtIHRoaXMubWluKCkgPiAwKTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZVNuYXBCYXIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaGFzU25hcCgpKSB7XG4gICAgICBsZXQgYXJyYXkgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLm1pbigpOyBpIDwgdGhpcy5tYXgoKTsgaSArPSB0aGlzLnNuYXAoKSkge1xuICAgICAgICBhcnJheS5wdXNoKGkpO1xuICAgICAgfVxuICAgICAgYXJyYXkgPSBbLi4uYXJyYXksIHRoaXMubWF4KCldO1xuICAgICAgaWYgKGFycmF5WzBdIDwgMCkge1xuICAgICAgICBhcnJheSA9IGFycmF5Lm1hcCgoaSkgPT4gaSArIC1hcnJheVswXSkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgfVxuICAgICAgaWYgKGFycmF5WzBdID4gMCkge1xuICAgICAgICBhcnJheSA9IGFycmF5Lm1hcCgoaSkgPT4gaSAtIGFycmF5WzBdKS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBjYWxjdWxhdGVQb3MgPSBjb21wdXRlZDxBWFJhbmdlU2xpZGVyVmFsdWU+KCgpID0+IHtcbiAgICBpZiAodGhpcy5pc0R1YWwoKSAmJiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAoKHRoaXMudmFsdWVzKClbMF0gLSB0aGlzLm1pbigpKSAvIHRoaXMucmFuZ2UoKSkgKiAxMDAsXG4gICAgICAgICgodGhpcy52YWx1ZXMoKVsxXSAtIHRoaXMubWluKCkpIC8gdGhpcy5yYW5nZSgpKSAqIDEwMCxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoKCh0aGlzLnZhbHVlcygpIGFzIG51bWJlcikgLSB0aGlzLm1pbigpKSAvIHRoaXMucmFuZ2UoKSkgKiAxMDA7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgY2hvb3NlbkhhbmRsZXI6ICdmaXJzdCcgfCAnc2Vjb25kJyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgc2xpZGVyRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBBWFJhbmdlU2xpZGVySGlnaGxpZ2h0ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmlzSG9yaXpvbnRhbCgpXG4gICAgICA/IHtcbiAgICAgICAgICBsZWZ0OiB0aGlzLmlzRHVhbCgpID8gdGhpcy5jYWxjdWxhdGVQb3MoKVswXSArICclJyA6ICcwJScsXG4gICAgICAgICAgd2lkdGg6IHRoaXMuaXNEdWFsKClcbiAgICAgICAgICAgID8gdGhpcy5jYWxjdWxhdGVQb3MoKVsxXSAtIHRoaXMuY2FsY3VsYXRlUG9zKClbMF0gKyAnJSdcbiAgICAgICAgICAgIDogdGhpcy5jYWxjdWxhdGVQb3MoKSArICclJyxcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmlzRHVhbCgpXG4gICAgICAgICAgICA/IHRoaXMuY2FsY3VsYXRlUG9zKClbMV0gLSB0aGlzLmNhbGN1bGF0ZVBvcygpWzBdICsgJyUnXG4gICAgICAgICAgICA6IHRoaXMuY2FsY3VsYXRlUG9zKCkgKyAnJScsXG4gICAgICAgICAgYm90dG9tOiB0aGlzLm1vZGUoKSA9PT0gJ2R1YWwnID8gdGhpcy5jYWxjdWxhdGVQb3MoKVswXSArICclJyA6ICcwJScsXG4gICAgICAgIH0sXG4gICk7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgQVhSYW5nZVNsaWRlckhhbmRsZXIxID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmlzSG9yaXpvbnRhbCgpXG4gICAgICA/IHtcbiAgICAgICAgICBsZWZ0OiB0aGlzLmlzRHVhbCgpID8gdGhpcy5jYWxjdWxhdGVQb3MoKVswXSArICclJyA6ICh0aGlzLmNhbGN1bGF0ZVBvcygpIGFzIG51bWJlcikgKyAnJScsXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIGJvdHRvbTogdGhpcy5pc0R1YWwoKVxuICAgICAgICAgICAgPyAnY2FsYygnICsgdGhpcy5jYWxjdWxhdGVQb3MoKVswXSArICclIC0gJyArIDYgKiB0aGlzLmhlaWdodCArICdyZW0pJ1xuICAgICAgICAgICAgOiAnY2FsYygnICsgdGhpcy5jYWxjdWxhdGVQb3MoKSArICclIC0gJyArIDYgKiB0aGlzLmhlaWdodCArICdyZW0pJyxcbiAgICAgICAgfSxcbiAgKTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBBWFJhbmdlU2xpZGVySGFuZGxlcjIgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuaXNIb3Jpem9udGFsKClcbiAgICAgID8ge1xuICAgICAgICAgIGxlZnQ6IHRoaXMuY2FsY3VsYXRlUG9zKClbMV0gKyAnJScsXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIGJvdHRvbTogJ2NhbGMoJyArIHRoaXMuY2FsY3VsYXRlUG9zKClbMV0gKyAnJSAtICcgKyA2ICogdGhpcy5oZWlnaHQgKyAncmVtKScsXG4gICAgICAgIH0sXG4gICk7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgQVhSYW5nZVNsaWRlclN0ZXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5zbmFwTW9kZSgpKSB7XG4gICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgIHJldHVybiB7IHRvcDogJzAnLCBoZWlnaHQ6IDggKiB0aGlzLmhlaWdodCArICdyZW0nIH07XG4gICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICByZXR1cm4geyB0b3A6IDQgKiB0aGlzLmhlaWdodCArICdyZW0nLCBoZWlnaHQ6IDQgKiB0aGlzLmhlaWdodCArICdyZW0nIH07XG4gICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgcmV0dXJuIHsgdG9wOiAtMiAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScsIGhlaWdodDogNCAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0aGlzLnNuYXBNb2RlKCkpIHtcbiAgICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgICAgcmV0dXJuIHsgdG9wOiAnMCcsIHdpZHRoOiA4ICogdGhpcy5oZWlnaHQgKyAncmVtJyB9O1xuICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgcmV0dXJuIHsgbGVmdDogNCAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScsIHdpZHRoOiA0ICogdGhpcy5oZWlnaHQgKyAncmVtJyB9O1xuICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgIHJldHVybiB7IGxlZnQ6IC0yICogdGhpcy5oZWlnaHQgKyAncmVtJywgd2lkdGg6IDQgKiB0aGlzLmhlaWdodCArICdyZW0nIH07XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBBWFJhbmdlTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5zbmFwTW9kZSgpKSB7XG4gICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgIHJldHVybiB7IHRvcDogNiAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScgfTtcbiAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgIHJldHVybiB7IHRvcDogNCAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScgfTtcbiAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICByZXR1cm4geyB0b3A6IC02ICogdGhpcy5oZWlnaHQgKyAncmVtJyB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuc25hcE1vZGUoKSkge1xuICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICByZXR1cm4geyBsZWZ0OiA4ICogdGhpcy5oZWlnaHQgKyAncmVtJyB9O1xuICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgcmV0dXJuIHsgbGVmdDogNCAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScgfTtcbiAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICByZXR1cm4geyBsZWZ0OiAtOCAqIHRoaXMuaGVpZ2h0ICsgJ3JlbScgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGVmZmVjdCgoKSA9PiB0aGlzLmNvbW1pdFZhbHVlKHRoaXMudmFsdWVzKCkpKTtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvcnJlY3RNaW5NYXgoKSkge1xuICAgICAgICAgIHRoaXMuZml4SW5pdGlhbGl6ZVZhbHVlcygpO1xuICAgICAgICAgIHRoaXMuZml4Q2hhbmdpbmdNb2RlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgTWluID0gJHt0aGlzLm1pbigpfSBBbmQgTWF4ID0gJHt0aGlzLm1heCgpfSBpcyBub3QgY29ycmVjdCBpbnB1dHMuYCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZT8udmFsdWUgIT0gdW5kZWZpbmVkICYmIHZhbHVlPy52YWx1ZSAhPSBudWxsICYmIHRoaXMudmFsdWVzKCkgIT09IHZhbHVlLnZhbHVlKVxuICAgICAgICB0aGlzLnZhbHVlcy5zZXQodmFsdWUudmFsdWUpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAvLyh3aW5kb3cgYXMgYW55KS5yYW5nZVNsaWRlciA9IHRoaXM7IC8vZm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHlcbiAgICBpZiAoIXRoaXMuY29ycmVjdE1pbk1heCgpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNaW4gPSAke3RoaXMubWluKCl9IEFuZCBNYXggPSAke3RoaXMubWF4KCl9IGlzIG5vdCBjb3JyZWN0IGlucHV0cy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0aWFsaXplVmFsdWVzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb25TdGFydEhhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50LCBjaXJjbGU6ICdmaXJzdCcgfCAnc2Vjb25kJyk6IHZvaWQge1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5IHx8ICF0aGlzLmNvcnJlY3RNaW5NYXgoKSkgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2xpZGVyRWxlbWVudCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5heC1yYW5nZS1zbGlkZXInKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmICh0aGlzLnNsaWRlckVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jaG9vc2VuSGFuZGxlciA9IGNpcmNsZTtcbiAgICAgICAgY29uc3QgbW92ZUxpc3RlbmVyID0gKG1vdmVFdmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpID0+IHRoaXMub25Nb3ZlKG1vdmVFdmVudCwgY2lyY2xlKTtcbiAgICAgICAgY29uc3QgZW5kTGlzdGVuZXIgPSAoKSA9PiB0aGlzLm9uRW5kKG1vdmVMaXN0ZW5lciwgZW5kTGlzdGVuZXIpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW92ZUxpc3RlbmVyKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBlbmRMaXN0ZW5lcik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBtb3ZlTGlzdGVuZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZW5kTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb25TdGFydEJhcihldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpIHtcbiAgICBsZXQgY2lyY2xlOiAnZmlyc3QnIHwgJ3NlY29uZCcgPSAnZmlyc3QnO1xuICAgIHRoaXMuc2xpZGVyRWxlbWVudCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5heC1yYW5nZS1zbGlkZXInKSBhcyBIVE1MRWxlbWVudDtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNsaWRlckVsZW1lbnQgfHwgdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5jb3JyZWN0TWluTWF4KCkpIHJldHVybjtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZVBlcmNlbnQgPSB0aGlzLmNhbGN1bGF0ZVBlcmNlbnRPbk1vdmUoZXZlbnQpO1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21QZXJjZW50KGNhbGN1bGF0ZVBlcmNlbnQpO1xuICAgICAgdmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZS50b0ZpeGVkKDIpKTtcbiAgICAgIGlmICh0aGlzLmhhc1N0ZXAoKSkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMucm91bmRUb1N0ZXAodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNEdWFsKCkpIHtcbiAgICAgICAgaWYgKHZhbHVlID49ICh0aGlzLnZhbHVlcygpWzFdIC0gdGhpcy52YWx1ZXMoKVswXSkgLyAyKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZXMuc2V0KFt0aGlzLnZhbHVlcygpWzBdLCB2YWx1ZV0pO1xuICAgICAgICAgIGNpcmNsZSA9ICdzZWNvbmQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWVzLnNldChbdmFsdWUsIHRoaXMudmFsdWVzKClbMV1dKTtcbiAgICAgICAgICBjaXJjbGUgPSAnZmlyc3QnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlcy5zZXQodmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub25TdGFydEhhbmRsZXIoZXZlbnQsIGNpcmNsZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBvbk1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50LCBjaXJjbGU6ICdmaXJzdCcgfCAnc2Vjb25kJyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zbGlkZXJFbGVtZW50KSByZXR1cm47XG4gICAgY29uc3QgY2FsY3VsYXRlUGVyY2VudCA9IHRoaXMuY2FsY3VsYXRlUGVyY2VudE9uTW92ZShldmVudCk7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21QZXJjZW50KGNhbGN1bGF0ZVBlcmNlbnQpO1xuICAgIHZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUudG9GaXhlZCgyKSk7XG4gICAgaWYgKHRoaXMuaGFzU3RlcCgpKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucm91bmRUb1N0ZXAodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0R1YWwoKSkge1xuICAgICAgaWYgKGNpcmNsZSA9PT0gJ2ZpcnN0JyAmJiB2YWx1ZSA8IHRoaXMudmFsdWVzKClbMV0pIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tWYWx1ZXModmFsdWUsICdmaXJzdCcsIHRoaXMudmFsdWVzKClbMV0pICYmIHRoaXMudmFsdWVzKClbMF0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZXMuc2V0KFt2YWx1ZSwgdGhpcy52YWx1ZXMoKVsxXV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNpcmNsZSA9PT0gJ3NlY29uZCcgJiYgdmFsdWUgPiB0aGlzLnZhbHVlcygpWzBdICYmIHRoaXMudmFsdWVzKClbMV0gIT09IHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrVmFsdWVzKHZhbHVlLCAnc2Vjb25kJywgdGhpcy52YWx1ZXMoKVswXSkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlcy5zZXQoW3RoaXMudmFsdWVzKClbMF0sIHZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY2hlY2tWYWx1ZSh2YWx1ZSkgJiYgdGhpcy52YWx1ZXMoKSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMuc2V0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBvbkVuZChtb3ZlTGlzdGVuZXI6IChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQsIGVuZExpc3RlbmVyOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdmVMaXN0ZW5lcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBlbmRMaXN0ZW5lcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG1vdmVMaXN0ZW5lcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZW5kTGlzdGVuZXIpO1xuICAgIHRoaXMuc2xpZGVyRWxlbWVudCA9IG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVZhbHVlcygpIHtcbiAgICB0aGlzLmZpeEluaXRpYWxpemVVbmRlZmluZWQoKTtcbiAgICB0aGlzLmZpeEluaXRpYWxpemVWYWx1ZXMoKTtcbiAgICB0aGlzLmZpeEluaXRpYWxpemVTdGVwKCk7XG4gIH1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgZml4SW5pdGlhbGl6ZVVuZGVmaW5lZCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudmFsdWVzKCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5pc0R1YWwoKSkge1xuICAgICAgICB0aGlzLnZhbHVlcy5zZXQoW3RoaXMubWluKCksIHRoaXMubWF4KCldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWVzLnNldCh0aGlzLm1pbigpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgZml4SW5pdGlhbGl6ZVZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5pc0R1YWwoKSAmJiB0aGlzLnZhbHVlcygpWzBdID4gdGhpcy52YWx1ZXMoKVsxXSkge1xuICAgICAgdGhpcy52YWx1ZXMuc2V0KFt0aGlzLnZhbHVlcygpWzFdLCB0aGlzLnZhbHVlcygpWzBdXSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZXMoKSA9PT0gJ251bWJlcicgJiYgIXRoaXMuY2hlY2tWYWx1ZSh0aGlzLnZhbHVlcygpIGFzIG51bWJlcikpIHtcbiAgICAgIHRoaXMudmFsdWVzLnNldCh0aGlzLm1pbigpKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZW9mIHRoaXMudmFsdWVzKCkgIT09ICdudW1iZXInICYmXG4gICAgICAhdGhpcy5jaGVja1ZhbHVlcyh0aGlzLnZhbHVlcygpWzBdLCAnZmlyc3QnLCB0aGlzLnZhbHVlcygpWzFdKVxuICAgICkge1xuICAgICAgdGhpcy52YWx1ZXMuc2V0KFt0aGlzLm1pbigpLCB0aGlzLm1heCgpXSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGZpeEluaXRpYWxpemVTdGVwKCkge1xuICAgIGlmICh0aGlzLnN0ZXAoKSAhPT0gMSkge1xuICAgICAgaWYgKHRoaXMuaXNEdWFsKCkpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMudXBkYXRlKChvbGQpID0+IFt0aGlzLnJvdW5kVG9TdGVwKG9sZFswXSksIHRoaXMucm91bmRUb1N0ZXAob2xkWzFdKV0pO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXMoKVswXSA9PT0gdGhpcy52YWx1ZXMoKVsxXSkge1xuICAgICAgICAgIHRoaXMudmFsdWVzLnVwZGF0ZSgob2xkKSA9PiBbdGhpcy5yb3VuZFRvU3RlcChvbGRbMF0pLCB0aGlzLnJvdW5kVG9TdGVwKG9sZFsxXSkgKyB0aGlzLnN0ZXAoKV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlcy51cGRhdGUoKG9sZCkgPT4gdGhpcy5yb3VuZFRvU3RlcChvbGQgYXMgbnVtYmVyKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGZpeENoYW5naW5nTW9kZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudmFsdWVzKCkgPT09ICdudW1iZXInICYmIHRoaXMuaXNEdWFsKCkpIHtcbiAgICAgIHRoaXMudmFsdWVzLnNldChbdGhpcy5taW4oKSwgdGhpcy5tYXgoKV0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMudmFsdWVzKCkgIT09ICdudW1iZXInICYmICF0aGlzLmlzRHVhbCgpKSB7XG4gICAgICB0aGlzLnZhbHVlcy5zZXQodGhpcy5taW4oKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZVBlcmNlbnRPbk1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCBzbGlkZXJSZWN0ID0gdGhpcy5zbGlkZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBwZXJjZW50OiBudW1iZXI7XG4gICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudFggPSBldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgPyBldmVudC5jbGllbnRYIDogKGV2ZW50IGFzIFRvdWNoRXZlbnQpLnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIGNvbnN0IHggPSBjbGllbnRYIC0gc2xpZGVyUmVjdC5sZWZ0O1xuICAgICAgcGVyY2VudCA9ICh4IC8gc2xpZGVyUmVjdC53aWR0aCkgKiAxMDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNsaWVudFkgPSBldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgPyBldmVudC5jbGllbnRZIDogKGV2ZW50IGFzIFRvdWNoRXZlbnQpLnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgIGNvbnN0IHkgPSAtKGNsaWVudFkgLSBzbGlkZXJSZWN0LmJvdHRvbSk7IC8vcmV2ZXJjZSBzbGlkZXIgZnJvbSBib3R0b20gdG8gdG9wXG4gICAgICBwZXJjZW50ID0gKHkgLyBzbGlkZXJSZWN0LmhlaWdodCkgKiAxMDA7XG4gICAgfVxuICAgIGlmIChwZXJjZW50IDwgMCkge1xuICAgICAgcGVyY2VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChwZXJjZW50ID4gMTAwKSB7XG4gICAgICBwZXJjZW50ID0gMTAwO1xuICAgIH1cbiAgICByZXR1cm4gcGVyY2VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIHJvdW5kVG9TdGVwKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGxvd2VyID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLm1pbigpLFxuICAgICAgTWF0aC5mbG9vcigodmFsdWUgLSB0aGlzLm1pbigpKSAvIHRoaXMuc3RlcCgpKSAqIHRoaXMuc3RlcCgpICsgdGhpcy5taW4oKSxcbiAgICApO1xuICAgIGNvbnN0IHVwcGVyID0gTWF0aC5taW4odGhpcy5tYXgoKSwgbG93ZXIgKyB0aGlzLnN0ZXAoKSk7XG4gICAgaWYgKHZhbHVlIC0gbG93ZXIgPCB1cHBlciAtIHZhbHVlKSB7XG4gICAgICByZXR1cm4gbG93ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1cHBlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1ZhbHVlKHg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh4ID49IHRoaXMubWluKCkgJiYgeCA8PSB0aGlzLm1heCgpKSByZXR1cm4gdHJ1ZTtcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1ZhbHVlcyh2YWx1ZTE6IG51bWJlciwgeTogJ2ZpcnN0JyB8ICdzZWNvbmQnLCB2YWx1ZTI6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh2YWx1ZTEgPj0gdGhpcy5taW4oKSAmJiB2YWx1ZTEgPD0gdGhpcy5tYXgoKSkge1xuICAgICAgaWYgKHkgPT09ICdmaXJzdCcpIHtcbiAgICAgICAgaWYgKHZhbHVlMSA8IHZhbHVlMiAmJiB2YWx1ZTIgPD0gdGhpcy5tYXgoKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlMSA+IHZhbHVlMiAmJiB2YWx1ZTIgPj0gdGhpcy5taW4oKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBnZXRWYWx1ZUZyb21QZXJjZW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5taW4oKSArICh2YWx1ZSAqICh0aGlzLm1heCgpIC0gdGhpcy5taW4oKSkpIC8gMTAwO1xuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0UGVyY2FudGFnZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZSgpICE9PSAwID8gKHZhbHVlIC8gdGhpcy5yYW5nZSgpKSAqIDEwMCA6IDA7XG4gIH1cbiAgLyoqXG4gICAqIEluY3JlYXNlIGEgc3RlcCB0byB2YWx1ZSBpZiBzbGlkZXIgaW4gc2luZ2xlIG1vZGVcbiAgICogYW5kIGluY3JlYXNlIGEgc3RlcCB0aGUgc2Vjb25kIHZhbHVlIGlmIHNsaWRlciBpbiBkdWFsIG1vZGVcbiAgICogQG1ldGhvZCBpbmNyZWFzZVN0ZXBcbiAgICovXG4gIHB1YmxpYyBpbmNyZWFzZVN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEdWFsKCkpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5yb3VuZFRvU3RlcCh0aGlzLnZhbHVlcygpWzFdICsgdGhpcy5zdGVwKCkpO1xuICAgICAgdGhpcy52YWx1ZXMuc2V0KFt0aGlzLnZhbHVlcygpWzBdLCBuZXdWYWx1ZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMucm91bmRUb1N0ZXAoKHRoaXMudmFsdWVzKCkgYXMgbnVtYmVyKSArIHRoaXMuc3RlcCgpKTtcbiAgICAgIHRoaXMudmFsdWVzLnNldChuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEZWNyZWFzZSBhIHN0ZXAgdG8gdmFsdWUgaWYgc2xpZGVyIGluIHNpbmdsZSBtb2RlXG4gICAqIGFuZCBkZWNyZWFzZSBhIHN0ZXAgdGhlIHNlY29uZCB2YWx1ZSBpZiBzbGlkZXIgaW4gZHVhbCBtb2RlXG4gICAqIEBtZXRob2QgZGVjcmVhc2VTdGVwXG4gICAqL1xuICBwdWJsaWMgZGVjcmVhc2VTdGVwKCkge1xuICAgIGlmICh0aGlzLmlzRHVhbCgpKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMucm91bmRUb1N0ZXAodGhpcy52YWx1ZXMoKVswXSAtIHRoaXMuc3RlcCgpKTtcbiAgICAgIHRoaXMudmFsdWVzLnNldChbbmV3VmFsdWUsIHRoaXMudmFsdWVzKClbMV1dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnJvdW5kVG9TdGVwKCh0aGlzLnZhbHVlcygpIGFzIG51bWJlcikgLSB0aGlzLnN0ZXAoKSk7XG4gICAgICB0aGlzLnZhbHVlcy5zZXQobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignd2hlZWwnLCBbJyRldmVudCddKVxuICBvbldoZWVsKGV2ZW50OiBXaGVlbEV2ZW50KSB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoIXRoaXMuY2hvb3NlbkhhbmRsZXIgfHwgdGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmNvcnJlY3RNaW5NYXgoKSkgcmV0dXJuO1xuICAgICAgbGV0IG5ld1ZhbHVlO1xuICAgICAgaWYgKHRoaXMuaXNEdWFsKCkpIHtcbiAgICAgICAgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcbiAgICAgICAgICBpZiAodGhpcy5jaG9vc2VuSGFuZGxlciA9PT0gJ2ZpcnN0Jykge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnJvdW5kVG9TdGVwKCh0aGlzLnZhbHVlcygpWzBdIGFzIG51bWJlcikgKyB0aGlzLnN0ZXAoKSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZXMobmV3VmFsdWUsIHRoaXMuY2hvb3NlbkhhbmRsZXIsIHRoaXMudmFsdWVzKClbMV0pICYmXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVzKClbMF0gIT09IG5ld1ZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZXMudXBkYXRlKChvbGQpID0+IFt0aGlzLnJvdW5kVG9TdGVwKChvbGRbMF0gYXMgbnVtYmVyKSArIHRoaXMuc3RlcCgpKSwgb2xkWzFdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5yb3VuZFRvU3RlcCgodGhpcy52YWx1ZXMoKVsxXSBhcyBudW1iZXIpICsgdGhpcy5zdGVwKCkpO1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlIDw9IHRoaXMubWF4KCkgJiYgdGhpcy52YWx1ZXMoKVsxXSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZXMudXBkYXRlKChvbGQpID0+IFtvbGRbMF0sIHRoaXMucm91bmRUb1N0ZXAoKG9sZFsxXSBhcyBudW1iZXIpICsgdGhpcy5zdGVwKCkpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmNob29zZW5IYW5kbGVyID09PSAnZmlyc3QnKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMucm91bmRUb1N0ZXAoKHRoaXMudmFsdWVzKClbMF0gYXMgbnVtYmVyKSAtIHRoaXMuc3RlcCgpKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyhuZXdWYWx1ZSwgdGhpcy5jaG9vc2VuSGFuZGxlciwgdGhpcy52YWx1ZXMoKVsxXSkgJiZcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZXMoKSAhPT0gbmV3VmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlcy51cGRhdGUoKG9sZCkgPT4gW3RoaXMucm91bmRUb1N0ZXAoKG9sZFswXSBhcyBudW1iZXIpIC0gdGhpcy5zdGVwKCkpLCBvbGRbMV1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnJvdW5kVG9TdGVwKCh0aGlzLnZhbHVlcygpWzFdIGFzIG51bWJlcikgLSB0aGlzLnN0ZXAoKSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZXMobmV3VmFsdWUsIHRoaXMuY2hvb3NlbkhhbmRsZXIsIHRoaXMudmFsdWVzKClbMF0pICYmXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVzKClbMV0gIT09IG5ld1ZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZXMudXBkYXRlKChvbGQpID0+IFtvbGRbMF0sIHRoaXMucm91bmRUb1N0ZXAoKG9sZFsxXSBhcyBudW1iZXIpIC0gdGhpcy5zdGVwKCkpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZXZlbnQuZGVsdGFZIDwgMCkge1xuICAgICAgICAgIGlmICh0aGlzLmNoZWNrVmFsdWUodGhpcy5yb3VuZFRvU3RlcCgodGhpcy52YWx1ZXMoKSBhcyBudW1iZXIpICsgdGhpcy5zdGVwKCkpKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMudXBkYXRlKChvbGQpID0+IHRoaXMucm91bmRUb1N0ZXAoKG9sZCBhcyBudW1iZXIpICsgdGhpcy5zdGVwKCkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tWYWx1ZSh0aGlzLnJvdW5kVG9TdGVwKCh0aGlzLnZhbHVlcygpIGFzIG51bWJlcikgLSB0aGlzLnN0ZXAoKSkpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy51cGRhdGUoKG9sZCkgPT4gdGhpcy5yb3VuZFRvU3RlcCgob2xkIGFzIG51bWJlcikgLSB0aGlzLnN0ZXAoKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcHJpdmF0ZSBnZXQgX19ob3N0Q2xhc3MoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICBgYXgtJHt0aGlzLmNvbG9yKCl9LXNvbGlkYCxcbiAgICAgIGAke3RoaXMuZGlzYWJsZWQgPyAnYXgtc3RhdGUtZGlzYWJsZWQnIDogJyd9YCxcbiAgICAgIGAke3RoaXMucmVhZG9ubHkgPyAnYXgtc3RhdGUtcmVhZG9ubHknIDogJyd9YCxcbiAgICBdO1xuICB9XG59XG4iLCJAaWYgKGNvcnJlY3RNaW5NYXgoKSkge1xuICA8ZGl2IGNsYXNzPVwiYXgtcmFuZ2Utc2xpZGVyXCIgW2NsYXNzXT1cIidheC1vcmllbnRhdGlvbi0nICsgb3JpZW50YXRpb24oKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1yYW5nZS1zbGlkZXItYmFyXCIgKG1vdXNlZG93bik9XCJvblN0YXJ0QmFyKCRldmVudClcIiAodG91Y2hzdGFydCk9XCJvblN0YXJ0QmFyKCRldmVudClcIj48L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImF4LXJhbmdlLXNsaWRlci1oaWdobGlnaHRcIlxuICAgICAgW25nU3R5bGVdPVwiQVhSYW5nZVNsaWRlckhpZ2hsaWdodCgpXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25TdGFydEJhcigkZXZlbnQpXCJcbiAgICAgICh0b3VjaHN0YXJ0KT1cIm9uU3RhcnRCYXIoJGV2ZW50KVwiXG4gICAgPjwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJheC1yYW5nZS1zbGlkZXItaGFuZGxlclwiXG4gICAgICBbbmdTdHlsZV09XCJBWFJhbmdlU2xpZGVySGFuZGxlcjEoKVwiXG4gICAgICBuYW1lPVwiZmlyc3RcIlxuICAgICAgKG1vdXNlZG93bik9XCJvblN0YXJ0SGFuZGxlcigkZXZlbnQsICdmaXJzdCcpXCJcbiAgICAgICh0b3VjaHN0YXJ0KT1cIm9uU3RhcnRIYW5kbGVyKCRldmVudCwgJ2ZpcnN0JylcIlxuICAgID5cbiAgICAgIEBpZiAoaGFzVG9vbHRpcCgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1yYW5nZS1zbGlkZXItdG9vbHRpcFwiPnt7IGlzRHVhbCgpID8gdmFsdWVzKClbMF0gOiB2YWx1ZXMoKSB9fTwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChpc0R1YWwoKSkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImF4LXJhbmdlLXNsaWRlci1oYW5kbGVyXCJcbiAgICAgICAgW25nU3R5bGVdPVwiQVhSYW5nZVNsaWRlckhhbmRsZXIyKClcIlxuICAgICAgICBuYW1lPVwic2Vjb25kXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvblN0YXJ0SGFuZGxlcigkZXZlbnQsICdzZWNvbmQnKVwiXG4gICAgICAgICh0b3VjaHN0YXJ0KT1cIm9uU3RhcnRIYW5kbGVyKCRldmVudCwgJ3NlY29uZCcpXCJcbiAgICAgID5cbiAgICAgICAgQGlmIChoYXNUb29sdGlwKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtcmFuZ2Utc2xpZGVyLXRvb2x0aXBcIj57eyB2YWx1ZXMoKVsxXSB9fTwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChoYXNTbmFwKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJheC1yYW5nZS1zbGlkZXItc3RlcFwiIFtuZ1N0eWxlXT1cIkFYUmFuZ2VTbGlkZXJTdGVwKClcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBjYWxjdWxhdGVTbmFwQmFyKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtcmFuZ2Utc2xpZGVyLXN0ZXBzXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIlxuICAgICAgICAgICAgICBpc0hvcml6b250YWwoKSA/IHsgbGVmdDogZ2V0UGVyY2FudGFnZShpdGVtKSArICclJyB9IDogeyBib3R0b206IGdldFBlcmNhbnRhZ2UoaXRlbSkgKyAnJScgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGhhc0xhYmxlKCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXJhbmdlLXNsaWRlci1sYWJlbFwiIFtuZ1N0eWxlXT1cIkFYUmFuZ2VMYWJlbCgpXCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbSArIG1pbigpIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxufVxuIl19
|