@agorapulse/ui-components 18.0.41 → 18.0.43
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/agorapulse-ui-components-18.0.43.tgz +0 -0
- package/directives/checkbox.directive.d.ts +15 -43
- package/esm2022/directives/checkbox.directive.mjs +94 -253
- package/esm2022/nav-selector/utils/nav-selector.folding.mjs +3 -3
- package/esm2022/nav-selector/utils/nav-selector.single-select.mjs +5 -2
- package/fesm2022/agorapulse-ui-components-directives.mjs +96 -254
- package/fesm2022/agorapulse-ui-components-directives.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-nav-selector.mjs +6 -3
- package/fesm2022/agorapulse-ui-components-nav-selector.mjs.map +1 -1
- package/package.json +1 -1
- package/agorapulse-ui-components-18.0.41.tgz +0 -0
|
@@ -1,78 +1,53 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { booleanAttribute, Directive, ElementRef, EventEmitter, forwardRef, inject, Input, Output, Renderer2, ViewContainerRef, } from '@angular/core';
|
|
3
|
-
import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
1
|
+
import { booleanAttribute, Directive, effect, ElementRef, inject, Input, Renderer2, signal } from '@angular/core';
|
|
4
2
|
import * as i0 from "@angular/core";
|
|
5
|
-
export const AP_CHECKBOX_DIRECTIVE_CONTROL_VALUE_ACCESSOR = {
|
|
6
|
-
provide: NG_VALUE_ACCESSOR,
|
|
7
|
-
useExisting: forwardRef(() => CheckboxDirective),
|
|
8
|
-
multi: true,
|
|
9
|
-
};
|
|
10
|
-
/*
|
|
11
|
-
Host bindings is important here:
|
|
12
|
-
- This provides encapsulation and reactivity regardless of how the directive is used in templates.
|
|
13
|
-
- It guarantees that properties like checked, disabled, required, and ARIA attributes always reflect
|
|
14
|
-
only the directive's logic, not just consumer bindings.
|
|
15
|
-
- So we need to have host bindings for all the properties that we want to control.
|
|
16
|
-
- We could also use @HostListener.
|
|
17
|
-
*/
|
|
18
3
|
export class CheckboxDirective {
|
|
19
|
-
symbolRegistry = inject(SymbolRegistry);
|
|
20
4
|
elementRef = inject((ElementRef));
|
|
21
5
|
renderer = inject(Renderer2);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
6
|
+
// State signals
|
|
7
|
+
_checked = signal(false);
|
|
8
|
+
_indeterminate = signal(false);
|
|
9
|
+
// Input signal accessors that work with host bindings
|
|
10
|
+
checked = this._checked.asReadonly();
|
|
11
|
+
indeterminate = this._indeterminate.asReadonly();
|
|
12
|
+
// Input setters with proper aliases for template binding
|
|
13
|
+
// Couldn't be migrated to yet
|
|
14
|
+
set checkedInput(checked) {
|
|
15
|
+
this._checked.set(checked);
|
|
16
|
+
this.updateNativeElementSync();
|
|
17
|
+
}
|
|
18
|
+
set indeterminateInput(indeterminate) {
|
|
28
19
|
if (indeterminate) {
|
|
29
|
-
this._checked
|
|
20
|
+
this._checked.set(false);
|
|
30
21
|
}
|
|
31
|
-
this._indeterminate
|
|
22
|
+
this._indeterminate.set(indeterminate);
|
|
23
|
+
this.updateNativeElementSync();
|
|
24
|
+
}
|
|
25
|
+
updateNativeElementSync() {
|
|
32
26
|
const input = this.elementRef.nativeElement;
|
|
33
27
|
if (input) {
|
|
34
|
-
input.
|
|
35
|
-
|
|
36
|
-
// Only update visibility if containers are ready
|
|
37
|
-
if (this.checkmarkContainer && this.indeterminateContainer) {
|
|
38
|
-
this.updateCheckmarkVisibility();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
get indeterminate() {
|
|
42
|
-
return this._indeterminate;
|
|
43
|
-
}
|
|
44
|
-
set checked(checked) {
|
|
45
|
-
this._checked = checked;
|
|
46
|
-
// Only update visibility if containers are ready
|
|
47
|
-
if (this.checkmarkContainer && this.indeterminateContainer) {
|
|
48
|
-
this.updateCheckmarkVisibility();
|
|
28
|
+
input.checked = this.checked();
|
|
29
|
+
input.indeterminate = this.indeterminate();
|
|
49
30
|
}
|
|
50
31
|
}
|
|
51
|
-
|
|
52
|
-
return this._checked;
|
|
53
|
-
}
|
|
54
|
-
required = false;
|
|
55
|
-
set name(name) {
|
|
56
|
-
this._name = name;
|
|
57
|
-
}
|
|
58
|
-
get name() {
|
|
59
|
-
return this._name;
|
|
60
|
-
}
|
|
61
|
-
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
62
|
-
change = new EventEmitter();
|
|
63
|
-
_checked = false;
|
|
64
|
-
_indeterminate = false;
|
|
65
|
-
_name = '';
|
|
66
|
-
_controlValueAccessorChangeFn = () => { };
|
|
67
|
-
_onTouched = () => { };
|
|
32
|
+
// Private properties
|
|
68
33
|
listeners = [];
|
|
69
34
|
styleElement;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
35
|
+
checkmarkSvg;
|
|
36
|
+
indeterminateBar;
|
|
37
|
+
constructor() {
|
|
38
|
+
effect(() => {
|
|
39
|
+
if (this.checkmarkSvg && this.indeterminateBar) {
|
|
40
|
+
this.updateCheckmarkVisibility();
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Custom SVG content
|
|
45
|
+
checkSvgContent = `
|
|
46
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="10" height="10" fill="white">
|
|
47
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.238 3.337a.92.92 0 0 1 .025 1.301l-7.7 8a.92.92 0 0 1-1.326 0l-3.5-3.636a.92.92 0 1 1 1.326-1.276L5.9 10.674l7.037-7.312a.92.92 0 0 1 1.301-.025Z" />
|
|
48
|
+
</svg>
|
|
49
|
+
`;
|
|
74
50
|
ngOnInit() {
|
|
75
|
-
this.symbolRegistry.registerSymbols([apCheck]);
|
|
76
51
|
this.createCheckboxStructure();
|
|
77
52
|
this.setupEventListeners();
|
|
78
53
|
}
|
|
@@ -81,93 +56,65 @@ export class CheckboxDirective {
|
|
|
81
56
|
if (this.styleElement && this.styleElement.parentNode) {
|
|
82
57
|
this.styleElement.parentNode.removeChild(this.styleElement);
|
|
83
58
|
}
|
|
84
|
-
if (this.
|
|
85
|
-
this.
|
|
59
|
+
if (this.checkmarkSvg && this.checkmarkSvg.parentNode) {
|
|
60
|
+
this.checkmarkSvg.parentNode.removeChild(this.checkmarkSvg);
|
|
86
61
|
}
|
|
87
|
-
if (this.
|
|
88
|
-
this.
|
|
89
|
-
}
|
|
90
|
-
if (this.indeterminateContainer && this.indeterminateContainer.parentNode) {
|
|
91
|
-
this.indeterminateContainer.parentNode.removeChild(this.indeterminateContainer);
|
|
92
|
-
}
|
|
93
|
-
// Move input back out of wrapper and remove wrapper
|
|
94
|
-
if (this.wrapper && this.wrapper.parentNode) {
|
|
95
|
-
const input = this.elementRef.nativeElement;
|
|
96
|
-
this.renderer.insertBefore(this.wrapper.parentNode, input, this.wrapper);
|
|
97
|
-
this.wrapper.parentNode.removeChild(this.wrapper);
|
|
62
|
+
if (this.indeterminateBar && this.indeterminateBar.parentNode) {
|
|
63
|
+
this.indeterminateBar.parentNode.removeChild(this.indeterminateBar);
|
|
98
64
|
}
|
|
99
65
|
}
|
|
100
66
|
createCheckboxStructure() {
|
|
101
67
|
const input = this.elementRef.nativeElement;
|
|
102
68
|
const parent = input.parentElement;
|
|
103
|
-
//
|
|
104
|
-
// Make input's parent use inline-flex for alignment
|
|
69
|
+
// Make input's parent use inline-flex for alignment and position relative
|
|
105
70
|
if (parent) {
|
|
106
71
|
this.renderer.setStyle(parent, 'display', 'inline-flex');
|
|
107
72
|
this.renderer.setStyle(parent, 'align-items', 'center');
|
|
108
73
|
this.renderer.setStyle(parent, 'gap', 'var(--ref-spacing-xxs)');
|
|
74
|
+
this.renderer.setStyle(parent, 'position', 'relative');
|
|
109
75
|
}
|
|
110
76
|
this.renderer.addClass(input, 'ap-checkbox-styled');
|
|
111
|
-
this.
|
|
112
|
-
this.wrapper = this.renderer.createElement('span');
|
|
113
|
-
this.renderer.setStyle(this.wrapper, 'position', 'relative');
|
|
114
|
-
this.renderer.setStyle(this.wrapper, 'display', 'inline-flex');
|
|
115
|
-
this.renderer.setStyle(this.wrapper, 'align-items', 'center');
|
|
116
|
-
this.renderer.setStyle(this.wrapper, 'vertical-align', 'middle');
|
|
117
|
-
this.renderer.insertBefore(parent, this.wrapper, input);
|
|
118
|
-
this.renderer.appendChild(this.wrapper, input);
|
|
119
|
-
this.renderer.appendChild(this.wrapper, this.checkmarkContainer);
|
|
120
|
-
this.indeterminateContainer = this.createOverlayContainer('ap-checkbox-indeterminate');
|
|
121
|
-
this.renderer.appendChild(this.wrapper, this.indeterminateContainer);
|
|
122
|
-
this.createCheckmarkSymbol();
|
|
77
|
+
this.createCheckmarkSvg();
|
|
123
78
|
this.createIndeterminateBar();
|
|
124
79
|
this.applyCheckboxStyles();
|
|
125
80
|
this.updateCheckmarkVisibility();
|
|
126
81
|
}
|
|
127
|
-
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
this.renderer.setStyle(
|
|
131
|
-
this.renderer.setStyle(
|
|
132
|
-
this.renderer.setStyle(
|
|
133
|
-
this.renderer.setStyle(
|
|
134
|
-
this.renderer.setStyle(
|
|
135
|
-
this.renderer.setStyle(
|
|
136
|
-
this.renderer.setStyle(
|
|
137
|
-
|
|
138
|
-
this.renderer.
|
|
139
|
-
this.renderer.setStyle(container, 'pointer-events', 'none');
|
|
140
|
-
this.renderer.setStyle(container, 'opacity', '0');
|
|
141
|
-
this.renderer.setStyle(container, 'z-index', '1');
|
|
142
|
-
return container;
|
|
82
|
+
createOverlayElement(element) {
|
|
83
|
+
const parent = this.elementRef.nativeElement.parentElement;
|
|
84
|
+
// Apply common positioning styles
|
|
85
|
+
this.renderer.setStyle(element, 'position', 'absolute');
|
|
86
|
+
this.renderer.setStyle(element, 'top', '50%');
|
|
87
|
+
this.renderer.setStyle(element, 'left', '8px'); // Center over 16px checkbox
|
|
88
|
+
this.renderer.setStyle(element, 'transform', 'translate(-50%, -50%)');
|
|
89
|
+
this.renderer.setStyle(element, 'pointer-events', 'none');
|
|
90
|
+
this.renderer.setStyle(element, 'opacity', '0');
|
|
91
|
+
this.renderer.setStyle(element, 'z-index', '1');
|
|
92
|
+
// Append to parent
|
|
93
|
+
this.renderer.appendChild(parent, element);
|
|
143
94
|
}
|
|
144
|
-
|
|
145
|
-
// Create
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
this.
|
|
149
|
-
this.
|
|
150
|
-
this.symbolComponent.setInput('size', 10);
|
|
151
|
-
// Append the symbol to our checkmark container
|
|
152
|
-
this.renderer.appendChild(this.checkmarkContainer, this.symbolComponent.location.nativeElement);
|
|
95
|
+
createCheckmarkSvg() {
|
|
96
|
+
// Create SVG element from string
|
|
97
|
+
const tempDiv = this.renderer.createElement('div');
|
|
98
|
+
this.renderer.setProperty(tempDiv, 'innerHTML', this.checkSvgContent);
|
|
99
|
+
this.checkmarkSvg = tempDiv.firstElementChild;
|
|
100
|
+
this.createOverlayElement(this.checkmarkSvg);
|
|
153
101
|
}
|
|
154
102
|
createIndeterminateBar() {
|
|
155
|
-
// Create the indeterminate bar element
|
|
156
|
-
|
|
157
|
-
this.renderer.setStyle(
|
|
158
|
-
this.renderer.setStyle(
|
|
159
|
-
this.renderer.setStyle(
|
|
160
|
-
|
|
161
|
-
this.renderer.appendChild(this.indeterminateContainer, bar);
|
|
103
|
+
// Create the indeterminate bar element
|
|
104
|
+
this.indeterminateBar = this.renderer.createElement('span');
|
|
105
|
+
this.renderer.setStyle(this.indeterminateBar, 'height', '1.5px');
|
|
106
|
+
this.renderer.setStyle(this.indeterminateBar, 'background', 'var(--ref-color-white)');
|
|
107
|
+
this.renderer.setStyle(this.indeterminateBar, 'width', '8px');
|
|
108
|
+
this.createOverlayElement(this.indeterminateBar);
|
|
162
109
|
}
|
|
163
110
|
updateCheckmarkVisibility() {
|
|
164
|
-
if (this.
|
|
165
|
-
const opacity = this.
|
|
166
|
-
this.renderer.setStyle(this.
|
|
111
|
+
if (this.checkmarkSvg) {
|
|
112
|
+
const opacity = this.checked() && !this.indeterminate() ? '1' : '0';
|
|
113
|
+
this.renderer.setStyle(this.checkmarkSvg, 'opacity', opacity);
|
|
167
114
|
}
|
|
168
|
-
if (this.
|
|
169
|
-
const opacity = this.
|
|
170
|
-
this.renderer.setStyle(this.
|
|
115
|
+
if (this.indeterminateBar) {
|
|
116
|
+
const opacity = this.indeterminate() && !this.checked() ? '1' : '0';
|
|
117
|
+
this.renderer.setStyle(this.indeterminateBar, 'opacity', opacity);
|
|
171
118
|
}
|
|
172
119
|
}
|
|
173
120
|
setupEventListeners() {
|
|
@@ -183,7 +130,7 @@ export class CheckboxDirective {
|
|
|
183
130
|
const labelClickListener = this.renderer.listen(parent, 'click', (event) => {
|
|
184
131
|
const target = event.target;
|
|
185
132
|
// If clicking on a label that targets our input, ensure focus
|
|
186
|
-
if (target.tagName === 'LABEL' && target.getAttribute('for') ===
|
|
133
|
+
if (target.tagName === 'LABEL' && target.getAttribute('for') === input.id) {
|
|
187
134
|
// Small delay to ensure the label click is processed first
|
|
188
135
|
setTimeout(() => {
|
|
189
136
|
input.focus();
|
|
@@ -194,16 +141,13 @@ export class CheckboxDirective {
|
|
|
194
141
|
}
|
|
195
142
|
}
|
|
196
143
|
applyCheckboxStyles() {
|
|
197
|
-
// Style the input directly without moving DOM elements
|
|
198
144
|
const styles = `
|
|
199
|
-
/*
|
|
145
|
+
/* Minimal checkbox styling */
|
|
200
146
|
input[type="checkbox"].ap-checkbox-styled {
|
|
201
|
-
/* Targeted reset of problematic properties */
|
|
202
147
|
appearance: none !important;
|
|
203
148
|
-webkit-appearance: none !important;
|
|
204
149
|
-moz-appearance: none !important;
|
|
205
150
|
|
|
206
|
-
/* Our custom styling - use !important to override any global styles */
|
|
207
151
|
display: inline-block !important;
|
|
208
152
|
width: 16px !important;
|
|
209
153
|
height: 16px !important;
|
|
@@ -214,23 +158,9 @@ export class CheckboxDirective {
|
|
|
214
158
|
border: 1px solid var(--ref-color-grey-60);
|
|
215
159
|
border-radius: var(--sys-border-radius-sm);
|
|
216
160
|
background: var(--ref-color-white);
|
|
217
|
-
background-color: var(--ref-color-white);
|
|
218
161
|
box-sizing: border-box;
|
|
219
|
-
position: relative;
|
|
220
162
|
cursor: pointer;
|
|
221
163
|
vertical-align: middle;
|
|
222
|
-
|
|
223
|
-
/* Ensure no other styles can interfere */
|
|
224
|
-
box-shadow: none;
|
|
225
|
-
text-decoration: none;
|
|
226
|
-
font: inherit;
|
|
227
|
-
color: inherit;
|
|
228
|
-
letter-spacing: normal;
|
|
229
|
-
word-spacing: normal;
|
|
230
|
-
text-transform: none;
|
|
231
|
-
text-indent: 0;
|
|
232
|
-
text-shadow: none;
|
|
233
|
-
text-align: start;
|
|
234
164
|
}
|
|
235
165
|
|
|
236
166
|
/* Hover state */
|
|
@@ -278,7 +208,7 @@ export class CheckboxDirective {
|
|
|
278
208
|
background: var(--ref-color-grey-20);
|
|
279
209
|
}
|
|
280
210
|
|
|
281
|
-
/* Focus state
|
|
211
|
+
/* Focus state */
|
|
282
212
|
@media (hover: hover) {
|
|
283
213
|
input[type="checkbox"].ap-checkbox-styled:focus:not(.disabled) {
|
|
284
214
|
outline: 3px solid var(--ref-color-electric-blue-100) !important;
|
|
@@ -286,8 +216,8 @@ export class CheckboxDirective {
|
|
|
286
216
|
}
|
|
287
217
|
}
|
|
288
218
|
|
|
289
|
-
/* Label styling
|
|
290
|
-
|
|
219
|
+
/* Label styling */
|
|
220
|
+
input[type="checkbox"].ap-checkbox-styled + label {
|
|
291
221
|
display: flex;
|
|
292
222
|
align-items: center;
|
|
293
223
|
font-family: var(--comp-forms-label-font-family);
|
|
@@ -295,25 +225,17 @@ export class CheckboxDirective {
|
|
|
295
225
|
font-weight: var(--comp-forms-label-font-weight);
|
|
296
226
|
line-height: var(--comp-forms-label-line-height);
|
|
297
227
|
color: var(--comp-forms-label-text-color);
|
|
228
|
+
cursor: pointer;
|
|
298
229
|
}
|
|
299
230
|
|
|
300
231
|
/* Empty label styling */
|
|
301
|
-
|
|
232
|
+
input[type="checkbox"].ap-checkbox-styled + label:empty {
|
|
302
233
|
display: none;
|
|
303
234
|
}
|
|
304
235
|
|
|
305
236
|
/* Disabled label styling */
|
|
306
|
-
|
|
237
|
+
input[type="checkbox"].ap-checkbox-styled:disabled + label {
|
|
307
238
|
color: var(--ref-color-grey-60);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/* Label hover styling */
|
|
311
|
-
span:has(input[type="checkbox"].ap-checkbox-styled) + label:hover:not(.disabled) {
|
|
312
|
-
cursor: pointer;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
/* Disabled label hover */
|
|
316
|
-
span:has(input[type="checkbox"].ap-checkbox-styled:disabled) + label:hover {
|
|
317
239
|
cursor: default;
|
|
318
240
|
}
|
|
319
241
|
`;
|
|
@@ -322,121 +244,40 @@ export class CheckboxDirective {
|
|
|
322
244
|
this.renderer.appendChild(this.styleElement, this.renderer.createText(styles));
|
|
323
245
|
this.renderer.appendChild(document.head, this.styleElement);
|
|
324
246
|
}
|
|
325
|
-
onBlur() {
|
|
326
|
-
this._onTouched();
|
|
327
|
-
}
|
|
328
247
|
onValueChange() {
|
|
329
|
-
if (!this.disabled) {
|
|
248
|
+
if (!this.elementRef.nativeElement.disabled) {
|
|
330
249
|
const input = this.elementRef.nativeElement;
|
|
331
|
-
if (this.
|
|
250
|
+
if (this.indeterminate()) {
|
|
332
251
|
// When indeterminate, clicking should go to checked state
|
|
333
|
-
this._checked
|
|
334
|
-
this._indeterminate
|
|
252
|
+
this._checked.set(true);
|
|
253
|
+
this._indeterminate.set(false);
|
|
335
254
|
input.checked = true;
|
|
336
255
|
input.indeterminate = false;
|
|
337
256
|
}
|
|
338
257
|
else {
|
|
339
258
|
// Normal toggle behavior
|
|
340
|
-
this._checked
|
|
259
|
+
this._checked.set(input.checked);
|
|
341
260
|
}
|
|
342
|
-
this.updateCheckmarkVisibility();
|
|
343
|
-
this.change.emit(this._checked);
|
|
344
|
-
this._controlValueAccessorChangeFn(this._checked);
|
|
345
261
|
}
|
|
346
262
|
}
|
|
347
|
-
// ControlValueAccessor implementation
|
|
348
|
-
writeValue(value) {
|
|
349
|
-
this._checked = value;
|
|
350
|
-
const input = this.elementRef.nativeElement;
|
|
351
|
-
input.checked = value;
|
|
352
|
-
// Ensure indeterminate state is properly set
|
|
353
|
-
input.indeterminate = this._indeterminate;
|
|
354
|
-
this.updateCheckmarkVisibility();
|
|
355
|
-
}
|
|
356
|
-
registerOnChange(fn) {
|
|
357
|
-
this._controlValueAccessorChangeFn = fn;
|
|
358
|
-
}
|
|
359
|
-
registerOnTouched(fn) {
|
|
360
|
-
this._onTouched = fn;
|
|
361
|
-
}
|
|
362
|
-
setDisabledState(isDisabled) {
|
|
363
|
-
this.disabled = isDisabled;
|
|
364
|
-
const input = this.elementRef.nativeElement;
|
|
365
|
-
input.disabled = isDisabled;
|
|
366
|
-
}
|
|
367
|
-
validate() {
|
|
368
|
-
const isNotValid = !this._checked && this.required;
|
|
369
|
-
return (isNotValid && {
|
|
370
|
-
invalid: true,
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
263
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CheckboxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
374
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.9", type: CheckboxDirective, isStandalone: true, selector: "input[type=\"checkbox\"][apCheckbox]", inputs: {
|
|
375
|
-
AP_CHECKBOX_DIRECTIVE_CONTROL_VALUE_ACCESSOR,
|
|
376
|
-
{
|
|
377
|
-
provide: NG_VALIDATORS,
|
|
378
|
-
useExisting: CheckboxDirective,
|
|
379
|
-
multi: true,
|
|
380
|
-
},
|
|
381
|
-
], ngImport: i0 });
|
|
264
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.9", type: CheckboxDirective, isStandalone: true, selector: "input[type=\"checkbox\"][apCheckbox]", inputs: { checkedInput: ["checked", "checkedInput"], indeterminateInput: ["indeterminate", "indeterminateInput", booleanAttribute] }, providers: [], ngImport: i0 });
|
|
382
265
|
}
|
|
383
266
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CheckboxDirective, decorators: [{
|
|
384
267
|
type: Directive,
|
|
385
268
|
args: [{
|
|
386
269
|
selector: 'input[type="checkbox"][apCheckbox]',
|
|
387
270
|
standalone: true,
|
|
388
|
-
providers: [
|
|
389
|
-
AP_CHECKBOX_DIRECTIVE_CONTROL_VALUE_ACCESSOR,
|
|
390
|
-
{
|
|
391
|
-
provide: NG_VALIDATORS,
|
|
392
|
-
useExisting: CheckboxDirective,
|
|
393
|
-
multi: true,
|
|
394
|
-
},
|
|
395
|
-
],
|
|
396
|
-
host: {
|
|
397
|
-
'(blur)': 'onBlur()',
|
|
398
|
-
'[disabled]': 'disabled',
|
|
399
|
-
'[required]': 'required',
|
|
400
|
-
'[checked]': 'checked',
|
|
401
|
-
'[attr.aria-label]': 'ariaLabel',
|
|
402
|
-
'[attr.aria-labelledby]': 'ariaLabelledby',
|
|
403
|
-
'[attr.aria-describedby]': 'ariaDescribedby',
|
|
404
|
-
'[attr.data-test]': 'name',
|
|
405
|
-
'[id]': 'name',
|
|
406
|
-
},
|
|
271
|
+
providers: [],
|
|
407
272
|
}]
|
|
408
|
-
}], propDecorators: {
|
|
409
|
-
type: Input,
|
|
410
|
-
args: ['aria-label']
|
|
411
|
-
}], ariaLabelledby: [{
|
|
412
|
-
type: Input,
|
|
413
|
-
args: ['aria-labelledby']
|
|
414
|
-
}], ariaDescribedby: [{
|
|
273
|
+
}], ctorParameters: () => [], propDecorators: { checkedInput: [{
|
|
415
274
|
type: Input,
|
|
416
|
-
args: ['
|
|
417
|
-
}],
|
|
275
|
+
args: ['checked']
|
|
276
|
+
}], indeterminateInput: [{
|
|
418
277
|
type: Input,
|
|
419
278
|
args: [{
|
|
420
279
|
transform: booleanAttribute,
|
|
280
|
+
alias: 'indeterminate',
|
|
421
281
|
}]
|
|
422
|
-
}], indeterminate: [{
|
|
423
|
-
type: Input,
|
|
424
|
-
args: [{
|
|
425
|
-
transform: booleanAttribute,
|
|
426
|
-
}]
|
|
427
|
-
}], checked: [{
|
|
428
|
-
type: Input
|
|
429
|
-
}], required: [{
|
|
430
|
-
type: Input,
|
|
431
|
-
args: [{
|
|
432
|
-
transform: booleanAttribute,
|
|
433
|
-
}]
|
|
434
|
-
}], name: [{
|
|
435
|
-
type: Input,
|
|
436
|
-
args: [{
|
|
437
|
-
required: true,
|
|
438
|
-
}]
|
|
439
|
-
}], change: [{
|
|
440
|
-
type: Output
|
|
441
282
|
}] } });
|
|
442
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy91aS1jb21wb25lbnRzL2RpcmVjdGl2ZXMvc3JjL2NoZWNrYm94LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRixPQUFPLEVBQ0gsZ0JBQWdCLEVBRWhCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXhGLE1BQU0sQ0FBQyxNQUFNLDRDQUE0QyxHQUFHO0lBQ3hELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztJQUNoRCxLQUFLLEVBQUUsSUFBSTtDQUNkLENBQUM7QUFFRjs7Ozs7OztFQU9FO0FBd0JGLE1BQU0sT0FBTyxpQkFBaUI7SUFDVCxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUE0QixDQUFBLENBQUMsQ0FBQztJQUNsRCxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVyQyxTQUFTLENBQVU7SUFDZCxjQUFjLENBQVU7SUFDdkIsZUFBZSxDQUFVO0lBS3BELFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFakIsSUFHSSxhQUFhLENBQUMsYUFBc0I7UUFDcEMsSUFBSSxhQUFhLEVBQUUsQ0FB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QkFDeEIsWUFBWSxFQUFFLFVBQVU7d0JBQ3hCLFdBQVcsRUFBRSxTQUFTO3dCQUN0QixtQkFBbUIsRUFBRSxXQUFXO3dCQUNoQyx3QkFBd0IsRUFBRSxnQkFBZ0I7d0JBQzFDLHlCQUF5QixFQUFFLGlCQUFpQjt3QkFDNUMsa0JBQWtCLEVBQUUsTUFBTTt3QkFDMUIsTUFBTSxFQUFFLE1BQU07cUJBQ2pCO2lCQUNKOzhCQU93QixTQUFTO3NCQUE3QixLQUFLO3VCQUFDLFlBQVk7Z0JBQ08sY0FBYztzQkFBdkMsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBQ0csZUFBZTtzQkFBekMsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBS3pCLFFBQVE7c0JBSFAsS0FBSzt1QkFBQzt3QkFDSCxTQUFTLEVBQUUsZ0JBQWdCO3FCQUM5QjtnQkFNRyxhQUFhO3NCQUhoQixLQUFLO3VCQUFDO3dCQUNILFNBQVMsRUFBRSxnQkFBZ0I7cUJBQzlCO2dCQXFCRyxPQUFPO3NCQURWLEtBQUs7Z0JBZ0JOLFFBQVE7c0JBSFAsS0FBSzt1QkFBQzt3QkFDSCxTQUFTLEVBQUUsZ0JBQWdCO3FCQUM5QjtnQkFNRyxJQUFJO3NCQUhQLEtBQUs7dUJBQUM7d0JBQ0gsUUFBUSxFQUFFLElBQUk7cUJBQ2pCO2dCQVNrQixNQUFNO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBDaGVjaywgU3ltYm9sQ29tcG9uZW50LCBTeW1ib2xSZWdpc3RyeSB9IGZyb20gJ0BhZ29yYXB1bHNlL3VpLXN5bWJvbCc7XG5pbXBvcnQge1xuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBjb25zdCBBUF9DSEVDS0JPWF9ESVJFQ1RJVkVfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveERpcmVjdGl2ZSksXG4gICAgbXVsdGk6IHRydWUsXG59O1xuXG4vKlxuICAgIEhvc3QgYmluZGluZ3MgaXMgaW1wb3J0YW50IGhlcmU6XG4gICAgLSBUaGlzIHByb3ZpZGVzIGVuY2Fwc3VsYXRpb24gYW5kIHJlYWN0aXZpdHkgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGRpcmVjdGl2ZSBpcyB1c2VkIGluIHRlbXBsYXRlcy5cbiAgICAtIEl0IGd1YXJhbnRlZXMgdGhhdCBwcm9wZXJ0aWVzIGxpa2UgY2hlY2tlZCwgZGlzYWJsZWQsIHJlcXVpcmVkLCBhbmQgQVJJQSBhdHRyaWJ1dGVzIGFsd2F5cyByZWZsZWN0XG4gICAgb25seSB0aGUgZGlyZWN0aXZlJ3MgbG9naWMsIG5vdCBqdXN0IGNvbnN1bWVyIGJpbmRpbmdzLlxuICAgIC0gU28gd2UgbmVlZCB0byBoYXZlIGhvc3QgYmluZGluZ3MgZm9yIGFsbCB0aGUgcHJvcGVydGllcyB0aGF0IHdlIHdhbnQgdG8gY29udHJvbC5cbiAgICAtIFdlIGNvdWxkIGFsc28gdXNlIEBIb3N0TGlzdGVuZXIuXG4qL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl1bYXBDaGVja2JveF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEFQX0NIRUNLQk9YX0RJUkVDVElWRV9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IENoZWNrYm94RGlyZWN0aXZlLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnb25CbHVyKCknLFxuICAgICAgICAnW2Rpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgICAgICdbcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAgICAgJ1tjaGVja2VkXSc6ICdjaGVja2VkJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtbGFiZWxdJzogJ2FyaWFMYWJlbCcsXG4gICAgICAgICdbYXR0ci5hcmlhLWxhYmVsbGVkYnldJzogJ2FyaWFMYWJlbGxlZGJ5JyxcbiAgICAgICAgJ1thdHRyLmFyaWEtZGVzY3JpYmVkYnldJzogJ2FyaWFEZXNjcmliZWRieScsXG4gICAgICAgICdbYXR0ci5kYXRhLXRlc3RdJzogJ25hbWUnLFxuICAgICAgICAnW2lkXSc6ICduYW1lJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBDaGVja2JveERpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzeW1ib2xSZWdpc3RyeSA9IGluamVjdChTeW1ib2xSZWdpc3RyeSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXIgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBhcmlhTGFiZWw/OiBzdHJpbmc7XG4gICAgQElucHV0KCdhcmlhLWxhYmVsbGVkYnknKSBhcmlhTGFiZWxsZWRieT86IHN0cmluZztcbiAgICBASW5wdXQoJ2FyaWEtZGVzY3JpYmVkYnknKSBhcmlhRGVzY3JpYmVkYnk/OiBzdHJpbmc7XG4gICAgXG4gICAgQElucHV0KHtcbiAgICAgICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLFxuICAgIH0pXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBcbiAgICBASW5wdXQoe1xuICAgICAgICB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgfSlcbiAgICBzZXQgaW5kZXRlcm1pbmF0ZShpbmRldGVybWluYXRlOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpbmRldGVybWluYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGVja2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgaW5wdXQuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT25seSB1cGRhdGUgdmlzaWJpbGl0eSBpZiBjb250YWluZXJzIGFyZSByZWFkeVxuICAgICAgICBpZiAodGhpcy5jaGVja21hcmtDb250YWluZXIgJiYgdGhpcy5pbmRldGVybWluYXRlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrbWFya1Zpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBpbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5kZXRlcm1pbmF0ZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBcbiAgICBzZXQgY2hlY2tlZChjaGVja2VkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgICAvLyBPbmx5IHVwZGF0ZSB2aXNpYmlsaXR5IGlmIGNvbnRhaW5lcnMgYXJlIHJlYWR5XG4gICAgICAgIGlmICh0aGlzLmNoZWNrbWFya0NvbnRhaW5lciAmJiB0aGlzLmluZGV0ZXJtaW5hdGVDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hlY2ttYXJrVmlzaWJpbGl0eSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tlZDtcbiAgICB9XG5cbiAgICBASW5wdXQoe1xuICAgICAgICB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgfSlcbiAgICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KHtcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSlcbiAgICBzZXQgbmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICAgIEBPdXRwdXQoKSByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgX2NoZWNrZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbmFtZSA9ICcnO1xuICAgIHByaXZhdGUgX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm46ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIHByaXZhdGUgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIFxuICAgIHByaXZhdGUgbGlzdGVuZXJzOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuICAgIHByaXZhdGUgc3R5bGVFbGVtZW50ITogSFRNTFN0eWxlRWxlbWVudDtcbiAgICBwcml2YXRlIHdyYXBwZXIhOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGNoZWNrbWFya0NvbnRhaW5lciE6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgaW5kZXRlcm1pbmF0ZUNvbnRhaW5lciE6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgc3ltYm9sQ29tcG9uZW50PzogQ29tcG9uZW50UmVmPFN5bWJvbENvbXBvbmVudD47XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zeW1ib2xSZWdpc3RyeS5yZWdpc3RlclN5bWJvbHMoW2FwQ2hlY2tdKTtcbiAgICAgICAgdGhpcy5jcmVhdGVDaGVja2JveFN0cnVjdHVyZSgpO1xuICAgICAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCh1bmxpc3RlbiA9PiB1bmxpc3RlbigpKTtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGVFbGVtZW50ICYmIHRoaXMuc3R5bGVFbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zdHlsZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN5bWJvbENvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zeW1ib2xDb21wb25lbnQuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoZWNrbWFya0NvbnRhaW5lciAmJiB0aGlzLmNoZWNrbWFya0NvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrbWFya0NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY2hlY2ttYXJrQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbmRldGVybWluYXRlQ29udGFpbmVyICYmIHRoaXMuaW5kZXRlcm1pbmF0ZUNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmluZGV0ZXJtaW5hdGVDb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1vdmUgaW5wdXQgYmFjayBvdXQgb2Ygd3JhcHBlciBhbmQgcmVtb3ZlIHdyYXBwZXJcbiAgICAgICAgaWYgKHRoaXMud3JhcHBlciAmJiB0aGlzLndyYXBwZXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKHRoaXMud3JhcHBlci5wYXJlbnROb2RlLCBpbnB1dCwgdGhpcy53cmFwcGVyKTtcbiAgICAgICAgICAgIHRoaXMud3JhcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNoZWNrYm94U3RydWN0dXJlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBpbnB1dC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBcbiAgICAgICAgLy8gSG90IHRha2UgLSBJbnB1dCBkb2Vzbid0IG5lZWQgcG9zaXRpb25pbmcgc2luY2UgaXQgd2lsbCBiZSB3cmFwcGVkXG4gICAgICAgIFxuICAgICAgICAvLyBNYWtlIGlucHV0J3MgcGFyZW50IHVzZSBpbmxpbmUtZmxleCBmb3IgYWxpZ25tZW50XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocGFyZW50LCAnZGlzcGxheScsICdpbmxpbmUtZmxleCcpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShwYXJlbnQsICdhbGlnbi1pdGVtcycsICdjZW50ZXInKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocGFyZW50LCAnZ2FwJywgJ3ZhcigtLXJlZi1zcGFjaW5nLXh4cyknKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhpbnB1dCwgJ2FwLWNoZWNrYm94LXN0eWxlZCcpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGVja21hcmtDb250YWluZXIgPSB0aGlzLmNyZWF0ZU92ZXJsYXlDb250YWluZXIoJ2FwLWNoZWNrYm94LWNoZWNrbWFyaycpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy53cmFwcGVyID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy53cmFwcGVyLCAncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLndyYXBwZXIsICdkaXNwbGF5JywgJ2lubGluZS1mbGV4Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy53cmFwcGVyLCAnYWxpZ24taXRlbXMnLCAnY2VudGVyJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy53cmFwcGVyLCAndmVydGljYWwtYWxpZ24nLCAnbWlkZGxlJyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZShwYXJlbnQsIHRoaXMud3JhcHBlciwgaW5wdXQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMud3JhcHBlciwgaW5wdXQpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIsIHRoaXMuY2hlY2ttYXJrQ29udGFpbmVyKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZUNvbnRhaW5lciA9IHRoaXMuY3JlYXRlT3ZlcmxheUNvbnRhaW5lcignYXAtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZScpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIsIHRoaXMuaW5kZXRlcm1pbmF0ZUNvbnRhaW5lcik7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNyZWF0ZUNoZWNrbWFya1N5bWJvbCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZUluZGV0ZXJtaW5hdGVCYXIoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuYXBwbHlDaGVja2JveFN0eWxlcygpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja21hcmtWaXNpYmlsaXR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVPdmVybGF5Q29udGFpbmVyKGNsYXNzTmFtZTogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhjb250YWluZXIsIGNsYXNzTmFtZSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY29udGFpbmVyLCAncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjb250YWluZXIsICd0b3AnLCAnNTAlJyk7IFxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNvbnRhaW5lciwgJ2xlZnQnLCAnNTAlJyk7ICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY29udGFpbmVyLCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNvbnRhaW5lciwgJ3dpZHRoJywgJ2F1dG8nKTsgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY29udGFpbmVyLCAnaGVpZ2h0JywgJ2F1dG8nKTsgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY29udGFpbmVyLCAnZGlzcGxheScsICdmbGV4Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY29udGFpbmVyLCAnanVzdGlmeS1jb250ZW50JywgJ2NlbnRlcicpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNvbnRhaW5lciwgJ2FsaWduLWl0ZW1zJywgJ2NlbnRlcicpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNvbnRhaW5lciwgJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjb250YWluZXIsICdvcGFjaXR5JywgJzAnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjb250YWluZXIsICd6LWluZGV4JywgJzEnKTtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNoZWNrbWFya1N5bWJvbCgpOiB2b2lkIHtcbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBzeW1ib2wgY29tcG9uZW50XG4gICAgICAgIHRoaXMuc3ltYm9sQ29tcG9uZW50ID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChTeW1ib2xDb21wb25lbnQpO1xuICAgICAgICBcbiAgICAgICAgLy8gU2V0IGlucHV0cyB1c2luZyBzZXRJbnB1dCBtZXRob2QgZm9yIHNpZ25hbC1iYXNlZCBpbnB1dHNcbiAgICAgICAgdGhpcy5zeW1ib2xDb21wb25lbnQuc2V0SW5wdXQoJ3N5bWJvbElkJywgJ2NoZWNrJyk7XG4gICAgICAgIHRoaXMuc3ltYm9sQ29tcG9uZW50LnNldElucHV0KCdjb2xvcicsICd3aGl0ZScpO1xuICAgICAgICB0aGlzLnN5bWJvbENvbXBvbmVudC5zZXRJbnB1dCgnc2l6ZScsIDEwKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFwcGVuZCB0aGUgc3ltYm9sIHRvIG91ciBjaGVja21hcmsgY29udGFpbmVyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5jaGVja21hcmtDb250YWluZXIsIHRoaXMuc3ltYm9sQ29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlSW5kZXRlcm1pbmF0ZUJhcigpOiB2b2lkIHtcbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBpbmRldGVybWluYXRlIGJhciBlbGVtZW50IGV4YWN0bHkgbGlrZSB0aGUgY29tcG9uZW50XG4gICAgICAgIGNvbnN0IGJhciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGJhciwgJ2hlaWdodCcsICcxLjVweCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGJhciwgJ2JhY2tncm91bmQnLCAndmFyKC0tcmVmLWNvbG9yLXdoaXRlKScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGJhciwgJ3dpZHRoJywgJzhweCcpO1xuICAgICAgICBcbiAgICAgICAgLy8gQXBwZW5kIHRoZSBiYXIgdG8gdGhlIGluZGV0ZXJtaW5hdGUgY29udGFpbmVyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5pbmRldGVybWluYXRlQ29udGFpbmVyLCBiYXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2hlY2ttYXJrVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2ttYXJrQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zdCBvcGFjaXR5ID0gdGhpcy5fY2hlY2tlZCAmJiAhdGhpcy5faW5kZXRlcm1pbmF0ZSA/ICcxJyA6ICcwJztcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jaGVja21hcmtDb250YWluZXIsICdvcGFjaXR5Jywgb3BhY2l0eSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5kZXRlcm1pbmF0ZUNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3Qgb3BhY2l0eSA9IHRoaXMuX2luZGV0ZXJtaW5hdGUgJiYgIXRoaXMuX2NoZWNrZWQgPyAnMScgOiAnMCc7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW5kZXRlcm1pbmF0ZUNvbnRhaW5lciwgJ29wYWNpdHknLCBvcGFjaXR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgXG4gICAgICAgIC8vIElucHV0IGNoYW5nZSBsaXN0ZW5lciAobmF0aXZlIGNoZWNrYm94IGNoYW5nZSlcbiAgICAgICAgY29uc3QgY2hhbmdlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihpbnB1dCwgJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChjaGFuZ2VMaXN0ZW5lcik7XG4gICAgICAgIFxuICAgICAgICAvLyBMaXN0ZW4gZm9yIGxhYmVsIGNsaWNrcyB0byBlbnN1cmUgZm9jdXMgaXMgbWFpbnRhaW5lZFxuICAgICAgICBjb25zdCBwYXJlbnQgPSBpbnB1dC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbENsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihwYXJlbnQsICdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICAvLyBJZiBjbGlja2luZyBvbiBhIGxhYmVsIHRoYXQgdGFyZ2V0cyBvdXIgaW5wdXQsIGVuc3VyZSBmb2N1c1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0xBQkVMJyAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKCdmb3InKSA9PT0gdGhpcy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSB0aGUgbGFiZWwgY2xpY2sgaXMgcHJvY2Vzc2VkIGZpcnN0XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxhYmVsQ2xpY2tMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5Q2hlY2tib3hTdHlsZXMoKTogdm9pZCB7XG4gICAgICAgIC8vIFN0eWxlIHRoZSBpbnB1dCBkaXJlY3RseSB3aXRob3V0IG1vdmluZyBET00gZWxlbWVudHNcbiAgICAgICAgY29uc3Qgc3R5bGVzID0gYFxuICAgICAgICAgICAgLyogQ29tcGxldGUgcmVzZXQgYW5kIGN1c3RvbSBzdHlsaW5nIGZvciBvdXIgY2hlY2tib3ggKi9cbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQge1xuICAgICAgICAgICAgICAgIC8qIFRhcmdldGVkIHJlc2V0IG9mIHByb2JsZW1hdGljIHByb3BlcnRpZXMgKi9cbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLyogT3VyIGN1c3RvbSBzdHlsaW5nIC0gdXNlICFpbXBvcnRhbnQgdG8gb3ZlcnJpZGUgYW55IGdsb2JhbCBzdHlsZXMgKi9cbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTZweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTZweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTZweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDE2cHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcmVmLWNvbG9yLWdyZXktNjApO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXN5cy1ib3JkZXItcmFkaXVzLXNtKTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1yZWYtY29sb3Itd2hpdGUpO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJlZi1jb2xvci13aGl0ZSk7XG4gICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLyogRW5zdXJlIG5vIG90aGVyIHN0eWxlcyBjYW4gaW50ZXJmZXJlICovXG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICAgICAgICAgICAgICAgIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgICAgIHRleHQtaW5kZW50OiAwO1xuICAgICAgICAgICAgICAgIHRleHQtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHN0YXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKiBIb3ZlciBzdGF0ZSAqL1xuICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmFwLWNoZWNrYm94LXN0eWxlZDpob3ZlciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1yZWYtY29sb3ItZ3JleS04MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qIEFjdGl2ZS9wcmVzc2VkIHN0YXRlICovXG4gICAgICAgICAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uYXAtY2hlY2tib3gtc3R5bGVkOmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1yZWYtY29sb3ItZ3JleS0xMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKiBDaGVja2VkIHN0YXRlICovXG4gICAgICAgICAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uYXAtY2hlY2tib3gtc3R5bGVkOmNoZWNrZWQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJlZi1jb2xvci1lbGVjdHJpYy1ibHVlLTEwMCk7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1yZWYtY29sb3ItZWxlY3RyaWMtYmx1ZS0xMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKiBDaGVja2VkIGhvdmVyIHN0YXRlICovXG4gICAgICAgICAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uYXAtY2hlY2tib3gtc3R5bGVkOmNoZWNrZWQ6aG92ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJlZi1jb2xvci1lbGVjdHJpYy1ibHVlLTgwKTtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJlZi1jb2xvci1lbGVjdHJpYy1ibHVlLTEwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qIENoZWNrZWQgYWN0aXZlL3ByZXNzZWQgc3RhdGUgKi9cbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQ6Y2hlY2tlZDphY3RpdmUge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJlZi1jb2xvci1lbGVjdHJpYy1ibHVlLTYwKTtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJlZi1jb2xvci1lbGVjdHJpYy1ibHVlLTEwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qIEluZGV0ZXJtaW5hdGUgc3RhdGUgKi9cbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQ6aW5kZXRlcm1pbmF0ZSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcmVmLWNvbG9yLWVsZWN0cmljLWJsdWUtMTAwKTtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJlZi1jb2xvci1lbGVjdHJpYy1ibHVlLTEwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qIERpc2FibGVkIHN0YXRlICovXG4gICAgICAgICAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uYXAtY2hlY2tib3gtc3R5bGVkOmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJlZi1jb2xvci1ncmV5LTIwKTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1yZWYtY29sb3ItZ3JleS0xMCk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uYXAtY2hlY2tib3gtc3R5bGVkOmRpc2FibGVkOmNoZWNrZWQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJlZi1jb2xvci1ncmV5LTIwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyogRm9jdXMgc3RhdGUgLSBvbmx5IHNob3cgb24gaG92ZXItY2FwYWJsZSBkZXZpY2VzIGxpa2UgdGhlIGNvbXBvbmVudCAqL1xuICAgICAgICAgICAgQG1lZGlhIChob3ZlcjogaG92ZXIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uYXAtY2hlY2tib3gtc3R5bGVkOmZvY3VzOm5vdCguZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogM3B4IHNvbGlkIHZhcigtLXJlZi1jb2xvci1lbGVjdHJpYy1ibHVlLTEwMCkgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDFweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyogTGFiZWwgc3R5bGluZyAtIHRhcmdldHMgbGFiZWxzIHRoYXQgZm9sbG93IG91ciB3cmFwcGVyIGNvbnRhaW5pbmcgc3R5bGVkIGNoZWNrYm94ZXMgKi9cbiAgICAgICAgICAgIHNwYW46aGFzKGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQpICsgbGFiZWwge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogdmFyKC0tY29tcC1mb3Jtcy1sYWJlbC1mb250LWZhbWlseSk7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiB2YXIoLS1jb21wLWZvcm1zLWxhYmVsLXNpemUpO1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1jb21wLWZvcm1zLWxhYmVsLWZvbnQtd2VpZ2h0KTtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tY29tcC1mb3Jtcy1sYWJlbC1saW5lLWhlaWdodCk7XG4gICAgICAgICAgICAgICAgY29sb3I6IHZhcigtLWNvbXAtZm9ybXMtbGFiZWwtdGV4dC1jb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qIEVtcHR5IGxhYmVsIHN0eWxpbmcgKi9cbiAgICAgICAgICAgIHNwYW46aGFzKGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQpICsgbGFiZWw6ZW1wdHkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qIERpc2FibGVkIGxhYmVsIHN0eWxpbmcgKi9cbiAgICAgICAgICAgIHNwYW46aGFzKGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQ6ZGlzYWJsZWQpICsgbGFiZWwge1xuICAgICAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1yZWYtY29sb3ItZ3JleS02MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qIExhYmVsIGhvdmVyIHN0eWxpbmcgKi9cbiAgICAgICAgICAgIHNwYW46aGFzKGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQpICsgbGFiZWw6aG92ZXI6bm90KC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyogRGlzYWJsZWQgbGFiZWwgaG92ZXIgKi9cbiAgICAgICAgICAgIHNwYW46aGFzKGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQ6ZGlzYWJsZWQpICsgbGFiZWw6aG92ZXIge1xuICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgYDtcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhbmQgYXBwZW5kIHN0eWxlIGVsZW1lbnRcbiAgICAgICAgdGhpcy5zdHlsZUVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5zdHlsZUVsZW1lbnQsIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dChzdHlsZXMpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWxlbWVudCk7XG4gICAgfVxuXG5cbiAgICBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25WYWx1ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodGhpcy5faW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gaW5kZXRlcm1pbmF0ZSwgY2xpY2tpbmcgc2hvdWxkIGdvIHRvIGNoZWNrZWQgc3RhdGVcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaW5wdXQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBOb3JtYWwgdG9nZ2xlIGJlaGF2aW9yXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hlY2ttYXJrVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl9jaGVja2VkKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy5fY2hlY2tlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudGF0aW9uXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGVja2VkID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgICAgLy8gRW5zdXJlIGluZGV0ZXJtaW5hdGUgc3RhdGUgaXMgcHJvcGVybHkgc2V0XG4gICAgICAgIGlucHV0LmluZGV0ZXJtaW5hdGUgPSB0aGlzLl9pbmRldGVybWluYXRlO1xuICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrbWFya1Zpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbiA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaW5wdXQuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgICBjb25zdCBpc05vdFZhbGlkID0gIXRoaXMuX2NoZWNrZWQgJiYgdGhpcy5yZXF1aXJlZDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTm90VmFsaWQgJiYge1xuICAgICAgICAgICAgICAgIGludmFsaWQ6IHRydWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxufSJdfQ==
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy91aS1jb21wb25lbnRzL2RpcmVjdGl2ZXMvc3JjL2NoZWNrYm94LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNULE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQzs7QUFPdkIsTUFBTSxPQUFPLGlCQUFpQjtJQUNULFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUE0QixDQUFBLENBQUMsQ0FBQztJQUNsRCxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTlDLGdCQUFnQjtJQUNSLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV2QyxzREFBc0Q7SUFDdEQsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDckMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFakQseURBQXlEO0lBQ3pELDhCQUE4QjtJQUM5QixJQUNJLFlBQVksQ0FBQyxPQUFnQjtRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFJSSxrQkFBa0IsQ0FBQyxhQUFzQjtRQUN6QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FB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QUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQzt1R0F0U1EsaUJBQWlCOzJGQUFqQixpQkFBaUIseUxBcUJYLGdCQUFnQixnQkF2QnBCLEVBQUU7OzJGQUVKLGlCQUFpQjtrQkFMN0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsb0NBQW9DO29CQUM5QyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLEVBQUU7aUJBQ2hCO3dEQWdCTyxZQUFZO3NCQURmLEtBQUs7dUJBQUMsU0FBUztnQkFVWixrQkFBa0I7c0JBSnJCLEtBQUs7dUJBQUM7d0JBQ0gsU0FBUyxFQUFFLGdCQUFnQjt3QkFDM0IsS0FBSyxFQUFFLGVBQWU7cUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIERpcmVjdGl2ZSxcbiAgICBlZmZlY3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVthcENoZWNrYm94XScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGVja2JveERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pik7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gICAgLy8gU3RhdGUgc2lnbmFsc1xuICAgIHByaXZhdGUgX2NoZWNrZWQgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByaXZhdGUgX2luZGV0ZXJtaW5hdGUgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgLy8gSW5wdXQgc2lnbmFsIGFjY2Vzc29ycyB0aGF0IHdvcmsgd2l0aCBob3N0IGJpbmRpbmdzXG4gICAgY2hlY2tlZCA9IHRoaXMuX2NoZWNrZWQuYXNSZWFkb25seSgpO1xuICAgIGluZGV0ZXJtaW5hdGUgPSB0aGlzLl9pbmRldGVybWluYXRlLmFzUmVhZG9ubHkoKTtcblxuICAgIC8vIElucHV0IHNldHRlcnMgd2l0aCBwcm9wZXIgYWxpYXNlcyBmb3IgdGVtcGxhdGUgYmluZGluZ1xuICAgIC8vIENvdWxkbid0IGJlIG1pZ3JhdGVkIHRvIHlldFxuICAgIEBJbnB1dCgnY2hlY2tlZCcpXG4gICAgc2V0IGNoZWNrZWRJbnB1dChjaGVja2VkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrZWQuc2V0KGNoZWNrZWQpO1xuICAgICAgICB0aGlzLnVwZGF0ZU5hdGl2ZUVsZW1lbnRTeW5jKCk7XG4gICAgfVxuXG4gICAgQElucHV0KHtcbiAgICAgICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLFxuICAgICAgICBhbGlhczogJ2luZGV0ZXJtaW5hdGUnLFxuICAgIH0pXG4gICAgc2V0IGluZGV0ZXJtaW5hdGVJbnB1dChpbmRldGVybWluYXRlOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpbmRldGVybWluYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGVja2VkLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5kZXRlcm1pbmF0ZS5zZXQoaW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlTmF0aXZlRWxlbWVudFN5bmMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU5hdGl2ZUVsZW1lbnRTeW5jKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSB0aGlzLmNoZWNrZWQoKTtcbiAgICAgICAgICAgIGlucHV0LmluZGV0ZXJtaW5hdGUgPSB0aGlzLmluZGV0ZXJtaW5hdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByaXZhdGUgcHJvcGVydGllc1xuICAgIHByaXZhdGUgbGlzdGVuZXJzOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuICAgIHByaXZhdGUgc3R5bGVFbGVtZW50ITogSFRNTFN0eWxlRWxlbWVudDtcbiAgICBwcml2YXRlIGNoZWNrbWFya1N2ZyE6IFNWR0VsZW1lbnQ7XG4gICAgcHJpdmF0ZSBpbmRldGVybWluYXRlQmFyITogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrbWFya1N2ZyAmJiB0aGlzLmluZGV0ZXJtaW5hdGVCYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrbWFya1Zpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3VzdG9tIFNWRyBjb250ZW50XG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGVja1N2Z0NvbnRlbnQgPSBgXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiBmaWxsPVwid2hpdGVcIj5cbiAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xNC4yMzggMy4zMzdhLjkyLjkyIDAgMCAxIC4wMjUgMS4zMDFsLTcuNyA4YS45Mi45MiAwIDAgMS0xLjMyNiAwbC0zLjUtMy42MzZhLjkyLjkyIDAgMSAxIDEuMzI2LTEuMjc2TDUuOSAxMC42NzRsNy4wMzctNy4zMTJhLjkyLjkyIDAgMCAxIDEuMzAxLS4wMjVaXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgYDtcblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNyZWF0ZUNoZWNrYm94U3RydWN0dXJlKCk7XG4gICAgICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKHVubGlzdGVuID0+IHVubGlzdGVuKCkpO1xuICAgICAgICBpZiAodGhpcy5zdHlsZUVsZW1lbnQgJiYgdGhpcy5zdHlsZUVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5zdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnN0eWxlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2hlY2ttYXJrU3ZnICYmIHRoaXMuY2hlY2ttYXJrU3ZnLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2ttYXJrU3ZnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jaGVja21hcmtTdmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGV0ZXJtaW5hdGVCYXIgJiYgdGhpcy5pbmRldGVybWluYXRlQmFyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZUJhci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuaW5kZXRlcm1pbmF0ZUJhcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNoZWNrYm94U3RydWN0dXJlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBpbnB1dC5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIC8vIE1ha2UgaW5wdXQncyBwYXJlbnQgdXNlIGlubGluZS1mbGV4IGZvciBhbGlnbm1lbnQgYW5kIHBvc2l0aW9uIHJlbGF0aXZlXG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocGFyZW50LCAnZGlzcGxheScsICdpbmxpbmUtZmxleCcpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShwYXJlbnQsICdhbGlnbi1pdGVtcycsICdjZW50ZXInKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocGFyZW50LCAnZ2FwJywgJ3ZhcigtLXJlZi1zcGFjaW5nLXh4cyknKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocGFyZW50LCAncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoaW5wdXQsICdhcC1jaGVja2JveC1zdHlsZWQnKTtcblxuICAgICAgICB0aGlzLmNyZWF0ZUNoZWNrbWFya1N2ZygpO1xuICAgICAgICB0aGlzLmNyZWF0ZUluZGV0ZXJtaW5hdGVCYXIoKTtcblxuICAgICAgICB0aGlzLmFwcGx5Q2hlY2tib3hTdHlsZXMoKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrbWFya1Zpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU92ZXJsYXlFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIC8vIEFwcGx5IGNvbW1vbiBwb3NpdGlvbmluZyBzdHlsZXNcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAndG9wJywgJzUwJScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsICdsZWZ0JywgJzhweCcpOyAvLyBDZW50ZXIgb3ZlciAxNnB4IGNoZWNrYm94XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsICdvcGFjaXR5JywgJzAnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAnei1pbmRleCcsICcxJyk7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRvIHBhcmVudFxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDaGVja21hcmtTdmcoKTogdm9pZCB7XG4gICAgICAgIC8vIENyZWF0ZSBTVkcgZWxlbWVudCBmcm9tIHN0cmluZ1xuICAgICAgICBjb25zdCB0ZW1wRGl2ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0ZW1wRGl2LCAnaW5uZXJIVE1MJywgdGhpcy5jaGVja1N2Z0NvbnRlbnQpO1xuICAgICAgICB0aGlzLmNoZWNrbWFya1N2ZyA9IHRlbXBEaXYuZmlyc3RFbGVtZW50Q2hpbGQgYXMgU1ZHRWxlbWVudDtcblxuICAgICAgICB0aGlzLmNyZWF0ZU92ZXJsYXlFbGVtZW50KHRoaXMuY2hlY2ttYXJrU3ZnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUluZGV0ZXJtaW5hdGVCYXIoKTogdm9pZCB7XG4gICAgICAgIC8vIENyZWF0ZSB0aGUgaW5kZXRlcm1pbmF0ZSBiYXIgZWxlbWVudFxuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVCYXIgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmluZGV0ZXJtaW5hdGVCYXIsICdoZWlnaHQnLCAnMS41cHgnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmluZGV0ZXJtaW5hdGVCYXIsICdiYWNrZ3JvdW5kJywgJ3ZhcigtLXJlZi1jb2xvci13aGl0ZSknKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmluZGV0ZXJtaW5hdGVCYXIsICd3aWR0aCcsICc4cHgnKTtcblxuICAgICAgICB0aGlzLmNyZWF0ZU92ZXJsYXlFbGVtZW50KHRoaXMuaW5kZXRlcm1pbmF0ZUJhcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDaGVja21hcmtWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jaGVja21hcmtTdmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wYWNpdHkgPSB0aGlzLmNoZWNrZWQoKSAmJiAhdGhpcy5pbmRldGVybWluYXRlKCkgPyAnMScgOiAnMCc7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuY2hlY2ttYXJrU3ZnLCAnb3BhY2l0eScsIG9wYWNpdHkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGV0ZXJtaW5hdGVCYXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wYWNpdHkgPSB0aGlzLmluZGV0ZXJtaW5hdGUoKSAmJiAhdGhpcy5jaGVja2VkKCkgPyAnMScgOiAnMCc7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW5kZXRlcm1pbmF0ZUJhciwgJ29wYWNpdHknLCBvcGFjaXR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAvLyBJbnB1dCBjaGFuZ2UgbGlzdGVuZXIgKG5hdGl2ZSBjaGVja2JveCBjaGFuZ2UpXG4gICAgICAgIGNvbnN0IGNoYW5nZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oaW5wdXQsICdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2UoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2goY2hhbmdlTGlzdGVuZXIpO1xuXG4gICAgICAgIC8vIExpc3RlbiBmb3IgbGFiZWwgY2xpY2tzIHRvIGVuc3VyZSBmb2N1cyBpcyBtYWludGFpbmVkXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGlucHV0LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsQ2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHBhcmVudCwgJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8vIElmIGNsaWNraW5nIG9uIGEgbGFiZWwgdGhhdCB0YXJnZXRzIG91ciBpbnB1dCwgZW5zdXJlIGZvY3VzXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnTEFCRUwnICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2ZvcicpID09PSBpbnB1dC5pZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTbWFsbCBkZWxheSB0byBlbnN1cmUgdGhlIGxhYmVsIGNsaWNrIGlzIHByb2Nlc3NlZCBmaXJzdFxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsYWJlbENsaWNrTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseUNoZWNrYm94U3R5bGVzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdHlsZXMgPSBgXG4gICAgICAgICAgICAvKiBNaW5pbWFsIGNoZWNrYm94IHN0eWxpbmcgKi9cbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQge1xuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTZweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTZweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTZweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDE2cHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcmVmLWNvbG9yLWdyZXktNjApO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXN5cy1ib3JkZXItcmFkaXVzLXNtKTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1yZWYtY29sb3Itd2hpdGUpO1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qIEhvdmVyIHN0YXRlICovXG4gICAgICAgICAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uYXAtY2hlY2tib3gtc3R5bGVkOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJlZi1jb2xvci1ncmV5LTgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyogQWN0aXZlL3ByZXNzZWQgc3RhdGUgKi9cbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQ6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJlZi1jb2xvci1ncmV5LTEwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qIENoZWNrZWQgc3RhdGUgKi9cbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQ6Y2hlY2tlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcmVmLWNvbG9yLWVsZWN0cmljLWJsdWUtMTAwKTtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJlZi1jb2xvci1lbGVjdHJpYy1ibHVlLTEwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qIENoZWNrZWQgaG92ZXIgc3RhdGUgKi9cbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQ6Y2hlY2tlZDpob3ZlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcmVmLWNvbG9yLWVsZWN0cmljLWJsdWUtODApO1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcmVmLWNvbG9yLWVsZWN0cmljLWJsdWUtMTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyogQ2hlY2tlZCBhY3RpdmUvcHJlc3NlZCBzdGF0ZSAqL1xuICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmFwLWNoZWNrYm94LXN0eWxlZDpjaGVja2VkOmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcmVmLWNvbG9yLWVsZWN0cmljLWJsdWUtNjApO1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcmVmLWNvbG9yLWVsZWN0cmljLWJsdWUtMTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyogSW5kZXRlcm1pbmF0ZSBzdGF0ZSAqL1xuICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmFwLWNoZWNrYm94LXN0eWxlZDppbmRldGVybWluYXRlIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1yZWYtY29sb3ItZWxlY3RyaWMtYmx1ZS0xMDApO1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcmVmLWNvbG9yLWVsZWN0cmljLWJsdWUtMTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi9cbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQ6ZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcmVmLWNvbG9yLWdyZXktMjApO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJlZi1jb2xvci1ncmV5LTEwKTtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5hcC1jaGVja2JveC1zdHlsZWQ6ZGlzYWJsZWQ6Y2hlY2tlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcmVmLWNvbG9yLWdyZXktMjApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKiBGb2N1cyBzdGF0ZSAqL1xuICAgICAgICAgICAgQG1lZGlhIChob3ZlcjogaG92ZXIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uYXAtY2hlY2tib3gtc3R5bGVkOmZvY3VzOm5vdCguZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogM3B4IHNvbGlkIHZhcigtLXJlZi1jb2xvci1lbGVjdHJpYy1ibHVlLTEwMCkgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDFweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyogTGFiZWwgc3R5bGluZyAqL1xuICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmFwLWNoZWNrYm94LXN0eWxlZCArIGxhYmVsIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWNvbXAtZm9ybXMtbGFiZWwtZm9udC1mYW1pbHkpO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tY29tcC1mb3Jtcy1sYWJlbC1zaXplKTtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogdmFyKC0tY29tcC1mb3Jtcy1sYWJlbC1mb250LXdlaWdodCk7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWNvbXAtZm9ybXMtbGFiZWwtbGluZS1oZWlnaHQpO1xuICAgICAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1jb21wLWZvcm1zLWxhYmVsLXRleHQtY29sb3IpO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyogRW1wdHkgbGFiZWwgc3R5bGluZyAqL1xuICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmFwLWNoZWNrYm94LXN0eWxlZCArIGxhYmVsOmVtcHR5IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKiBEaXNhYmxlZCBsYWJlbCBzdHlsaW5nICovXG4gICAgICAgICAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uYXAtY2hlY2tib3gtc3R5bGVkOmRpc2FibGVkICsgbGFiZWwge1xuICAgICAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1yZWYtY29sb3ItZ3JleS02MCk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICBgO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhbmQgYXBwZW5kIHN0eWxlIGVsZW1lbnRcbiAgICAgICAgdGhpcy5zdHlsZUVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5zdHlsZUVsZW1lbnQsIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dChzdHlsZXMpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblZhbHVlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pbmRldGVybWluYXRlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIGluZGV0ZXJtaW5hdGUsIGNsaWNraW5nIHNob3VsZCBnbyB0byBjaGVja2VkIHN0YXRlXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tlZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlucHV0LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm9ybWFsIHRvZ2dsZSBiZWhhdmlvclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrZWQuc2V0KGlucHV0LmNoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|