@eqproject/eqp-dynamic-module 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +37 -3
- package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +220 -0
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +3 -3
- package/esm2020/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.mjs +9 -3
- package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +3 -3
- package/esm2020/lib/components/private/field-templates/image-field-template/image-field-template.component.mjs +3 -2
- package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +7 -5
- package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +7 -5
- package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +7 -5
- package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +7 -5
- package/esm2020/lib/eqp-dynamic-module.module.mjs +12 -5
- package/esm2020/lib/modules/formula.model.mjs +265 -0
- package/esm2020/lib/services/utilityHelper.services.mjs +1 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +564 -31
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +562 -31
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +4 -0
- package/lib/components/private/add-formula-field/add-formula-field.component.d.ts +50 -0
- package/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.d.ts +3 -0
- package/lib/eqp-dynamic-module.module.d.ts +13 -11
- package/lib/modules/formula.model.d.ts +32 -0
- package/package.json +3 -3
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
export class Formula {
|
|
2
|
+
constructor(formula = '') {
|
|
3
|
+
this.current_number = 0;
|
|
4
|
+
this.prev_number = 0;
|
|
5
|
+
this.stack = [];
|
|
6
|
+
this.start = false;
|
|
7
|
+
this.dotted = false; // input number having dot
|
|
8
|
+
this.is_operand = false;
|
|
9
|
+
this.radians = true;
|
|
10
|
+
this.operation = '';
|
|
11
|
+
this.memory = 0;
|
|
12
|
+
this.in_memory = false;
|
|
13
|
+
this.bracket = false;
|
|
14
|
+
this.secondScreen = false;
|
|
15
|
+
this.formula = formula;
|
|
16
|
+
}
|
|
17
|
+
get() {
|
|
18
|
+
return this.formula;
|
|
19
|
+
}
|
|
20
|
+
parse(value) {
|
|
21
|
+
return parseFloat(value);
|
|
22
|
+
}
|
|
23
|
+
getCurrentNumber() {
|
|
24
|
+
return this.parse(this.formula);
|
|
25
|
+
}
|
|
26
|
+
setRadians(switcher) {
|
|
27
|
+
this.radians = switcher;
|
|
28
|
+
return this.radians;
|
|
29
|
+
}
|
|
30
|
+
clear() {
|
|
31
|
+
this.formula = '0';
|
|
32
|
+
this.dotted = false;
|
|
33
|
+
this.is_operand = false;
|
|
34
|
+
this.operation = '';
|
|
35
|
+
this.start = false;
|
|
36
|
+
this.stack = [];
|
|
37
|
+
this.bracket = false;
|
|
38
|
+
return this.formula;
|
|
39
|
+
}
|
|
40
|
+
clearMemory() {
|
|
41
|
+
this.memory = 0;
|
|
42
|
+
this.in_memory = false;
|
|
43
|
+
}
|
|
44
|
+
sumToMemory() {
|
|
45
|
+
let value = this.getCurrentNumber();
|
|
46
|
+
this.memory += value;
|
|
47
|
+
this.in_memory = true;
|
|
48
|
+
this.start = true;
|
|
49
|
+
}
|
|
50
|
+
deductToMemory() {
|
|
51
|
+
let value = this.getCurrentNumber();
|
|
52
|
+
this.memory -= value;
|
|
53
|
+
this.in_memory = true;
|
|
54
|
+
this.start = true;
|
|
55
|
+
}
|
|
56
|
+
readMemory() {
|
|
57
|
+
this.formula = this.memory.toString();
|
|
58
|
+
return this.formula;
|
|
59
|
+
}
|
|
60
|
+
addBracket(value) {
|
|
61
|
+
// brackets can be set only if we have not set them before and we set operand (if we set brackets first - it will not make sense)
|
|
62
|
+
if (value == '(' && this.bracket == false && this.is_operand == true) {
|
|
63
|
+
this.stack.push(value);
|
|
64
|
+
this.bracket = true;
|
|
65
|
+
this.is_operand = false;
|
|
66
|
+
}
|
|
67
|
+
if (value == ')' && this.bracket == true && this.is_operand != true) {
|
|
68
|
+
this.bracket = false;
|
|
69
|
+
this.stack.push(this.formula);
|
|
70
|
+
this.stack.push(')');
|
|
71
|
+
this.is_operand = false;
|
|
72
|
+
this.start = true;
|
|
73
|
+
this.formula = eval(this.stack.join('')).toString();
|
|
74
|
+
this.stack = [this.formula];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
setOperation(operand) {
|
|
78
|
+
this.operation = operand;
|
|
79
|
+
// If operator already set - nothing doing
|
|
80
|
+
if (this.is_operand) {
|
|
81
|
+
this.operation = operand;
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
this.is_operand = true;
|
|
85
|
+
this.stack.push(this.formula);
|
|
86
|
+
this.stack.push(this.operation);
|
|
87
|
+
this.start = true;
|
|
88
|
+
}
|
|
89
|
+
calculate() {
|
|
90
|
+
let result;
|
|
91
|
+
if (this.stack.length < 3)
|
|
92
|
+
return;
|
|
93
|
+
this.is_operand = false;
|
|
94
|
+
this.current_number = this.parse(this.stack.pop());
|
|
95
|
+
this.operation = this.stack.pop();
|
|
96
|
+
this.prev_number = this.parse(this.stack.pop());
|
|
97
|
+
if (!this.prev_number)
|
|
98
|
+
return 0;
|
|
99
|
+
switch (this.operation) {
|
|
100
|
+
case '+':
|
|
101
|
+
result = this.prev_number + this.current_number;
|
|
102
|
+
this.show(result);
|
|
103
|
+
break;
|
|
104
|
+
case '-':
|
|
105
|
+
result = this.prev_number - this.current_number;
|
|
106
|
+
this.show(result);
|
|
107
|
+
break;
|
|
108
|
+
case '*':
|
|
109
|
+
result = this.prev_number * this.current_number;
|
|
110
|
+
this.show(result);
|
|
111
|
+
break;
|
|
112
|
+
case '/':
|
|
113
|
+
result = this.prev_number / this.current_number;
|
|
114
|
+
this.show(result);
|
|
115
|
+
break;
|
|
116
|
+
case 'sqrt':
|
|
117
|
+
result = Math.pow(this.prev_number, 1 / this.current_number);
|
|
118
|
+
this.show(result);
|
|
119
|
+
break;
|
|
120
|
+
case 'pow':
|
|
121
|
+
result = Math.pow(this.prev_number, this.current_number);
|
|
122
|
+
this.show(result);
|
|
123
|
+
break;
|
|
124
|
+
case 'yx':
|
|
125
|
+
result = Math.pow(this.current_number, this.prev_number);
|
|
126
|
+
this.show(result);
|
|
127
|
+
break;
|
|
128
|
+
case 'log':
|
|
129
|
+
result = Math.log(this.prev_number) / Math.log(this.current_number);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
this.current_number = this.parse(this.formula);
|
|
133
|
+
this.start = true;
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
addValue(value, start) {
|
|
137
|
+
if (start || this.start || (this.dotted == false && this.formula == '0' && value != '.')) {
|
|
138
|
+
this.formula = '';
|
|
139
|
+
}
|
|
140
|
+
this.start = start;
|
|
141
|
+
if (value == '.') {
|
|
142
|
+
if (this.dotted == true) {
|
|
143
|
+
return this.formula;
|
|
144
|
+
}
|
|
145
|
+
this.dotted = true;
|
|
146
|
+
}
|
|
147
|
+
this.formula += value;
|
|
148
|
+
this.is_operand = false;
|
|
149
|
+
return this.formula;
|
|
150
|
+
}
|
|
151
|
+
removeSymbol() {
|
|
152
|
+
let len = this.formula.length;
|
|
153
|
+
let last_symbol = this.formula.substring(len - 1, len);
|
|
154
|
+
if (last_symbol == '.') {
|
|
155
|
+
this.dotted = false;
|
|
156
|
+
}
|
|
157
|
+
this.formula = this.formula.slice(0, -1);
|
|
158
|
+
}
|
|
159
|
+
singleton(operand, data) {
|
|
160
|
+
let result = 0;
|
|
161
|
+
let rad = 0;
|
|
162
|
+
let grad = 180 / Math.PI;
|
|
163
|
+
this.current_number = parseFloat(this.formula);
|
|
164
|
+
switch (operand) {
|
|
165
|
+
case 'invert':
|
|
166
|
+
result = this.current_number * data;
|
|
167
|
+
break;
|
|
168
|
+
case 'sqrt':
|
|
169
|
+
result = Math.sqrt(this.current_number);
|
|
170
|
+
break;
|
|
171
|
+
case 'sqrt3':
|
|
172
|
+
result = Math.pow(this.current_number, 1 / 3);
|
|
173
|
+
break;
|
|
174
|
+
case 'ln':
|
|
175
|
+
result = Math.log(this.current_number);
|
|
176
|
+
break;
|
|
177
|
+
case 'lg':
|
|
178
|
+
result = Math.log(this.current_number) / Math.log(data);
|
|
179
|
+
break;
|
|
180
|
+
case 'pow_base':
|
|
181
|
+
let base = data == 'e' ? Math.E : data;
|
|
182
|
+
result = Math.pow(base, this.current_number);
|
|
183
|
+
break;
|
|
184
|
+
case 'pow':
|
|
185
|
+
let step = parseFloat(data);
|
|
186
|
+
result = Math.pow(this.current_number, step);
|
|
187
|
+
break;
|
|
188
|
+
case 'div':
|
|
189
|
+
result = 1 / this.current_number;
|
|
190
|
+
break;
|
|
191
|
+
case 'sin':
|
|
192
|
+
rad = (this.radians) ? this.current_number : this.current_number / grad;
|
|
193
|
+
result = Math.sin(rad);
|
|
194
|
+
break;
|
|
195
|
+
case 'cos':
|
|
196
|
+
rad = (this.radians) ? this.current_number : this.current_number / grad;
|
|
197
|
+
result = Math.cos(rad);
|
|
198
|
+
break;
|
|
199
|
+
case 'tan':
|
|
200
|
+
rad = (this.radians) ? this.current_number : this.current_number / grad;
|
|
201
|
+
result = Math.tan(rad);
|
|
202
|
+
break;
|
|
203
|
+
case 'sinh':
|
|
204
|
+
rad = (this.radians) ? this.current_number : this.current_number / grad;
|
|
205
|
+
result = (Math.exp(rad) - Math.exp(-rad)) / 2;
|
|
206
|
+
break;
|
|
207
|
+
case 'cosh':
|
|
208
|
+
rad = (this.radians) ? this.current_number : this.current_number / grad;
|
|
209
|
+
result = (Math.exp(rad) + Math.exp(-rad)) / 2;
|
|
210
|
+
break;
|
|
211
|
+
case 'tanh':
|
|
212
|
+
rad = (this.radians) ? this.current_number : this.current_number / grad;
|
|
213
|
+
result = (Math.exp(rad) - Math.exp(-rad)) / (Math.exp(rad) + Math.exp(-rad));
|
|
214
|
+
break;
|
|
215
|
+
case 'asin':
|
|
216
|
+
result = Math.asin(this.current_number);
|
|
217
|
+
result = (this.radians) ? result : result * grad;
|
|
218
|
+
break;
|
|
219
|
+
case 'acos':
|
|
220
|
+
result = Math.acos(this.current_number);
|
|
221
|
+
result = (this.radians) ? result : result * grad;
|
|
222
|
+
break;
|
|
223
|
+
case 'atan':
|
|
224
|
+
result = Math.atan(this.current_number);
|
|
225
|
+
result = (this.radians) ? result : result * grad;
|
|
226
|
+
break;
|
|
227
|
+
case 'asinh':
|
|
228
|
+
result = Math.asinh(this.current_number);
|
|
229
|
+
result = (this.radians) ? result : result * grad;
|
|
230
|
+
break;
|
|
231
|
+
case 'acosh':
|
|
232
|
+
result = Math.acosh(this.current_number);
|
|
233
|
+
result = (this.radians) ? result : result * grad;
|
|
234
|
+
break;
|
|
235
|
+
case 'atanh':
|
|
236
|
+
result = Math.atanh(this.current_number);
|
|
237
|
+
result = (this.radians) ? result : result * grad;
|
|
238
|
+
break;
|
|
239
|
+
case 'rand':
|
|
240
|
+
result = Math.random();
|
|
241
|
+
break;
|
|
242
|
+
case 'factorial':
|
|
243
|
+
let n = Math.ceil(this.current_number);
|
|
244
|
+
result = 1;
|
|
245
|
+
for (let i = 1; i <= n; i++) {
|
|
246
|
+
result *= i;
|
|
247
|
+
}
|
|
248
|
+
break;
|
|
249
|
+
case 'percent':
|
|
250
|
+
result = this.current_number / 100;
|
|
251
|
+
break;
|
|
252
|
+
case 'ee':
|
|
253
|
+
this.formula = this.current_number.toExponential();
|
|
254
|
+
return 0;
|
|
255
|
+
}
|
|
256
|
+
this.start = true;
|
|
257
|
+
this.show(result);
|
|
258
|
+
return result;
|
|
259
|
+
}
|
|
260
|
+
show(value) {
|
|
261
|
+
this.formula = value.toString();
|
|
262
|
+
return this.formula;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXVsYS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL21vZHVsZXMvZm9ybXVsYS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sT0FBTztJQWVoQixZQUFZLFVBQWUsRUFBRTtRQWI3QixtQkFBYyxHQUFVLENBQUMsQ0FBQztRQUMxQixnQkFBVyxHQUFVLENBQUMsQ0FBQztRQUN2QixVQUFLLEdBQVksRUFBRSxDQUFDO1FBQ3BCLFVBQUssR0FBVyxLQUFLLENBQUM7UUFDdEIsV0FBTSxHQUFXLEtBQUssQ0FBQyxDQUFDLDBCQUEwQjtRQUNsRCxlQUFVLEdBQVcsS0FBSyxDQUFDO1FBQzNCLFlBQU8sR0FBVyxJQUFJLENBQUM7UUFDdkIsY0FBUyxHQUFVLEVBQUUsQ0FBQztRQUN0QixXQUFNLEdBQVUsQ0FBQyxDQUFDO1FBQ2xCLGNBQVMsR0FBVyxLQUFLLENBQUM7UUFDMUIsWUFBTyxHQUFXLEtBQUssQ0FBQztRQUN4QixpQkFBWSxHQUFXLEtBQUssQ0FBQztRQUd6QixJQUFJLENBQUMsT0FBTyxHQUFDLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsR0FBRztRQUNDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQVk7UUFDZCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQWdCO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUMsUUFBUSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBR0QsS0FBSztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBRW5CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxLQUFLLEdBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLEtBQUssR0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFZO1FBQ25CLGlJQUFpSTtRQUNqSSxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDbEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDM0I7UUFDRCxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDakUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM3QjtJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBYztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFDLE9BQU8sQ0FBQztRQUN2QiwwQ0FBMEM7UUFDMUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxNQUFhLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxDQUFDO1lBQUUsT0FBTztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWhDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNwQixLQUFLLEdBQUc7Z0JBQ0osTUFBTSxHQUFDLElBQUksQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEIsTUFBTTtZQUNWLEtBQUssR0FBRztnQkFDSixNQUFNLEdBQUMsSUFBSSxDQUFDLFdBQVcsR0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQixNQUFNO1lBQ1YsS0FBSyxHQUFHO2dCQUNKLE1BQU0sR0FBQyxJQUFJLENBQUMsV0FBVyxHQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xCLE1BQU07WUFDVixLQUFLLEdBQUc7Z0JBQ0osTUFBTSxHQUFDLElBQUksQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEIsTUFBTTtZQUNWLEtBQUssTUFBTTtnQkFDUCxNQUFNLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xCLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sTUFBTSxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xCLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xCLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNO1NBQ2I7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDO1FBQ2hCLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFHRCxRQUFRLENBQUMsS0FBWSxFQUFDLEtBQWE7UUFDL0IsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRTtZQUN0RixJQUFJLENBQUMsT0FBTyxHQUFDLEVBQUUsQ0FBQztTQUNuQjtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUMsS0FBSyxDQUFDO1FBQ2pCLElBQUksS0FBSyxJQUFFLEdBQUcsRUFBRTtZQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBRSxJQUFJLEVBQUU7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUN2QjtZQUNELElBQUksQ0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLE9BQU8sSUFBRSxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxHQUFHLEdBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxXQUFXLEdBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNwRCxJQUFJLFdBQVcsSUFBSSxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBQyxLQUFLLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBYyxFQUFDLElBQVE7UUFDN0IsSUFBSSxNQUFNLEdBQVEsQ0FBQyxDQUFDO1FBQ3BCLElBQUksR0FBRyxHQUFRLENBQUMsQ0FBQztRQUNqQixJQUFJLElBQUksR0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYyxHQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsUUFBUSxPQUFPLEVBQUU7WUFDYixLQUFLLFFBQVE7Z0JBQ1QsTUFBTSxHQUFDLElBQUksQ0FBQyxjQUFjLEdBQUMsSUFBSSxDQUFDO2dCQUNwQyxNQUFNO1lBQ04sS0FBSyxNQUFNO2dCQUNQLE1BQU0sR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDMUMsTUFBTTtZQUNOLEtBQUssT0FBTztnQkFDUixNQUFNLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0MsTUFBTTtZQUNOLEtBQUssSUFBSTtnQkFDTCxNQUFNLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU07WUFDTixLQUFLLElBQUk7Z0JBQ0wsTUFBTSxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hELE1BQU07WUFDTixLQUFLLFVBQVU7Z0JBQ1gsSUFBSSxJQUFJLEdBQUMsSUFBSSxJQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNuQyxNQUFNLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM5QyxNQUFNO1lBQ04sS0FBSyxLQUFLO2dCQUNOLElBQUksSUFBSSxHQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUMsTUFBTTtZQUNOLEtBQUssS0FBSztnQkFDTixNQUFNLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ2pDLE1BQU07WUFDTixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxHQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLElBQUksQ0FBQztnQkFDcEUsTUFBTSxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDTixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxHQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLElBQUksQ0FBQztnQkFDcEUsTUFBTSxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDTixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxHQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLElBQUksQ0FBQztnQkFDcEUsTUFBTSxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDTixLQUFLLE1BQU07Z0JBQ1AsR0FBRyxHQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLElBQUksQ0FBQztnQkFDcEUsTUFBTSxHQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFDTixLQUFLLE1BQU07Z0JBQ1AsR0FBRyxHQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLElBQUksQ0FBQztnQkFDcEUsTUFBTSxHQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFDTixLQUFLLE1BQU07Z0JBQ1AsR0FBRyxHQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLElBQUksQ0FBQztnQkFDcEUsTUFBTSxHQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLE1BQU07WUFDTixLQUFLLE1BQU07Z0JBQ1AsTUFBTSxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLEdBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLElBQUksQ0FBQztnQkFDakQsTUFBTTtZQUNOLEtBQUssTUFBTTtnQkFDUCxNQUFNLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sR0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDO2dCQUNqRCxNQUFNO1lBQ04sS0FBSyxNQUFNO2dCQUNQLE1BQU0sR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxHQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUM7Z0JBQ2pELE1BQU07WUFDTixLQUFLLE9BQU87Z0JBQ1IsTUFBTSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLEdBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLElBQUksQ0FBQztnQkFDakQsTUFBTTtZQUNOLEtBQUssT0FBTztnQkFDUixNQUFNLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sR0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDO2dCQUNqRCxNQUFNO1lBQ04sS0FBSyxPQUFPO2dCQUNSLE1BQU0sR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxHQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUM7Z0JBQ2pELE1BQU07WUFDTixLQUFLLE1BQU07Z0JBQ1AsTUFBTSxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsTUFBTTtZQUNOLEtBQUssV0FBVztnQkFDWixJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDckMsTUFBTSxHQUFDLENBQUMsQ0FBQztnQkFDVCxLQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFFO29CQUNuQixNQUFNLElBQUUsQ0FBQyxDQUFDO2lCQUNiO2dCQUNMLE1BQU07WUFDTixLQUFLLFNBQVM7Z0JBQ1YsTUFBTSxHQUFDLElBQUksQ0FBQyxjQUFjLEdBQUMsR0FBRyxDQUFDO2dCQUNuQyxNQUFNO1lBQ04sS0FBSyxJQUFJO2dCQUNMLElBQUksQ0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDakQsT0FBTyxDQUFDLENBQUM7U0FDaEI7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLENBQUMsS0FBWTtRQUNiLElBQUksQ0FBQyxPQUFPLEdBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgRm9ybXVsYSB7XHJcbiAgICBmb3JtdWxhOnN0cmluZztcclxuICAgIGN1cnJlbnRfbnVtYmVyOm51bWJlciA9IDA7XHJcbiAgICBwcmV2X251bWJlcjpudW1iZXIgPSAwO1xyXG4gICAgc3RhY2s6c3RyaW5nW10gPSBbXTtcclxuICAgIHN0YXJ0OmJvb2xlYW4gPSBmYWxzZTsgXHJcbiAgICBkb3R0ZWQ6Ym9vbGVhbiA9IGZhbHNlOyAvLyBpbnB1dCBudW1iZXIgaGF2aW5nIGRvdFxyXG4gICAgaXNfb3BlcmFuZDpib29sZWFuID0gZmFsc2U7XHJcbiAgICByYWRpYW5zOmJvb2xlYW4gPSB0cnVlO1xyXG4gICAgb3BlcmF0aW9uOnN0cmluZyA9ICcnO1xyXG4gICAgbWVtb3J5Om51bWJlciA9IDA7XHJcbiAgICBpbl9tZW1vcnk6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gICAgYnJhY2tldDpib29sZWFuID0gZmFsc2U7XHJcbiAgICBzZWNvbmRTY3JlZW46Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGZvcm11bGE6c3RyaW5nPScnKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtdWxhPWZvcm11bGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm11bGE7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2UodmFsdWU6c3RyaW5nKTpudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50TnVtYmVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlKHRoaXMuZm9ybXVsYSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmFkaWFucyhzd2l0Y2hlcjpib29sZWFuKTpib29sZWFuIHtcclxuICAgICAgICB0aGlzLnJhZGlhbnM9c3dpdGNoZXI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmFkaWFucztcclxuICAgIH1cclxuXHJcblxyXG4gICAgY2xlYXIoKTpzdHJpbmcge1xyXG4gICAgICAgIHRoaXMuZm9ybXVsYSA9ICcwJztcclxuXHJcbiAgICAgICAgdGhpcy5kb3R0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzX29wZXJhbmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9wZXJhdGlvbiA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN0YWNrID0gW107XHJcbiAgICAgICAgdGhpcy5icmFja2V0ID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybXVsYTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhck1lbW9yeSgpIHtcclxuICAgICAgICB0aGlzLm1lbW9yeSA9IDA7XHJcbiAgICAgICAgdGhpcy5pbl9tZW1vcnkgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdW1Ub01lbW9yeSgpIHtcclxuICAgICAgICBsZXQgdmFsdWU9dGhpcy5nZXRDdXJyZW50TnVtYmVyKCk7XHJcbiAgICAgICAgdGhpcy5tZW1vcnkgKz0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5pbl9tZW1vcnkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZHVjdFRvTWVtb3J5KCkge1xyXG4gICAgICAgIGxldCB2YWx1ZT10aGlzLmdldEN1cnJlbnROdW1iZXIoKTtcclxuICAgICAgICB0aGlzLm1lbW9yeSAtPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmluX21lbW9yeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGFydCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVhZE1lbW9yeSgpOnN0cmluZyB7XHJcbiAgICAgICAgdGhpcy5mb3JtdWxhPXRoaXMubWVtb3J5LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybXVsYTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRCcmFja2V0KHZhbHVlOnN0cmluZyk6dm9pZCB7XHJcbiAgICAgICAgLy8gYnJhY2tldHMgY2FuIGJlIHNldCBvbmx5IGlmIHdlIGhhdmUgbm90IHNldCB0aGVtIGJlZm9yZSBhbmQgd2Ugc2V0IG9wZXJhbmQgKGlmIHdlIHNldCBicmFja2V0cyBmaXJzdCAtIGl0IHdpbGwgbm90IG1ha2Ugc2Vuc2UpXHJcbiAgICAgICAgaWYgKHZhbHVlID09ICcoJyAmJiB0aGlzLmJyYWNrZXQgPT0gZmFsc2UgJiYgdGhpcy5pc19vcGVyYW5kID09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5icmFja2V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pc19vcGVyYW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSA9PSAnKScgJiYgdGhpcy5icmFja2V0ID09IHRydWUgJiYgdGhpcy5pc19vcGVyYW5kICE9IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5icmFja2V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzLmZvcm11bGEpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goJyknKTtcclxuICAgICAgICAgICAgdGhpcy5pc19vcGVyYW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm11bGE9ZXZhbCh0aGlzLnN0YWNrLmpvaW4oJycpKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YWNrPVt0aGlzLmZvcm11bGFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRPcGVyYXRpb24ob3BlcmFuZDpzdHJpbmcpOnZvaWQge1xyXG4gICAgICAgIHRoaXMub3BlcmF0aW9uPW9wZXJhbmQ7XHJcbiAgICAgICAgLy8gSWYgb3BlcmF0b3IgYWxyZWFkeSBzZXQgLSBub3RoaW5nIGRvaW5nXHJcbiAgICAgICAgaWYgKHRoaXMuaXNfb3BlcmFuZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhbmQ7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzX29wZXJhbmQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzLmZvcm11bGEpO1xyXG4gICAgICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzLm9wZXJhdGlvbik7XHJcbiAgICAgICAgdGhpcy5zdGFydD10cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGN1bGF0ZSgpOm51bWJlciB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDpudW1iZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoPDMpIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzX29wZXJhbmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRfbnVtYmVyPXRoaXMucGFyc2UodGhpcy5zdGFjay5wb3AoKSk7XHJcbiAgICAgICAgdGhpcy5vcGVyYXRpb249dGhpcy5zdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLnByZXZfbnVtYmVyPXRoaXMucGFyc2UodGhpcy5zdGFjay5wb3AoKSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByZXZfbnVtYmVyKSByZXR1cm4gMDtcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLm9wZXJhdGlvbikge1xyXG4gICAgICAgICAgICBjYXNlICcrJzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdD10aGlzLnByZXZfbnVtYmVyK3RoaXMuY3VycmVudF9udW1iZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICctJzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdD10aGlzLnByZXZfbnVtYmVyLXRoaXMuY3VycmVudF9udW1iZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcqJzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdD10aGlzLnByZXZfbnVtYmVyKnRoaXMuY3VycmVudF9udW1iZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcvJzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdD10aGlzLnByZXZfbnVtYmVyL3RoaXMuY3VycmVudF9udW1iZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzcXJ0JzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdD1NYXRoLnBvdyh0aGlzLnByZXZfbnVtYmVyLDEvdGhpcy5jdXJyZW50X251bWJlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwb3cnOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0PU1hdGgucG93KHRoaXMucHJldl9udW1iZXIsdGhpcy5jdXJyZW50X251bWJlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd5eCc6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBNYXRoLnBvdyh0aGlzLmN1cnJlbnRfbnVtYmVyLCB0aGlzLnByZXZfbnVtYmVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvdyhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZyc6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBNYXRoLmxvZyh0aGlzLnByZXZfbnVtYmVyKSAvIE1hdGgubG9nKHRoaXMuY3VycmVudF9udW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRfbnVtYmVyPXRoaXMucGFyc2UodGhpcy5mb3JtdWxhKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydD10cnVlO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFkZFZhbHVlKHZhbHVlOnN0cmluZyxzdGFydDpib29sZWFuKTpzdHJpbmcge1xyXG4gICAgICAgIGlmIChzdGFydCB8fCB0aGlzLnN0YXJ0IHx8ICh0aGlzLmRvdHRlZCA9PSBmYWxzZSAmJiB0aGlzLmZvcm11bGEgPT0gJzAnICYmIHZhbHVlICE9ICcuJykpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtdWxhPScnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXJ0PXN0YXJ0O1xyXG4gICAgICAgIGlmICh2YWx1ZT09Jy4nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRvdHRlZD09dHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybXVsYTsgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kb3R0ZWQ9dHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtdWxhKz12YWx1ZTtcclxuICAgICAgICB0aGlzLmlzX29wZXJhbmQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtdWxhO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVN5bWJvbCgpOnZvaWQge1xyXG4gICAgICAgIGxldCBsZW49dGhpcy5mb3JtdWxhLmxlbmd0aDtcclxuICAgICAgICBsZXQgbGFzdF9zeW1ib2w9dGhpcy5mb3JtdWxhLnN1YnN0cmluZyhsZW4gLSAxLGxlbik7XHJcbiAgICAgICAgaWYgKGxhc3Rfc3ltYm9sID09ICcuJykge1xyXG4gICAgICAgICAgICB0aGlzLmRvdHRlZD1mYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtdWxhPXRoaXMuZm9ybXVsYS5zbGljZSgwLC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBzaW5nbGV0b24ob3BlcmFuZDpzdHJpbmcsZGF0YTphbnkpOm51bWJlciB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDpudW1iZXI9MDtcclxuICAgICAgICBsZXQgcmFkOm51bWJlcj0wO1xyXG4gICAgICAgIGxldCBncmFkPTE4MC9NYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY3VycmVudF9udW1iZXI9cGFyc2VGbG9hdCh0aGlzLmZvcm11bGEpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN3aXRjaCAob3BlcmFuZCkge1xyXG4gICAgICAgICAgICBjYXNlICdpbnZlcnQnOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0PXRoaXMuY3VycmVudF9udW1iZXIqZGF0YTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NxcnQnOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0PU1hdGguc3FydCh0aGlzLmN1cnJlbnRfbnVtYmVyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NxcnQzJzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdD1NYXRoLnBvdyh0aGlzLmN1cnJlbnRfbnVtYmVyLDEvMyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsbic6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9TWF0aC5sb2codGhpcy5jdXJyZW50X251bWJlcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsZyc6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9TWF0aC5sb2codGhpcy5jdXJyZW50X251bWJlcikvTWF0aC5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwb3dfYmFzZSc6XHJcbiAgICAgICAgICAgICAgICBsZXQgYmFzZT1kYXRhPT0nZScgPyBNYXRoLkUgOiBkYXRhO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0PU1hdGgucG93KGJhc2UsdGhpcy5jdXJyZW50X251bWJlcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwb3cnOlxyXG4gICAgICAgICAgICAgICAgbGV0IHN0ZXA9cGFyc2VGbG9hdChkYXRhKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdD1NYXRoLnBvdyh0aGlzLmN1cnJlbnRfbnVtYmVyLHN0ZXApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZGl2JzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdD0xL3RoaXMuY3VycmVudF9udW1iZXI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzaW4nOlxyXG4gICAgICAgICAgICAgICAgcmFkPSh0aGlzLnJhZGlhbnMpID8gdGhpcy5jdXJyZW50X251bWJlciA6IHRoaXMuY3VycmVudF9udW1iZXIvZ3JhZDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdD1NYXRoLnNpbihyYWQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29zJzpcclxuICAgICAgICAgICAgICAgIHJhZD0odGhpcy5yYWRpYW5zKSA/IHRoaXMuY3VycmVudF9udW1iZXIgOiB0aGlzLmN1cnJlbnRfbnVtYmVyL2dyYWQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9TWF0aC5jb3MocmFkKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3Rhbic6XHJcbiAgICAgICAgICAgICAgICByYWQ9KHRoaXMucmFkaWFucykgPyB0aGlzLmN1cnJlbnRfbnVtYmVyIDogdGhpcy5jdXJyZW50X251bWJlci9ncmFkO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0PU1hdGgudGFuKHJhZCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzaW5oJzpcclxuICAgICAgICAgICAgICAgIHJhZD0odGhpcy5yYWRpYW5zKSA/IHRoaXMuY3VycmVudF9udW1iZXIgOiB0aGlzLmN1cnJlbnRfbnVtYmVyL2dyYWQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9KE1hdGguZXhwKHJhZCktTWF0aC5leHAoLXJhZCkpLzI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb3NoJzpcclxuICAgICAgICAgICAgICAgIHJhZD0odGhpcy5yYWRpYW5zKSA/IHRoaXMuY3VycmVudF9udW1iZXIgOiB0aGlzLmN1cnJlbnRfbnVtYmVyL2dyYWQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9KE1hdGguZXhwKHJhZCkrTWF0aC5leHAoLXJhZCkpLzI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0YW5oJzpcclxuICAgICAgICAgICAgICAgIHJhZD0odGhpcy5yYWRpYW5zKSA/IHRoaXMuY3VycmVudF9udW1iZXIgOiB0aGlzLmN1cnJlbnRfbnVtYmVyL2dyYWQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9KE1hdGguZXhwKHJhZCktTWF0aC5leHAoLXJhZCkpLyhNYXRoLmV4cChyYWQpK01hdGguZXhwKC1yYWQpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2FzaW4nOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0PU1hdGguYXNpbih0aGlzLmN1cnJlbnRfbnVtYmVyKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdD0odGhpcy5yYWRpYW5zKSA/IHJlc3VsdCA6IHJlc3VsdCpncmFkO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYWNvcyc6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9TWF0aC5hY29zKHRoaXMuY3VycmVudF9udW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0PSh0aGlzLnJhZGlhbnMpID8gcmVzdWx0IDogcmVzdWx0KmdyYWQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdhdGFuJzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdD1NYXRoLmF0YW4odGhpcy5jdXJyZW50X251bWJlcik7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9KHRoaXMucmFkaWFucykgPyByZXN1bHQgOiByZXN1bHQqZ3JhZDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2FzaW5oJzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdD1NYXRoLmFzaW5oKHRoaXMuY3VycmVudF9udW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0PSh0aGlzLnJhZGlhbnMpID8gcmVzdWx0IDogcmVzdWx0KmdyYWQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdhY29zaCc6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9TWF0aC5hY29zaCh0aGlzLmN1cnJlbnRfbnVtYmVyKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdD0odGhpcy5yYWRpYW5zKSA/IHJlc3VsdCA6IHJlc3VsdCpncmFkO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYXRhbmgnOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0PU1hdGguYXRhbmgodGhpcy5jdXJyZW50X251bWJlcik7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9KHRoaXMucmFkaWFucykgPyByZXN1bHQgOiByZXN1bHQqZ3JhZDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JhbmQnOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0PU1hdGgucmFuZG9tKCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmYWN0b3JpYWwnOlxyXG4gICAgICAgICAgICAgICAgbGV0IG49TWF0aC5jZWlsKHRoaXMuY3VycmVudF9udW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0PTE7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpPTE7aTw9bjtpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQqPWk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwZXJjZW50JzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdD10aGlzLmN1cnJlbnRfbnVtYmVyLzEwMDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VlJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybXVsYT10aGlzLmN1cnJlbnRfbnVtYmVyLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGFydD10cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvdyhyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvdyh2YWx1ZTpudW1iZXIpOnN0cmluZyB7XHJcbiAgICAgICAgdGhpcy5mb3JtdWxhPXZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybXVsYTtcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -387,4 +387,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
|
|
|
387
387
|
providedIn: 'root'
|
|
388
388
|
}]
|
|
389
389
|
}], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.HttpClient }, { type: i3.SpinnerService }]; } });
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eUhlbHBlci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXVDLGtCQUFrQixFQUFpQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwSSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBb0MsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFLbEosT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFNcEYsTUFBTSxPQUFPLG9CQUFvQjtJQUk3QixZQUNZLFdBQStCLEVBQy9CLElBQWdCLEVBQ2hCLGNBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUUxQyxDQUFDO0lBRU0sTUFBTSxDQUFDLG9CQUFvQixDQUFDLE9BQWUsRUFBRSxHQUFXLEVBQUUsR0FBUTtRQUNyRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFD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QUFhLEVBQUU7Z0JBQ2YsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO1lBQ0QsNkJBQTZCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQ0osQ0FBQztJQUNWLENBQUM7O0FBbFphLDRCQUFPLEdBQVksSUFBSSxPQUFPLEVBQUcsQ0FBQTtpSEFGdEMsb0JBQW9CO3FIQUFwQixvQkFBb0IsY0FGakIsTUFBTTsyRkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBDb2xTcGFuU2l6ZXNFbnVtLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSBcIi4uL21vZGVscy9iYXNlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9tb2RlbHMvY29udGV4dC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YSwgRW5kUG9pbnREYXRhUGFyYW1zLCBQYXJhbVR5cGVFbnVtLCBSZXF1ZXN0TWV0aG9kRW51bSB9IGZyb20gXCIuLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL2F0dGFjaG1lbnRGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZUZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvaW1hZ2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMaXN0VmFsdWVGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFRleHRhcmVhRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy90ZXh0YXJlYUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFRleHRNYXNrRW51bSwgVGV4dEZpZWxkLCBVcmxSZWdleCwgVGVsUmVnZXggfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tIFwiLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBcnJheVZhbGlkYXRvcnMgfSBmcm9tIFwiLi9jdXN0b20tZm9ybS12YWxpZGF0b3JzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi9lcXAtZHluYW1pYy1tb2R1bGUtZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwiLi9zcGlubmVyLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXRpbGl0eUhlbHBlclNlcnZpY2Uge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBTcGlubmVyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBFdmFsdWF0ZUZpZWxkRm9ybXVsYShmb3JtdWxhOiBzdHJpbmcsIHJlYzogUmVjb3JkLCBjdHg6IGFueSk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgZXZhbHVhdGVkVmFsdWUgPSBldmFsKGZvcm11bGEpO1xyXG4gICAgICAgIHJldHVybiAoZXZhbHVhdGVkVmFsdWUgPyBldmFsdWF0ZWRWYWx1ZSA6IG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgU2V0Q29udGV4dChjdHg6IENvbnRleHQpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjdHg7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGlzTnVtZXJpYyhuKSB7XHJcbiAgICAgICAgcmV0dXJuICFpc05hTihuKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGluaXRTdHlsZXMoc3R5bGVjc3MpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHN0eWxlY3NzLnNwbGl0KFwiO1wiKS5yZWR1Y2UoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5cGFyID0gYi5zcGxpdChcIjpcIilcclxuICAgICAgICAgICAgaWYgKGtleXBhci5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgICAgIGFba2V5cGFyWzBdLnRyaW0oKV0gPSBrZXlwYXJbMV0udHJpbSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYVxyXG4gICAgICAgICAgfSwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0RmllbGRUeXBlKGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgICAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXToge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdDogVGV4dEZpZWxkID0gT2JqZWN0LmFzc2lnbihuZXcgVGV4dEZpZWxkLCBmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIHBlciBpIGNhbXBpIGluIGN1aSBsJ3V0ZW50ZSBkZXZlIHNjcml2ZXJlIGNvbWFuZGkgamF2YXNjcmlwdC5cclxuICAgICAqIEluIGJhc2UgYWxsJ3VsdGltbyBjYXJhdHRlcmUgZGlnaXRhdG8gdmllbmUgaW1wb3N0YXRvIHVuIGVsZW5jbyBkaSBvZ2dldHRpIG8gcHJvcHJpZXTDoCBjaGUgbCd1dGVudGUgaGEgYSBkaXNwb3NpemlvbmUgaW4gcXVlbCBtb21lbnRvLlxyXG4gICAgICogQHBhcmFtIGZpZWxkcyBBcnJheSBkaSBCYXNlRmllbGQgYWdnaXVudGkgYWxsYSBGb3JtXHJcbiAgICAgKiBAcGFyYW0gdHlwZWRGb3JtdWxhIFN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGVcclxuICAgICAqIEBzdW1tYXJ5IElsIG1ldG9kbyBpbXBvc3RhIGkgc3VnZ2VyaW1lbnRpIGJhc2FuZG9zaSBzdSAzIGNhc2k6XHJcbiAgICAgKiAgMSkgbCd1dGVudGUgbm9uIGhhIGRpZ2l0YXRvIG51bGxhIG8gbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBmaW5pc2NlIGNvbiB1bm8gc3BhemlvIHZ1b3RvXHJcbiAgICAgKiAgMikgbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBmaW5pc2NlIGNvbiB1biBcIi5cIlxyXG4gICAgICogIDMpIGxhIHN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGUgbm9uIGNvaW5jaWRlIGNvbiBuZXNzdW4gYWx0cm8gY2FzbyBzb3ByYSAoZmluaXNjZSBjb24gdW4gY2FyYXR0ZXJlIHF1YWx1bnF1ZSlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHZXRBdXRvY29tcGxldGVPcHRpb25zKGZpZWxkczogQXJyYXk8QmFzZUZpZWxkPiwgdHlwZWRGb3JtdWxhOiBzdHJpbmcpOiBBcnJheTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4ge1xyXG5cclxuICAgICAgICBsZXQgYXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+ID0gW107XHJcblxyXG4gICAgICAgIC8vIFJlY3VwZXJvIGkgbm9taSBkaSB0dXR0aSBpIGNhbXBpIGNyZWF0aSBmaW5vIGFkIG9yYSBuZWxsYSBmb3JtLlxyXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVJlY1Byb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBmaWVsZHMubWFwKGYgPT4gZi5MYWJlbC5zcGxpdCgnICcpLmpvaW4oJ18nKSk7XHJcblxyXG4gICAgICAgIC8vIE5lbCBjYXNpIGluIGN1aSBsJ3V0ZW50ZSBub24gaGEgaW5zZXJpdG8gbnVsbGEgb3BwdXJlIGxhIHN0cmluZ2EgZmluaXNjZSBjb24gdW5vIHNwYXppbyB2dW90byBvIHVuIHNpbWJvbG8gZGl2ZXJzbyBkYSBcIi5cIlxyXG4gICAgICAgIC8vICh1biBjYXJhdHRlcmUgbm9uIGFsZmFudW1lcmljbykgaW1wb3N0byBjb21lIHN1Z2dlcmltZW50aSBzb2xvIFwicmVjXCIgZSBcImN0eFwiLCBvdnZlcm8gZ2xpIHVuaWNpIGR1ZSBvZ2dldHRpIGEgY3VpIGwndXRlbnRlIGhhIGFjY2Vzc28uXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdHlwZWRGb3JtdWxhIHx8XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICF0eXBlZEZvcm11bGEuZW5kc1dpdGgoXCIuXCIpXHJcbiAgICAgICAgICAgICAgICAmJiBuZXcgUmVnRXhwKFwiW14wLTlhLXpBLVpfXVwiKS50ZXN0KHR5cGVkRm9ybXVsYS5zdWJzdHJpbmcodHlwZWRGb3JtdWxhLmxlbmd0aCAtIDEsIHR5cGVkRm9ybXVsYS5sZW5ndGgpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBcInJlY1wiLCB2YWx1ZTogKHR5cGVkRm9ybXVsYSA/IHR5cGVkRm9ybXVsYSA6ICcnKSArIFwicmVjXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IFwiY3R4XCIsIHZhbHVlOiAodHlwZWRGb3JtdWxhID8gdHlwZWRGb3JtdWxhIDogJycpICsgXCJjdHhcIiB9XHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFNlIGxhIHN0cmluZ2EgZmluaXNjZSBjb24gdW4gXCIuXCIgdnVvbCBkaXJlIGNoZSBsJ3V0ZW50ZSBzdGEgY2VyY2FuZG8gZGkgYWNjZWRlcmUgYWQgdW5hIHByb3ByaWV0w6AgZGkgdW4gb2dnZXR0b1xyXG4gICAgICAgIC8vIGEgc3VhIGRpc3Bvc2l6aW9uZS4gUmVjdXBlcm8gaWwgbm9tZSBkZWxsJ3VsdGltbyBvZ2dldHRvIGRpZ2l0YXRvIGRhbGwndXRlbnRlIGUgc2UgbCdvZ2dldHRvIHNjZWx0byDDqCBcInJlY1wiIG8gXCJjdHhcIlxyXG4gICAgICAgIC8vIGFsbG9yYSBzdWdnZXJpc2NvIGxlIHByb3ByaWV0w6AgY2hlIGVzaXN0b25vIGFsbCdpbnRlcm5vIGRpIHF1ZXN0aSBvZ2dldHRpIGFsdHJpbWVudGkgbm9uIG1vc3RybyBudWxsYS5cclxuICAgICAgICBlbHNlIGlmICh0eXBlZEZvcm11bGEuZW5kc1dpdGgoXCIuXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm11bGFQaWVjZXM6IEFycmF5PHN0cmluZz4gPSB0eXBlZEZvcm11bGEuc3BsaXQoXCIgXCIpW3R5cGVkRm9ybXVsYS5zcGxpdChcIiBcIikubGVuZ3RoIC0gMV0uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgaWYgKGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJyZWNcIikge1xyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IGF2YWlsYWJsZVJlY1Byb3BlcnRpZXMubWFwKGYgPT4geyByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTsgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybXVsYVBpZWNlc1tmb3JtdWxhUGllY2VzLmxlbmd0aCAtIDJdID09PSBcImN0eFwiKSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dCkubWFwKGYgPT4geyByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTsgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybXVsYVBpZWNlcy5sZW5ndGggPiAyICYmIGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJiBmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gMl0gPT09IFwiVXNlclwiKSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyKS5tYXAoZiA9PiB7IHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9OyB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJbiB0dXR0aSBnbGkgYWx0cmkgY2FzaSwgb3Z2ZXJvIHF1YW5kbyBsYSBzdHJpbmdhIGRpZ2l0YXRhIGZpbmlzY2UgY29uIHVuIGNhcmF0dGVyZSBkaXZlcnNvIGRhIHF1ZWxsaVxyXG4gICAgICAgIC8vIGNvbnRyb2xsYXRpIGZpbm9yYSwgdnVvbCBkaXJlIGNoZSBsJ3V0ZW50ZSBzdGEgZGlnaXRhbnRvIGlsIG5vbWUgZGkgdW4gb2dnZXR0bywgdW5hIHByb3ByaWV0w6AgbyB1bmFcclxuICAgICAgICAvLyBmdW56aW9uZSBqYXZhc2NyaXB0LiBDb250cm9sbG8gbGEgcGFyb2xhIGNoZSBsJ3V0ZW50ZSBzdGEgZGlnaXRhbmRvIGUgc2UgZmEgcGFydGUgZGkgdW5vIGRlZ2xpIG9nZ2V0dGkgYSBkaXNwb3NpemlvbmVcclxuICAgICAgICAvLyBvIHVuYSBwcm9wcmlldMOgIGRpIGVzc2kgYWxsb3JhIHN1Z2dlcmlzY28gaSBwb3NzaWJpbGkgbWF0Y2guXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gUHJlbmRvIHR1dHRpIGkgYmxvY2NoaSBkaSBjYXJhdHRlcmkgZGlnaXRhdGkgZGFsbCd1dGVudGVcclxuICAgICAgICAgICAgY29uc3QgYWxsRm9ybXVsYVdvcmRzOiBBcnJheTxzdHJpbmc+ID0gdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgLy8gUHJlbmRvIGwndWx0aW1vIGJsb2NjbyBkaSBjYXJhdHRlcmkgZGlnaXRhdG8gZGFsbCd1dGVudGVcclxuICAgICAgICAgICAgY29uc3QgbGFzdFR5cGVkU3RyaW5nOiBzdHJpbmcgPSBhbGxGb3JtdWxhV29yZHNbYWxsRm9ybXVsYVdvcmRzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgbGEgbCd1bHRpbWEgc3RyaW5nYSBkaWdpdGF0YSBub24gY29udGllbmUgY2FyYXR0ZXJpIHNwZWNpYWxpIGFsbG9yYSBzcGxpdHRvIGxhIHN0cmluZ2FcclxuICAgICAgICAgICAgLy8gc3VpIFwiLlwiIGUgaW1wb3N0byBpIHN1Z2dlcmltZW50aSBpbiBiYXNlIGFsIHBhdGggZGVsbGEgcHJvcnBpZXTDoCBjaGUgc2kgc3RhIGRpZ2l0YW5kby5cclxuICAgICAgICAgICAgaWYgKCFuZXcgUmVnRXhwKFwiW14wLTlhLXpBLVpfLl1cIikudGVzdChsYXN0VHlwZWRTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBsYXN0VHlwZWRTdHJpbmcuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFR5cGVkV29yayA9IHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXNUb0NoZWNrOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5UGF0aC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gW1wicmVjXCIsIFwiY3R4XCJdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eVBhdGgubGVuZ3RoID4gMSAmJiBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcImN0eFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSBPYmplY3Qua2V5cyhVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlQYXRoLmxlbmd0aCA+IDIgJiYgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJiBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcIlVzZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlQYXRoLmxlbmd0aCA+IDEgJiYgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAyXSA9PT0gXCJyZWNcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gYXZhaWxhYmxlUmVjUHJvcGVydGllcztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBFc2VndW8gaWwgY29udHJvbGxvIHN1bGxlIHByb3ByaWV0w6AgcmVjdXBlcmF0ZSwgYWdnaXVuZ28gYWkgc3VnZ2VyaW1lbnRpIHR1dHRpIGkgbm9taSBjaGUgaW5pemlhbm8gY29uXHJcbiAgICAgICAgICAgICAgICAvLyBxdWVsbG8gY2hlIHN0YSBkaWdpdGFuZG8gbCd1dGVudGUuXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjay5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wLnN0YXJ0c1dpdGgobGFzdFR5cGVkV29yaykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlT3B0aW9ucy5wdXNoKHsgbGFiZWw6IHByb3AsIHZhbHVlOiB0eXBlZEZvcm11bGEgKyBwcm9wLnN1YnN0cmluZyhsYXN0VHlwZWRXb3JrLmxlbmd0aCwgcHJvcC5sZW5ndGgpIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBhdmFpbGFibGVPcHRpb25zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF1dG9jb21wbGV0ZU9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gaW52b2NhdG8gZGFsbCdodG1sIHBlciBpbXBvc3RhcmUgbGUgY2xhc3NpIGNzcyBwZXIgdmlzdWFsaXp6YXJlIGlsIGNhbXBvIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0uXHJcbiAgICAgKiBTZSBwZXIgaWwgZmllbGQgc29ubyBzdGF0ZSBzcGVjaWZpY2F0ZSBkZWxsZSBjbGFzc2kgYWxsb3JhIHZlbmdvbm8gYXBwbGNhdGUgcXVlbGxlLCBhbHRyaW1lbnRpIHZlbmdvbm8gdXNhdGVcclxuICAgICAqIGRlbGxlIGNsYXNzaSBkaSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBkYSB2aXN1YWxpenphcmUuXHJcbiAgICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgc3RyaW5nYSBjb250ZW5lbnRlIGxlIGNsYXNzaSBjc3MgZGEgYXBwbGljYXJlLlxyXG4gICAgICovXHJcbiAgICBnZXRGaWVsZFN5bGVDbGFzcyhmaWVsZDogQmFzZUZpZWxkKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoZmllbGQuQ29sU3BhblNpemVzICYmIGZpZWxkLkNvbFNwYW5TaXplcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICByZXR1cm4gZmllbGQuQ29sU3BhblNpemVzLm1hcChzaXplID0+IENvbFNwYW5TaXplc0VudW1bc2l6ZV0udG9TdHJpbmcoKSkuam9pbihcIiBcIik7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBbGxlZ2F0b1wiXTpcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5Jc011bHRpQXR0YWNoIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLk1ldGFkYXRhRmllbGRzICYmIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmVcIl06XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICgoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5NZXRhZGF0YUZpZWxkcyAmJiAoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5NZXRhZGF0YUZpZWxkcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydGb3JtIGRpIGRldHRhZ2xpbyddOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIHVuYSBGb3JtIGEgcGFydGlyZSBkYWkgc3VvaSBCYXNlRmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZm9ybUZpZWxkcyBMaXN0YSBkZWkgQmFzZUZpZWxkIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICAgKiBAcGFyYW0gcmVjb3JkIE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgY2hlIGNvbnRpZW5lIGkgdmFsb3JpIGRlaSBjYW1waS5cclxuICAgICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIGRpc2FiaWxpdGEgbGEgZm9ybSBwZXIgcmVuZGVybGEgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQgU2UgVFJVRSBwb3BvbGEgbGEgcHJvcHJpZXTDoCBGb3JtRm9ybUdyb3VwIGFsbCdpbnRlcm5vIGRpIG9nbmkgQmFzZUZpZWxkIGNvbiBpbCBGb3JtR3JvdXAgY29ycmVudGUuXHJcbiAgICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBGb3JtR3JvdXAgcmFwcHJlc2VudGF0ZSBsYSBGb3JtIGEgY3VpIGFwcGFydGVuZ29ubyBpIEJhc2VGaWVsZCByaWNldnV0aSBpbiBpbnB1dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIENyZWF0ZUZvcm1Gb3JtR3JvdXAoZm9ybUZpZWxkczogQXJyYXk8QmFzZUZpZWxkPixcclxuICAgICAgICByZWNvcmQ6IFJlY29yZCxcclxuICAgICAgICBvbmx5VmlldyA9IGZhbHNlLFxyXG4gICAgICAgIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQgPSB0cnVlKTogVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICAgICAgY29uc3QgZm9ybUZvcm06IFVudHlwZWRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFtdKTtcclxuICAgICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBmb3JtRm9ybS5hZGRDb250cm9sKGZpZWxkLk5hbWUsIHRoaXMuY3JlYXRlRmllbGRGb3JtQ29udHJvbChmaWVsZCwgcmVjb3JkKSk7XHJcbiAgICAgICAgICAgIGlmIChpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZC5Gb3JtRm9ybUdyb3VwID0gZm9ybUZvcm07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAob25seVZpZXcpIHtcclxuICAgICAgICAgICAgZm9ybUZvcm0uZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcm1Gb3JtO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuemlvbmUgcGVyIGNyZWFyZSBlIGFnZ2l1bmdlcmUgYWwgRm9ybUdyb3VwIHJhcHByZXNlbnRhbnRlIGxhIGZvcm0gdW4gbnVvdm8gRm9ybUNvbnRyb2wgYSBwYXJ0aXJlIGRhIHVuIEZpZWxkLlxyXG4gICAgICogSW4gbnVvdm8gRm9ybUNvbnRyb2wgYXZyw6AgaWwgbm9tZSBkZWwgY2FtcG8gcGFzc2F0byBlIHZlcnJhbm5vIGltcG9zdGF0aSBpIFZhbGlkYXRvcnMgaW4gYmFzZSBhbCB0aXBvIGRlbCBjYW1wbyBzdGVzc28uXHJcbiAgICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGlsIEZvcm1Db250cm9sIGRhIGluc2VyaXJlIG5lbCBGb3JtR3JvdXAgZGVsYSBmb3JtLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNyZWF0ZUZpZWxkRm9ybUNvbnRyb2woZmllbGQ6IEJhc2VGaWVsZCwgcmVjb3JkOiBSZWNvcmQpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQuUmVxdWlyZWQpXHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0KSB7IHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCgoZmllbGQgYXMgVGV4dEZpZWxkKS5NYXhMZW5naHQpKTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0RmllbGQpLk1pbkxlbmdodCkgeyB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWluTGVuZ2h0KSk7IH1cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoKGZpZWxkIGFzIFRleHRGaWVsZCkuVGV4dE1hc2spIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHRNYXNrRW51bS5Vcmw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oVXJsUmVnZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uRW1haWw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uVGVsZWZvbm86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oVGVsUmVnZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQXJlYSBkaSB0ZXN0b1wiXTpcclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWF4TGVuZ2h0KSB7IHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWF4TGVuZ2h0KSk7IH1cclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0KSB7IHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0KSk7IH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5JbW1hZ2luZTpcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5SZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXTpcclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5SZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFVudHlwZWRGb3JtQ29udHJvbChyZWNvcmRbZmllbGQuTmFtZV0sIHZhbGlkYXRvcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBnbGkgZW5kcG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdCBhIHBhcnRpcmUgZGFsbCd1cmwgYmFzZSBkZWwgc2VydmVyXHJcbiAgICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICAgKiBAcGFyYW0gYmFzZVNlcnZlclVybCBTdHJpbmdhIGRlbGwndXJsIGJhc2UgZGVsIHNlcnZlciAoZXM6IFwiaHR0cDovL2xvY2FsaG9zdDo1MDAwXCIpLlxyXG4gICAgICogQHBhcmFtIHVzZXJUb2tlbiBUb2tlbiBkZWxsJ3V0ZW50ZSBsb2dnYXRvIGRhIHVzYXJlIHBlciBhdXRlbnRpY2Fyc2kgc2UgbmVjZXNzYXJpby5cclxuICAgICAqIEByZXR1cm5zIFJlc2l0dWlzY2UgbGEgY29uZmlndXJhemlvbmUgY29tcGxldGEgZGVnbGkgZW5kUG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIENvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoYmFzZVNlcnZlclVybDogc3RyaW5nLCB1c2VyVG9rZW46IHN0cmluZyk6IEVuZFBvaW50Q29uZmlndXJhdGlvbiB7XHJcbiAgICAgICAgbGV0IGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uID0gbmV3IEVuZFBvaW50Q29uZmlndXJhdGlvbigpO1xyXG4gICAgICAgIGVuZFBvaW50Q29uZmlndXJhdGlvbiA9IG5ldyBFbmRQb2ludENvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgICBlbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyA9IHtcclxuICAgICAgICAgICAgR2V0QnlGb3JtSURFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2dldGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgR2V0QnlJREVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZ2V0QnlJRFwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgU2F2ZUVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvc2F2ZVwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLlBPU1QsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIER1cGxpY2F0ZUVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZHVwbGljYXRlXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgRGVsZXRlRW5kUG9pbnQ6IHtcclxuICAgICAgICAgICAgICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9kZWxldGVcIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5ERUxFVEUsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zID0ge1xyXG4gICAgICAgICAgICBHZXRCeUlERW5kUG9pbnQ6IHtcclxuICAgICAgICAgICAgICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS9jb25mL2Zvcm1cIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFNhdmVFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvZm9ybVwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLlBPU1QsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBjaGUgZGF0YSBsYSBjb25maWd1cmF6aW9uZSBkaSB1biBlbmRwb2ludCBjb3N0cnVpc2NlIGwndXJsIGRhIGNoaWFtYXJlLCBnbGkgZXZlbnR1YWxpIHBhcmFtZXRyaVxyXG4gICAgICogZGEgcGFzc2FyZSAobmVsIGJvZHkgbyBuZWxsYSByb3R0YSkgZWQgZWZmZXR0dWEgbGEgY2hpYW1hdGEuIEFsIHRlcm1pbmUgZGVsbGEgY2hpYW1hdGEgZXNlZ3VlIGxlIGV2ZW50dWFsaVxyXG4gICAgICogZnVuemlvbmkgZGkgY2FsbGJhY2sgKHNpYSBpbiBjYXNvIGRpIHN1Y2Nlc3NvIGNoZSBpbiBjYXNvIGRpIGVycm9yZSkgcGFzc2F0ZSBpbiBpbnB1dC5cclxuICAgICAqIEBwYXJhbSBlbmRQb2ludERhdGEgQ29maWd1cmF6aW9uZSBkZWxsJ2VuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAgICogQHBhcmFtIGR5bmFtaWNNb2R1bGVQYXJhbXMgQXJyYXkgZGVpIHBhcmFtZXRyaSBhZ2dpdW50aSBkYWwgbW9kdWxvIGRpbmFtaWNvIGEgcXVlbGxpIGdpw6AgY29uZmlndXJhdGlcclxuICAgICAqIChhZCBlc2VtcGlvIGlsIHJlY29yZCBvIGxhIGZvcm0gZGEgc2FsdmFyZSBvcHB1cmUgbCdJRCBwZXIgcmVjdXBlcmFyZSB1bmEgcGFydGljb2xhcmUgZW50aXTDoCkuXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgTWV0b2RvIGRhIGVzZWd1aXJlIGluIGNhc28gZGkgc3VjY2Vzc28gZG9wbyBsYSBjaGlhbWF0YSBodHRwLlxyXG4gICAgICogTk9UQTogaW4gaW5wdXQgdmllbmUgcGFzc2F0YSBsYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBzdGVzc2EuXHJcbiAgICAgKiBAcGFyYW0gZXJyb3JDYWxsQmFjayBNZXRvZG8gZGEgZXNlZ3VpcmUgaW4gY2FzbyBkaSBlcnJvcmUgZG9wbyBsYSBjaGlhbWF0YSBodHRwLlxyXG4gICAgICogTk9UQTogaW4gaW5wdXQgdmllbmUgcGFzc2F0byBsJ2Vycm9yZSBnZW5lcmF0byBkZWxsYSBjaGlhbWF0YSBzdGVzc2EuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBSdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgZW5kUG9pbnREYXRhOiBFbmRQb2ludERhdGEsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IG51bGwsXHJcbiAgICAgICAgY2FsbGJhY2s6IChlOiBGb3JtIHwgUmVjb3JkIHwgQXJyYXk8UmVjb3JkPikgPT4gdm9pZCA9IG51bGwsXHJcbiAgICAgICAgZXJyb3JDYWxsQmFjazogKGVycjogdW5rbm93bikgPT4gdm9pZCA9IG51bGxcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuYWRkUmVxdWVzdENvdW50ZXIoKTtcclxuXHJcbiAgICAgICAgbGV0IHVybCA9IGAke2VuZFBvaW50RGF0YS5Vcmx9YDtcclxuICAgICAgICBsZXQgcXVlcnlQYXJhbXM6IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgYm9keVBhcmFtcyA9IHtcclxuICAgICAgICAgICAgQWRkaXRpb25hbFBhcmFtczoge31cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBTZSBuZWxsYSBjb25maWd1cmF6aW9uZSBzb25vIHN0YXRpIGRlZmluaXRpIHBhcmFtZXRyaSBkYSBhZ2dpdW5nZXJlIGFsbGEgY2hpYW1hdGEgcXVlc3RpIHZlbmdvbm8gY2ljbGF0aVxyXG4gICAgICAgIC8vIGUgYWdnaXVudGkgbmVsIHB1bnRvIGluIGN1aSBkZXZvbm8gZXNzZXJlIHVzYXRpLlxyXG4gICAgICAgIGlmIChlbmRQb2ludERhdGEuUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGVuZFBvaW50RGF0YS5QYXJhbXMuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAocC5QYXJhbVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ1F1ZXJ5IHBhcmFtJ106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9IHAuUGFyYW1OYW1lICsgXCI9XCIgKyBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zID09IG51bGwgPyBcIlwiIDogcXVlcnlQYXJhbXMgKyBcIiZcIikgKyBzdHJpbmdQYXJhbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gcm91dGUnXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5UGFyYW1zLkFkZGl0aW9uYWxQYXJhbXNbcC5QYXJhbU5hbWVdID0gcC5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2Ugc29ubyBzdGF0aSBwYXNzYXRpIHBhcmFtZXRyaSBkYSBhZ2dpdW5nZXJlIGFsbGEgY2hpYW1hdGEgZGVmaW5pdGkgYWxsJ2ludGVybm8gZGVsIG1vZHVsbyBkaW5hbWljb1xyXG4gICAgICAgIC8vIHZlbmdvbm8gY2ljbGF0aSBlIGFnZ2l1bnRpIG5lbCBwdW50byBpbiBjdWkgZGV2b25vIGVzc2VyZSB1c2F0aSBkb3BvIHF1ZWxsaSBkZWZpbml0aSBuZWxsYSBjb25maWd1cmF6aW9uZS5cclxuICAgICAgICBpZiAoZHluYW1pY01vZHVsZVBhcmFtcykge1xyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuUGFyYW1UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydRdWVyeSBwYXJhbSddOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ1BhcmFtOiBzdHJpbmcgPSBwLlBhcmFtTmFtZSArIFwiPVwiICsgcC5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyA9PSBudWxsID8gXCJcIiA6IHF1ZXJ5UGFyYW1zICsgXCImXCIpICsgc3RyaW5nUGFyYW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIHJvdXRlJ106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgKHVybC5lbmRzV2l0aChcIi9cIikgPyBcIlwiIDogXCIvXCIpICsgcC5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVBhcmFtc1twLlBhcmFtTmFtZV0gPSBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChxdWVyeVBhcmFtcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHVybCA9ICh1cmwuZW5kc1dpdGgoXCIvXCIpID8gdXJsLnN1YnN0cmluZygwLCB1cmwubGVuZ3RoIC0gMSkgOiB1cmwpICsgXCI/XCIgKyBxdWVyeVBhcmFtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0KGVuZFBvaW50RGF0YS5SZXF1ZXN0TWV0aG9kLCB1cmwsIHtcclxuICAgICAgICAgICAgaGVhZGVyczogZW5kUG9pbnREYXRhLlRva2VuID8geyBBdXRob3JpemF0aW9uOiBlbmRQb2ludERhdGEuVG9rZW4gfSA6IG51bGwsXHJcbiAgICAgICAgICAgIGJvZHk6ICFbUmVxdWVzdE1ldGhvZEVudW0uREVMRVRFLCBSZXF1ZXN0TWV0aG9kRW51bS5HRVRdLmluY2x1ZGVzKGVuZFBvaW50RGF0YS5SZXF1ZXN0TWV0aG9kKSA/IGJvZHlQYXJhbXMgOiBudWxsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXM6IEZvcm0gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5yZW1vdmVSZXF1ZXN0Q291bnRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnJlbW92ZVJlcXVlc3RDb3VudGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ2FsbEJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsQmFjayhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eUhlbHBlci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXVDLGtCQUFrQixFQUFpQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwSSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBb0MsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFLbEosT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFNcEYsTUFBTSxPQUFPLG9CQUFvQjtJQUk3QixZQUNZLFdBQStCLEVBQy9CLElBQWdCLEVBQ2hCLGNBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUUxQyxDQUFDO0lBRU0sTUFBTSxDQUFDLG9CQUFvQixDQUFDLE9BQWUsRUFBRSxHQUFXLEVBQUUsR0FBUTtRQUNyRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFD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QUFhLEVBQUU7Z0JBQ2YsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO1lBQ0QsNkJBQTZCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQ0osQ0FBQztJQUNWLENBQUM7O0FBblphLDRCQUFPLEdBQVksSUFBSSxPQUFPLEVBQUcsQ0FBQTtpSEFGdEMsb0JBQW9CO3FIQUFwQixvQkFBb0IsY0FGakIsTUFBTTsyRkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBDb2xTcGFuU2l6ZXNFbnVtLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSBcIi4uL21vZGVscy9iYXNlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9tb2RlbHMvY29udGV4dC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YSwgRW5kUG9pbnREYXRhUGFyYW1zLCBQYXJhbVR5cGVFbnVtLCBSZXF1ZXN0TWV0aG9kRW51bSB9IGZyb20gXCIuLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL2F0dGFjaG1lbnRGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZUZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvaW1hZ2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMaXN0VmFsdWVGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFRleHRhcmVhRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy90ZXh0YXJlYUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFRleHRNYXNrRW51bSwgVGV4dEZpZWxkLCBVcmxSZWdleCwgVGVsUmVnZXggfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tIFwiLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBcnJheVZhbGlkYXRvcnMgfSBmcm9tIFwiLi9jdXN0b20tZm9ybS12YWxpZGF0b3JzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi9lcXAtZHluYW1pYy1tb2R1bGUtZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwiLi9zcGlubmVyLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXRpbGl0eUhlbHBlclNlcnZpY2Uge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBTcGlubmVyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBFdmFsdWF0ZUZpZWxkRm9ybXVsYShmb3JtdWxhOiBzdHJpbmcsIHJlYzogUmVjb3JkLCBjdHg6IGFueSk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgZXZhbHVhdGVkVmFsdWUgPSBldmFsKGZvcm11bGEpO1xyXG4gICAgICAgIHJldHVybiAoZXZhbHVhdGVkVmFsdWUgPyBldmFsdWF0ZWRWYWx1ZSA6IG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgU2V0Q29udGV4dChjdHg6IENvbnRleHQpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjdHg7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGlzTnVtZXJpYyhuKSB7XHJcbiAgICAgICAgcmV0dXJuICFpc05hTihuKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGluaXRTdHlsZXMoc3R5bGVjc3MpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHN0eWxlY3NzLnNwbGl0KFwiO1wiKS5yZWR1Y2UoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5cGFyID0gYi5zcGxpdChcIjpcIilcclxuICAgICAgICAgICAgaWYgKGtleXBhci5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgICAgIGFba2V5cGFyWzBdLnRyaW0oKV0gPSBrZXlwYXJbMV0udHJpbSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYVxyXG4gICAgICAgICAgfSwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0RmllbGRUeXBlKGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgICAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXToge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdDogVGV4dEZpZWxkID0gT2JqZWN0LmFzc2lnbihuZXcgVGV4dEZpZWxkLCBmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIHBlciBpIGNhbXBpIGluIGN1aSBsJ3V0ZW50ZSBkZXZlIHNjcml2ZXJlIGNvbWFuZGkgamF2YXNjcmlwdC5cclxuICAgICAqIEluIGJhc2UgYWxsJ3VsdGltbyBjYXJhdHRlcmUgZGlnaXRhdG8gdmllbmUgaW1wb3N0YXRvIHVuIGVsZW5jbyBkaSBvZ2dldHRpIG8gcHJvcHJpZXTDoCBjaGUgbCd1dGVudGUgaGEgYSBkaXNwb3NpemlvbmUgaW4gcXVlbCBtb21lbnRvLlxyXG4gICAgICogQHBhcmFtIGZpZWxkcyBBcnJheSBkaSBCYXNlRmllbGQgYWdnaXVudGkgYWxsYSBGb3JtXHJcbiAgICAgKiBAcGFyYW0gdHlwZWRGb3JtdWxhIFN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGVcclxuICAgICAqIEBzdW1tYXJ5IElsIG1ldG9kbyBpbXBvc3RhIGkgc3VnZ2VyaW1lbnRpIGJhc2FuZG9zaSBzdSAzIGNhc2k6XHJcbiAgICAgKiAgMSkgbCd1dGVudGUgbm9uIGhhIGRpZ2l0YXRvIG51bGxhIG8gbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBmaW5pc2NlIGNvbiB1bm8gc3BhemlvIHZ1b3RvXHJcbiAgICAgKiAgMikgbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBmaW5pc2NlIGNvbiB1biBcIi5cIlxyXG4gICAgICogIDMpIGxhIHN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGUgbm9uIGNvaW5jaWRlIGNvbiBuZXNzdW4gYWx0cm8gY2FzbyBzb3ByYSAoZmluaXNjZSBjb24gdW4gY2FyYXR0ZXJlIHF1YWx1bnF1ZSlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHZXRBdXRvY29tcGxldGVPcHRpb25zKGZpZWxkczogQXJyYXk8QmFzZUZpZWxkPiwgdHlwZWRGb3JtdWxhOiBzdHJpbmcpOiBBcnJheTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4ge1xyXG5cclxuICAgICAgICBsZXQgYXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+ID0gW107XHJcblxyXG4gICAgICAgIC8vIFJlY3VwZXJvIGkgbm9taSBkaSB0dXR0aSBpIGNhbXBpIGNyZWF0aSBmaW5vIGFkIG9yYSBuZWxsYSBmb3JtLlxyXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVJlY1Byb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBmaWVsZHMubWFwKGYgPT4gZi5MYWJlbC5zcGxpdCgnICcpLmpvaW4oJ18nKSk7XHJcblxyXG4gICAgICAgIC8vIE5lbCBjYXNpIGluIGN1aSBsJ3V0ZW50ZSBub24gaGEgaW5zZXJpdG8gbnVsbGEgb3BwdXJlIGxhIHN0cmluZ2EgZmluaXNjZSBjb24gdW5vIHNwYXppbyB2dW90byBvIHVuIHNpbWJvbG8gZGl2ZXJzbyBkYSBcIi5cIlxyXG4gICAgICAgIC8vICh1biBjYXJhdHRlcmUgbm9uIGFsZmFudW1lcmljbykgaW1wb3N0byBjb21lIHN1Z2dlcmltZW50aSBzb2xvIFwicmVjXCIgZSBcImN0eFwiLCBvdnZlcm8gZ2xpIHVuaWNpIGR1ZSBvZ2dldHRpIGEgY3VpIGwndXRlbnRlIGhhIGFjY2Vzc28uXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdHlwZWRGb3JtdWxhIHx8XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICF0eXBlZEZvcm11bGEuZW5kc1dpdGgoXCIuXCIpXHJcbiAgICAgICAgICAgICAgICAmJiBuZXcgUmVnRXhwKFwiW14wLTlhLXpBLVpfXVwiKS50ZXN0KHR5cGVkRm9ybXVsYS5zdWJzdHJpbmcodHlwZWRGb3JtdWxhLmxlbmd0aCAtIDEsIHR5cGVkRm9ybXVsYS5sZW5ndGgpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBcInJlY1wiLCB2YWx1ZTogKHR5cGVkRm9ybXVsYSA/IHR5cGVkRm9ybXVsYSA6ICcnKSArIFwicmVjXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IFwiY3R4XCIsIHZhbHVlOiAodHlwZWRGb3JtdWxhID8gdHlwZWRGb3JtdWxhIDogJycpICsgXCJjdHhcIiB9XHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFNlIGxhIHN0cmluZ2EgZmluaXNjZSBjb24gdW4gXCIuXCIgdnVvbCBkaXJlIGNoZSBsJ3V0ZW50ZSBzdGEgY2VyY2FuZG8gZGkgYWNjZWRlcmUgYWQgdW5hIHByb3ByaWV0w6AgZGkgdW4gb2dnZXR0b1xyXG4gICAgICAgIC8vIGEgc3VhIGRpc3Bvc2l6aW9uZS4gUmVjdXBlcm8gaWwgbm9tZSBkZWxsJ3VsdGltbyBvZ2dldHRvIGRpZ2l0YXRvIGRhbGwndXRlbnRlIGUgc2UgbCdvZ2dldHRvIHNjZWx0byDDqCBcInJlY1wiIG8gXCJjdHhcIlxyXG4gICAgICAgIC8vIGFsbG9yYSBzdWdnZXJpc2NvIGxlIHByb3ByaWV0w6AgY2hlIGVzaXN0b25vIGFsbCdpbnRlcm5vIGRpIHF1ZXN0aSBvZ2dldHRpIGFsdHJpbWVudGkgbm9uIG1vc3RybyBudWxsYS5cclxuICAgICAgICBlbHNlIGlmICh0eXBlZEZvcm11bGEuZW5kc1dpdGgoXCIuXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm11bGFQaWVjZXM6IEFycmF5PHN0cmluZz4gPSB0eXBlZEZvcm11bGEuc3BsaXQoXCIgXCIpW3R5cGVkRm9ybXVsYS5zcGxpdChcIiBcIikubGVuZ3RoIC0gMV0uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgaWYgKGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJyZWNcIikge1xyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IGF2YWlsYWJsZVJlY1Byb3BlcnRpZXMubWFwKGYgPT4geyByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTsgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybXVsYVBpZWNlc1tmb3JtdWxhUGllY2VzLmxlbmd0aCAtIDJdID09PSBcImN0eFwiKSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dCkubWFwKGYgPT4geyByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTsgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybXVsYVBpZWNlcy5sZW5ndGggPiAyICYmIGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJiBmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gMl0gPT09IFwiVXNlclwiKSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyKS5tYXAoZiA9PiB7IHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9OyB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJbiB0dXR0aSBnbGkgYWx0cmkgY2FzaSwgb3Z2ZXJvIHF1YW5kbyBsYSBzdHJpbmdhIGRpZ2l0YXRhIGZpbmlzY2UgY29uIHVuIGNhcmF0dGVyZSBkaXZlcnNvIGRhIHF1ZWxsaVxyXG4gICAgICAgIC8vIGNvbnRyb2xsYXRpIGZpbm9yYSwgdnVvbCBkaXJlIGNoZSBsJ3V0ZW50ZSBzdGEgZGlnaXRhbnRvIGlsIG5vbWUgZGkgdW4gb2dnZXR0bywgdW5hIHByb3ByaWV0w6AgbyB1bmFcclxuICAgICAgICAvLyBmdW56aW9uZSBqYXZhc2NyaXB0LiBDb250cm9sbG8gbGEgcGFyb2xhIGNoZSBsJ3V0ZW50ZSBzdGEgZGlnaXRhbmRvIGUgc2UgZmEgcGFydGUgZGkgdW5vIGRlZ2xpIG9nZ2V0dGkgYSBkaXNwb3NpemlvbmVcclxuICAgICAgICAvLyBvIHVuYSBwcm9wcmlldMOgIGRpIGVzc2kgYWxsb3JhIHN1Z2dlcmlzY28gaSBwb3NzaWJpbGkgbWF0Y2guXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gUHJlbmRvIHR1dHRpIGkgYmxvY2NoaSBkaSBjYXJhdHRlcmkgZGlnaXRhdGkgZGFsbCd1dGVudGVcclxuICAgICAgICAgICAgY29uc3QgYWxsRm9ybXVsYVdvcmRzOiBBcnJheTxzdHJpbmc+ID0gdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgLy8gUHJlbmRvIGwndWx0aW1vIGJsb2NjbyBkaSBjYXJhdHRlcmkgZGlnaXRhdG8gZGFsbCd1dGVudGVcclxuICAgICAgICAgICAgY29uc3QgbGFzdFR5cGVkU3RyaW5nOiBzdHJpbmcgPSBhbGxGb3JtdWxhV29yZHNbYWxsRm9ybXVsYVdvcmRzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgbGEgbCd1bHRpbWEgc3RyaW5nYSBkaWdpdGF0YSBub24gY29udGllbmUgY2FyYXR0ZXJpIHNwZWNpYWxpIGFsbG9yYSBzcGxpdHRvIGxhIHN0cmluZ2FcclxuICAgICAgICAgICAgLy8gc3VpIFwiLlwiIGUgaW1wb3N0byBpIHN1Z2dlcmltZW50aSBpbiBiYXNlIGFsIHBhdGggZGVsbGEgcHJvcnBpZXTDoCBjaGUgc2kgc3RhIGRpZ2l0YW5kby5cclxuICAgICAgICAgICAgaWYgKCFuZXcgUmVnRXhwKFwiW14wLTlhLXpBLVpfLl1cIikudGVzdChsYXN0VHlwZWRTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBsYXN0VHlwZWRTdHJpbmcuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFR5cGVkV29yayA9IHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXNUb0NoZWNrOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5UGF0aC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gW1wicmVjXCIsIFwiY3R4XCJdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eVBhdGgubGVuZ3RoID4gMSAmJiBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcImN0eFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSBPYmplY3Qua2V5cyhVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlQYXRoLmxlbmd0aCA+IDIgJiYgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJiBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcIlVzZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlQYXRoLmxlbmd0aCA+IDEgJiYgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAyXSA9PT0gXCJyZWNcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gYXZhaWxhYmxlUmVjUHJvcGVydGllcztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBFc2VndW8gaWwgY29udHJvbGxvIHN1bGxlIHByb3ByaWV0w6AgcmVjdXBlcmF0ZSwgYWdnaXVuZ28gYWkgc3VnZ2VyaW1lbnRpIHR1dHRpIGkgbm9taSBjaGUgaW5pemlhbm8gY29uXHJcbiAgICAgICAgICAgICAgICAvLyBxdWVsbG8gY2hlIHN0YSBkaWdpdGFuZG8gbCd1dGVudGUuXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjay5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wLnN0YXJ0c1dpdGgobGFzdFR5cGVkV29yaykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlT3B0aW9ucy5wdXNoKHsgbGFiZWw6IHByb3AsIHZhbHVlOiB0eXBlZEZvcm11bGEgKyBwcm9wLnN1YnN0cmluZyhsYXN0VHlwZWRXb3JrLmxlbmd0aCwgcHJvcC5sZW5ndGgpIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBhdmFpbGFibGVPcHRpb25zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF1dG9jb21wbGV0ZU9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gaW52b2NhdG8gZGFsbCdodG1sIHBlciBpbXBvc3RhcmUgbGUgY2xhc3NpIGNzcyBwZXIgdmlzdWFsaXp6YXJlIGlsIGNhbXBvIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0uXHJcbiAgICAgKiBTZSBwZXIgaWwgZmllbGQgc29ubyBzdGF0ZSBzcGVjaWZpY2F0ZSBkZWxsZSBjbGFzc2kgYWxsb3JhIHZlbmdvbm8gYXBwbGNhdGUgcXVlbGxlLCBhbHRyaW1lbnRpIHZlbmdvbm8gdXNhdGVcclxuICAgICAqIGRlbGxlIGNsYXNzaSBkaSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBkYSB2aXN1YWxpenphcmUuXHJcbiAgICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgc3RyaW5nYSBjb250ZW5lbnRlIGxlIGNsYXNzaSBjc3MgZGEgYXBwbGljYXJlLlxyXG4gICAgICovXHJcbiAgICBnZXRGaWVsZFN5bGVDbGFzcyhmaWVsZDogQmFzZUZpZWxkKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoZmllbGQuQ29sU3BhblNpemVzICYmIGZpZWxkLkNvbFNwYW5TaXplcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICByZXR1cm4gZmllbGQuQ29sU3BhblNpemVzLm1hcChzaXplID0+IENvbFNwYW5TaXplc0VudW1bc2l6ZV0udG9TdHJpbmcoKSkuam9pbihcIiBcIik7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBbGxlZ2F0b1wiXTpcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5Jc011bHRpQXR0YWNoIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLk1ldGFkYXRhRmllbGRzICYmIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmVcIl06XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICgoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5NZXRhZGF0YUZpZWxkcyAmJiAoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5NZXRhZGF0YUZpZWxkcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydGb3JtIGRpIGRldHRhZ2xpbyddOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIHVuYSBGb3JtIGEgcGFydGlyZSBkYWkgc3VvaSBCYXNlRmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZm9ybUZpZWxkcyBMaXN0YSBkZWkgQmFzZUZpZWxkIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICAgKiBAcGFyYW0gcmVjb3JkIE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgY2hlIGNvbnRpZW5lIGkgdmFsb3JpIGRlaSBjYW1waS5cclxuICAgICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIGRpc2FiaWxpdGEgbGEgZm9ybSBwZXIgcmVuZGVybGEgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQgU2UgVFJVRSBwb3BvbGEgbGEgcHJvcHJpZXTDoCBGb3JtRm9ybUdyb3VwIGFsbCdpbnRlcm5vIGRpIG9nbmkgQmFzZUZpZWxkIGNvbiBpbCBGb3JtR3JvdXAgY29ycmVudGUuXHJcbiAgICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBGb3JtR3JvdXAgcmFwcHJlc2VudGF0ZSBsYSBGb3JtIGEgY3VpIGFwcGFydGVuZ29ubyBpIEJhc2VGaWVsZCByaWNldnV0aSBpbiBpbnB1dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIENyZWF0ZUZvcm1Gb3JtR3JvdXAoZm9ybUZpZWxkczogQXJyYXk8QmFzZUZpZWxkPixcclxuICAgICAgICByZWNvcmQ6IFJlY29yZCxcclxuICAgICAgICBvbmx5VmlldyA9IGZhbHNlLFxyXG4gICAgICAgIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQgPSB0cnVlKTogVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICAgICAgY29uc3QgZm9ybUZvcm06IFVudHlwZWRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFtdKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBmb3JtRm9ybS5hZGRDb250cm9sKGZpZWxkLk5hbWUsIHRoaXMuY3JlYXRlRmllbGRGb3JtQ29udHJvbChmaWVsZCwgcmVjb3JkKSk7XHJcbiAgICAgICAgICAgIGlmIChpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZC5Gb3JtRm9ybUdyb3VwID0gZm9ybUZvcm07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAob25seVZpZXcpIHtcclxuICAgICAgICAgICAgZm9ybUZvcm0uZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcm1Gb3JtO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuemlvbmUgcGVyIGNyZWFyZSBlIGFnZ2l1bmdlcmUgYWwgRm9ybUdyb3VwIHJhcHByZXNlbnRhbnRlIGxhIGZvcm0gdW4gbnVvdm8gRm9ybUNvbnRyb2wgYSBwYXJ0aXJlIGRhIHVuIEZpZWxkLlxyXG4gICAgICogSW4gbnVvdm8gRm9ybUNvbnRyb2wgYXZyw6AgaWwgbm9tZSBkZWwgY2FtcG8gcGFzc2F0byBlIHZlcnJhbm5vIGltcG9zdGF0aSBpIFZhbGlkYXRvcnMgaW4gYmFzZSBhbCB0aXBvIGRlbCBjYW1wbyBzdGVzc28uXHJcbiAgICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGlsIEZvcm1Db250cm9sIGRhIGluc2VyaXJlIG5lbCBGb3JtR3JvdXAgZGVsYSBmb3JtLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNyZWF0ZUZpZWxkRm9ybUNvbnRyb2woZmllbGQ6IEJhc2VGaWVsZCwgcmVjb3JkOiBSZWNvcmQpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQuUmVxdWlyZWQpXHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0KSB7IHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCgoZmllbGQgYXMgVGV4dEZpZWxkKS5NYXhMZW5naHQpKTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0RmllbGQpLk1pbkxlbmdodCkgeyB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWluTGVuZ2h0KSk7IH1cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoKGZpZWxkIGFzIFRleHRGaWVsZCkuVGV4dE1hc2spIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHRNYXNrRW51bS5Vcmw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oVXJsUmVnZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uRW1haWw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uVGVsZWZvbm86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oVGVsUmVnZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQXJlYSBkaSB0ZXN0b1wiXTpcclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWF4TGVuZ2h0KSB7IHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWF4TGVuZ2h0KSk7IH1cclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0KSB7IHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0KSk7IH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5JbW1hZ2luZTpcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5SZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXTpcclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5SZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFVudHlwZWRGb3JtQ29udHJvbChyZWNvcmRbZmllbGQuTmFtZV0sIHZhbGlkYXRvcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBnbGkgZW5kcG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdCBhIHBhcnRpcmUgZGFsbCd1cmwgYmFzZSBkZWwgc2VydmVyXHJcbiAgICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICAgKiBAcGFyYW0gYmFzZVNlcnZlclVybCBTdHJpbmdhIGRlbGwndXJsIGJhc2UgZGVsIHNlcnZlciAoZXM6IFwiaHR0cDovL2xvY2FsaG9zdDo1MDAwXCIpLlxyXG4gICAgICogQHBhcmFtIHVzZXJUb2tlbiBUb2tlbiBkZWxsJ3V0ZW50ZSBsb2dnYXRvIGRhIHVzYXJlIHBlciBhdXRlbnRpY2Fyc2kgc2UgbmVjZXNzYXJpby5cclxuICAgICAqIEByZXR1cm5zIFJlc2l0dWlzY2UgbGEgY29uZmlndXJhemlvbmUgY29tcGxldGEgZGVnbGkgZW5kUG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIENvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoYmFzZVNlcnZlclVybDogc3RyaW5nLCB1c2VyVG9rZW46IHN0cmluZyk6IEVuZFBvaW50Q29uZmlndXJhdGlvbiB7XHJcbiAgICAgICAgbGV0IGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uID0gbmV3IEVuZFBvaW50Q29uZmlndXJhdGlvbigpO1xyXG4gICAgICAgIGVuZFBvaW50Q29uZmlndXJhdGlvbiA9IG5ldyBFbmRQb2ludENvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgICBlbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyA9IHtcclxuICAgICAgICAgICAgR2V0QnlGb3JtSURFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2dldGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgR2V0QnlJREVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZ2V0QnlJRFwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgU2F2ZUVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvc2F2ZVwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLlBPU1QsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIER1cGxpY2F0ZUVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZHVwbGljYXRlXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgRGVsZXRlRW5kUG9pbnQ6IHtcclxuICAgICAgICAgICAgICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9kZWxldGVcIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5ERUxFVEUsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zID0ge1xyXG4gICAgICAgICAgICBHZXRCeUlERW5kUG9pbnQ6IHtcclxuICAgICAgICAgICAgICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS9jb25mL2Zvcm1cIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFNhdmVFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvZm9ybVwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLlBPU1QsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBjaGUgZGF0YSBsYSBjb25maWd1cmF6aW9uZSBkaSB1biBlbmRwb2ludCBjb3N0cnVpc2NlIGwndXJsIGRhIGNoaWFtYXJlLCBnbGkgZXZlbnR1YWxpIHBhcmFtZXRyaVxyXG4gICAgICogZGEgcGFzc2FyZSAobmVsIGJvZHkgbyBuZWxsYSByb3R0YSkgZWQgZWZmZXR0dWEgbGEgY2hpYW1hdGEuIEFsIHRlcm1pbmUgZGVsbGEgY2hpYW1hdGEgZXNlZ3VlIGxlIGV2ZW50dWFsaVxyXG4gICAgICogZnVuemlvbmkgZGkgY2FsbGJhY2sgKHNpYSBpbiBjYXNvIGRpIHN1Y2Nlc3NvIGNoZSBpbiBjYXNvIGRpIGVycm9yZSkgcGFzc2F0ZSBpbiBpbnB1dC5cclxuICAgICAqIEBwYXJhbSBlbmRQb2ludERhdGEgQ29maWd1cmF6aW9uZSBkZWxsJ2VuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAgICogQHBhcmFtIGR5bmFtaWNNb2R1bGVQYXJhbXMgQXJyYXkgZGVpIHBhcmFtZXRyaSBhZ2dpdW50aSBkYWwgbW9kdWxvIGRpbmFtaWNvIGEgcXVlbGxpIGdpw6AgY29uZmlndXJhdGlcclxuICAgICAqIChhZCBlc2VtcGlvIGlsIHJlY29yZCBvIGxhIGZvcm0gZGEgc2FsdmFyZSBvcHB1cmUgbCdJRCBwZXIgcmVjdXBlcmFyZSB1bmEgcGFydGljb2xhcmUgZW50aXTDoCkuXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgTWV0b2RvIGRhIGVzZWd1aXJlIGluIGNhc28gZGkgc3VjY2Vzc28gZG9wbyBsYSBjaGlhbWF0YSBodHRwLlxyXG4gICAgICogTk9UQTogaW4gaW5wdXQgdmllbmUgcGFzc2F0YSBsYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBzdGVzc2EuXHJcbiAgICAgKiBAcGFyYW0gZXJyb3JDYWxsQmFjayBNZXRvZG8gZGEgZXNlZ3VpcmUgaW4gY2FzbyBkaSBlcnJvcmUgZG9wbyBsYSBjaGlhbWF0YSBodHRwLlxyXG4gICAgICogTk9UQTogaW4gaW5wdXQgdmllbmUgcGFzc2F0byBsJ2Vycm9yZSBnZW5lcmF0byBkZWxsYSBjaGlhbWF0YSBzdGVzc2EuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBSdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgZW5kUG9pbnREYXRhOiBFbmRQb2ludERhdGEsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IG51bGwsXHJcbiAgICAgICAgY2FsbGJhY2s6IChlOiBGb3JtIHwgUmVjb3JkIHwgQXJyYXk8UmVjb3JkPikgPT4gdm9pZCA9IG51bGwsXHJcbiAgICAgICAgZXJyb3JDYWxsQmFjazogKGVycjogdW5rbm93bikgPT4gdm9pZCA9IG51bGxcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuYWRkUmVxdWVzdENvdW50ZXIoKTtcclxuXHJcbiAgICAgICAgbGV0IHVybCA9IGAke2VuZFBvaW50RGF0YS5Vcmx9YDtcclxuICAgICAgICBsZXQgcXVlcnlQYXJhbXM6IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgYm9keVBhcmFtcyA9IHtcclxuICAgICAgICAgICAgQWRkaXRpb25hbFBhcmFtczoge31cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBTZSBuZWxsYSBjb25maWd1cmF6aW9uZSBzb25vIHN0YXRpIGRlZmluaXRpIHBhcmFtZXRyaSBkYSBhZ2dpdW5nZXJlIGFsbGEgY2hpYW1hdGEgcXVlc3RpIHZlbmdvbm8gY2ljbGF0aVxyXG4gICAgICAgIC8vIGUgYWdnaXVudGkgbmVsIHB1bnRvIGluIGN1aSBkZXZvbm8gZXNzZXJlIHVzYXRpLlxyXG4gICAgICAgIGlmIChlbmRQb2ludERhdGEuUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGVuZFBvaW50RGF0YS5QYXJhbXMuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAocC5QYXJhbVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ1F1ZXJ5IHBhcmFtJ106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9IHAuUGFyYW1OYW1lICsgXCI9XCIgKyBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zID09IG51bGwgPyBcIlwiIDogcXVlcnlQYXJhbXMgKyBcIiZcIikgKyBzdHJpbmdQYXJhbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gcm91dGUnXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5UGFyYW1zLkFkZGl0aW9uYWxQYXJhbXNbcC5QYXJhbU5hbWVdID0gcC5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2Ugc29ubyBzdGF0aSBwYXNzYXRpIHBhcmFtZXRyaSBkYSBhZ2dpdW5nZXJlIGFsbGEgY2hpYW1hdGEgZGVmaW5pdGkgYWxsJ2ludGVybm8gZGVsIG1vZHVsbyBkaW5hbWljb1xyXG4gICAgICAgIC8vIHZlbmdvbm8gY2ljbGF0aSBlIGFnZ2l1bnRpIG5lbCBwdW50byBpbiBjdWkgZGV2b25vIGVzc2VyZSB1c2F0aSBkb3BvIHF1ZWxsaSBkZWZpbml0aSBuZWxsYSBjb25maWd1cmF6aW9uZS5cclxuICAgICAgICBpZiAoZHluYW1pY01vZHVsZVBhcmFtcykge1xyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuUGFyYW1UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydRdWVyeSBwYXJhbSddOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ1BhcmFtOiBzdHJpbmcgPSBwLlBhcmFtTmFtZSArIFwiPVwiICsgcC5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyA9PSBudWxsID8gXCJcIiA6IHF1ZXJ5UGFyYW1zICsgXCImXCIpICsgc3RyaW5nUGFyYW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIHJvdXRlJ106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgKHVybC5lbmRzV2l0aChcIi9cIikgPyBcIlwiIDogXCIvXCIpICsgcC5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVBhcmFtc1twLlBhcmFtTmFtZV0gPSBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChxdWVyeVBhcmFtcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHVybCA9ICh1cmwuZW5kc1dpdGgoXCIvXCIpID8gdXJsLnN1YnN0cmluZygwLCB1cmwubGVuZ3RoIC0gMSkgOiB1cmwpICsgXCI/XCIgKyBxdWVyeVBhcmFtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0KGVuZFBvaW50RGF0YS5SZXF1ZXN0TWV0aG9kLCB1cmwsIHtcclxuICAgICAgICAgICAgaGVhZGVyczogZW5kUG9pbnREYXRhLlRva2VuID8geyBBdXRob3JpemF0aW9uOiBlbmRQb2ludERhdGEuVG9rZW4gfSA6IG51bGwsXHJcbiAgICAgICAgICAgIGJvZHk6ICFbUmVxdWVzdE1ldGhvZEVudW0uREVMRVRFLCBSZXF1ZXN0TWV0aG9kRW51bS5HRVRdLmluY2x1ZGVzKGVuZFBvaW50RGF0YS5SZXF1ZXN0TWV0aG9kKSA/IGJvZHlQYXJhbXMgOiBudWxsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXM6IEZvcm0gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5yZW1vdmVSZXF1ZXN0Q291bnRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnJlbW92ZVJlcXVlc3RDb3VudGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ2FsbEJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsQmFjayhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|