@skyux/progress-indicator 7.0.0-beta.12 → 7.0.0-beta.13

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