@skyux/progress-indicator 7.0.0-beta.8 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/documentation.json +547 -426
- package/esm2020/lib/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.mjs +47 -28
- package/esm2020/lib/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button-class.pipe.mjs +28 -0
- package/esm2020/lib/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button-disabled.pipe.mjs +19 -0
- package/esm2020/lib/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.mjs +73 -90
- package/esm2020/lib/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.mjs +7 -8
- package/esm2020/lib/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker-class.pipe.mjs +31 -0
- package/esm2020/lib/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.mjs +26 -44
- package/esm2020/lib/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.mjs +4 -4
- package/esm2020/lib/modules/progress-indicator/progress-indicator.component.mjs +202 -212
- package/esm2020/lib/modules/progress-indicator/progress-indicator.module.mjs +14 -5
- package/esm2020/lib/modules/progress-indicator/types/progress-indicator-action-click-progress-handler.mjs +1 -1
- package/esm2020/lib/modules/progress-indicator/types/progress-indicator-message.mjs +1 -1
- package/esm2020/lib/modules/shared/sky-progress-indicator-resources.module.mjs +5 -5
- package/fesm2015/skyux-progress-indicator.mjs +443 -388
- package/fesm2015/skyux-progress-indicator.mjs.map +1 -1
- package/fesm2020/skyux-progress-indicator.mjs +449 -401
- package/fesm2020/skyux-progress-indicator.mjs.map +1 -1
- package/lib/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.d.ts +9 -9
- package/lib/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button-class.pipe.d.ts +7 -0
- package/lib/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button-disabled.pipe.d.ts +9 -0
- package/lib/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.d.ts +12 -21
- package/lib/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.d.ts +4 -4
- package/lib/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker-class.pipe.d.ts +8 -0
- package/lib/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.d.ts +3 -6
- package/lib/modules/progress-indicator/progress-indicator.component.d.ts +13 -39
- package/lib/modules/progress-indicator/progress-indicator.module.d.ts +14 -11
- package/lib/modules/progress-indicator/types/progress-indicator-action-click-progress-handler.d.ts +2 -2
- package/package.json +7 -7
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
1
|
+
var _SkyProgressIndicatorComponent_instances, _SkyProgressIndicatorComponent_activeIndex_set, _SkyProgressIndicatorComponent_activeIndex_get, _SkyProgressIndicatorComponent__activeIndex, _SkyProgressIndicatorComponent__displayMode, _SkyProgressIndicatorComponent__hasFinishButton, _SkyProgressIndicatorComponent__isPassive, _SkyProgressIndicatorComponent__startingIndex, _SkyProgressIndicatorComponent_messageStreamSub, _SkyProgressIndicatorComponent_initialized, _SkyProgressIndicatorComponent_ngUnsubscribe, _SkyProgressIndicatorComponent_messageStream, _SkyProgressIndicatorComponent_changeDetector, _SkyProgressIndicatorComponent_windowRef, _SkyProgressIndicatorComponent_logger, _SkyProgressIndicatorComponent_isPassiveAndVertical, _SkyProgressIndicatorComponent_gotoNextStep, _SkyProgressIndicatorComponent_gotoPreviousStep, _SkyProgressIndicatorComponent_gotoStep, _SkyProgressIndicatorComponent_finishSteps, _SkyProgressIndicatorComponent_resetSteps, _SkyProgressIndicatorComponent_updateSteps, _SkyProgressIndicatorComponent_updateItemStatuses, _SkyProgressIndicatorComponent_updateCssClassNames, _SkyProgressIndicatorComponent_handleIncomingMessage, _SkyProgressIndicatorComponent_subscribeToMessageStream, _SkyProgressIndicatorComponent_updateStatusesAndNotify, _SkyProgressIndicatorComponent_getLastIndex;
|
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
+
import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Output, } from '@angular/core';
|
|
3
4
|
import { Subject } from 'rxjs';
|
|
4
5
|
import { delay, takeUntil } from 'rxjs/operators';
|
|
5
6
|
import { SkyProgressIndicatorItemComponent } from './progress-indicator-item/progress-indicator-item.component';
|
|
@@ -12,16 +13,28 @@ import * as i2 from "@angular/common";
|
|
|
12
13
|
import * as i3 from "./progress-indicator-status-marker/progress-indicator-status-marker.component";
|
|
13
14
|
export class SkyProgressIndicatorComponent {
|
|
14
15
|
constructor(changeDetector, windowRef, logger) {
|
|
15
|
-
this
|
|
16
|
-
this.windowRef = windowRef;
|
|
17
|
-
this.logger = logger;
|
|
16
|
+
_SkyProgressIndicatorComponent_instances.add(this);
|
|
18
17
|
/**
|
|
19
18
|
* Fires when the progress indicator changes the status of an item.
|
|
20
19
|
*/
|
|
21
20
|
this.progressChanges = new EventEmitter();
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this
|
|
21
|
+
this.cssClassNames = [];
|
|
22
|
+
this.itemStatuses = [];
|
|
23
|
+
_SkyProgressIndicatorComponent__activeIndex.set(this, 0);
|
|
24
|
+
_SkyProgressIndicatorComponent__displayMode.set(this, 'vertical');
|
|
25
|
+
_SkyProgressIndicatorComponent__hasFinishButton.set(this, void 0);
|
|
26
|
+
_SkyProgressIndicatorComponent__isPassive.set(this, false);
|
|
27
|
+
_SkyProgressIndicatorComponent__startingIndex.set(this, 0);
|
|
28
|
+
_SkyProgressIndicatorComponent_messageStreamSub.set(this, void 0);
|
|
29
|
+
_SkyProgressIndicatorComponent_initialized.set(this, false);
|
|
30
|
+
_SkyProgressIndicatorComponent_ngUnsubscribe.set(this, new Subject());
|
|
31
|
+
_SkyProgressIndicatorComponent_messageStream.set(this, new Subject());
|
|
32
|
+
_SkyProgressIndicatorComponent_changeDetector.set(this, void 0);
|
|
33
|
+
_SkyProgressIndicatorComponent_windowRef.set(this, void 0);
|
|
34
|
+
_SkyProgressIndicatorComponent_logger.set(this, void 0);
|
|
35
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_changeDetector, changeDetector, "f");
|
|
36
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_windowRef, windowRef, "f");
|
|
37
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_logger, logger, "f");
|
|
25
38
|
}
|
|
26
39
|
/**
|
|
27
40
|
* Specifies whether to display the progress indicator vertically or horizontally.
|
|
@@ -35,19 +48,24 @@ export class SkyProgressIndicatorComponent {
|
|
|
35
48
|
* @default "vertical"
|
|
36
49
|
*/
|
|
37
50
|
set displayMode(value) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
51
|
+
switch (value) {
|
|
52
|
+
case SkyProgressIndicatorDisplayMode.Horizontal:
|
|
53
|
+
case 'horizontal':
|
|
54
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent__displayMode, 'horizontal', "f");
|
|
55
|
+
break;
|
|
56
|
+
default:
|
|
57
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent__displayMode, 'vertical', "f");
|
|
58
|
+
}
|
|
59
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateCssClassNames).call(this);
|
|
60
|
+
if (__classPrivateFieldGet(this, _SkyProgressIndicatorComponent__displayMode, "f") === 'horizontal') {
|
|
61
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_logger, "f").deprecated('SkyProgressIndicator wizard', {
|
|
41
62
|
deprecationMajorVersion: 6,
|
|
42
63
|
replacementRecommendation: 'Use Wizard (Tabs) instead.',
|
|
43
64
|
});
|
|
44
65
|
}
|
|
45
66
|
}
|
|
46
67
|
get displayMode() {
|
|
47
|
-
|
|
48
|
-
return 'vertical';
|
|
49
|
-
}
|
|
50
|
-
return this._displayMode;
|
|
68
|
+
return __classPrivateFieldGet(this, _SkyProgressIndicatorComponent__displayMode, "f");
|
|
51
69
|
}
|
|
52
70
|
/**
|
|
53
71
|
* Indicates whether the progress indicator is passive. Passive progress indicators inform users of
|
|
@@ -55,14 +73,11 @@ export class SkyProgressIndicatorComponent {
|
|
|
55
73
|
* @default false
|
|
56
74
|
*/
|
|
57
75
|
set isPassive(value) {
|
|
58
|
-
this
|
|
76
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent__isPassive, value, "f");
|
|
77
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateCssClassNames).call(this);
|
|
59
78
|
}
|
|
60
79
|
get isPassive() {
|
|
61
|
-
|
|
62
|
-
if (this.displayModeResolved === 'horizontal') {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
return this._isPassive || false;
|
|
80
|
+
return __classPrivateFieldGet(this, _SkyProgressIndicatorComponent__isPassive, "f");
|
|
66
81
|
}
|
|
67
82
|
/**
|
|
68
83
|
* Specifies an observable of `SkyProgressIndicatorMessage` that determines the status to
|
|
@@ -70,8 +85,8 @@ export class SkyProgressIndicatorComponent {
|
|
|
70
85
|
* commanding messages to change the state of the progress indicator based on the message type.
|
|
71
86
|
*/
|
|
72
87
|
set messageStream(value) {
|
|
73
|
-
this
|
|
74
|
-
this.
|
|
88
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_messageStream, value || new Subject(), "f");
|
|
89
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_subscribeToMessageStream).call(this);
|
|
75
90
|
}
|
|
76
91
|
/**
|
|
77
92
|
* Specifies the index for the item to make active when the progress indicator
|
|
@@ -79,232 +94,207 @@ export class SkyProgressIndicatorComponent {
|
|
|
79
94
|
* that follow the active item are marked as incomplete.
|
|
80
95
|
*/
|
|
81
96
|
set startingIndex(value) {
|
|
82
|
-
this
|
|
97
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent__startingIndex, value || 0, "f");
|
|
83
98
|
}
|
|
84
99
|
get startingIndex() {
|
|
85
|
-
return this
|
|
86
|
-
}
|
|
87
|
-
get cssClassNames() {
|
|
88
|
-
const classNames = [
|
|
89
|
-
`sky-progress-indicator-mode-${this.displayModeResolved}`,
|
|
90
|
-
];
|
|
91
|
-
if (this.isPassive) {
|
|
92
|
-
classNames.push('sky-progress-indicator-passive');
|
|
93
|
-
}
|
|
94
|
-
return classNames.join(' ');
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Returns the newly-supported string union type value to be used by the template.
|
|
98
|
-
* @internal
|
|
99
|
-
*/
|
|
100
|
-
get displayModeResolved() {
|
|
101
|
-
switch (this.displayMode) {
|
|
102
|
-
case SkyProgressIndicatorDisplayMode.Vertical:
|
|
103
|
-
case 'vertical':
|
|
104
|
-
return 'vertical';
|
|
105
|
-
default:
|
|
106
|
-
return 'horizontal';
|
|
107
|
-
}
|
|
100
|
+
return __classPrivateFieldGet(this, _SkyProgressIndicatorComponent__startingIndex, "f");
|
|
108
101
|
}
|
|
109
102
|
get hasFinishButton() {
|
|
110
|
-
return this
|
|
103
|
+
return __classPrivateFieldGet(this, _SkyProgressIndicatorComponent__hasFinishButton, "f");
|
|
111
104
|
}
|
|
112
105
|
set hasFinishButton(value) {
|
|
113
|
-
this
|
|
114
|
-
}
|
|
115
|
-
get itemStatuses() {
|
|
116
|
-
if (!this.itemComponents) {
|
|
117
|
-
return [];
|
|
118
|
-
}
|
|
119
|
-
return this.itemComponents.map((c) => c.status);
|
|
120
|
-
}
|
|
121
|
-
get activeIndex() {
|
|
122
|
-
return this._activeIndex || 0;
|
|
123
|
-
}
|
|
124
|
-
set activeIndex(value) {
|
|
125
|
-
const lastIndex = this.itemComponents.length - 1;
|
|
126
|
-
let newIndex = value;
|
|
127
|
-
if (value > lastIndex) {
|
|
128
|
-
newIndex = lastIndex;
|
|
129
|
-
}
|
|
130
|
-
else if (value < 0) {
|
|
131
|
-
newIndex = 0;
|
|
132
|
-
}
|
|
133
|
-
this._activeIndex = newIndex;
|
|
106
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent__hasFinishButton, value, "f");
|
|
134
107
|
}
|
|
135
108
|
ngOnInit() {
|
|
136
|
-
this
|
|
137
|
-
this.
|
|
109
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_initialized, true, "f");
|
|
110
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateCssClassNames).call(this);
|
|
111
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_subscribeToMessageStream).call(this);
|
|
138
112
|
}
|
|
139
113
|
ngAfterContentInit() {
|
|
140
|
-
this
|
|
141
|
-
this.
|
|
114
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_instances, this.startingIndex, "a", _SkyProgressIndicatorComponent_activeIndex_set);
|
|
115
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateSteps).call(this);
|
|
142
116
|
// Note: The delay here is to ensure all change detection on the items has finished. Without
|
|
143
117
|
// the delay we receive a changed before checked error for vertical progress indicators
|
|
144
|
-
this.itemComponents
|
|
145
|
-
.pipe(takeUntil(this
|
|
118
|
+
this.itemComponents?.changes
|
|
119
|
+
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_ngUnsubscribe, "f")), delay(0))
|
|
146
120
|
.subscribe(() => {
|
|
147
|
-
this.
|
|
148
|
-
this.
|
|
121
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateSteps).call(this);
|
|
122
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateStatusesAndNotify).call(this);
|
|
149
123
|
});
|
|
150
124
|
// Wait for item components' change detection to complete
|
|
151
125
|
// before notifying changes to the consumer.
|
|
152
|
-
this.
|
|
153
|
-
this.
|
|
126
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_windowRef, "f").nativeWindow.setTimeout(() => {
|
|
127
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateStatusesAndNotify).call(this);
|
|
154
128
|
});
|
|
155
129
|
}
|
|
156
130
|
ngOnDestroy() {
|
|
157
|
-
this.
|
|
158
|
-
this.
|
|
131
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_ngUnsubscribe, "f").next();
|
|
132
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_ngUnsubscribe, "f").complete();
|
|
159
133
|
}
|
|
160
134
|
sendMessage(message) {
|
|
161
|
-
this.
|
|
135
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_messageStream, "f").next(message);
|
|
162
136
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if (previousIndex < 0) {
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
this.gotoStep(previousIndex);
|
|
137
|
+
}
|
|
138
|
+
_SkyProgressIndicatorComponent__activeIndex = new WeakMap(), _SkyProgressIndicatorComponent__displayMode = new WeakMap(), _SkyProgressIndicatorComponent__hasFinishButton = new WeakMap(), _SkyProgressIndicatorComponent__isPassive = new WeakMap(), _SkyProgressIndicatorComponent__startingIndex = new WeakMap(), _SkyProgressIndicatorComponent_messageStreamSub = new WeakMap(), _SkyProgressIndicatorComponent_initialized = new WeakMap(), _SkyProgressIndicatorComponent_ngUnsubscribe = new WeakMap(), _SkyProgressIndicatorComponent_messageStream = new WeakMap(), _SkyProgressIndicatorComponent_changeDetector = new WeakMap(), _SkyProgressIndicatorComponent_windowRef = new WeakMap(), _SkyProgressIndicatorComponent_logger = new WeakMap(), _SkyProgressIndicatorComponent_instances = new WeakSet(), _SkyProgressIndicatorComponent_activeIndex_set = function _SkyProgressIndicatorComponent_activeIndex_set(value) {
|
|
139
|
+
const lastIndex = (this.itemComponents?.length || 0) - 1;
|
|
140
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent__activeIndex, Math.max(Math.min(value || 0, lastIndex), 0), "f");
|
|
141
|
+
}, _SkyProgressIndicatorComponent_activeIndex_get = function _SkyProgressIndicatorComponent_activeIndex_get() {
|
|
142
|
+
return __classPrivateFieldGet(this, _SkyProgressIndicatorComponent__activeIndex, "f");
|
|
143
|
+
}, _SkyProgressIndicatorComponent_isPassiveAndVertical = function _SkyProgressIndicatorComponent_isPassiveAndVertical() {
|
|
144
|
+
// Currently, passive mode is not supported for horizontal displays.
|
|
145
|
+
if (this.displayMode === 'horizontal') {
|
|
146
|
+
return false;
|
|
177
147
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
148
|
+
return this.isPassive;
|
|
149
|
+
}, _SkyProgressIndicatorComponent_gotoNextStep = function _SkyProgressIndicatorComponent_gotoNextStep() {
|
|
150
|
+
const nextIndex = __classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "a", _SkyProgressIndicatorComponent_activeIndex_get) + 1;
|
|
151
|
+
const lastIndex = __classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_getLastIndex).call(this);
|
|
152
|
+
if (nextIndex > lastIndex) {
|
|
153
|
+
return;
|
|
182
154
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
this.notifyChange({
|
|
189
|
-
isComplete: true,
|
|
190
|
-
});
|
|
155
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_gotoStep).call(this, nextIndex);
|
|
156
|
+
}, _SkyProgressIndicatorComponent_gotoPreviousStep = function _SkyProgressIndicatorComponent_gotoPreviousStep() {
|
|
157
|
+
const previousIndex = __classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "a", _SkyProgressIndicatorComponent_activeIndex_get) - 1;
|
|
158
|
+
if (previousIndex < 0) {
|
|
159
|
+
return;
|
|
191
160
|
}
|
|
192
|
-
|
|
193
|
-
|
|
161
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_gotoStep).call(this, previousIndex);
|
|
162
|
+
}, _SkyProgressIndicatorComponent_gotoStep = function _SkyProgressIndicatorComponent_gotoStep(index) {
|
|
163
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_instances, index, "a", _SkyProgressIndicatorComponent_activeIndex_set);
|
|
164
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateSteps).call(this);
|
|
165
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateStatusesAndNotify).call(this);
|
|
166
|
+
}, _SkyProgressIndicatorComponent_finishSteps = function _SkyProgressIndicatorComponent_finishSteps() {
|
|
167
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_instances, __classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_getLastIndex).call(this), "a", _SkyProgressIndicatorComponent_activeIndex_set);
|
|
168
|
+
this.itemComponents?.forEach((component) => {
|
|
169
|
+
component.status = SkyProgressIndicatorItemStatus.Complete;
|
|
170
|
+
});
|
|
171
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateStatusesAndNotify).call(this, {
|
|
172
|
+
isComplete: true,
|
|
173
|
+
});
|
|
174
|
+
}, _SkyProgressIndicatorComponent_resetSteps = function _SkyProgressIndicatorComponent_resetSteps() {
|
|
175
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_gotoStep).call(this, 0);
|
|
176
|
+
}, _SkyProgressIndicatorComponent_updateSteps = function _SkyProgressIndicatorComponent_updateSteps() {
|
|
177
|
+
if (__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "a", _SkyProgressIndicatorComponent_activeIndex_get) > __classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_getLastIndex).call(this)) {
|
|
178
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_instances, __classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "a", _SkyProgressIndicatorComponent_activeIndex_get) - 1, "a", _SkyProgressIndicatorComponent_activeIndex_set);
|
|
194
179
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
let status;
|
|
207
|
-
if (activeIndex === i) {
|
|
208
|
-
if (isPassive) {
|
|
209
|
-
status = SkyProgressIndicatorItemStatus.Pending;
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
status = SkyProgressIndicatorItemStatus.Active;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
else if (activeIndex > i) {
|
|
216
|
-
status = SkyProgressIndicatorItemStatus.Complete;
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
status = SkyProgressIndicatorItemStatus.Incomplete;
|
|
220
|
-
}
|
|
221
|
-
component.status = status;
|
|
222
|
-
// Show or hide the status markers.
|
|
223
|
-
component.showStatusMarker = isVertical;
|
|
224
|
-
// Show or hide the step number.
|
|
225
|
-
if (isPassive) {
|
|
226
|
-
component.hideStepNumber();
|
|
180
|
+
const activeIndex = __classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "a", _SkyProgressIndicatorComponent_activeIndex_get);
|
|
181
|
+
const isPassiveAndVertical = __classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_isPassiveAndVertical).call(this);
|
|
182
|
+
const isVertical = this.displayMode === 'vertical';
|
|
183
|
+
this.itemComponents?.forEach((component, i) => {
|
|
184
|
+
// Set visibility.
|
|
185
|
+
component.isVisible = activeIndex === i || isVertical;
|
|
186
|
+
// Set status.
|
|
187
|
+
let status;
|
|
188
|
+
if (activeIndex === i) {
|
|
189
|
+
if (isPassiveAndVertical) {
|
|
190
|
+
status = SkyProgressIndicatorItemStatus.Pending;
|
|
227
191
|
}
|
|
228
192
|
else {
|
|
229
|
-
|
|
193
|
+
status = SkyProgressIndicatorItemStatus.Active;
|
|
230
194
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
handleIncomingMessage(message) {
|
|
236
|
-
const value = message;
|
|
237
|
-
let type;
|
|
238
|
-
// Prints a deprecation warning if the consumer provides only `SkyProgressIndicatorMessageType`.
|
|
239
|
-
if (value.type === undefined) {
|
|
240
|
-
console.warn("[Deprecation warning] The progress indicator component's `messageStream` input is set " +
|
|
241
|
-
'to `Subject<SkyProgressIndicatorMessageType>`. We will remove this deprecated type in ' +
|
|
242
|
-
'the next major version release. Instead, set the `messageStream` input to a value of ' +
|
|
243
|
-
'`Subject<SkyProgressIndicatorMessage>`.');
|
|
244
|
-
type = value;
|
|
195
|
+
}
|
|
196
|
+
else if (activeIndex > i) {
|
|
197
|
+
status = SkyProgressIndicatorItemStatus.Complete;
|
|
245
198
|
}
|
|
246
199
|
else {
|
|
247
|
-
|
|
200
|
+
status = SkyProgressIndicatorItemStatus.Incomplete;
|
|
248
201
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
break;
|
|
256
|
-
case SkyProgressIndicatorMessageType.Finish:
|
|
257
|
-
this.finishSteps();
|
|
258
|
-
break;
|
|
259
|
-
case SkyProgressIndicatorMessageType.Reset:
|
|
260
|
-
this.resetSteps();
|
|
261
|
-
break;
|
|
262
|
-
case SkyProgressIndicatorMessageType.GoTo:
|
|
263
|
-
if (!value.data || value.data.activeIndex === undefined) {
|
|
264
|
-
console.warn('A message type of `SkyProgressIndicatorMessageType.GoTo` was passed to the progress ' +
|
|
265
|
-
'indicator, but no step index was provided. You can pass the desired active ' +
|
|
266
|
-
'index via:\n' +
|
|
267
|
-
'{\n' +
|
|
268
|
-
' type: SkyProgressIndicatorMessageType.GoTo,\n' +
|
|
269
|
-
' data: { activeIndex: 0 }\n' +
|
|
270
|
-
'}');
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
this.gotoStep(value.data.activeIndex);
|
|
274
|
-
break;
|
|
275
|
-
default:
|
|
276
|
-
break;
|
|
202
|
+
component.status = status;
|
|
203
|
+
// Show or hide the status markers.
|
|
204
|
+
component.showStatusMarker = isVertical;
|
|
205
|
+
// Show or hide the step number.
|
|
206
|
+
if (isPassiveAndVertical) {
|
|
207
|
+
component.hideStepNumber();
|
|
277
208
|
}
|
|
278
|
-
|
|
279
|
-
|
|
209
|
+
else {
|
|
210
|
+
component.showStepNumber(i + 1);
|
|
211
|
+
}
|
|
212
|
+
// If we're in passive mode, don't show titles for incomplete items.
|
|
213
|
+
component.showTitle = !(isPassiveAndVertical && activeIndex < i);
|
|
214
|
+
});
|
|
215
|
+
}, _SkyProgressIndicatorComponent_updateItemStatuses = function _SkyProgressIndicatorComponent_updateItemStatuses() {
|
|
216
|
+
/* istanbul ignore next */
|
|
217
|
+
this.itemStatuses = this.itemComponents?.map((c) => c.status) || [];
|
|
218
|
+
}, _SkyProgressIndicatorComponent_updateCssClassNames = function _SkyProgressIndicatorComponent_updateCssClassNames() {
|
|
219
|
+
const classNames = [`sky-progress-indicator-mode-${this.displayMode}`];
|
|
220
|
+
if (__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_isPassiveAndVertical).call(this)) {
|
|
221
|
+
classNames.push('sky-progress-indicator-passive');
|
|
280
222
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
223
|
+
this.cssClassNames = classNames;
|
|
224
|
+
}, _SkyProgressIndicatorComponent_handleIncomingMessage = function _SkyProgressIndicatorComponent_handleIncomingMessage(message) {
|
|
225
|
+
const indicatorMessage = message;
|
|
226
|
+
let type;
|
|
227
|
+
// Prints a deprecation warning if the consumer provides only `SkyProgressIndicatorMessageType`.
|
|
228
|
+
if (indicatorMessage.type === undefined) {
|
|
229
|
+
console.warn("[Deprecation warning] The progress indicator component's `messageStream` input is set " +
|
|
230
|
+
'to `Subject<SkyProgressIndicatorMessageType>`. We will remove this deprecated type in ' +
|
|
231
|
+
'the next major version release. Instead, set the `messageStream` input to a value of ' +
|
|
232
|
+
'`Subject<SkyProgressIndicatorMessage>`.');
|
|
233
|
+
type = message;
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
type = indicatorMessage.type;
|
|
237
|
+
}
|
|
238
|
+
switch (type) {
|
|
239
|
+
case SkyProgressIndicatorMessageType.Progress:
|
|
240
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_gotoNextStep).call(this);
|
|
241
|
+
break;
|
|
242
|
+
case SkyProgressIndicatorMessageType.Regress:
|
|
243
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_gotoPreviousStep).call(this);
|
|
244
|
+
break;
|
|
245
|
+
case SkyProgressIndicatorMessageType.Finish:
|
|
246
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_finishSteps).call(this);
|
|
247
|
+
break;
|
|
248
|
+
case SkyProgressIndicatorMessageType.Reset:
|
|
249
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_resetSteps).call(this);
|
|
250
|
+
break;
|
|
251
|
+
case SkyProgressIndicatorMessageType.GoTo:
|
|
252
|
+
if (!indicatorMessage.data ||
|
|
253
|
+
indicatorMessage.data.activeIndex === undefined) {
|
|
254
|
+
console.warn('A message type of `SkyProgressIndicatorMessageType.GoTo` was passed to the progress ' +
|
|
255
|
+
'indicator, but no step index was provided. You can pass the desired active ' +
|
|
256
|
+
'index via:\n' +
|
|
257
|
+
'{\n' +
|
|
258
|
+
' type: SkyProgressIndicatorMessageType.GoTo,\n' +
|
|
259
|
+
' data: { activeIndex: 0 }\n' +
|
|
260
|
+
'}');
|
|
261
|
+
return;
|
|
293
262
|
}
|
|
294
|
-
|
|
263
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_gotoStep).call(this, indicatorMessage.data.activeIndex);
|
|
264
|
+
break;
|
|
265
|
+
default:
|
|
266
|
+
break;
|
|
295
267
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
268
|
+
// Update the view after a message is received.
|
|
269
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_changeDetector, "f").markForCheck();
|
|
270
|
+
}, _SkyProgressIndicatorComponent_subscribeToMessageStream = function _SkyProgressIndicatorComponent_subscribeToMessageStream() {
|
|
271
|
+
if (__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_initialized, "f")) {
|
|
272
|
+
if (__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_messageStreamSub, "f")) {
|
|
273
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_messageStreamSub, "f").unsubscribe();
|
|
274
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_messageStreamSub, undefined, "f");
|
|
275
|
+
}
|
|
276
|
+
if (__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_messageStream, "f")) {
|
|
277
|
+
__classPrivateFieldSet(this, _SkyProgressIndicatorComponent_messageStreamSub, __classPrivateFieldGet(this, _SkyProgressIndicatorComponent_messageStream, "f")
|
|
278
|
+
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_ngUnsubscribe, "f")))
|
|
279
|
+
.subscribe((message) => {
|
|
280
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_handleIncomingMessage).call(this, message);
|
|
281
|
+
}), "f");
|
|
282
|
+
}
|
|
301
283
|
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
284
|
+
}, _SkyProgressIndicatorComponent_updateStatusesAndNotify = function _SkyProgressIndicatorComponent_updateStatusesAndNotify(change) {
|
|
285
|
+
__classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "m", _SkyProgressIndicatorComponent_updateItemStatuses).call(this);
|
|
286
|
+
this.progressChanges.next(Object.assign({}, {
|
|
287
|
+
activeIndex: __classPrivateFieldGet(this, _SkyProgressIndicatorComponent_instances, "a", _SkyProgressIndicatorComponent_activeIndex_get),
|
|
288
|
+
itemStatuses: this.itemStatuses,
|
|
289
|
+
}, change));
|
|
290
|
+
}, _SkyProgressIndicatorComponent_getLastIndex = function _SkyProgressIndicatorComponent_getLastIndex() {
|
|
291
|
+
return (this.itemComponents?.length || 0) - 1;
|
|
292
|
+
};
|
|
293
|
+
SkyProgressIndicatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: SkyProgressIndicatorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyAppWindowRef }, { token: i1.SkyLogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
294
|
+
SkyProgressIndicatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.11", type: SkyProgressIndicatorComponent, selector: "sky-progress-indicator", inputs: { displayMode: "displayMode", isPassive: "isPassive", messageStream: "messageStream", startingIndex: "startingIndex" }, outputs: { progressChanges: "progressChanges" }, queries: [{ propertyName: "itemComponents", predicate: SkyProgressIndicatorItemComponent }], ngImport: i0, template: "<div class=\"sky-progress-indicator\" [ngClass]=\"cssClassNames\">\n <div\n *ngIf=\"displayMode === 'horizontal'\"\n class=\"sky-progress-indicator-horizontal-status-markers\"\n >\n <sky-progress-indicator-status-marker\n *ngFor=\"let status of itemStatuses\"\n [displayMode]=\"displayMode\"\n [status]=\"status\"\n >\n </sky-progress-indicator-status-marker>\n </div>\n <ng-content></ng-content>\n</div>\n", styles: [".sky-progress-indicator ::ng-deep sky-progress-indicator-item:last-of-type .sky-progress-indicator-status-marker-line{display:none}.sky-progress-indicator-mode-vertical{max-width:400px;min-width:250px;margin:0 auto}.sky-progress-indicator-mode-vertical ::ng-deep .sky-progress-indicator-item-body{text-align:center;margin-left:-30px}.sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-nav-button,.sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-reset-button{display:block;padding-top:30px;padding-left:15px}::ng-deep .sky-popover ::ng-deep .sky-progress-indicator-mode-vertical{min-width:auto}.sky-progress-indicator-mode-horizontal ::ng-deep .sky-progress-indicator-item-heading{font-weight:600;font-size:16px}.sky-progress-indicator-horizontal-status-markers{display:flex;margin-bottom:10px}.sky-progress-indicator-horizontal-status-markers ::ng-deep sky-progress-indicator-status-marker{flex-basis:45px;flex-grow:0}.sky-progress-indicator-horizontal-status-markers ::ng-deep sky-progress-indicator-status-marker:first-of-type{margin-left:-5px}.sky-progress-indicator-horizontal-status-markers ::ng-deep sky-progress-indicator-status-marker:first-of-type .sky-progress-indicator-status-marker .sky-progress-indicator-status-marker-icon:before{display:none!important}.sky-progress-indicator-horizontal-status-markers ::ng-deep sky-progress-indicator-status-marker:last-of-type .sky-progress-indicator-status-marker-line{display:none}:host-context(.sky-theme-modern) .sky-progress-indicator-mode-horizontal ::ng-deep .sky-progress-indicator-item-heading{font-weight:inherit;font-size:inherit}:host-context(.sky-theme-modern) .sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-nav-button,:host-context(.sky-theme-modern) .sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-reset-button{padding:0;margin:60px 0 0;text-align:center}.sky-theme-modern .sky-progress-indicator-mode-horizontal ::ng-deep .sky-progress-indicator-item-heading{font-weight:inherit;font-size:inherit}.sky-theme-modern .sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-nav-button,.sky-theme-modern .sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-reset-button{padding:0;margin:60px 0 0;text-align:center}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SkyProgressIndicatorStatusMarkerComponent, selector: "sky-progress-indicator-status-marker", inputs: ["displayMode", "status"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: SkyProgressIndicatorComponent, decorators: [{
|
|
306
296
|
type: Component,
|
|
307
|
-
args: [{ selector: 'sky-progress-indicator', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sky-progress-indicator\" [ngClass]=\"cssClassNames\">\n <div\n *ngIf=\"
|
|
297
|
+
args: [{ selector: 'sky-progress-indicator', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sky-progress-indicator\" [ngClass]=\"cssClassNames\">\n <div\n *ngIf=\"displayMode === 'horizontal'\"\n class=\"sky-progress-indicator-horizontal-status-markers\"\n >\n <sky-progress-indicator-status-marker\n *ngFor=\"let status of itemStatuses\"\n [displayMode]=\"displayMode\"\n [status]=\"status\"\n >\n </sky-progress-indicator-status-marker>\n </div>\n <ng-content></ng-content>\n</div>\n", styles: [".sky-progress-indicator ::ng-deep sky-progress-indicator-item:last-of-type .sky-progress-indicator-status-marker-line{display:none}.sky-progress-indicator-mode-vertical{max-width:400px;min-width:250px;margin:0 auto}.sky-progress-indicator-mode-vertical ::ng-deep .sky-progress-indicator-item-body{text-align:center;margin-left:-30px}.sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-nav-button,.sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-reset-button{display:block;padding-top:30px;padding-left:15px}::ng-deep .sky-popover ::ng-deep .sky-progress-indicator-mode-vertical{min-width:auto}.sky-progress-indicator-mode-horizontal ::ng-deep .sky-progress-indicator-item-heading{font-weight:600;font-size:16px}.sky-progress-indicator-horizontal-status-markers{display:flex;margin-bottom:10px}.sky-progress-indicator-horizontal-status-markers ::ng-deep sky-progress-indicator-status-marker{flex-basis:45px;flex-grow:0}.sky-progress-indicator-horizontal-status-markers ::ng-deep sky-progress-indicator-status-marker:first-of-type{margin-left:-5px}.sky-progress-indicator-horizontal-status-markers ::ng-deep sky-progress-indicator-status-marker:first-of-type .sky-progress-indicator-status-marker .sky-progress-indicator-status-marker-icon:before{display:none!important}.sky-progress-indicator-horizontal-status-markers ::ng-deep sky-progress-indicator-status-marker:last-of-type .sky-progress-indicator-status-marker-line{display:none}:host-context(.sky-theme-modern) .sky-progress-indicator-mode-horizontal ::ng-deep .sky-progress-indicator-item-heading{font-weight:inherit;font-size:inherit}:host-context(.sky-theme-modern) .sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-nav-button,:host-context(.sky-theme-modern) .sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-reset-button{padding:0;margin:60px 0 0;text-align:center}.sky-theme-modern .sky-progress-indicator-mode-horizontal ::ng-deep .sky-progress-indicator-item-heading{font-weight:inherit;font-size:inherit}.sky-theme-modern .sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-nav-button,.sky-theme-modern .sky-progress-indicator-mode-vertical ::ng-deep sky-progress-indicator-reset-button{padding:0;margin:60px 0 0;text-align:center}\n"] }]
|
|
308
298
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.SkyAppWindowRef }, { type: i1.SkyLogService }]; }, propDecorators: { displayMode: [{
|
|
309
299
|
type: Input
|
|
310
300
|
}], isPassive: [{
|
|
@@ -319,4 +309,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
|
|
|
319
309
|
type: ContentChildren,
|
|
320
310
|
args: [SkyProgressIndicatorItemComponent]
|
|
321
311
|
}] } });
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtaW5kaWNhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9wcm9ncmVzcy1pbmRpY2F0b3Ivc3JjL2xpYi9tb2R1bGVzL3Byb2dyZXNzLWluZGljYXRvci9wcm9ncmVzcy1pbmRpY2F0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3Byb2dyZXNzLWluZGljYXRvci9zcmMvbGliL21vZHVsZXMvcHJvZ3Jlc3MtaW5kaWNhdG9yL3Byb2dyZXNzLWluZGljYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBR2hILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXhGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7OztBQVFsRixNQUFNLE9BQU8sNkJBQTZCO0lBcUt4QyxZQUNVLGNBQWlDLEVBQ2pDLFNBQTBCLEVBQzFCLE1BQXFCO1FBRnJCLG1CQUFjLEdBQWQsY0FBYyxDQUFt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QUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNoQyxFQUNELE1BQU0sQ0FDUCxDQUNGLENBQUM7SUFDSixDQUFDOzswSEFqWVUsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsOFFBbUl2QixpQ0FBaUMsNkJDbktwRCwwY0FjQTsyRkRrQmEsNkJBQTZCO2tCQU56QyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTTtrS0FpQnBDLFdBQVc7c0JBRHJCLEtBQUs7Z0JBMEJLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBb0JLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBaUJLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBYUMsZUFBZTtzQkFEckIsTUFBTTtnQkE4Q0MsY0FBYztzQkFEckIsZUFBZTt1QkFBQyxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5QXBwV2luZG93UmVmLCBTa3lMb2dTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9ySXRlbUNvbXBvbmVudCB9IGZyb20gJy4vcHJvZ3Jlc3MtaW5kaWNhdG9yLWl0ZW0vcHJvZ3Jlc3MtaW5kaWNhdG9yLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItY2hhbmdlJztcbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yRGlzcGxheU1vZGVUeXBlIH0gZnJvbSAnLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItZGlzcGxheS1tb2RlLXR5cGUnO1xuaW1wb3J0IHsgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JJdGVtU3RhdHVzIH0gZnJvbSAnLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItaXRlbS1zdGF0dXMnO1xuaW1wb3J0IHsgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItbWVzc2FnZSc7XG5pbXBvcnQgeyBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlIH0gZnJvbSAnLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItbWVzc2FnZS10eXBlJztcbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yRGlzcGxheU1vZGUgfSBmcm9tICcuL3R5cGVzL3Byb2dyZXNzLWluZGljYXRvci1tb2RlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXByb2dyZXNzLWluZGljYXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmVzcy1pbmRpY2F0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9ncmVzcy1pbmRpY2F0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreVByb2dyZXNzSW5kaWNhdG9yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIHByb2dyZXNzIGluZGljYXRvciB2ZXJ0aWNhbGx5IG9yIGhvcml6b250YWxseS5cbiAgICogRm9yIFtwYXNzaXZlIHByb2dyZXNzIGluZGljYXRvcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgtcHJvZ3Jlc3MtaW5kaWNhdG9yL2RvY3MvcGFzc2l2ZS1pbmRpY2F0b3IpXG4gICAqIGFuZCBbd2F0ZXJmYWxsIHByb2dyZXNzIGluZGljYXRvcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9wcm9ncmVzcy1pbmRpY2F0b3Ivd2F0ZXJmYWxsLXByb2dyZXNzLWluZGljYXRvciksXG4gICAqIHVzZSB0aGUgdmVydGljYWwgZGlzcGxheSBtb2RlLiBGb3IgW21vZGFsIHdpemFyZHNdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy93aXphcmQpLFxuICAgKiB1c2UgdGhlIGhvcml6b250YWwgZGlzcGxheSBtb2RlLlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgcHJvcGVydHkgd2FzIGRlc2lnbmVkIHRvIGNyZWF0ZSB3aXphcmRzIGJ5IHNldHRpbmcgYGRpc3BsYXlNb2RlPVwiaG9yaXpvbnRhbFwiYCBvbiBwcm9ncmVzcyBpbmRpY2F0b3JzIGluIG1vZGFscyxcbiAgICogYnV0IHRoaXMgd2l6YXJkIGltcGxlbWVudGF0aW9uIHdhcyByZXBsYWNlZCBieSB0aGVcbiAgICogW1dpemFyZCAoVGFicykgY29tcG9uZW50XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcHJvZ3Jlc3MtaW5kaWNhdG9yKS5cbiAgICogQGRlZmF1bHQgXCJ2ZXJ0aWNhbFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc3BsYXlNb2RlKHZhbHVlOiBTa3lQcm9ncmVzc0luZGljYXRvckRpc3BsYXlNb2RlVHlwZSkge1xuICAgIHRoaXMuX2Rpc3BsYXlNb2RlID0gdmFsdWU7XG5cbiAgICBpZiAodGhpcy5fZGlzcGxheU1vZGUgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgdGhpcy5sb2dnZXIuZGVwcmVjYXRlZCgnU2t5UHJvZ3Jlc3NJbmRpY2F0b3Igd2l6YXJkJywge1xuICAgICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogNixcbiAgICAgICAgcmVwbGFjZW1lbnRSZWNvbW1lbmRhdGlvbjogJ1VzZSBXaXphcmQgKFRhYnMpIGluc3RlYWQuJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzcGxheU1vZGUoKTogU2t5UHJvZ3Jlc3NJbmRpY2F0b3JEaXNwbGF5TW9kZVR5cGUge1xuICAgIGlmICh0aGlzLl9kaXNwbGF5TW9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJ3ZlcnRpY2FsJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheU1vZGU7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb2dyZXNzIGluZGljYXRvciBpcyBwYXNzaXZlLiBQYXNzaXZlIHByb2dyZXNzIGluZGljYXRvcnMgaW5mb3JtIHVzZXJzIG9mXG4gICAqIHByb2dyZXNzIHRoYXQgY29uY2VybnMgdGhlbSBidXQgdGhhdCB0aGV5IGFyZSBub3QgcmVzcG9uc2libGUgZm9yLCBhbmQgdGhleSBtdXN0IHVzZSB0aGUgdmVydGljYWwgZGlzcGxheSBtb2RlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpc1Bhc3NpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc1Bhc3NpdmUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNQYXNzaXZlKCk6IGJvb2xlYW4ge1xuICAgIC8vIEN1cnJlbnRseSwgcGFzc2l2ZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGhvcml6b250YWwgZGlzcGxheXMuXG4gICAgaWYgKHRoaXMuZGlzcGxheU1vZGVSZXNvbHZlZCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2lzUGFzc2l2ZSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYW4gb2JzZXJ2YWJsZSBvZiBgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlYCB0aGF0IGRldGVybWluZXMgdGhlIHN0YXR1cyB0b1xuICAgKiBkaXNwbGF5IGZvciBpdGVtcyBpbiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yLiBUaGUgbWVzc2FnZSBzdHJlYW0gaXMgYSBxdWV1ZSBvZlxuICAgKiBjb21tYW5kaW5nIG1lc3NhZ2VzIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHByb2dyZXNzIGluZGljYXRvciBiYXNlZCBvbiB0aGUgbWVzc2FnZSB0eXBlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtZXNzYWdlU3RyZWFtKFxuICAgIHZhbHVlOiBTdWJqZWN0PFxuICAgICAgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlIHwgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZVxuICAgID5cbiAgKSB7XG4gICAgdGhpcy5fbWVzc2FnZVN0cmVhbSA9IHZhbHVlO1xuXG4gICAgdGhpcy5zdWJzY3JpYmVUb01lc3NhZ2VTdHJlYW0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGluZGV4IGZvciB0aGUgaXRlbSB0byBtYWtlIGFjdGl2ZSB3aGVuIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3JcbiAgICogbG9hZHMuIEFsbCBzdGVwcyB0aGF0IHByZWNlZGUgdGhlIGFjdGl2ZSBpdGVtIGFyZSBtYXJrZWQgYXMgY29tcGxldGUsIGFuZCBhbGwgc3RlcHNcbiAgICogdGhhdCBmb2xsb3cgdGhlIGFjdGl2ZSBpdGVtIGFyZSBtYXJrZWQgYXMgaW5jb21wbGV0ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3RhcnRpbmdJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRpbmdJbmRleCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGFydGluZ0luZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0aW5nSW5kZXggfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IgY2hhbmdlcyB0aGUgc3RhdHVzIG9mIGFuIGl0ZW0uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHByb2dyZXNzQ2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5UHJvZ3Jlc3NJbmRpY2F0b3JDaGFuZ2U+KCk7XG5cbiAgcHVibGljIGdldCBjc3NDbGFzc05hbWVzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtcbiAgICAgIGBza3ktcHJvZ3Jlc3MtaW5kaWNhdG9yLW1vZGUtJHt0aGlzLmRpc3BsYXlNb2RlUmVzb2x2ZWR9YCxcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMuaXNQYXNzaXZlKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goJ3NreS1wcm9ncmVzcy1pbmRpY2F0b3ItcGFzc2l2ZScpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc05hbWVzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuZXdseS1zdXBwb3J0ZWQgc3RyaW5nIHVuaW9uIHR5cGUgdmFsdWUgdG8gYmUgdXNlZCBieSB0aGUgdGVtcGxhdGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGdldCBkaXNwbGF5TW9kZVJlc29sdmVkKCk6ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcge1xuICAgIHN3aXRjaCAodGhpcy5kaXNwbGF5TW9kZSkge1xuICAgICAgY2FzZSBTa3lQcm9ncmVzc0luZGljYXRvckRpc3BsYXlNb2RlLlZlcnRpY2FsOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICByZXR1cm4gJ3ZlcnRpY2FsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnaG9yaXpvbnRhbCc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBoYXNGaW5pc2hCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0ZpbmlzaEJ1dHRvbiB8fCBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaGFzRmluaXNoQnV0dG9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGFzRmluaXNoQnV0dG9uID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1TdGF0dXNlcygpOiBTa3lQcm9ncmVzc0luZGljYXRvckl0ZW1TdGF0dXNbXSB7XG4gICAgaWYgKCF0aGlzLml0ZW1Db21wb25lbnRzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXRlbUNvbXBvbmVudHMubWFwKChjKSA9PiBjLnN0YXR1cyk7XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKFNreVByb2dyZXNzSW5kaWNhdG9ySXRlbUNvbXBvbmVudClcbiAgcHJpdmF0ZSBpdGVtQ29tcG9uZW50czogUXVlcnlMaXN0PFNreVByb2dyZXNzSW5kaWNhdG9ySXRlbUNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBnZXQgYWN0aXZlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlSW5kZXggfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGFjdGl2ZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLml0ZW1Db21wb25lbnRzLmxlbmd0aCAtIDE7XG5cbiAgICBsZXQgbmV3SW5kZXggPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA+IGxhc3RJbmRleCkge1xuICAgICAgbmV3SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgIG5ld0luZGV4ID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLl9hY3RpdmVJbmRleCA9IG5ld0luZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBtZXNzYWdlU3RyZWFtU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9hY3RpdmVJbmRleDogbnVtYmVyO1xuICBwcml2YXRlIF9kaXNwbGF5TW9kZTogU2t5UHJvZ3Jlc3NJbmRpY2F0b3JEaXNwbGF5TW9kZVR5cGU7XG4gIHByaXZhdGUgX2hhc0ZpbmlzaEJ1dHRvbjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfaXNQYXNzaXZlOiBib29sZWFuO1xuICBwcml2YXRlIF9tZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8XG4gICAgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlIHwgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZVxuICA+KCk7XG4gIHByaXZhdGUgX3N0YXJ0aW5nSW5kZXg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHdpbmRvd1JlZjogU2t5QXBwV2luZG93UmVmLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBTa3lMb2dTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICB0aGlzLnN1YnNjcmliZVRvTWVzc2FnZVN0cmVhbSgpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5zdGFydGluZ0luZGV4O1xuXG4gICAgdGhpcy51cGRhdGVTdGVwcygpO1xuXG4gICAgLy8gTm90ZTogVGhlIGRlbGF5IGhlcmUgaXMgdG8gZW5zdXJlIGFsbCBjaGFuZ2UgZGV0ZWN0aW9uIG9uIHRoZSBpdGVtcyBoYXMgZmluaXNoZWQuIFdpdGhvdXRcbiAgICAvLyB0aGUgZGVsYXkgd2UgcmVjZWl2ZSBhIGNoYW5nZWQgYmVmb3JlIGNoZWNrZWQgZXJyb3IgZm9yIHZlcnRpY2FsIHByb2dyZXNzIGluZGljYXRvcnNcbiAgICB0aGlzLml0ZW1Db21wb25lbnRzLmNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBkZWxheSgwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0ZXBzKCk7XG4gICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlKCk7XG4gICAgICB9KTtcblxuICAgIC8vIFdhaXQgZm9yIGl0ZW0gY29tcG9uZW50cycgY2hhbmdlIGRldGVjdGlvbiB0byBjb21wbGV0ZVxuICAgIC8vIGJlZm9yZSBub3RpZnlpbmcgY2hhbmdlcyB0byB0aGUgY29uc3VtZXIuXG4gICAgdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNlbmRNZXNzYWdlKG1lc3NhZ2U6IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZSk6IHZvaWQge1xuICAgIHRoaXMuX21lc3NhZ2VTdHJlYW0ubmV4dChtZXNzYWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ290b05leHRTdGVwKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuYWN0aXZlSW5kZXggKyAxO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuaXRlbUNvbXBvbmVudHMubGVuZ3RoIC0gMTtcblxuICAgIGlmIChuZXh0SW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmdvdG9TdGVwKG5leHRJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGdvdG9QcmV2aW91c1N0ZXAoKTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9IHRoaXMuYWN0aXZlSW5kZXggLSAxO1xuXG4gICAgaWYgKHByZXZpb3VzSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5nb3RvU3RlcChwcmV2aW91c0luZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgZ290b1N0ZXAoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnVwZGF0ZVN0ZXBzKCk7XG4gICAgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluaXNoU3RlcHMoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuaXRlbUNvbXBvbmVudHMubGVuZ3RoIC0gMTtcblxuICAgIHRoaXMuaXRlbUNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XG4gICAgICBjb21wb25lbnQuc3RhdHVzID0gU2t5UHJvZ3Jlc3NJbmRpY2F0b3JJdGVtU3RhdHVzLkNvbXBsZXRlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ub3RpZnlDaGFuZ2Uoe1xuICAgICAgaXNDb21wbGV0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRTdGVwcygpOiB2b2lkIHtcbiAgICB0aGlzLmdvdG9TdGVwKDApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGVwcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA+IHRoaXMuaXRlbUNvbXBvbmVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5hY3RpdmVJbmRleC0tO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcbiAgICBjb25zdCBpc1Bhc3NpdmUgPSB0aGlzLmlzUGFzc2l2ZTtcbiAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5kaXNwbGF5TW9kZVJlc29sdmVkID09PSAndmVydGljYWwnO1xuXG4gICAgdGhpcy5pdGVtQ29tcG9uZW50cy5mb3JFYWNoKChjb21wb25lbnQsIGkpID0+IHtcbiAgICAgIC8vIFNldCB2aXNpYmlsaXR5LlxuICAgICAgY29tcG9uZW50LmlzVmlzaWJsZSA9IGFjdGl2ZUluZGV4ID09PSBpIHx8IGlzVmVydGljYWw7XG5cbiAgICAgIC8vIFNldCBzdGF0dXMuXG4gICAgICBsZXQgc3RhdHVzOiBTa3lQcm9ncmVzc0luZGljYXRvckl0ZW1TdGF0dXM7XG4gICAgICBpZiAoYWN0aXZlSW5kZXggPT09IGkpIHtcbiAgICAgICAgaWYgKGlzUGFzc2l2ZSkge1xuICAgICAgICAgIHN0YXR1cyA9IFNreVByb2dyZXNzSW5kaWNhdG9ySXRlbVN0YXR1cy5QZW5kaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXR1cyA9IFNreVByb2dyZXNzSW5kaWNhdG9ySXRlbVN0YXR1cy5BY3RpdmU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlSW5kZXggPiBpKSB7XG4gICAgICAgIHN0YXR1cyA9IFNreVByb2dyZXNzSW5kaWNhdG9ySXRlbVN0YXR1cy5Db21wbGV0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1cyA9IFNreVByb2dyZXNzSW5kaWNhdG9ySXRlbVN0YXR1cy5JbmNvbXBsZXRlO1xuICAgICAgfVxuXG4gICAgICBjb21wb25lbnQuc3RhdHVzID0gc3RhdHVzO1xuXG4gICAgICAvLyBTaG93IG9yIGhpZGUgdGhlIHN0YXR1cyBtYXJrZXJzLlxuICAgICAgY29tcG9uZW50LnNob3dTdGF0dXNNYXJrZXIgPSBpc1ZlcnRpY2FsO1xuXG4gICAgICAvLyBTaG93IG9yIGhpZGUgdGhlIHN0ZXAgbnVtYmVyLlxuICAgICAgaWYgKGlzUGFzc2l2ZSkge1xuICAgICAgICBjb21wb25lbnQuaGlkZVN0ZXBOdW1iZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudC5zaG93U3RlcE51bWJlcihpICsgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlJ3JlIGluIHBhc3NpdmUgbW9kZSwgZG9uJ3Qgc2hvdyB0aXRsZXMgZm9yIGluY29tcGxldGUgaXRlbXMuXG4gICAgICBjb21wb25lbnQuc2hvd1RpdGxlID0gIShpc1Bhc3NpdmUgJiYgYWN0aXZlSW5kZXggPCBpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5jb21pbmdNZXNzYWdlKFxuICAgIG1lc3NhZ2U6IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZSB8IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGVcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWU6IGFueSA9IG1lc3NhZ2U7XG5cbiAgICBsZXQgdHlwZTogU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZTtcblxuICAgIC8vIFByaW50cyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgaWYgdGhlIGNvbnN1bWVyIHByb3ZpZGVzIG9ubHkgYFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGVgLlxuICAgIGlmICh2YWx1ZS50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbRGVwcmVjYXRpb24gd2FybmluZ10gVGhlIHByb2dyZXNzIGluZGljYXRvciBjb21wb25lbnQncyBgbWVzc2FnZVN0cmVhbWAgaW5wdXQgaXMgc2V0IFwiICtcbiAgICAgICAgICAndG8gYFN1YmplY3Q8U2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZT5gLiBXZSB3aWxsIHJlbW92ZSB0aGlzIGRlcHJlY2F0ZWQgdHlwZSBpbiAnICtcbiAgICAgICAgICAndGhlIG5leHQgbWFqb3IgdmVyc2lvbiByZWxlYXNlLiBJbnN0ZWFkLCBzZXQgdGhlIGBtZXNzYWdlU3RyZWFtYCBpbnB1dCB0byBhIHZhbHVlIG9mICcgK1xuICAgICAgICAgICdgU3ViamVjdDxTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2U+YC4nXG4gICAgICApO1xuXG4gICAgICB0eXBlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSB2YWx1ZS50eXBlO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlLlByb2dyZXNzOlxuICAgICAgICB0aGlzLmdvdG9OZXh0U3RlcCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlLlJlZ3Jlc3M6XG4gICAgICAgIHRoaXMuZ290b1ByZXZpb3VzU3RlcCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlLkZpbmlzaDpcbiAgICAgICAgdGhpcy5maW5pc2hTdGVwcygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlLlJlc2V0OlxuICAgICAgICB0aGlzLnJlc2V0U3RlcHMoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZS5Hb1RvOlxuICAgICAgICBpZiAoIXZhbHVlLmRhdGEgfHwgdmFsdWUuZGF0YS5hY3RpdmVJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgJ0EgbWVzc2FnZSB0eXBlIG9mIGBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlLkdvVG9gIHdhcyBwYXNzZWQgdG8gdGhlIHByb2dyZXNzICcgK1xuICAgICAgICAgICAgICAnaW5kaWNhdG9yLCBidXQgbm8gc3RlcCBpbmRleCB3YXMgcHJvdmlkZWQuIFlvdSBjYW4gcGFzcyB0aGUgZGVzaXJlZCBhY3RpdmUgJyArXG4gICAgICAgICAgICAgICdpbmRleCB2aWE6XFxuJyArXG4gICAgICAgICAgICAgICd7XFxuJyArXG4gICAgICAgICAgICAgICcgIHR5cGU6IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGUuR29UbyxcXG4nICtcbiAgICAgICAgICAgICAgJyAgZGF0YTogeyBhY3RpdmVJbmRleDogMCB9XFxuJyArXG4gICAgICAgICAgICAgICd9J1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nb3RvU3RlcCh2YWx1ZS5kYXRhLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmlldyBhZnRlciBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9NZXNzYWdlU3RyZWFtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICBpZiAodGhpcy5tZXNzYWdlU3RyZWFtU3ViKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVN0cmVhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTdHJlYW1TdWIgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9tZXNzYWdlU3RyZWFtKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVN0cmVhbVN1YiA9IHRoaXMuX21lc3NhZ2VTdHJlYW1cbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUluY29taW5nTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5vdGlmeUNoYW5nZShjaGFuZ2U/OiBTa3lQcm9ncmVzc0luZGljYXRvckNoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMucHJvZ3Jlc3NDaGFuZ2VzLm5leHQoXG4gICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGl2ZUluZGV4OiB0aGlzLmFjdGl2ZUluZGV4LFxuICAgICAgICAgIGl0ZW1TdGF0dXNlczogdGhpcy5pdGVtU3RhdHVzZXMsXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZVxuICAgICAgKVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktcHJvZ3Jlc3MtaW5kaWNhdG9yXCIgW25nQ2xhc3NdPVwiY3NzQ2xhc3NOYW1lc1wiPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJkaXNwbGF5TW9kZVJlc29sdmVkID09PSAnaG9yaXpvbnRhbCdcIlxuICAgIGNsYXNzPVwic2t5LXByb2dyZXNzLWluZGljYXRvci1ob3Jpem9udGFsLXN0YXR1cy1tYXJrZXJzXCJcbiAgPlxuICAgIDxza3ktcHJvZ3Jlc3MtaW5kaWNhdG9yLXN0YXR1cy1tYXJrZXJcbiAgICAgICpuZ0Zvcj1cImxldCBzdGF0dXMgb2YgaXRlbVN0YXR1c2VzXCJcbiAgICAgIFtkaXNwbGF5TW9kZV09XCJkaXNwbGF5TW9kZVJlc29sdmVkXCJcbiAgICAgIFtzdGF0dXNdPVwic3RhdHVzXCJcbiAgICA+XG4gICAgPC9za3ktcHJvZ3Jlc3MtaW5kaWNhdG9yLXN0YXR1cy1tYXJrZXI+XG4gIDwvZGl2PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
|
|
312
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtaW5kaWNhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9wcm9ncmVzcy1pbmRpY2F0b3Ivc3JjL2xpYi9tb2R1bGVzL3Byb2dyZXNzLWluZGljYXRvci9wcm9ncmVzcy1pbmRpY2F0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3Byb2dyZXNzLWluZGljYXRvci9zcmMvbGliL21vZHVsZXMvcHJvZ3Jlc3MtaW5kaWNhdG9yL3Byb2dyZXNzLWluZGljYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBR2hILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXhGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7OztBQVFsRixNQUFNLE9BQU8sNkJBQTZCO0lBb0l4QyxZQUNFLGNBQWlDLEVBQ2pDLFNBQTBCLEVBQzFCLE1BQXFCOztRQWxEdkI7O1dBRUc7UUFFSSxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUE4QixDQUFDO1FBZWpFLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBQzdCLGlCQUFZLEdBQXFDLEVB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LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5QXBwV2luZG93UmVmLCBTa3lMb2dTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9ySXRlbUNvbXBvbmVudCB9IGZyb20gJy4vcHJvZ3Jlc3MtaW5kaWNhdG9yLWl0ZW0vcHJvZ3Jlc3MtaW5kaWNhdG9yLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItY2hhbmdlJztcbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yRGlzcGxheU1vZGVUeXBlIH0gZnJvbSAnLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItZGlzcGxheS1tb2RlLXR5cGUnO1xuaW1wb3J0IHsgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JJdGVtU3RhdHVzIH0gZnJvbSAnLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItaXRlbS1zdGF0dXMnO1xuaW1wb3J0IHsgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItbWVzc2FnZSc7XG5pbXBvcnQgeyBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlIH0gZnJvbSAnLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItbWVzc2FnZS10eXBlJztcbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yRGlzcGxheU1vZGUgfSBmcm9tICcuL3R5cGVzL3Byb2dyZXNzLWluZGljYXRvci1tb2RlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXByb2dyZXNzLWluZGljYXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmVzcy1pbmRpY2F0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9ncmVzcy1pbmRpY2F0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreVByb2dyZXNzSW5kaWNhdG9yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIHByb2dyZXNzIGluZGljYXRvciB2ZXJ0aWNhbGx5IG9yIGhvcml6b250YWxseS5cbiAgICogRm9yIFtwYXNzaXZlIHByb2dyZXNzIGluZGljYXRvcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgtcHJvZ3Jlc3MtaW5kaWNhdG9yL2RvY3MvcGFzc2l2ZS1pbmRpY2F0b3IpXG4gICAqIGFuZCBbd2F0ZXJmYWxsIHByb2dyZXNzIGluZGljYXRvcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9wcm9ncmVzcy1pbmRpY2F0b3Ivd2F0ZXJmYWxsLXByb2dyZXNzLWluZGljYXRvciksXG4gICAqIHVzZSB0aGUgdmVydGljYWwgZGlzcGxheSBtb2RlLiBGb3IgW21vZGFsIHdpemFyZHNdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy93aXphcmQpLFxuICAgKiB1c2UgdGhlIGhvcml6b250YWwgZGlzcGxheSBtb2RlLlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgcHJvcGVydHkgd2FzIGRlc2lnbmVkIHRvIGNyZWF0ZSB3aXphcmRzIGJ5IHNldHRpbmcgYGRpc3BsYXlNb2RlPVwiaG9yaXpvbnRhbFwiYCBvbiBwcm9ncmVzcyBpbmRpY2F0b3JzIGluIG1vZGFscyxcbiAgICogYnV0IHRoaXMgd2l6YXJkIGltcGxlbWVudGF0aW9uIHdhcyByZXBsYWNlZCBieSB0aGVcbiAgICogW1dpemFyZCAoVGFicykgY29tcG9uZW50XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcHJvZ3Jlc3MtaW5kaWNhdG9yKS5cbiAgICogQGRlZmF1bHQgXCJ2ZXJ0aWNhbFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc3BsYXlNb2RlKFxuICAgIHZhbHVlOiBTa3lQcm9ncmVzc0luZGljYXRvckRpc3BsYXlNb2RlVHlwZSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlIFNreVByb2dyZXNzSW5kaWNhdG9yRGlzcGxheU1vZGUuSG9yaXpvbnRhbDpcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgICB0aGlzLiNfZGlzcGxheU1vZGUgPSAnaG9yaXpvbnRhbCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy4jX2Rpc3BsYXlNb2RlID0gJ3ZlcnRpY2FsJztcbiAgICB9XG5cbiAgICB0aGlzLiN1cGRhdGVDc3NDbGFzc05hbWVzKCk7XG5cbiAgICBpZiAodGhpcy4jX2Rpc3BsYXlNb2RlID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIHRoaXMuI2xvZ2dlci5kZXByZWNhdGVkKCdTa3lQcm9ncmVzc0luZGljYXRvciB3aXphcmQnLCB7XG4gICAgICAgIGRlcHJlY2F0aW9uTWFqb3JWZXJzaW9uOiA2LFxuICAgICAgICByZXBsYWNlbWVudFJlY29tbWVuZGF0aW9uOiAnVXNlIFdpemFyZCAoVGFicykgaW5zdGVhZC4nLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBkaXNwbGF5TW9kZSgpOiBTa3lQcm9ncmVzc0luZGljYXRvckRpc3BsYXlNb2RlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNwbGF5TW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGlzIHBhc3NpdmUuIFBhc3NpdmUgcHJvZ3Jlc3MgaW5kaWNhdG9ycyBpbmZvcm0gdXNlcnMgb2ZcbiAgICogcHJvZ3Jlc3MgdGhhdCBjb25jZXJucyB0aGVtIGJ1dCB0aGF0IHRoZXkgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IsIGFuZCB0aGV5IG11c3QgdXNlIHRoZSB2ZXJ0aWNhbCBkaXNwbGF5IG1vZGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlzUGFzc2l2ZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19pc1Bhc3NpdmUgPSB2YWx1ZTtcbiAgICB0aGlzLiN1cGRhdGVDc3NDbGFzc05hbWVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUGFzc2l2ZSgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2lzUGFzc2l2ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYW4gb2JzZXJ2YWJsZSBvZiBgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlYCB0aGF0IGRldGVybWluZXMgdGhlIHN0YXR1cyB0b1xuICAgKiBkaXNwbGF5IGZvciBpdGVtcyBpbiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yLiBUaGUgbWVzc2FnZSBzdHJlYW0gaXMgYSBxdWV1ZSBvZlxuICAgKiBjb21tYW5kaW5nIG1lc3NhZ2VzIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHByb2dyZXNzIGluZGljYXRvciBiYXNlZCBvbiB0aGUgbWVzc2FnZSB0eXBlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtZXNzYWdlU3RyZWFtKFxuICAgIHZhbHVlOlxuICAgICAgfCBTdWJqZWN0PFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZSB8IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGU+XG4gICAgICB8IHVuZGVmaW5lZFxuICApIHtcbiAgICB0aGlzLiNtZXNzYWdlU3RyZWFtID0gdmFsdWUgfHwgbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLiNzdWJzY3JpYmVUb01lc3NhZ2VTdHJlYW0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGluZGV4IGZvciB0aGUgaXRlbSB0byBtYWtlIGFjdGl2ZSB3aGVuIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3JcbiAgICogbG9hZHMuIEFsbCBzdGVwcyB0aGF0IHByZWNlZGUgdGhlIGFjdGl2ZSBpdGVtIGFyZSBtYXJrZWQgYXMgY29tcGxldGUsIGFuZCBhbGwgc3RlcHNcbiAgICogdGhhdCBmb2xsb3cgdGhlIGFjdGl2ZSBpdGVtIGFyZSBtYXJrZWQgYXMgaW5jb21wbGV0ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3RhcnRpbmdJbmRleCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0YXJ0aW5nSW5kZXggPSB2YWx1ZSB8fCAwO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGFydGluZ0luZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19zdGFydGluZ0luZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHByb2dyZXNzIGluZGljYXRvciBjaGFuZ2VzIHRoZSBzdGF0dXMgb2YgYW4gaXRlbS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcHJvZ3Jlc3NDaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lQcm9ncmVzc0luZGljYXRvckNoYW5nZT4oKTtcblxuICBwdWJsaWMgZ2V0IGhhc0ZpbmlzaEJ1dHRvbigpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2hhc0ZpbmlzaEJ1dHRvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaGFzRmluaXNoQnV0dG9uKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2hhc0ZpbmlzaEJ1dHRvbiA9IHZhbHVlO1xuICB9XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lQcm9ncmVzc0luZGljYXRvckl0ZW1Db21wb25lbnQpXG4gIHB1YmxpYyBpdGVtQ29tcG9uZW50czpcbiAgICB8IFF1ZXJ5TGlzdDxTa3lQcm9ncmVzc0luZGljYXRvckl0ZW1Db21wb25lbnQ+XG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNzc0NsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBpdGVtU3RhdHVzZXM6IFNreVByb2dyZXNzSW5kaWNhdG9ySXRlbVN0YXR1c1tdID0gW107XG5cbiAgc2V0ICNhY3RpdmVJbmRleCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gKHRoaXMuaXRlbUNvbXBvbmVudHM/Lmxlbmd0aCB8fCAwKSAtIDE7XG4gICAgdGhpcy4jX2FjdGl2ZUluZGV4ID0gTWF0aC5tYXgoTWF0aC5taW4odmFsdWUgfHwgMCwgbGFzdEluZGV4KSwgMCk7XG4gIH1cblxuICBnZXQgI2FjdGl2ZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19hY3RpdmVJbmRleDtcbiAgfVxuXG4gICNfYWN0aXZlSW5kZXggPSAwO1xuICAjX2Rpc3BsYXlNb2RlOiBTa3lQcm9ncmVzc0luZGljYXRvckRpc3BsYXlNb2RlVHlwZSA9ICd2ZXJ0aWNhbCc7XG4gICNfaGFzRmluaXNoQnV0dG9uOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAjX2lzUGFzc2l2ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAjX3N0YXJ0aW5nSW5kZXggPSAwO1xuXG4gICNtZXNzYWdlU3RyZWFtU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gICNpbml0aWFsaXplZCA9IGZhbHNlO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICNtZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8XG4gICAgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlIHwgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZVxuICA+KCk7XG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICN3aW5kb3dSZWY6IFNreUFwcFdpbmRvd1JlZjtcbiAgI2xvZ2dlcjogU2t5TG9nU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgd2luZG93UmVmOiBTa3lBcHBXaW5kb3dSZWYsXG4gICAgbG9nZ2VyOiBTa3lMb2dTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jd2luZG93UmVmID0gd2luZG93UmVmO1xuICAgIHRoaXMuI2xvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNpbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICB0aGlzLiN1cGRhdGVDc3NDbGFzc05hbWVzKCk7XG4gICAgdGhpcy4jc3Vic2NyaWJlVG9NZXNzYWdlU3RyZWFtKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2FjdGl2ZUluZGV4ID0gdGhpcy5zdGFydGluZ0luZGV4O1xuXG4gICAgdGhpcy4jdXBkYXRlU3RlcHMoKTtcblxuICAgIC8vIE5vdGU6IFRoZSBkZWxheSBoZXJlIGlzIHRvIGVuc3VyZSBhbGwgY2hhbmdlIGRldGVjdGlvbiBvbiB0aGUgaXRlbXMgaGFzIGZpbmlzaGVkLiBXaXRob3V0XG4gICAgLy8gdGhlIGRlbGF5IHdlIHJlY2VpdmUgYSBjaGFuZ2VkIGJlZm9yZSBjaGVja2VkIGVycm9yIGZvciB2ZXJ0aWNhbCBwcm9ncmVzcyBpbmRpY2F0b3JzXG4gICAgdGhpcy5pdGVtQ29tcG9uZW50cz8uY2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpLCBkZWxheSgwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiN1cGRhdGVTdGVwcygpO1xuICAgICAgICB0aGlzLiN1cGRhdGVTdGF0dXNlc0FuZE5vdGlmeSgpO1xuICAgICAgfSk7XG5cbiAgICAvLyBXYWl0IGZvciBpdGVtIGNvbXBvbmVudHMnIGNoYW5nZSBkZXRlY3Rpb24gdG8gY29tcGxldGVcbiAgICAvLyBiZWZvcmUgbm90aWZ5aW5nIGNoYW5nZXMgdG8gdGhlIGNvbnN1bWVyLlxuICAgIHRoaXMuI3dpbmRvd1JlZi5uYXRpdmVXaW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLiN1cGRhdGVTdGF0dXNlc0FuZE5vdGlmeSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kTWVzc2FnZShtZXNzYWdlOiBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2UpOiB2b2lkIHtcbiAgICB0aGlzLiNtZXNzYWdlU3RyZWFtLm5leHQobWVzc2FnZSk7XG4gIH1cblxuICAjaXNQYXNzaXZlQW5kVmVydGljYWwoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgLy8gQ3VycmVudGx5LCBwYXNzaXZlIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgaG9yaXpvbnRhbCBkaXNwbGF5cy5cbiAgICBpZiAodGhpcy5kaXNwbGF5TW9kZSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNQYXNzaXZlO1xuICB9XG5cbiAgI2dvdG9OZXh0U3RlcCgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLiNhY3RpdmVJbmRleCArIDE7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy4jZ2V0TGFzdEluZGV4KCk7XG5cbiAgICBpZiAobmV4dEluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jZ290b1N0ZXAobmV4dEluZGV4KTtcbiAgfVxuXG4gICNnb3RvUHJldmlvdXNTdGVwKCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSB0aGlzLiNhY3RpdmVJbmRleCAtIDE7XG5cbiAgICBpZiAocHJldmlvdXNJbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiNnb3RvU3RlcChwcmV2aW91c0luZGV4KTtcbiAgfVxuXG4gICNnb3RvU3RlcChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZlSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLiN1cGRhdGVTdGVwcygpO1xuICAgIHRoaXMuI3VwZGF0ZVN0YXR1c2VzQW5kTm90aWZ5KCk7XG4gIH1cblxuICAjZmluaXNoU3RlcHMoKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZlSW5kZXggPSB0aGlzLiNnZXRMYXN0SW5kZXgoKTtcblxuICAgIHRoaXMuaXRlbUNvbXBvbmVudHM/LmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xuICAgICAgY29tcG9uZW50LnN0YXR1cyA9IFNreVByb2dyZXNzSW5kaWNhdG9ySXRlbVN0YXR1cy5Db21wbGV0ZTtcbiAgICB9KTtcblxuICAgIHRoaXMuI3VwZGF0ZVN0YXR1c2VzQW5kTm90aWZ5KHtcbiAgICAgIGlzQ29tcGxldGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAjcmVzZXRTdGVwcygpOiB2b2lkIHtcbiAgICB0aGlzLiNnb3RvU3RlcCgwKTtcbiAgfVxuXG4gICN1cGRhdGVTdGVwcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jYWN0aXZlSW5kZXggPiB0aGlzLiNnZXRMYXN0SW5kZXgoKSkge1xuICAgICAgdGhpcy4jYWN0aXZlSW5kZXggPSB0aGlzLiNhY3RpdmVJbmRleCAtIDE7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLiNhY3RpdmVJbmRleDtcbiAgICBjb25zdCBpc1Bhc3NpdmVBbmRWZXJ0aWNhbCA9IHRoaXMuI2lzUGFzc2l2ZUFuZFZlcnRpY2FsKCk7XG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuZGlzcGxheU1vZGUgPT09ICd2ZXJ0aWNhbCc7XG5cbiAgICB0aGlzLml0ZW1Db21wb25lbnRzPy5mb3JFYWNoKChjb21wb25lbnQsIGkpID0+IHtcbiAgICAgIC8vIFNldCB2aXNpYmlsaXR5LlxuICAgICAgY29tcG9uZW50LmlzVmlzaWJsZSA9IGFjdGl2ZUluZGV4ID09PSBpIHx8IGlzVmVydGljYWw7XG5cbiAgICAgIC8vIFNldCBzdGF0dXMuXG4gICAgICBsZXQgc3RhdHVzOiBTa3lQcm9ncmVzc0luZGljYXRvckl0ZW1TdGF0dXM7XG4gICAgICBpZiAoYWN0aXZlSW5kZXggPT09IGkpIHtcbiAgICAgICAgaWYgKGlzUGFzc2l2ZUFuZFZlcnRpY2FsKSB7XG4gICAgICAgICAgc3RhdHVzID0gU2t5UHJvZ3Jlc3NJbmRpY2F0b3JJdGVtU3RhdHVzLlBlbmRpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdHVzID0gU2t5UHJvZ3Jlc3NJbmRpY2F0b3JJdGVtU3RhdHVzLkFjdGl2ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJbmRleCA+IGkpIHtcbiAgICAgICAgc3RhdHVzID0gU2t5UHJvZ3Jlc3NJbmRpY2F0b3JJdGVtU3RhdHVzLkNvbXBsZXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdHVzID0gU2t5UHJvZ3Jlc3NJbmRpY2F0b3JJdGVtU3RhdHVzLkluY29tcGxldGU7XG4gICAgICB9XG5cbiAgICAgIGNvbXBvbmVudC5zdGF0dXMgPSBzdGF0dXM7XG5cbiAgICAgIC8vIFNob3cgb3IgaGlkZSB0aGUgc3RhdHVzIG1hcmtlcnMuXG4gICAgICBjb21wb25lbnQuc2hvd1N0YXR1c01hcmtlciA9IGlzVmVydGljYWw7XG5cbiAgICAgIC8vIFNob3cgb3IgaGlkZSB0aGUgc3RlcCBudW1iZXIuXG4gICAgICBpZiAoaXNQYXNzaXZlQW5kVmVydGljYWwpIHtcbiAgICAgICAgY29tcG9uZW50LmhpZGVTdGVwTnVtYmVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQuc2hvd1N0ZXBOdW1iZXIoaSArIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSdyZSBpbiBwYXNzaXZlIG1vZGUsIGRvbid0IHNob3cgdGl0bGVzIGZvciBpbmNvbXBsZXRlIGl0ZW1zLlxuICAgICAgY29tcG9uZW50LnNob3dUaXRsZSA9ICEoaXNQYXNzaXZlQW5kVmVydGljYWwgJiYgYWN0aXZlSW5kZXggPCBpKTtcbiAgICB9KTtcbiAgfVxuXG4gICN1cGRhdGVJdGVtU3RhdHVzZXMoKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aGlzLml0ZW1TdGF0dXNlcyA9IHRoaXMuaXRlbUNvbXBvbmVudHM/Lm1hcCgoYykgPT4gYy5zdGF0dXMpIHx8IFtdO1xuICB9XG5cbiAgI3VwZGF0ZUNzc0NsYXNzTmFtZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtgc2t5LXByb2dyZXNzLWluZGljYXRvci1tb2RlLSR7dGhpcy5kaXNwbGF5TW9kZX1gXTtcblxuICAgIGlmICh0aGlzLiNpc1Bhc3NpdmVBbmRWZXJ0aWNhbCgpKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goJ3NreS1wcm9ncmVzcy1pbmRpY2F0b3ItcGFzc2l2ZScpO1xuICAgIH1cblxuICAgIHRoaXMuY3NzQ2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG4gIH1cblxuICAjaGFuZGxlSW5jb21pbmdNZXNzYWdlKFxuICAgIG1lc3NhZ2U6IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZSB8IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGVcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaW5kaWNhdG9yTWVzc2FnZSA9IG1lc3NhZ2UgYXMgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlO1xuXG4gICAgbGV0IHR5cGU6IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGU7XG5cbiAgICAvLyBQcmludHMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGlmIHRoZSBjb25zdW1lciBwcm92aWRlcyBvbmx5IGBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlYC5cbiAgICBpZiAoaW5kaWNhdG9yTWVzc2FnZS50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbRGVwcmVjYXRpb24gd2FybmluZ10gVGhlIHByb2dyZXNzIGluZGljYXRvciBjb21wb25lbnQncyBgbWVzc2FnZVN0cmVhbWAgaW5wdXQgaXMgc2V0IFwiICtcbiAgICAgICAgICAndG8gYFN1YmplY3Q8U2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZT5gLiBXZSB3aWxsIHJlbW92ZSB0aGlzIGRlcHJlY2F0ZWQgdHlwZSBpbiAnICtcbiAgICAgICAgICAndGhlIG5leHQgbWFqb3IgdmVyc2lvbiByZWxlYXNlLiBJbnN0ZWFkLCBzZXQgdGhlIGBtZXNzYWdlU3RyZWFtYCBpbnB1dCB0byBhIHZhbHVlIG9mICcgK1xuICAgICAgICAgICdgU3ViamVjdDxTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2U+YC4nXG4gICAgICApO1xuXG4gICAgICB0eXBlID0gbWVzc2FnZSBhcyBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlID0gaW5kaWNhdG9yTWVzc2FnZS50eXBlO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlLlByb2dyZXNzOlxuICAgICAgICB0aGlzLiNnb3RvTmV4dFN0ZXAoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZS5SZWdyZXNzOlxuICAgICAgICB0aGlzLiNnb3RvUHJldmlvdXNTdGVwKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGUuRmluaXNoOlxuICAgICAgICB0aGlzLiNmaW5pc2hTdGVwcygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlLlJlc2V0OlxuICAgICAgICB0aGlzLiNyZXNldFN0ZXBzKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGUuR29UbzpcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFpbmRpY2F0b3JNZXNzYWdlLmRhdGEgfHxcbiAgICAgICAgICBpbmRpY2F0b3JNZXNzYWdlLmRhdGEuYWN0aXZlSW5kZXggPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnQSBtZXNzYWdlIHR5cGUgb2YgYFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGUuR29Ub2Agd2FzIHBhc3NlZCB0byB0aGUgcHJvZ3Jlc3MgJyArXG4gICAgICAgICAgICAgICdpbmRpY2F0b3IsIGJ1dCBubyBzdGVwIGluZGV4IHdhcyBwcm92aWRlZC4gWW91IGNhbiBwYXNzIHRoZSBkZXNpcmVkIGFjdGl2ZSAnICtcbiAgICAgICAgICAgICAgJ2luZGV4IHZpYTpcXG4nICtcbiAgICAgICAgICAgICAgJ3tcXG4nICtcbiAgICAgICAgICAgICAgJyAgdHlwZTogU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZS5Hb1RvLFxcbicgK1xuICAgICAgICAgICAgICAnICBkYXRhOiB7IGFjdGl2ZUluZGV4OiAwIH1cXG4nICtcbiAgICAgICAgICAgICAgJ30nXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNnb3RvU3RlcChpbmRpY2F0b3JNZXNzYWdlLmRhdGEuYWN0aXZlSW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSB2aWV3IGFmdGVyIGEgbWVzc2FnZSBpcyByZWNlaXZlZC5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNzdWJzY3JpYmVUb01lc3NhZ2VTdHJlYW0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2luaXRpYWxpemVkKSB7XG4gICAgICBpZiAodGhpcy4jbWVzc2FnZVN0cmVhbVN1Yikge1xuICAgICAgICB0aGlzLiNtZXNzYWdlU3RyZWFtU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNtZXNzYWdlU3RyZWFtKSB7XG4gICAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIgPSB0aGlzLiNtZXNzYWdlU3RyZWFtXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI2hhbmRsZUluY29taW5nTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjdXBkYXRlU3RhdHVzZXNBbmROb3RpZnkoY2hhbmdlPzogU2t5UHJvZ3Jlc3NJbmRpY2F0b3JDaGFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVJdGVtU3RhdHVzZXMoKTtcblxuICAgIHRoaXMucHJvZ3Jlc3NDaGFuZ2VzLm5leHQoXG4gICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGl2ZUluZGV4OiB0aGlzLiNhY3RpdmVJbmRleCxcbiAgICAgICAgICBpdGVtU3RhdHVzZXM6IHRoaXMuaXRlbVN0YXR1c2VzLFxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2VcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgI2dldExhc3RJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5pdGVtQ29tcG9uZW50cz8ubGVuZ3RoIHx8IDApIC0gMTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNreS1wcm9ncmVzcy1pbmRpY2F0b3JcIiBbbmdDbGFzc109XCJjc3NDbGFzc05hbWVzXCI+XG4gIDxkaXZcbiAgICAqbmdJZj1cImRpc3BsYXlNb2RlID09PSAnaG9yaXpvbnRhbCdcIlxuICAgIGNsYXNzPVwic2t5LXByb2dyZXNzLWluZGljYXRvci1ob3Jpem9udGFsLXN0YXR1cy1tYXJrZXJzXCJcbiAgPlxuICAgIDxza3ktcHJvZ3Jlc3MtaW5kaWNhdG9yLXN0YXR1cy1tYXJrZXJcbiAgICAgICpuZ0Zvcj1cImxldCBzdGF0dXMgb2YgaXRlbVN0YXR1c2VzXCJcbiAgICAgIFtkaXNwbGF5TW9kZV09XCJkaXNwbGF5TW9kZVwiXG4gICAgICBbc3RhdHVzXT1cInN0YXR1c1wiXG4gICAgPlxuICAgIDwvc2t5LXByb2dyZXNzLWluZGljYXRvci1zdGF0dXMtbWFya2VyPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
|