@glowgreen/gg-questionnaire-v2 0.0.43 → 0.0.45
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/bundles/glowgreen-gg-questionnaire-v2.umd.js +95 -49
- package/bundles/glowgreen-gg-questionnaire-v2.umd.js.map +1 -1
- package/bundles/glowgreen-gg-questionnaire-v2.umd.min.js +1 -1
- package/bundles/glowgreen-gg-questionnaire-v2.umd.min.js.map +1 -1
- package/esm2015/lib/interfaces/question.js +3 -1
- package/esm2015/lib/services/filter.service.js +48 -24
- package/esm2015/lib/services/form-constructor.service.js +9 -4
- package/esm5/lib/interfaces/question.js +3 -1
- package/esm5/lib/services/filter.service.js +85 -45
- package/esm5/lib/services/form-constructor.service.js +12 -6
- package/fesm2015/glowgreen-gg-questionnaire-v2.js +55 -26
- package/fesm2015/glowgreen-gg-questionnaire-v2.js.map +1 -1
- package/fesm5/glowgreen-gg-questionnaire-v2.js +95 -49
- package/fesm5/glowgreen-gg-questionnaire-v2.js.map +1 -1
- package/glowgreen-gg-questionnaire-v2.metadata.json +1 -1
- package/lib/interfaces/question.d.ts +1 -0
- package/lib/services/filter.service.d.ts +1 -1
- package/lib/services/form-constructor.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -35,7 +35,7 @@ var FilterService = /** @class */ (function () {
|
|
|
35
35
|
* @return {?} An array of filtered sections with their filtered questions.
|
|
36
36
|
*/
|
|
37
37
|
function (sections, currentQuestionnaireForm, additionalData) {
|
|
38
|
-
var e_1, _a, e_2, _b, e_3, _c;
|
|
38
|
+
var e_1, _a, e_2, _b, e_3, _c, e_4, _d;
|
|
39
39
|
/** @type {?} */
|
|
40
40
|
var filteredSections = [];
|
|
41
41
|
try {
|
|
@@ -47,39 +47,63 @@ var FilterService = /** @class */ (function () {
|
|
|
47
47
|
/** @type {?} */
|
|
48
48
|
var filteredQuestions = [];
|
|
49
49
|
try {
|
|
50
|
-
for (var
|
|
51
|
-
var question =
|
|
50
|
+
for (var _e = (e_2 = void 0, tslib_1.__values(section.questions)), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
51
|
+
var question = _f.value;
|
|
52
52
|
if (!this.meetsConditionGroups(question.conditionGroups, currentQuestionnaireForm, additionalData)) {
|
|
53
53
|
continue;
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
// If it's a repeater we need to do a lot of extra filtering due to per item conditions.
|
|
56
|
+
if (question.type === 'repeater') {
|
|
56
57
|
/** @type {?} */
|
|
57
|
-
var
|
|
58
|
+
var items = (/** @type {?} */ (currentQuestionnaireForm.get([section.name, question.name])));
|
|
58
59
|
try {
|
|
59
|
-
for (var
|
|
60
|
-
var
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
for (var _g = (e_3 = void 0, tslib_1.__values(items.controls)), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
61
|
+
var repeaterItem = _h.value;
|
|
62
|
+
/** @type {?} */
|
|
63
|
+
var filteredRepeaterItemQuestions = [];
|
|
64
|
+
console.log('Filtering repeater item questions');
|
|
65
|
+
try {
|
|
66
|
+
for (var _j = (e_4 = void 0, tslib_1.__values(question.repeaterQuestions)), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
67
|
+
var repeaterQuestion = _k.value;
|
|
68
|
+
/** @type {?} */
|
|
69
|
+
var meetsConditions = this.meetsConditionGroups(repeaterQuestion.conditionGroups, currentQuestionnaireForm, additionalData, (/** @type {?} */ (repeaterItem)));
|
|
70
|
+
if (meetsConditions) {
|
|
71
|
+
repeaterQuestion.selectOptions = this.getFetchOptionsForQuestion(repeaterQuestion, additionalData, currentQuestionnaireForm, (/** @type {?} */ (repeaterItem)));
|
|
72
|
+
filteredRepeaterItemQuestions.push(repeaterQuestion);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
64
75
|
}
|
|
76
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
77
|
+
finally {
|
|
78
|
+
try {
|
|
79
|
+
if (_k && !_k.done && (_d = _j.return)) _d.call(_j);
|
|
80
|
+
}
|
|
81
|
+
finally { if (e_4) throw e_4.error; }
|
|
82
|
+
}
|
|
83
|
+
/** @type {?} */
|
|
84
|
+
var index = items.controls.indexOf(repeaterItem);
|
|
85
|
+
if (!question.filteredRepeaterQuestions) {
|
|
86
|
+
question.filteredRepeaterQuestions = [];
|
|
87
|
+
}
|
|
88
|
+
question.filteredRepeaterQuestions[index] = filteredRepeaterItemQuestions;
|
|
65
89
|
}
|
|
66
90
|
}
|
|
67
91
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
68
92
|
finally {
|
|
69
93
|
try {
|
|
70
|
-
if (
|
|
94
|
+
if (_h && !_h.done && (_c = _g.return)) _c.call(_g);
|
|
71
95
|
}
|
|
72
96
|
finally { if (e_3) throw e_3.error; }
|
|
73
97
|
}
|
|
74
98
|
}
|
|
75
|
-
this.
|
|
99
|
+
question.selectOptions = this.getFetchOptionsForQuestion(question, additionalData, currentQuestionnaireForm);
|
|
76
100
|
filteredQuestions.push(question);
|
|
77
101
|
}
|
|
78
102
|
}
|
|
79
103
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
80
104
|
finally {
|
|
81
105
|
try {
|
|
82
|
-
if (
|
|
106
|
+
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
83
107
|
}
|
|
84
108
|
finally { if (e_2) throw e_2.error; }
|
|
85
109
|
}
|
|
@@ -104,31 +128,34 @@ var FilterService = /** @class */ (function () {
|
|
|
104
128
|
* @param {?} question
|
|
105
129
|
* @param {?} additionalData
|
|
106
130
|
* @param {?} currentQuestionnaireForm
|
|
131
|
+
* @param {?=} repeaterItem
|
|
107
132
|
* @return {?}
|
|
108
133
|
*/
|
|
109
|
-
FilterService.prototype.
|
|
134
|
+
FilterService.prototype.getFetchOptionsForQuestion = /**
|
|
110
135
|
* @private
|
|
111
136
|
* @param {?} question
|
|
112
137
|
* @param {?} additionalData
|
|
113
138
|
* @param {?} currentQuestionnaireForm
|
|
139
|
+
* @param {?=} repeaterItem
|
|
114
140
|
* @return {?}
|
|
115
141
|
*/
|
|
116
|
-
function (question, additionalData, currentQuestionnaireForm) {
|
|
117
|
-
if (question.fetchPath) {
|
|
118
|
-
return;
|
|
142
|
+
function (question, additionalData, currentQuestionnaireForm, repeaterItem) {
|
|
143
|
+
if (!question.fetchPath) {
|
|
144
|
+
return question.selectOptions;
|
|
119
145
|
}
|
|
146
|
+
console.log('Getting fetch data for', question.name);
|
|
120
147
|
/** @type {?} */
|
|
121
148
|
var options = additionalData[question.fetchPath];
|
|
122
149
|
if (question.fetchSelectors && question.fetchSelectors.length > 0) {
|
|
123
150
|
/** @type {?} */
|
|
124
|
-
var values = this.getValuesForArray(question.fetchSelectors, currentQuestionnaireForm, additionalData);
|
|
151
|
+
var values = this.getValuesForArray(question.fetchSelectors, currentQuestionnaireForm, additionalData, repeaterItem);
|
|
125
152
|
options = _.get(additionalData[question.fetchPath], values);
|
|
126
153
|
}
|
|
127
154
|
options = this.getFinalFetchArray(options);
|
|
128
155
|
if (!question.selectOptions) {
|
|
129
156
|
question.selectOptions = [];
|
|
130
157
|
}
|
|
131
|
-
|
|
158
|
+
return question.selectOptions.concat(options);
|
|
132
159
|
};
|
|
133
160
|
/**
|
|
134
161
|
* @private
|
|
@@ -141,7 +168,7 @@ var FilterService = /** @class */ (function () {
|
|
|
141
168
|
* @return {?}
|
|
142
169
|
*/
|
|
143
170
|
function (items) {
|
|
144
|
-
var
|
|
171
|
+
var e_5, _a;
|
|
145
172
|
if (!items) {
|
|
146
173
|
return null;
|
|
147
174
|
}
|
|
@@ -166,12 +193,12 @@ var FilterService = /** @class */ (function () {
|
|
|
166
193
|
}
|
|
167
194
|
}
|
|
168
195
|
}
|
|
169
|
-
catch (
|
|
196
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
170
197
|
finally {
|
|
171
198
|
try {
|
|
172
199
|
if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
|
|
173
200
|
}
|
|
174
|
-
finally { if (
|
|
201
|
+
finally { if (e_5) throw e_5.error; }
|
|
175
202
|
}
|
|
176
203
|
return convertedArray;
|
|
177
204
|
};
|
|
@@ -202,6 +229,7 @@ var FilterService = /** @class */ (function () {
|
|
|
202
229
|
* @param {?} conditionGroups The array of condition groups.
|
|
203
230
|
* @param {?} currentQuestionnaireForm The current form data, can be null/undefined.
|
|
204
231
|
* @param {?=} additionalData
|
|
232
|
+
* @param {?=} repeaterItem
|
|
205
233
|
* @return {?} A boolean stating if the condition groups conditions has been met.
|
|
206
234
|
*/
|
|
207
235
|
FilterService.prototype.meetsConditionGroups = /**
|
|
@@ -211,9 +239,10 @@ var FilterService = /** @class */ (function () {
|
|
|
211
239
|
* @param {?} conditionGroups The array of condition groups.
|
|
212
240
|
* @param {?} currentQuestionnaireForm The current form data, can be null/undefined.
|
|
213
241
|
* @param {?=} additionalData
|
|
242
|
+
* @param {?=} repeaterItem
|
|
214
243
|
* @return {?} A boolean stating if the condition groups conditions has been met.
|
|
215
244
|
*/
|
|
216
|
-
function (conditionGroups, currentQuestionnaireForm, additionalData) {
|
|
245
|
+
function (conditionGroups, currentQuestionnaireForm, additionalData, repeaterItem) {
|
|
217
246
|
var _this = this;
|
|
218
247
|
if (!conditionGroups || conditionGroups.length === 0) {
|
|
219
248
|
return true;
|
|
@@ -223,7 +252,7 @@ var FilterService = /** @class */ (function () {
|
|
|
223
252
|
* @return {?}
|
|
224
253
|
*/
|
|
225
254
|
function (x) {
|
|
226
|
-
return _this.meetsConditionGroup(x, currentQuestionnaireForm, additionalData) === true;
|
|
255
|
+
return _this.meetsConditionGroup(x, currentQuestionnaireForm, additionalData, repeaterItem) === true;
|
|
227
256
|
}));
|
|
228
257
|
};
|
|
229
258
|
/**
|
|
@@ -240,6 +269,7 @@ var FilterService = /** @class */ (function () {
|
|
|
240
269
|
* @param {?} conditionGroup The condition group to check.
|
|
241
270
|
* @param {?} currentQuestionnaireForm The current form data, can be null/undefined.
|
|
242
271
|
* @param {?=} additionalData
|
|
272
|
+
* @param {?=} repeaterItem
|
|
243
273
|
* @return {?} A boolean stating if the condition group conditions has been met.
|
|
244
274
|
*/
|
|
245
275
|
FilterService.prototype.meetsConditionGroup = /**
|
|
@@ -249,10 +279,11 @@ var FilterService = /** @class */ (function () {
|
|
|
249
279
|
* @param {?} conditionGroup The condition group to check.
|
|
250
280
|
* @param {?} currentQuestionnaireForm The current form data, can be null/undefined.
|
|
251
281
|
* @param {?=} additionalData
|
|
282
|
+
* @param {?=} repeaterItem
|
|
252
283
|
* @return {?} A boolean stating if the condition group conditions has been met.
|
|
253
284
|
*/
|
|
254
|
-
function (conditionGroup, currentQuestionnaireForm, additionalData) {
|
|
255
|
-
var
|
|
285
|
+
function (conditionGroup, currentQuestionnaireForm, additionalData, repeaterItem) {
|
|
286
|
+
var e_6, _a;
|
|
256
287
|
if (!conditionGroup.conditions || conditionGroup.conditions.length === 0) {
|
|
257
288
|
return true;
|
|
258
289
|
}
|
|
@@ -261,15 +292,15 @@ var FilterService = /** @class */ (function () {
|
|
|
261
292
|
try {
|
|
262
293
|
for (var _b = tslib_1.__values(conditionGroup.conditions), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
263
294
|
var condition = _c.value;
|
|
264
|
-
results.push(this.meetsCondition(condition, currentQuestionnaireForm, additionalData));
|
|
295
|
+
results.push(this.meetsCondition(condition, currentQuestionnaireForm, additionalData, repeaterItem));
|
|
265
296
|
}
|
|
266
297
|
}
|
|
267
|
-
catch (
|
|
298
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
268
299
|
finally {
|
|
269
300
|
try {
|
|
270
301
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
271
302
|
}
|
|
272
|
-
finally { if (
|
|
303
|
+
finally { if (e_6) throw e_6.error; }
|
|
273
304
|
}
|
|
274
305
|
switch (conditionGroup.relationship) {
|
|
275
306
|
case ConditionRelationship.Every:
|
|
@@ -306,6 +337,7 @@ var FilterService = /** @class */ (function () {
|
|
|
306
337
|
* @param {?} condition The condition to check.
|
|
307
338
|
* @param {?} currentQuestionnaireForm The current form data, can be null/undefined.
|
|
308
339
|
* @param {?=} additionalData
|
|
340
|
+
* @param {?=} repeaterItem
|
|
309
341
|
* @return {?} A boolean stating if the condition group conditions has been met.
|
|
310
342
|
*/
|
|
311
343
|
FilterService.prototype.meetsCondition = /**
|
|
@@ -315,14 +347,15 @@ var FilterService = /** @class */ (function () {
|
|
|
315
347
|
* @param {?} condition The condition to check.
|
|
316
348
|
* @param {?} currentQuestionnaireForm The current form data, can be null/undefined.
|
|
317
349
|
* @param {?=} additionalData
|
|
350
|
+
* @param {?=} repeaterItem
|
|
318
351
|
* @return {?} A boolean stating if the condition group conditions has been met.
|
|
319
352
|
*/
|
|
320
|
-
function (condition, currentQuestionnaireForm, additionalData) {
|
|
321
|
-
var
|
|
353
|
+
function (condition, currentQuestionnaireForm, additionalData, repeaterItem) {
|
|
354
|
+
var e_7, _a, e_8, _b;
|
|
322
355
|
/** @type {?} */
|
|
323
|
-
var v1s = this.getValuesForArray(condition.v1s, currentQuestionnaireForm, additionalData);
|
|
356
|
+
var v1s = this.getValuesForArray(condition.v1s, currentQuestionnaireForm, additionalData, repeaterItem);
|
|
324
357
|
/** @type {?} */
|
|
325
|
-
var v2s = this.getValuesForArray(condition.v2s, currentQuestionnaireForm, additionalData);
|
|
358
|
+
var v2s = this.getValuesForArray(condition.v2s, currentQuestionnaireForm, additionalData, repeaterItem);
|
|
326
359
|
/** @type {?} */
|
|
327
360
|
var result = false;
|
|
328
361
|
switch (condition.type) {
|
|
@@ -348,7 +381,7 @@ var FilterService = /** @class */ (function () {
|
|
|
348
381
|
for (var v2s_1 = tslib_1.__values(v2s), v2s_1_1 = v2s_1.next(); !v2s_1_1.done; v2s_1_1 = v2s_1.next()) {
|
|
349
382
|
var v2 = v2s_1_1.value;
|
|
350
383
|
try {
|
|
351
|
-
for (var v1s_1 = (
|
|
384
|
+
for (var v1s_1 = (e_8 = void 0, tslib_1.__values(v1s)), v1s_1_1 = v1s_1.next(); !v1s_1_1.done; v1s_1_1 = v1s_1.next()) {
|
|
352
385
|
var v1 = v1s_1_1.value;
|
|
353
386
|
switch (condition.type) {
|
|
354
387
|
case ConditionType.EqualTo:
|
|
@@ -382,21 +415,21 @@ var FilterService = /** @class */ (function () {
|
|
|
382
415
|
}
|
|
383
416
|
}
|
|
384
417
|
}
|
|
385
|
-
catch (
|
|
418
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
386
419
|
finally {
|
|
387
420
|
try {
|
|
388
421
|
if (v1s_1_1 && !v1s_1_1.done && (_b = v1s_1.return)) _b.call(v1s_1);
|
|
389
422
|
}
|
|
390
|
-
finally { if (
|
|
423
|
+
finally { if (e_8) throw e_8.error; }
|
|
391
424
|
}
|
|
392
425
|
}
|
|
393
426
|
}
|
|
394
|
-
catch (
|
|
427
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
395
428
|
finally {
|
|
396
429
|
try {
|
|
397
430
|
if (v2s_1_1 && !v2s_1_1.done && (_a = v2s_1.return)) _a.call(v2s_1);
|
|
398
431
|
}
|
|
399
|
-
finally { if (
|
|
432
|
+
finally { if (e_7) throw e_7.error; }
|
|
400
433
|
}
|
|
401
434
|
}
|
|
402
435
|
return result;
|
|
@@ -433,6 +466,7 @@ var FilterService = /** @class */ (function () {
|
|
|
433
466
|
* @param {?} paths The array of strings to check.
|
|
434
467
|
* @param {?} currentQuestionnaireForm The current form data, can be null/undefined.
|
|
435
468
|
* @param {?=} additionalData
|
|
469
|
+
* @param {?=} repeaterItem
|
|
436
470
|
* @return {?} An array of strings/values
|
|
437
471
|
*/
|
|
438
472
|
FilterService.prototype.getValuesForArray = /**
|
|
@@ -442,10 +476,11 @@ var FilterService = /** @class */ (function () {
|
|
|
442
476
|
* @param {?} paths The array of strings to check.
|
|
443
477
|
* @param {?} currentQuestionnaireForm The current form data, can be null/undefined.
|
|
444
478
|
* @param {?=} additionalData
|
|
479
|
+
* @param {?=} repeaterItem
|
|
445
480
|
* @return {?} An array of strings/values
|
|
446
481
|
*/
|
|
447
|
-
function (paths, currentQuestionnaireForm, additionalData) {
|
|
448
|
-
var
|
|
482
|
+
function (paths, currentQuestionnaireForm, additionalData, repeaterItem) {
|
|
483
|
+
var e_9, _a;
|
|
449
484
|
if (currentQuestionnaireForm) {
|
|
450
485
|
/** @type {?} */
|
|
451
486
|
var values = [];
|
|
@@ -453,16 +488,16 @@ var FilterService = /** @class */ (function () {
|
|
|
453
488
|
for (var paths_1 = tslib_1.__values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {
|
|
454
489
|
var path = paths_1_1.value;
|
|
455
490
|
/** @type {?} */
|
|
456
|
-
var value = this.getValueForString(path, currentQuestionnaireForm, additionalData);
|
|
491
|
+
var value = this.getValueForString(path, currentQuestionnaireForm, additionalData, repeaterItem);
|
|
457
492
|
values.push(value);
|
|
458
493
|
}
|
|
459
494
|
}
|
|
460
|
-
catch (
|
|
495
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
461
496
|
finally {
|
|
462
497
|
try {
|
|
463
498
|
if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);
|
|
464
499
|
}
|
|
465
|
-
finally { if (
|
|
500
|
+
finally { if (e_9) throw e_9.error; }
|
|
466
501
|
}
|
|
467
502
|
return values;
|
|
468
503
|
}
|
|
@@ -484,6 +519,7 @@ var FilterService = /** @class */ (function () {
|
|
|
484
519
|
* @param {?} path The string value to check.
|
|
485
520
|
* @param {?} currentQuestionnaireForm The current form data, can be null/undefined.
|
|
486
521
|
* @param {?=} additionalData
|
|
522
|
+
* @param {?=} repeaterItem
|
|
487
523
|
* @return {?} A string/value.
|
|
488
524
|
*/
|
|
489
525
|
FilterService.prototype.getValueForString = /**
|
|
@@ -493,15 +529,19 @@ var FilterService = /** @class */ (function () {
|
|
|
493
529
|
* @param {?} path The string value to check.
|
|
494
530
|
* @param {?} currentQuestionnaireForm The current form data, can be null/undefined.
|
|
495
531
|
* @param {?=} additionalData
|
|
532
|
+
* @param {?=} repeaterItem
|
|
496
533
|
* @return {?} A string/value.
|
|
497
534
|
*/
|
|
498
|
-
function (path, currentQuestionnaireForm, additionalData) {
|
|
535
|
+
function (path, currentQuestionnaireForm, additionalData, repeaterItem) {
|
|
499
536
|
if (currentQuestionnaireForm) {
|
|
500
537
|
if (!additionalData) {
|
|
501
538
|
additionalData = {};
|
|
502
539
|
}
|
|
503
540
|
/** @type {?} */
|
|
504
541
|
var control = currentQuestionnaireForm.get(path.toString());
|
|
542
|
+
if ((!control || !control.value) && repeaterItem) {
|
|
543
|
+
control = repeaterItem.get(path.toString());
|
|
544
|
+
}
|
|
505
545
|
/** @type {?} */
|
|
506
546
|
var value = control ? control.value : this.convertStringToValue(path);
|
|
507
547
|
return _.get(additionalData, path, value);
|
|
@@ -556,4 +596,4 @@ var FilterService = /** @class */ (function () {
|
|
|
556
596
|
return FilterService;
|
|
557
597
|
}());
|
|
558
598
|
export { FilterService };
|
|
559
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2xvd2dyZWVuL2dnLXF1ZXN0aW9ubmFpcmUtdjIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7QUFJNUI7SUFLRTtJQUFnQixDQUFDO0lBRWpCOzs7Ozs7T0FNRzs7Ozs7Ozs7O0lBQ0ksc0NBQWM7Ozs7Ozs7O0lBQXJCLFVBQXNCLFFBQXdCLEVBQUUsd0JBQTBDLEVBQUUsY0FBdUI7OztZQUMzRyxnQkFBZ0IsR0FBRyxFQUFFOztZQUMzQixLQUFzQixJQUFBLGFBQUEsaUJBQUEsUUFBUSxDQUFBLGtDQUFBLHdEQUFFO2dCQUEzQixJQUFNLE9BQU8scUJBQUE7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLENBQUMsRUFBRTtvQkFDakcsU0FBUztpQkFDVjs7b0JBRUssaUJBQWlCLEdBQUcsRUFBRTs7b0JBQzVCLEtBQXVCLElBQUEsb0JBQUEsaUJBQUEsT0FBTyxDQUFDLFNBQVMsQ0FBQSxDQUFBLGdCQUFBLDRCQUFFO3dCQUFyQyxJQUFNLFFBQVEsV0FBQTt3QkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxFQUFFOzRCQUNsRyxTQUFTO3lCQUNWO3dCQUVELElBQUksUUFBUSxDQUFDLGlCQUFpQixFQUFFOztnQ0FDeEIseUJB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O1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7SUFDSyx5Q0FBaUI7Ozs7Ozs7OztJQUF6QixVQUEwQixJQUFZLEVBQUUsd0JBQW1DLEVBQUUsY0FBdUI7UUFDbEcsSUFBSSx3QkFBd0IsRUFBRTtZQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQixjQUFjLEdBQUcsRUFBRSxDQUFDO2FBQ3JCOztnQkFDSyxPQUFPLEdBQUcsd0JBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7Z0JBQ3ZELEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDdkUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRzs7Ozs7Ozs7O0lBQ0ssNENBQW9COzs7Ozs7OztJQUE1QixVQUE2QixJQUFZO1FBQ3ZDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxPQUFPO2dCQUNWLE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNILENBQUM7O2dCQXpSRixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7Ozt3QkFiRDtDQXFTQyxBQTFSRCxJQTBSQztTQXZSWSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VjdGlvbic7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmRpdGlvbic7XG5pbXBvcnQgeyBDb25kaXRpb25Hcm91cCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZGl0aW9uLWdyb3VwJztcbmltcG9ydCB7IENvbmRpdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy9jb25kaXRpb24tdHlwZS5lbnVtJztcbmltcG9ydCB7IENvbmRpdGlvblJlbGF0aW9uc2hpcCB9IGZyb20gJy4uL2VudW1zL2NvbmRpdGlvbi1yZWxhdGlvbnNoaXAuZW51bSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb24nO1xuaW1wb3J0IHsgUmVwZWF0ZXJRdWVzdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwZWF0ZXItcXVlc3Rpb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFuIGFycmF5IG9mIHNlY3Rpb25zIGJhc2VkIG9uIHRoZWlyIGNvbmRpdGlvbiBncm91cHMuXG4gICAqIEBwYXJhbSBzZWN0aW9ucyBUaGUgYXJyYXkgb2Ygc2VjdGlvbnMgdG8gZmlsdGVyLlxuICAgKiBAcGFyYW0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtIFRoZSBjdXJyZW50IGZvcm0gZGF0YSwgY2FuIGJlIG51bGwvdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBmaWx0ZXJlZCBzZWN0aW9ucyB3aXRoIHRoZWlyIGZpbHRlcmVkIHF1ZXN0aW9ucy5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXJTZWN0aW9ucyhzZWN0aW9uczogQXJyYXk8U2VjdGlvbj4sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwIHwgbnVsbCwgYWRkaXRpb25hbERhdGE/OiBPYmplY3QpOiBBcnJheTxTZWN0aW9uPiB7XG4gICAgY29uc3QgZmlsdGVyZWRTZWN0aW9ucyA9IFtdO1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgaWYgKCF0aGlzLm1lZXRzQ29uZGl0aW9uR3JvdXBzKHNlY3Rpb24uY29uZGl0aW9uR3JvdXBzLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWRRdWVzdGlvbnMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2Ygc2VjdGlvbi5xdWVzdGlvbnMpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1lZXRzQ29uZGl0aW9uR3JvdXBzKHF1ZXN0aW9uLmNvbmRpdGlvbkdyb3VwcywgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWVzdGlvbi5yZXBlYXRlclF1ZXN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmVwZWF0ZXJRdWVzdGlvbnMgPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcGVhdGVyUXVlc3Rpb24gb2YgcXVlc3Rpb24ucmVwZWF0ZXJRdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1lZXRzQ29uZGl0aW9uR3JvdXBzKHJlcGVhdGVyUXVlc3Rpb24uY29uZGl0aW9uR3JvdXBzLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhKSkge1xuICAgICAgICAgICAgICB0aGlzLnNldEZldGNoRm9yUXVlc3Rpb24ocXVlc3Rpb24sIGFkZGl0aW9uYWxEYXRhLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0pO1xuICAgICAgICAgICAgICBmaWx0ZXJlZFJlcGVhdGVyUXVlc3Rpb25zLnB1c2gocmVwZWF0ZXJRdWVzdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRGZXRjaEZvclF1ZXN0aW9uKHF1ZXN0aW9uLCBhZGRpdGlvbmFsRGF0YSwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtKTtcblxuICAgICAgICBmaWx0ZXJlZFF1ZXN0aW9ucy5wdXNoKHF1ZXN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbHRlcmVkUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgc2VjdGlvbi5xdWVzdGlvbnMgPSBmaWx0ZXJlZFF1ZXN0aW9ucztcbiAgICAgIGZpbHRlcmVkU2VjdGlvbnMucHVzaChzZWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyZWRTZWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgc2V0RmV0Y2hGb3JRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24gfCBSZXBlYXRlclF1ZXN0aW9uLCBhZGRpdGlvbmFsRGF0YSwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtKSB7XG5cbiAgICBpZiAocXVlc3Rpb24uZmV0Y2hQYXRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG9wdGlvbnMgPSBhZGRpdGlvbmFsRGF0YVtxdWVzdGlvbi5mZXRjaFBhdGhdO1xuICAgIGlmIChxdWVzdGlvbi5mZXRjaFNlbGVjdG9ycyAmJiBxdWVzdGlvbi5mZXRjaFNlbGVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhbHVlc0ZvckFycmF5KHF1ZXN0aW9uLmZldGNoU2VsZWN0b3JzLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhKTtcbiAgICAgIG9wdGlvbnMgPSBfLmdldChhZGRpdGlvbmFsRGF0YVtxdWVzdGlvbi5mZXRjaFBhdGhdLCB2YWx1ZXMpO1xuICAgIH1cblxuICAgIG9wdGlvbnMgPSB0aGlzLmdldEZpbmFsRmV0Y2hBcnJheShvcHRpb25zKTtcblxuICAgIGlmICghcXVlc3Rpb24uc2VsZWN0T3B0aW9ucykge1xuICAgICAgcXVlc3Rpb24uc2VsZWN0T3B0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIHF1ZXN0aW9uLnNlbGVjdE9wdGlvbnMgPSBxdWVzdGlvbi5zZWxlY3RPcHRpb25zLmNvbmNhdChvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmluYWxGZXRjaEFycmF5KGl0ZW1zOiBhbnkpOiBBcnJheTxPYmplY3Q+IHtcbiAgICBpZiAoIWl0ZW1zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgaXRlbXMgPSBfLmtleXMoaXRlbXMpO1xuICAgIH1cbiAgICBpZiAoaXRlbXMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjb252ZXJ0ZWRBcnJheTogQXJyYXk8T2JqZWN0PiA9IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QgJiYgaXRlbS52YWx1ZSAmJiBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgY29udmVydGVkQXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb252ZXJ0ZWRBcnJheS5wdXNoKHtsYWJlbDogdGhpcy51cHBlcmNhc2UoaXRlbSksIHZhbHVlOiBpdGVtfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRlZEFycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSB1cHBlcmNhc2UoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBpdGVtLnNsaWNlKDEpO1xuICB9XG5cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGVhY2ggY29uZGl0aW9uIGdyb3VwcyBjb25kaXRpb25zIGhhdmUgYmVlbiBtZXQuXG4gICAqIEBwYXJhbSBjb25kaXRpb25Hcm91cHMgVGhlIGFycmF5IG9mIGNvbmRpdGlvbiBncm91cHMuXG4gICAqIEBwYXJhbSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gVGhlIGN1cnJlbnQgZm9ybSBkYXRhLCBjYW4gYmUgbnVsbC91bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiBzdGF0aW5nIGlmIHRoZSBjb25kaXRpb24gZ3JvdXBzIGNvbmRpdGlvbnMgaGFzIGJlZW4gbWV0LlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBtZWV0c0NvbmRpdGlvbkdyb3VwcyhcbiAgICBjb25kaXRpb25Hcm91cHM6IEFycmF5PENvbmRpdGlvbkdyb3VwPixcbiAgICBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCB8IG51bGwsXG4gICAgYWRkaXRpb25hbERhdGE/OiBPYmplY3RcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjb25kaXRpb25Hcm91cHMgfHwgY29uZGl0aW9uR3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjb25kaXRpb25Hcm91cHMuZXZlcnkoKHgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLm1lZXRzQ29uZGl0aW9uR3JvdXAoeCwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSkgPT09IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgY29uZGl0aW9uIGdyb3VwcyBjb25kaXRpb25zIGhhdmUgYmVlbiBtZXQuXG4gICAqIEBwYXJhbSBjb25kaXRpb25Hcm91cCBUaGUgY29uZGl0aW9uIGdyb3VwIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtIFRoZSBjdXJyZW50IGZvcm0gZGF0YSwgY2FuIGJlIG51bGwvdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gc3RhdGluZyBpZiB0aGUgY29uZGl0aW9uIGdyb3VwIGNvbmRpdGlvbnMgaGFzIGJlZW4gbWV0LlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBtZWV0c0NvbmRpdGlvbkdyb3VwKFxuICAgIGNvbmRpdGlvbkdyb3VwOiBDb25kaXRpb25Hcm91cCxcbiAgICBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCB8IG51bGwsXG4gICAgYWRkaXRpb25hbERhdGE/OiBPYmplY3RcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjb25kaXRpb25Hcm91cC5jb25kaXRpb25zIHx8IGNvbmRpdGlvbkdyb3VwLmNvbmRpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25Hcm91cC5jb25kaXRpb25zKSB7XG4gICAgICByZXN1bHRzLnB1c2godGhpcy5tZWV0c0NvbmRpdGlvbihjb25kaXRpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbmRpdGlvbkdyb3VwLnJlbGF0aW9uc2hpcCkge1xuICAgICAgY2FzZSBDb25kaXRpb25SZWxhdGlvbnNoaXAuRXZlcnk6XG4gICAgICAgIHJldHVybiByZXN1bHRzLmV2ZXJ5KCh4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHggPT09IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBDb25kaXRpb25SZWxhdGlvbnNoaXAuQW55OlxuICAgICAgICByZXR1cm4gISFyZXN1bHRzLmZpbmQoKHgpID0+IHtcbiAgICAgICAgICByZXR1cm4geCA9PT0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgY29uZGl0aW9uIGhhcyBiZWVuIG1ldC5cbiAgICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtIFRoZSBjdXJyZW50IGZvcm0gZGF0YSwgY2FuIGJlIG51bGwvdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gc3RhdGluZyBpZiB0aGUgY29uZGl0aW9uIGdyb3VwIGNvbmRpdGlvbnMgaGFzIGJlZW4gbWV0LlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBtZWV0c0NvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXAsIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdjFzOiBBcnJheTxhbnk+ID0gdGhpcy5nZXRWYWx1ZXNGb3JBcnJheShjb25kaXRpb24udjFzLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhKTtcbiAgICBjb25zdCB2MnM6IEFycmF5PGFueT4gPSB0aGlzLmdldFZhbHVlc0ZvckFycmF5KGNvbmRpdGlvbi52MnMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEpO1xuXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgc3dpdGNoIChjb25kaXRpb24udHlwZSkge1xuICAgICAgY2FzZSBDb25kaXRpb25UeXBlLkV4Y2x1ZGVzOlxuICAgICAgICByZXN1bHQgPSAgdjFzLmZpbHRlcigodjEpID0+IHtcbiAgICAgICAgICByZXR1cm4gdjJzLmluZGV4T2YodjEpID4gLTE7XG4gICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbmRpdGlvblR5cGUuSW5jbHVkZXM6XG4gICAgICAgIHJlc3VsdCA9IHYxcy5maWx0ZXIoKHYxKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHYycy5pbmRleE9mKHYxKSA+IC0xO1xuICAgICAgICB9KS5sZW5ndGggIT09IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZm9yIChsZXQgdjIgb2YgdjJzKSB7XG4gICAgICAgICAgZm9yIChsZXQgdjEgb2YgdjFzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi50eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgQ29uZGl0aW9uVHlwZS5FcXVhbFRvOlxuICAgICAgICAgICAgICAgIHYxID0gdGhpcy5nZXRTdHJpbmdGb3JWYWx1ZSh2MSk7XG4gICAgICAgICAgICAgICAgdjIgPSB0aGlzLmdldFN0cmluZ0ZvclZhbHVlKHYyKTtcbiAgICAgICAgICAgICAgICBpZiAodjEgPT09IHYyKSB7IHJlc3VsdCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBDb25kaXRpb25UeXBlLk5vdEVxdWFsVG86XG4gICAgICAgICAgICAgICAgdjEgPSB0aGlzLmdldFN0cmluZ0ZvclZhbHVlKHYxKTtcbiAgICAgICAgICAgICAgICB2MiA9IHRoaXMuZ2V0U3RyaW5nRm9yVmFsdWUodjIpO1xuICAgICAgICAgICAgICAgIGlmICh2MSAhPT0gdjIpIHsgcmVzdWx0ID0gdHJ1ZTsgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIENvbmRpdGlvblR5cGUuR3JlYXRlclRoYW46XG4gICAgICAgICAgICAgICAgdjEgPSBwYXJzZUZsb2F0KHYxKTtcbiAgICAgICAgICAgICAgICB2MiA9IHBhcnNlRmxvYXQodjIpO1xuICAgICAgICAgICAgICAgIGlmICh2MSA+PSB2MikgeyByZXN1bHQgPSB0cnVlOyB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQ29uZGl0aW9uVHlwZS5MZXNzVGhhbjpcbiAgICAgICAgICAgICAgICB2MSA9IHBhcnNlRmxvYXQodjEpO1xuICAgICAgICAgICAgICAgIHYyID0gcGFyc2VGbG9hdCh2Mik7XG4gICAgICAgICAgICAgICAgaWYgKHYxIDw9IHYyKSB7IHJlc3VsdCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdHJpbmdGb3JWYWx1ZSh2YWx1ZSkge1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHZhbHVlcyBmb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICogQHBhcmFtIHBhdGhzIFRoZSBhcnJheSBvZiBzdHJpbmdzIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtIFRoZSBjdXJyZW50IGZvcm0gZGF0YSwgY2FuIGJlIG51bGwvdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzL3ZhbHVlc1xuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNGb3JBcnJheShwYXRoczogQXJyYXk8c3RyaW5nPiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXAsIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0KTogQXJyYXk8YW55PiB7XG4gICAgaWYgKGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlRm9yU3RyaW5nKHBhdGgsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEpO1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGF0aHM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBjdXJyZW50IHZhbHVlIGZvciBhIHN0cmluZy5cbiAgICogQHBhcmFtIHBhdGggVGhlIHN0cmluZyB2YWx1ZSB0byBjaGVjay5cbiAgICogQHBhcmFtIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSBUaGUgY3VycmVudCBmb3JtIGRhdGEsIGNhbiBiZSBudWxsL3VuZGVmaW5lZC5cbiAgICogQHJldHVybnMgQSBzdHJpbmcvdmFsdWUuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdldFZhbHVlRm9yU3RyaW5nKHBhdGg6IHN0cmluZywgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXAsIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0KSB7XG4gICAgaWYgKGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSkge1xuICAgICAgaWYgKCFhZGRpdGlvbmFsRGF0YSkge1xuICAgICAgICBhZGRpdGlvbmFsRGF0YSA9IHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgY29udHJvbCA9IGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXQocGF0aC50b1N0cmluZygpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbCA/IGNvbnRyb2wudmFsdWUgOiB0aGlzLmNvbnZlcnRTdHJpbmdUb1ZhbHVlKHBhdGgpO1xuICAgICAgcmV0dXJuIF8uZ2V0KGFkZGl0aW9uYWxEYXRhLCBwYXRoLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRTdHJpbmdUb1ZhbHVlKHBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIHZhbHVlLlxuICAgKiBFZy4gdHJ1ZS9mYWxzZS5cbiAgICogQHBhcmFtIHBhdGggVGhlIHN0cmluZyB2YWx1ZSB0byBjaGVjayBmb3IgY29udmVyc2lvbjtcbiAgICogQHJldHVybnMgRWl0aGVyIGEgc3RyaW5nIG9yIHRoZSBjb252ZXJ0ZWQgdmFsdWUuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRTdHJpbmdUb1ZhbHVlKHBhdGg6IHN0cmluZykge1xuICAgIHN3aXRjaCAocGF0aCkge1xuICAgICAgY2FzZSAndHJ1ZSc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnZmFsc2UnOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
599
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2xvd2dyZWVuL2dnLXF1ZXN0aW9ubmFpcmUtdjIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7QUFJNUI7SUFLRTtJQUFnQixDQUFDO0lBRWpCOzs7Ozs7T0FNRzs7Ozs7Ozs7O0lBQ0ksc0NBQWM7Ozs7Ozs7O0lBQXJCLFVBQXNCLFFBQXdCLEVBQUUsd0JBQTBDLEVBQUUsY0FBdUI7OztZQUMzRyxnQkFBZ0IsR0FBRyxFQUFFOztZQUMzQixLQUFzQixJQUFBLGFBQUEsaUJBQUEsUUFBUSxDQUFBLGtDQUFBLHdEQUFFO2dCQUEzQixJQUFNLE9BQU8scUJBQUE7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLENBQUMsRUFBRTtvQkFDakcsU0FBUztpQkFDVjs7b0JBRUssaUJBQWlCLEdBQUcsRUFBRTs7b0JBQzVCLEtBQXVCLElBQUEsb0JBQUEsaUJBQUEsT0FBTyxDQUFDLFNBQVMsQ0FBQSxDQUFBLGdCQUFBLDRCQUFFO3dCQUFyQyxJQUFNLFFBQVEsV0FBQTt3QkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxFQUFFOzRCQUNsRyxTQUFTO3lCQUNWO3dCQUVELHdGQUF3Rjt3QkFDeEYsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFL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Y3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWN0aW9uJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb25kaXRpb24nO1xuaW1wb3J0IHsgQ29uZGl0aW9uR3JvdXAgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmRpdGlvbi1ncm91cCc7XG5pbXBvcnQgeyBDb25kaXRpb25UeXBlIH0gZnJvbSAnLi4vZW51bXMvY29uZGl0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBDb25kaXRpb25SZWxhdGlvbnNoaXAgfSBmcm9tICcuLi9lbnVtcy9jb25kaXRpb24tcmVsYXRpb25zaGlwLmVudW0nO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9uJztcbmltcG9ydCB7IFJlcGVhdGVyUXVlc3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcGVhdGVyLXF1ZXN0aW9uJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICAvKipcbiAgICogRmlsdGVycyBhbiBhcnJheSBvZiBzZWN0aW9ucyBiYXNlZCBvbiB0aGVpciBjb25kaXRpb24gZ3JvdXBzLlxuICAgKiBAcGFyYW0gc2VjdGlvbnMgVGhlIGFycmF5IG9mIHNlY3Rpb25zIHRvIGZpbHRlci5cbiAgICogQHBhcmFtIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSBUaGUgY3VycmVudCBmb3JtIGRhdGEsIGNhbiBiZSBudWxsL3VuZGVmaW5lZC5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZmlsdGVyZWQgc2VjdGlvbnMgd2l0aCB0aGVpciBmaWx0ZXJlZCBxdWVzdGlvbnMuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyU2VjdGlvbnMoc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCB8IG51bGwsIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0KTogQXJyYXk8U2VjdGlvbj4ge1xuICAgIGNvbnN0IGZpbHRlcmVkU2VjdGlvbnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgIGlmICghdGhpcy5tZWV0c0NvbmRpdGlvbkdyb3VwcyhzZWN0aW9uLmNvbmRpdGlvbkdyb3VwcywgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkUXVlc3Rpb25zID0gW107XG4gICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy5tZWV0c0NvbmRpdGlvbkdyb3VwcyhxdWVzdGlvbi5jb25kaXRpb25Hcm91cHMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBpdCdzIGEgcmVwZWF0ZXIgd2UgbmVlZCB0byBkbyBhIGxvdCBvZiBleHRyYSBmaWx0ZXJpbmcgZHVlIHRvIHBlciBpdGVtIGNvbmRpdGlvbnMuXG4gICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSAncmVwZWF0ZXInKSB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KFtzZWN0aW9uLm5hbWUsIHF1ZXN0aW9uLm5hbWVdKSBhcyBGb3JtQXJyYXk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcGVhdGVySXRlbSBvZiBpdGVtcy5jb250cm9scykge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSZXBlYXRlckl0ZW1RdWVzdGlvbnM6IEFycmF5PFJlcGVhdGVyUXVlc3Rpb24+ID0gW107XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaWx0ZXJpbmcgcmVwZWF0ZXIgaXRlbSBxdWVzdGlvbnMnKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXBlYXRlclF1ZXN0aW9uIG9mIHF1ZXN0aW9uLnJlcGVhdGVyUXVlc3Rpb25zKSB7XG5cbiAgICAgICAgICAgICAgY29uc3QgbWVldHNDb25kaXRpb25zID0gdGhpcy5tZWV0c0NvbmRpdGlvbkdyb3VwcyhcbiAgICAgICAgICAgICAgICByZXBlYXRlclF1ZXN0aW9uLmNvbmRpdGlvbkdyb3VwcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sXG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbERhdGEsXG4gICAgICAgICAgICAgICAgcmVwZWF0ZXJJdGVtIGFzIEZvcm1Hcm91cFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGlmIChtZWV0c0NvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXBlYXRlclF1ZXN0aW9uLnNlbGVjdE9wdGlvbnMgPSB0aGlzLmdldEZldGNoT3B0aW9uc0ZvclF1ZXN0aW9uKFxuICAgICAgICAgICAgICAgICAgcmVwZWF0ZXJRdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxEYXRhLFxuICAgICAgICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLFxuICAgICAgICAgICAgICAgICAgcmVwZWF0ZXJJdGVtIGFzIEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlsdGVyZWRSZXBlYXRlckl0ZW1RdWVzdGlvbnMucHVzaChyZXBlYXRlclF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmNvbnRyb2xzLmluZGV4T2YocmVwZWF0ZXJJdGVtKTtcblxuICAgICAgICAgICAgaWYgKCFxdWVzdGlvbi5maWx0ZXJlZFJlcGVhdGVyUXVlc3Rpb25zKSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uLmZpbHRlcmVkUmVwZWF0ZXJRdWVzdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcXVlc3Rpb24uZmlsdGVyZWRSZXBlYXRlclF1ZXN0aW9uc1tpbmRleF0gPSBmaWx0ZXJlZFJlcGVhdGVySXRlbVF1ZXN0aW9ucztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBxdWVzdGlvbi5zZWxlY3RPcHRpb25zID0gdGhpcy5nZXRGZXRjaE9wdGlvbnNGb3JRdWVzdGlvbihxdWVzdGlvbiwgYWRkaXRpb25hbERhdGEsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG5cbiAgICAgICAgZmlsdGVyZWRRdWVzdGlvbnMucHVzaChxdWVzdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWx0ZXJlZFF1ZXN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHNlY3Rpb24ucXVlc3Rpb25zID0gZmlsdGVyZWRRdWVzdGlvbnM7XG4gICAgICBmaWx0ZXJlZFNlY3Rpb25zLnB1c2goc2VjdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlcmVkU2VjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGdldEZldGNoT3B0aW9uc0ZvclF1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbiB8IFJlcGVhdGVyUXVlc3Rpb24sXG4gICAgYWRkaXRpb25hbERhdGEsXG4gICAgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLFxuICAgIHJlcGVhdGVySXRlbT86IEZvcm1Hcm91cFxuICApIHtcblxuICAgIGlmICghcXVlc3Rpb24uZmV0Y2hQYXRoKSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24uc2VsZWN0T3B0aW9ucztcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnR2V0dGluZyBmZXRjaCBkYXRhIGZvcicsIHF1ZXN0aW9uLm5hbWUpO1xuXG4gICAgbGV0IG9wdGlvbnMgPSBhZGRpdGlvbmFsRGF0YVtxdWVzdGlvbi5mZXRjaFBhdGhdO1xuICAgIGlmIChxdWVzdGlvbi5mZXRjaFNlbGVjdG9ycyAmJiBxdWVzdGlvbi5mZXRjaFNlbGVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhbHVlc0ZvckFycmF5KHF1ZXN0aW9uLmZldGNoU2VsZWN0b3JzLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhLCByZXBlYXRlckl0ZW0pO1xuICAgICAgb3B0aW9ucyA9IF8uZ2V0KGFkZGl0aW9uYWxEYXRhW3F1ZXN0aW9uLmZldGNoUGF0aF0sIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IHRoaXMuZ2V0RmluYWxGZXRjaEFycmF5KG9wdGlvbnMpO1xuXG4gICAgaWYgKCFxdWVzdGlvbi5zZWxlY3RPcHRpb25zKSB7XG4gICAgICBxdWVzdGlvbi5zZWxlY3RPcHRpb25zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXN0aW9uLnNlbGVjdE9wdGlvbnMuY29uY2F0KG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaW5hbEZldGNoQXJyYXkoaXRlbXM6IGFueSk6IEFycmF5PE9iamVjdD4ge1xuICAgIGlmICghaXRlbXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICBpdGVtcyA9IF8ua2V5cyhpdGVtcyk7XG4gICAgfVxuICAgIGlmIChpdGVtcy5sZW5ndGggPD0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbnZlcnRlZEFycmF5OiBBcnJheTxPYmplY3Q+ID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE9iamVjdCAmJiBpdGVtLnZhbHVlICYmIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRBcnJheS5wdXNoKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnZlcnRlZEFycmF5LnB1c2goe2xhYmVsOiB0aGlzLnVwcGVyY2FzZShpdGVtKSwgdmFsdWU6IGl0ZW19KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29udmVydGVkQXJyYXk7XG4gIH1cblxuICBwcml2YXRlIHVwcGVyY2FzZShpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gaXRlbS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGl0ZW0uc2xpY2UoMSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZWFjaCBjb25kaXRpb24gZ3JvdXBzIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIG1ldC5cbiAgICogQHBhcmFtIGNvbmRpdGlvbkdyb3VwcyBUaGUgYXJyYXkgb2YgY29uZGl0aW9uIGdyb3Vwcy5cbiAgICogQHBhcmFtIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSBUaGUgY3VycmVudCBmb3JtIGRhdGEsIGNhbiBiZSBudWxsL3VuZGVmaW5lZC5cbiAgICogQHJldHVybnMgQSBib29sZWFuIHN0YXRpbmcgaWYgdGhlIGNvbmRpdGlvbiBncm91cHMgY29uZGl0aW9ucyBoYXMgYmVlbiBtZXQuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIG1lZXRzQ29uZGl0aW9uR3JvdXBzKFxuICAgIGNvbmRpdGlvbkdyb3VwczogQXJyYXk8Q29uZGl0aW9uR3JvdXA+LFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwIHwgbnVsbCxcbiAgICBhZGRpdGlvbmFsRGF0YT86IE9iamVjdCxcbiAgICByZXBlYXRlckl0ZW0/OiBGb3JtR3JvdXBcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjb25kaXRpb25Hcm91cHMgfHwgY29uZGl0aW9uR3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjb25kaXRpb25Hcm91cHMuZXZlcnkoKHgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLm1lZXRzQ29uZGl0aW9uR3JvdXAoeCwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSwgcmVwZWF0ZXJJdGVtKSA9PT0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBjb25kaXRpb24gZ3JvdXBzIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIG1ldC5cbiAgICogQHBhcmFtIGNvbmRpdGlvbkdyb3VwIFRoZSBjb25kaXRpb24gZ3JvdXAgdG8gY2hlY2suXG4gICAqIEBwYXJhbSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gVGhlIGN1cnJlbnQgZm9ybSBkYXRhLCBjYW4gYmUgbnVsbC91bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiBzdGF0aW5nIGlmIHRoZSBjb25kaXRpb24gZ3JvdXAgY29uZGl0aW9ucyBoYXMgYmVlbiBtZXQuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIG1lZXRzQ29uZGl0aW9uR3JvdXAoXG4gICAgY29uZGl0aW9uR3JvdXA6IENvbmRpdGlvbkdyb3VwLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwIHwgbnVsbCxcbiAgICBhZGRpdGlvbmFsRGF0YT86IE9iamVjdCxcbiAgICByZXBlYXRlckl0ZW0/OiBGb3JtR3JvdXBcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjb25kaXRpb25Hcm91cC5jb25kaXRpb25zIHx8IGNvbmRpdGlvbkdyb3VwLmNvbmRpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25Hcm91cC5jb25kaXRpb25zKSB7XG4gICAgICByZXN1bHRzLnB1c2godGhpcy5tZWV0c0NvbmRpdGlvbihjb25kaXRpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEsIHJlcGVhdGVySXRlbSkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY29uZGl0aW9uR3JvdXAucmVsYXRpb25zaGlwKSB7XG4gICAgICBjYXNlIENvbmRpdGlvblJlbGF0aW9uc2hpcC5FdmVyeTpcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHgpID0+IHtcbiAgICAgICAgICByZXR1cm4geCA9PT0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIENvbmRpdGlvblJlbGF0aW9uc2hpcC5Bbnk6XG4gICAgICAgIHJldHVybiAhIXJlc3VsdHMuZmluZCgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB4ID09PSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBjb25kaXRpb24gaGFzIGJlZW4gbWV0LlxuICAgKiBAcGFyYW0gY29uZGl0aW9uIFRoZSBjb25kaXRpb24gdG8gY2hlY2suXG4gICAqIEBwYXJhbSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gVGhlIGN1cnJlbnQgZm9ybSBkYXRhLCBjYW4gYmUgbnVsbC91bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiBzdGF0aW5nIGlmIHRoZSBjb25kaXRpb24gZ3JvdXAgY29uZGl0aW9ucyBoYXMgYmVlbiBtZXQuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIG1lZXRzQ29uZGl0aW9uKFxuICAgIGNvbmRpdGlvbjogQ29uZGl0aW9uLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHJlcGVhdGVySXRlbT86IEZvcm1Hcm91cFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCB2MXM6IEFycmF5PGFueT4gPSB0aGlzLmdldFZhbHVlc0ZvckFycmF5KGNvbmRpdGlvbi52MXMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEsIHJlcGVhdGVySXRlbSk7XG4gICAgY29uc3QgdjJzOiBBcnJheTxhbnk+ID0gdGhpcy5nZXRWYWx1ZXNGb3JBcnJheShjb25kaXRpb24udjJzLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhLCByZXBlYXRlckl0ZW0pO1xuXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgc3dpdGNoIChjb25kaXRpb24udHlwZSkge1xuICAgICAgY2FzZSBDb25kaXRpb25UeXBlLkV4Y2x1ZGVzOlxuICAgICAgICByZXN1bHQgPSAgdjFzLmZpbHRlcigodjEpID0+IHtcbiAgICAgICAgICByZXR1cm4gdjJzLmluZGV4T2YodjEpID4gLTE7XG4gICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbmRpdGlvblR5cGUuSW5jbHVkZXM6XG4gICAgICAgIHJlc3VsdCA9IHYxcy5maWx0ZXIoKHYxKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHYycy5pbmRleE9mKHYxKSA+IC0xO1xuICAgICAgICB9KS5sZW5ndGggIT09IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZm9yIChsZXQgdjIgb2YgdjJzKSB7XG4gICAgICAgICAgZm9yIChsZXQgdjEgb2YgdjFzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi50eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgQ29uZGl0aW9uVHlwZS5FcXVhbFRvOlxuICAgICAgICAgICAgICAgIHYxID0gdGhpcy5nZXRTdHJpbmdGb3JWYWx1ZSh2MSk7XG4gICAgICAgICAgICAgICAgdjIgPSB0aGlzLmdldFN0cmluZ0ZvclZhbHVlKHYyKTtcbiAgICAgICAgICAgICAgICBpZiAodjEgPT09IHYyKSB7IHJlc3VsdCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBDb25kaXRpb25UeXBlLk5vdEVxdWFsVG86XG4gICAgICAgICAgICAgICAgdjEgPSB0aGlzLmdldFN0cmluZ0ZvclZhbHVlKHYxKTtcbiAgICAgICAgICAgICAgICB2MiA9IHRoaXMuZ2V0U3RyaW5nRm9yVmFsdWUodjIpO1xuICAgICAgICAgICAgICAgIGlmICh2MSAhPT0gdjIpIHsgcmVzdWx0ID0gdHJ1ZTsgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIENvbmRpdGlvblR5cGUuR3JlYXRlclRoYW46XG4gICAgICAgICAgICAgICAgdjEgPSBwYXJzZUZsb2F0KHYxKTtcbiAgICAgICAgICAgICAgICB2MiA9IHBhcnNlRmxvYXQodjIpO1xuICAgICAgICAgICAgICAgIGlmICh2MSA+PSB2MikgeyByZXN1bHQgPSB0cnVlOyB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQ29uZGl0aW9uVHlwZS5MZXNzVGhhbjpcbiAgICAgICAgICAgICAgICB2MSA9IHBhcnNlRmxvYXQodjEpO1xuICAgICAgICAgICAgICAgIHYyID0gcGFyc2VGbG9hdCh2Mik7XG4gICAgICAgICAgICAgICAgaWYgKHYxIDw9IHYyKSB7IHJlc3VsdCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdHJpbmdGb3JWYWx1ZSh2YWx1ZSkge1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHZhbHVlcyBmb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICogQHBhcmFtIHBhdGhzIFRoZSBhcnJheSBvZiBzdHJpbmdzIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtIFRoZSBjdXJyZW50IGZvcm0gZGF0YSwgY2FuIGJlIG51bGwvdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzL3ZhbHVlc1xuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNGb3JBcnJheShcbiAgICBwYXRoczogQXJyYXk8c3RyaW5nPixcbiAgICBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCxcbiAgICBhZGRpdGlvbmFsRGF0YT86IE9iamVjdCxcbiAgICByZXBlYXRlckl0ZW0/OiBGb3JtR3JvdXBcbiAgKTogQXJyYXk8YW55PiB7XG4gICAgaWYgKGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlRm9yU3RyaW5nKHBhdGgsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEsIHJlcGVhdGVySXRlbSk7XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYXRocztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGN1cnJlbnQgdmFsdWUgZm9yIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgc3RyaW5nIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtIFRoZSBjdXJyZW50IGZvcm0gZGF0YSwgY2FuIGJlIG51bGwvdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJucyBBIHN0cmluZy92YWx1ZS5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2V0VmFsdWVGb3JTdHJpbmcoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHJlcGVhdGVySXRlbT86IEZvcm1Hcm91cFxuICApIHtcbiAgICBpZiAoY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtKSB7XG4gICAgICBpZiAoIWFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgIGFkZGl0aW9uYWxEYXRhID0ge307XG4gICAgICB9XG5cbiAgICAgIGxldCBjb250cm9sID0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChwYXRoLnRvU3RyaW5nKCkpO1xuXG4gICAgICBpZiAoKCFjb250cm9sIHx8ICFjb250cm9sLnZhbHVlKSAmJiByZXBlYXRlckl0ZW0pIHtcbiAgICAgICAgY29udHJvbCA9IHJlcGVhdGVySXRlbS5nZXQocGF0aC50b1N0cmluZygpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sID8gY29udHJvbC52YWx1ZSA6IHRoaXMuY29udmVydFN0cmluZ1RvVmFsdWUocGF0aCk7XG4gICAgICByZXR1cm4gXy5nZXQoYWRkaXRpb25hbERhdGEsIHBhdGgsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFN0cmluZ1RvVmFsdWUocGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGEgdmFsdWUuXG4gICAqIEVnLiB0cnVlL2ZhbHNlLlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgc3RyaW5nIHZhbHVlIHRvIGNoZWNrIGZvciBjb252ZXJzaW9uO1xuICAgKiBAcmV0dXJucyBFaXRoZXIgYSBzdHJpbmcgb3IgdGhlIGNvbnZlcnRlZCB2YWx1ZS5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydFN0cmluZ1RvVmFsdWUocGF0aDogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChwYXRoKSB7XG4gICAgICBjYXNlICd0cnVlJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdmYWxzZSc6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -239,25 +239,29 @@ var FormConstructorService = /** @class */ (function () {
|
|
|
239
239
|
* Generates the form template for a repeater question.
|
|
240
240
|
* @author Will Poulson
|
|
241
241
|
* @param {?} question The question. Must be of type repeater or else null is returned.
|
|
242
|
+
* @param {?=} index
|
|
242
243
|
* @return {?} A form group.
|
|
243
244
|
*/
|
|
244
245
|
FormConstructorService.prototype.generateFormsForRepeater = /**
|
|
245
246
|
* Generates the form template for a repeater question.
|
|
246
247
|
* @author Will Poulson
|
|
247
248
|
* @param {?} question The question. Must be of type repeater or else null is returned.
|
|
249
|
+
* @param {?=} index
|
|
248
250
|
* @return {?} A form group.
|
|
249
251
|
*/
|
|
250
|
-
function (question) {
|
|
252
|
+
function (question, index) {
|
|
251
253
|
var e_4, _a;
|
|
252
254
|
if (question.type !== QuestionType.Repeater || question.repeaterQuestions.length === 0) {
|
|
253
255
|
console.log('Question isnt a repeater or has no questions, returning null');
|
|
254
256
|
return null;
|
|
255
257
|
}
|
|
256
258
|
/** @type {?} */
|
|
259
|
+
var repeaterQuestions = index ? question.filteredRepeaterQuestions[index] : question.repeaterQuestions;
|
|
260
|
+
/** @type {?} */
|
|
257
261
|
var repeaterForms = this.fb.group({});
|
|
258
262
|
try {
|
|
259
|
-
for (var
|
|
260
|
-
var repeaterQuestion =
|
|
263
|
+
for (var repeaterQuestions_1 = tslib_1.__values(repeaterQuestions), repeaterQuestions_1_1 = repeaterQuestions_1.next(); !repeaterQuestions_1_1.done; repeaterQuestions_1_1 = repeaterQuestions_1.next()) {
|
|
264
|
+
var repeaterQuestion = repeaterQuestions_1_1.value;
|
|
261
265
|
/** @type {?} */
|
|
262
266
|
var repeaterQuestionControl = this.generateControlForRepeaterQuestion(repeaterQuestion);
|
|
263
267
|
repeaterForms.addControl(repeaterQuestion.name, repeaterQuestionControl);
|
|
@@ -266,7 +270,7 @@ var FormConstructorService = /** @class */ (function () {
|
|
|
266
270
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
267
271
|
finally {
|
|
268
272
|
try {
|
|
269
|
-
if (
|
|
273
|
+
if (repeaterQuestions_1_1 && !repeaterQuestions_1_1.done && (_a = repeaterQuestions_1.return)) _a.call(repeaterQuestions_1);
|
|
270
274
|
}
|
|
271
275
|
finally { if (e_4) throw e_4.error; }
|
|
272
276
|
}
|
|
@@ -416,7 +420,9 @@ var FormConstructorService = /** @class */ (function () {
|
|
|
416
420
|
for (var repeaterArray_1 = (e_8 = void 0, tslib_1.__values(repeaterArray)), repeaterArray_1_1 = repeaterArray_1.next(); !repeaterArray_1_1.done; repeaterArray_1_1 = repeaterArray_1.next()) {
|
|
417
421
|
var repeaterItem = repeaterArray_1_1.value;
|
|
418
422
|
/** @type {?} */
|
|
419
|
-
var
|
|
423
|
+
var index = repeaterArray.indexOf(repeaterItem);
|
|
424
|
+
/** @type {?} */
|
|
425
|
+
var repeaterItemTemplate = this.generateFormsForRepeater(question, index);
|
|
420
426
|
repeaterFormArray.push(repeaterItemTemplate);
|
|
421
427
|
}
|
|
422
428
|
}
|
|
@@ -472,4 +478,4 @@ if (false) {
|
|
|
472
478
|
*/
|
|
473
479
|
FormConstructorService.prototype.filterService;
|
|
474
480
|
}
|
|
475
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb25zdHJ1Y3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdsb3dncmVlbi9nZy1xdWVzdGlvbm5haXJlLXYyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2Zvcm0tY29uc3RydWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBd0QsVUFBVSxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFJMUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFLL0Q7SUFLRSxnQ0FDVSxFQUFlLEVBQ2YsYUFBNEI7UUFENUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ2xDLENBQUM7SUFFTDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7OztJQUNJLDhEQUE2Qjs7Ozs7Ozs7Ozs7SUFBcEMsVUFDRSxhQUE0QixFQUM1QixvQkFBbUMsRUFDbkMsd0JBQW1DLEVBQ25DLGNBQXVCLEVBQ3ZCLFVBQW9COztZQUVkLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUMzQixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLENBQUM7O1lBRS9GLFFBQVEsR0FBRyx3QkFBd0IsSUFBSSxDQUFDLFFBQVEsS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7UUFFekYsSUFBSSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUM7U0FDYjs7WUFFSyxrQkFB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QztnQ0FDcEUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7NkJBQzlDOzs7Ozs7Ozs7cUJBQ0Y7Ozs7Ozs7OzthQUNGOzs7Ozs7Ozs7SUFDSCxDQUFDOztnQkE3TUYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7OztnQkFkUSxXQUFXO2dCQUtYLGFBQWE7OztpQ0FOdEI7Q0EyTkMsQUE5TUQsSUE4TUM7U0EzTVksc0JBQXNCOzs7Ozs7SUFHL0Isb0NBQXVCOzs7OztJQUN2QiwrQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycywgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VjdGlvbic7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb24nO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb25uYWlyZSc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy9xdWVzdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4vZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWxpZGF0b3InO1xuaW1wb3J0IHsgVmFsaWRhdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy92YWxpZGF0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSZXBlYXRlclF1ZXN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBlYXRlci1xdWVzdGlvbic7XG5pbXBvcnQgeyBDaGVja2xpc3RJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVja2xpc3QtaXRlbSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db25zdHJ1Y3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZVxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgZm9ybSBncm91cCBiYXNlZCBvbiB0aGUgcXVlc3Rpb25uYWlyZSBkYXRhLlxuICAgKiBUaGlzIGZvcm0gZ3JvdXAgaGFzIGJlZW4gZmlsdGVyZWQgZG93biBiYXNlZCBvbiB0aGUgY29uZGl0aW9ucyBvZiB0aGUgc2VjdGlvbnMgYW5kIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHF1ZXN0aW9ubmFpcmUgVGhlIHF1ZXN0aW9ubmFpcmUgZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZWQgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUZvcm1zRm9yUXVlc3Rpb25uYWlyZShcbiAgICBxdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHNraXBGaWx0ZXI/OiBib29sZWFuXG4gICk6IHtzZWN0aW9uczogQXJyYXk8U2VjdGlvbj47IGZvcm1zOiBGb3JtR3JvdXB9IHtcbiAgICBjb25zdCBzZWN0aW9ucyA9IHNraXBGaWx0ZXIgP1xuICAgICAgcXVlc3Rpb25uYWlyZS5zZWN0aW9ucyA6XG4gICAgICB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyU2VjdGlvbnMocXVlc3Rpb25uYWlyZS5zZWN0aW9ucywgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSk7XG5cbiAgICBjb25zdCBub0NoYW5nZSA9IGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSAmJiAoc2VjdGlvbnMgPT09IGN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zKTtcblxuICAgIGlmIChub0NoYW5nZSAmJiAhc2tpcEZpbHRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlc3Rpb25uYWlyZUZvcm1zID0gdGhpcy5nZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbnMoc2VjdGlvbnMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgcmV0dXJuIHtzZWN0aW9uczogc2VjdGlvbnMsIGZvcm1zOiBxdWVzdGlvbm5haXJlRm9ybXN9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbnMoc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCkge1xuICAgIGNvbnN0IHF1ZXN0aW9ubmFpcmVGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICBjb25zdCBzZWN0aW9uRm9ybXMgPSB0aGlzLmdlbmVyYXRlRm9ybXNGb3JTZWN0aW9uKHNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgICBxdWVzdGlvbm5haXJlRm9ybXMuYWRkQ29udHJvbChzZWN0aW9uLm5hbWUsIHNlY3Rpb25Gb3Jtcyk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbm5haXJlRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGZvcm0gZ3JvdXAgYmFzZWQgb24gdGhlIHNlY3Rpb24gZGF0YS5cbiAgICogVGhpcyBmb3JtIGdyb3VwIGhhcyBiZWVuIGZpbHRlcmVkIGRvd24gYmFzZWQgb24gdGhlIGNvbmRpdGlvbnMgb2YgdGhlIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHNlY3Rpb24gVGhlIHNlY3Rpb24gZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZXJlZCBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbihzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3Qgc2VjdGlvbkZvcm1zOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zKSB7XG4gICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlLkluZm8pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXN0aW9uQ29udHJvbCA9IHRoaXMuZ2VuZXJhdGVDb250cm9sRm9yUXVlc3Rpb24ocXVlc3Rpb24sIHNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgICBzZWN0aW9uRm9ybXMuYWRkQ29udHJvbChxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbkNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gc2VjdGlvbkZvcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYW4gYXN0cmFjdCBmb3JtIGNvbnRyb2wgYmFzZWQgb24gdGhlIHF1ZXN0aW9uIGRhdGEuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24gZGF0YSB0byBidWlsZCB0aGUgYWJzdHJhY3QgY29udHJvbCBvbi5cbiAgICogQHJldHVybnMgQW4gYWJzdHJhY3QgY29udHJvbC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVDb250cm9sRm9yUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uLCBzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMocXVlc3Rpb24udmFsaWRhdG9ycyk7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcXVlc3Rpb24uZGVmYXVsdFZhbHVlID8gcXVlc3Rpb24uZGVmYXVsdFZhbHVlIDogbnVsbDtcbiAgICBzd2l0Y2ggKHF1ZXN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgUXVlc3Rpb25UeXBlLlJlcGVhdGVyOlxuICAgICAgICBjb25zdCBjdXJyZW50QXJyYXkgPSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gPyAoY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSkgYXMgRm9ybUFycmF5KSA6IGZhbHNlO1xuICAgICAgICByZXR1cm4gY3VycmVudEFycmF5ID8gY3VycmVudEFycmF5IDogdGhpcy5mYi5hcnJheShbXSwgY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICBjYXNlIFF1ZXN0aW9uVHlwZS5DaGVja2xpc3Q6XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlR3JvdXBGb3JDaGVja2xpc3QocXVlc3Rpb24sIGNvbnZlcnRlZFZhbGlkYXRvcnMpO1xuICAgICAgY2FzZSBRdWVzdGlvblR5cGUuU2xpZGVyOlxuICAgICAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKGRlZmF1bHRWYWx1ZSwgeyB2YWxpZGF0b3JzOiBjb252ZXJ0ZWRWYWxpZGF0b3JzIH0pOyAvLyBSZW1vdmUgdXBkYXRlIG9uIGJsdXIgZm9yIHNsaWRlcnMuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKGRlZmF1bHRWYWx1ZSwgeyB2YWxpZGF0b3JzOiBjb252ZXJ0ZWRWYWxpZGF0b3JzLCB1cGRhdGVPbjogJ2JsdXInIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGZvcm0gZ3JvdXAgZm9yIGEgY2hlY2tsaXN0IHF1ZXN0aW9uLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gVGhlIHF1ZXN0aW9uLiBNdXN0IGJlIG9mIHR5cGUgY2hlY2tsaXN0IG9yIGVsc2UgbnVsbCBpcyByZXR1cm5lZC5cbiAgICogQHJldHVybnMgQSBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUdyb3VwRm9yQ2hlY2tsaXN0KHF1ZXN0aW9uOiBRdWVzdGlvbiwgY29udmVydGVkVmFsaWRhdG9ycykge1xuICAgIGlmIChxdWVzdGlvbi50eXBlICE9PSBRdWVzdGlvblR5cGUuQ2hlY2tsaXN0IHx8IHF1ZXN0aW9uLmNoZWNrbGlzdEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tsaXN0Rm9ybXM6IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgIGZvciAoY29uc3QgY2hlY2tsaXN0SXRlbSBvZiBxdWVzdGlvbi5jaGVja2xpc3RJdGVtcykge1xuICAgICAgY29uc3QgY2hlY2tsaXN0SXRlbUNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2wobnVsbCwgY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICBjaGVja2xpc3RGb3Jtcy5hZGRDb250cm9sKGNoZWNrbGlzdEl0ZW0ubmFtZSwgY2hlY2tsaXN0SXRlbUNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tsaXN0Rm9ybXM7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGZvcm0gdGVtcGxhdGUgZm9yIGEgcmVwZWF0ZXIgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24uIE11c3QgYmUgb2YgdHlwZSByZXBlYXRlciBvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIEEgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUZvcm1zRm9yUmVwZWF0ZXIocXVlc3Rpb246IFF1ZXN0aW9uKTogRm9ybUdyb3VwIHtcbiAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyIHx8IHF1ZXN0aW9uLnJlcGVhdGVyUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coJ1F1ZXN0aW9uIGlzbnQgYSByZXBlYXRlciBvciBoYXMgbm8gcXVlc3Rpb25zLCByZXR1cm5pbmcgbnVsbCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwZWF0ZXJGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCByZXBlYXRlclF1ZXN0aW9uIG9mIHF1ZXN0aW9uLnJlcGVhdGVyUXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCByZXBlYXRlclF1ZXN0aW9uQ29udHJvbCA9IHRoaXMuZ2VuZXJhdGVDb250cm9sRm9yUmVwZWF0ZXJRdWVzdGlvbihyZXBlYXRlclF1ZXN0aW9uKTtcbiAgICAgIHJlcGVhdGVyRm9ybXMuYWRkQ29udHJvbChyZXBlYXRlclF1ZXN0aW9uLm5hbWUsIHJlcGVhdGVyUXVlc3Rpb25Db250cm9sKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcGVhdGVyRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgY29udHJvbCBmb3IgYSByZXBlYXRlcnMgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSByZXBlYXRlclF1ZXN0aW9uIEEgcmVwZWF0ZXIgcXVlc3Rpb24uXG4gICAqIEByZXR1cm5zIEFuIGFic3RyYWN0IGNvbnRyb2wuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlQ29udHJvbEZvclJlcGVhdGVyUXVlc3Rpb24ocmVwZWF0ZXJRdWVzdGlvbjogUmVwZWF0ZXJRdWVzdGlvbik6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMocmVwZWF0ZXJRdWVzdGlvbi52YWxpZGF0b3JzKTtcbiAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKG51bGwsIHsgdmFsaWRhdG9yczogY29udmVydGVkVmFsaWRhdG9ycywgdXBkYXRlT246ICdibHVyJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiB2YWxpZGF0b3JzIGludG8gZm9ybSB2YWxpZGF0b3JzLlxuICAgKiBAcGFyYW0gdmFsaWRhdG9ycyBUaGUgdW5jb3ZlcnRlZCBhcnJheSBvZiB2YWxpZGF0b3JzLlxuICAgKiBAcmV0dXJucyBBIGNvbnZlcmVkIGFycmF5IG9mIGZvcm0gdmFsaWRhdG9ycy5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydFZhbGlkYXRvcnModmFsaWRhdG9yczogQXJyYXk8VmFsaWRhdG9yPik6IEFycmF5PFZhbGlkYXRvckZuPiB7XG4gICAgaWYgKCF2YWxpZGF0b3JzIHx8IHZhbGlkYXRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xuICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvciA9IHRoaXMuY29udmVydFZhbGlkYXRvcih2YWxpZGF0b3IpO1xuICAgICAgaWYgKGNvbnZlcnRlZFZhbGlkYXRvcikge1xuICAgICAgICBjb252ZXJ0ZWRWYWxpZGF0b3JzLnB1c2goY29udmVydGVkVmFsaWRhdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRlZFZhbGlkYXRvcnM7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzaW5nbGUgdmFsaWRhdG9yIGludG8gYSBmb3JtIHZhbGlkYXRvci5cbiAgICogQHBhcmFtIHZhbGlkYXRvciBUaGUgdW5jb252ZXJ0ZWQgdmFsaWRhdG9yLlxuICAgKiBAcmV0dXJucyBBIGNvbnZlcnRlZCBmb3JtIHZhbGlkYXRvci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydFZhbGlkYXRvcih2YWxpZGF0b3I6IFZhbGlkYXRvcik6IFZhbGlkYXRvckZuIHwgbnVsbCB7XG4gICAgc3dpdGNoICh2YWxpZGF0b3IudHlwZSkge1xuICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZS5SZXF1aXJlZDpcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucmVxdWlyZWQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZm9ybXMgZm9yIHJlcGVhdGVycyBmcm9tIHNhdmVkIHN0YXRlLlxuICAgKiBAcGFyYW0gc2F2ZWRTdGF0ZSBUaGUgc2F2ZWQgc3RhdGUgdG8gbG9hZC5cbiAgICogQHBhcmFtIHNlY3Rpb25zIFRoZSBzZWN0aW9ucyBhbHJlYWR5IGdlbmVyYXRlZCBieSB0aGUgZm9ybSBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RSZXBlYXRlckZyb21zRnJvbVN0YXRlKHNhdmVkU3RhdGU6IGFueSwgc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCkge1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBzZWN0aW9uLnF1ZXN0aW9ucykge1xuICAgICAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBlYXRlckFycmF5ID0gc2F2ZWRTdGF0ZVtzZWN0aW9uLm5hbWVdW3F1ZXN0aW9uLm5hbWVdO1xuICAgICAgICBpZiAoIXJlcGVhdGVyQXJyYXkgfHwgcmVwZWF0ZXJBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcGVhdGVyRm9ybUFycmF5ID0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSkgYXMgRm9ybUFycmF5O1xuXG4gICAgICAgIGlmIChyZXBlYXRlckZvcm1BcnJheS5jb250cm9scy5sZW5ndGggPT09IHJlcGVhdGVyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3IgZWFjaCBpdGVtIHRoYXQgdXNlZCB0byBiZSB0aGVyZSBwdXNoIGEgbmV3IGVtcHR5IHRlbXBsYXRlIHRoZXJlIHRvIGJlIHBvcHVsYXRlZC5cbiAgICAgICAgZm9yIChjb25zdCByZXBlYXRlckl0ZW0gb2YgcmVwZWF0ZXJBcnJheSkge1xuICAgICAgICAgIGNvbnN0IHJlcGVhdGVySXRlbVRlbXBsYXRlID0gdGhpcy5nZW5lcmF0ZUZvcm1zRm9yUmVwZWF0ZXIocXVlc3Rpb24pO1xuICAgICAgICAgIHJlcGVhdGVyRm9ybUFycmF5LnB1c2gocmVwZWF0ZXJJdGVtVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
481
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb25zdHJ1Y3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdsb3dncmVlbi9nZy1xdWVzdGlvbm5haXJlLXYyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2Zvcm0tY29uc3RydWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBd0QsVUFBVSxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFJMUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFLL0Q7SUFLRSxnQ0FDVSxFQUFlLEVBQ2YsYUFBNEI7UUFENUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ2xDLENBQUM7SUFFTDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7OztJQUNJLDhEQUE2Qjs7Ozs7Ozs7Ozs7SUFBcEMsVUFDRSxhQUE0QixFQUM1QixvQkFBbUMsRUFDbkMsd0JBQW1DLEVBQ25DLGNBQXVCLEVBQ3ZCLFVBQW9COztZQUVkLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUMzQixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLENBQUM7O1lBRS9GLFFBQVEsR0FBRyx3QkFBd0IsSUFBSSxDQUFDLFFBQVEsS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7UUFFekYsSUFBSSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUM7U0FDYjs7WUFFSyxrQkFB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QSxpQkFBQSxhQUFhLENBQUEsQ0FBQSw0Q0FBQSx1RUFBRTtnQ0FBckMsSUFBTSxZQUFZLDBCQUFBOztvQ0FDZixLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7O29DQUMzQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztnQ0FDM0UsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7NkJBQzlDOzs7Ozs7Ozs7cUJBQ0Y7Ozs7Ozs7OzthQUNGOzs7Ozs7Ozs7SUFDSCxDQUFDOztnQkFoTkYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7OztnQkFkUSxXQUFXO2dCQUtYLGFBQWE7OztpQ0FOdEI7Q0E4TkMsQUFqTkQsSUFpTkM7U0E5TVksc0JBQXNCOzs7Ozs7SUFHL0Isb0NBQXVCOzs7OztJQUN2QiwrQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycywgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VjdGlvbic7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb24nO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb25uYWlyZSc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy9xdWVzdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4vZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWxpZGF0b3InO1xuaW1wb3J0IHsgVmFsaWRhdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy92YWxpZGF0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSZXBlYXRlclF1ZXN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBlYXRlci1xdWVzdGlvbic7XG5pbXBvcnQgeyBDaGVja2xpc3RJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVja2xpc3QtaXRlbSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db25zdHJ1Y3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZVxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgZm9ybSBncm91cCBiYXNlZCBvbiB0aGUgcXVlc3Rpb25uYWlyZSBkYXRhLlxuICAgKiBUaGlzIGZvcm0gZ3JvdXAgaGFzIGJlZW4gZmlsdGVyZWQgZG93biBiYXNlZCBvbiB0aGUgY29uZGl0aW9ucyBvZiB0aGUgc2VjdGlvbnMgYW5kIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHF1ZXN0aW9ubmFpcmUgVGhlIHF1ZXN0aW9ubmFpcmUgZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZWQgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUZvcm1zRm9yUXVlc3Rpb25uYWlyZShcbiAgICBxdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHNraXBGaWx0ZXI/OiBib29sZWFuXG4gICk6IHtzZWN0aW9uczogQXJyYXk8U2VjdGlvbj47IGZvcm1zOiBGb3JtR3JvdXB9IHtcbiAgICBjb25zdCBzZWN0aW9ucyA9IHNraXBGaWx0ZXIgP1xuICAgICAgcXVlc3Rpb25uYWlyZS5zZWN0aW9ucyA6XG4gICAgICB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyU2VjdGlvbnMocXVlc3Rpb25uYWlyZS5zZWN0aW9ucywgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSk7XG5cbiAgICBjb25zdCBub0NoYW5nZSA9IGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSAmJiAoc2VjdGlvbnMgPT09IGN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zKTtcblxuICAgIGlmIChub0NoYW5nZSAmJiAhc2tpcEZpbHRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlc3Rpb25uYWlyZUZvcm1zID0gdGhpcy5nZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbnMoc2VjdGlvbnMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgcmV0dXJuIHtzZWN0aW9uczogc2VjdGlvbnMsIGZvcm1zOiBxdWVzdGlvbm5haXJlRm9ybXN9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbnMoc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCkge1xuICAgIGNvbnN0IHF1ZXN0aW9ubmFpcmVGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICBjb25zdCBzZWN0aW9uRm9ybXMgPSB0aGlzLmdlbmVyYXRlRm9ybXNGb3JTZWN0aW9uKHNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgICBxdWVzdGlvbm5haXJlRm9ybXMuYWRkQ29udHJvbChzZWN0aW9uLm5hbWUsIHNlY3Rpb25Gb3Jtcyk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbm5haXJlRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGZvcm0gZ3JvdXAgYmFzZWQgb24gdGhlIHNlY3Rpb24gZGF0YS5cbiAgICogVGhpcyBmb3JtIGdyb3VwIGhhcyBiZWVuIGZpbHRlcmVkIGRvd24gYmFzZWQgb24gdGhlIGNvbmRpdGlvbnMgb2YgdGhlIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHNlY3Rpb24gVGhlIHNlY3Rpb24gZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZXJlZCBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbihzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3Qgc2VjdGlvbkZvcm1zOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zKSB7XG4gICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlLkluZm8pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXN0aW9uQ29udHJvbCA9IHRoaXMuZ2VuZXJhdGVDb250cm9sRm9yUXVlc3Rpb24ocXVlc3Rpb24sIHNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgICBzZWN0aW9uRm9ybXMuYWRkQ29udHJvbChxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbkNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gc2VjdGlvbkZvcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYW4gYXN0cmFjdCBmb3JtIGNvbnRyb2wgYmFzZWQgb24gdGhlIHF1ZXN0aW9uIGRhdGEuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24gZGF0YSB0byBidWlsZCB0aGUgYWJzdHJhY3QgY29udHJvbCBvbi5cbiAgICogQHJldHVybnMgQW4gYWJzdHJhY3QgY29udHJvbC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVDb250cm9sRm9yUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uLCBzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMocXVlc3Rpb24udmFsaWRhdG9ycyk7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcXVlc3Rpb24uZGVmYXVsdFZhbHVlID8gcXVlc3Rpb24uZGVmYXVsdFZhbHVlIDogbnVsbDtcbiAgICBzd2l0Y2ggKHF1ZXN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgUXVlc3Rpb25UeXBlLlJlcGVhdGVyOlxuICAgICAgICBjb25zdCBjdXJyZW50QXJyYXkgPSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gPyAoY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSkgYXMgRm9ybUFycmF5KSA6IGZhbHNlO1xuICAgICAgICByZXR1cm4gY3VycmVudEFycmF5ID8gY3VycmVudEFycmF5IDogdGhpcy5mYi5hcnJheShbXSwgY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICBjYXNlIFF1ZXN0aW9uVHlwZS5DaGVja2xpc3Q6XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlR3JvdXBGb3JDaGVja2xpc3QocXVlc3Rpb24sIGNvbnZlcnRlZFZhbGlkYXRvcnMpO1xuICAgICAgY2FzZSBRdWVzdGlvblR5cGUuU2xpZGVyOlxuICAgICAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKGRlZmF1bHRWYWx1ZSwgeyB2YWxpZGF0b3JzOiBjb252ZXJ0ZWRWYWxpZGF0b3JzIH0pOyAvLyBSZW1vdmUgdXBkYXRlIG9uIGJsdXIgZm9yIHNsaWRlcnMuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKGRlZmF1bHRWYWx1ZSwgeyB2YWxpZGF0b3JzOiBjb252ZXJ0ZWRWYWxpZGF0b3JzLCB1cGRhdGVPbjogJ2JsdXInIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGZvcm0gZ3JvdXAgZm9yIGEgY2hlY2tsaXN0IHF1ZXN0aW9uLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gVGhlIHF1ZXN0aW9uLiBNdXN0IGJlIG9mIHR5cGUgY2hlY2tsaXN0IG9yIGVsc2UgbnVsbCBpcyByZXR1cm5lZC5cbiAgICogQHJldHVybnMgQSBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUdyb3VwRm9yQ2hlY2tsaXN0KHF1ZXN0aW9uOiBRdWVzdGlvbiwgY29udmVydGVkVmFsaWRhdG9ycykge1xuICAgIGlmIChxdWVzdGlvbi50eXBlICE9PSBRdWVzdGlvblR5cGUuQ2hlY2tsaXN0IHx8IHF1ZXN0aW9uLmNoZWNrbGlzdEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tsaXN0Rm9ybXM6IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgIGZvciAoY29uc3QgY2hlY2tsaXN0SXRlbSBvZiBxdWVzdGlvbi5jaGVja2xpc3RJdGVtcykge1xuICAgICAgY29uc3QgY2hlY2tsaXN0SXRlbUNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2wobnVsbCwgY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICBjaGVja2xpc3RGb3Jtcy5hZGRDb250cm9sKGNoZWNrbGlzdEl0ZW0ubmFtZSwgY2hlY2tsaXN0SXRlbUNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tsaXN0Rm9ybXM7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGZvcm0gdGVtcGxhdGUgZm9yIGEgcmVwZWF0ZXIgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24uIE11c3QgYmUgb2YgdHlwZSByZXBlYXRlciBvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIEEgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUZvcm1zRm9yUmVwZWF0ZXIocXVlc3Rpb246IFF1ZXN0aW9uLCBpbmRleD86IGFueSk6IEZvcm1Hcm91cCB7XG4gICAgaWYgKHF1ZXN0aW9uLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5SZXBlYXRlciB8fCBxdWVzdGlvbi5yZXBlYXRlclF1ZXN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdRdWVzdGlvbiBpc250IGEgcmVwZWF0ZXIgb3IgaGFzIG5vIHF1ZXN0aW9ucywgcmV0dXJuaW5nIG51bGwnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcGVhdGVyUXVlc3Rpb25zID0gaW5kZXggPyBxdWVzdGlvbi5maWx0ZXJlZFJlcGVhdGVyUXVlc3Rpb25zW2luZGV4XSA6IHF1ZXN0aW9uLnJlcGVhdGVyUXVlc3Rpb25zO1xuXG4gICAgY29uc3QgcmVwZWF0ZXJGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCByZXBlYXRlclF1ZXN0aW9uIG9mIHJlcGVhdGVyUXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCByZXBlYXRlclF1ZXN0aW9uQ29udHJvbCA9IHRoaXMuZ2VuZXJhdGVDb250cm9sRm9yUmVwZWF0ZXJRdWVzdGlvbihyZXBlYXRlclF1ZXN0aW9uKTtcbiAgICAgIHJlcGVhdGVyRm9ybXMuYWRkQ29udHJvbChyZXBlYXRlclF1ZXN0aW9uLm5hbWUsIHJlcGVhdGVyUXVlc3Rpb25Db250cm9sKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcGVhdGVyRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgY29udHJvbCBmb3IgYSByZXBlYXRlcnMgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSByZXBlYXRlclF1ZXN0aW9uIEEgcmVwZWF0ZXIgcXVlc3Rpb24uXG4gICAqIEByZXR1cm5zIEFuIGFic3RyYWN0IGNvbnRyb2wuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlQ29udHJvbEZvclJlcGVhdGVyUXVlc3Rpb24ocmVwZWF0ZXJRdWVzdGlvbjogUmVwZWF0ZXJRdWVzdGlvbik6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMocmVwZWF0ZXJRdWVzdGlvbi52YWxpZGF0b3JzKTtcbiAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKG51bGwsIHsgdmFsaWRhdG9yczogY29udmVydGVkVmFsaWRhdG9ycywgdXBkYXRlT246ICdibHVyJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiB2YWxpZGF0b3JzIGludG8gZm9ybSB2YWxpZGF0b3JzLlxuICAgKiBAcGFyYW0gdmFsaWRhdG9ycyBUaGUgdW5jb3ZlcnRlZCBhcnJheSBvZiB2YWxpZGF0b3JzLlxuICAgKiBAcmV0dXJucyBBIGNvbnZlcmVkIGFycmF5IG9mIGZvcm0gdmFsaWRhdG9ycy5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydFZhbGlkYXRvcnModmFsaWRhdG9yczogQXJyYXk8VmFsaWRhdG9yPik6IEFycmF5PFZhbGlkYXRvckZuPiB7XG4gICAgaWYgKCF2YWxpZGF0b3JzIHx8IHZhbGlkYXRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xuICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvciA9IHRoaXMuY29udmVydFZhbGlkYXRvcih2YWxpZGF0b3IpO1xuICAgICAgaWYgKGNvbnZlcnRlZFZhbGlkYXRvcikge1xuICAgICAgICBjb252ZXJ0ZWRWYWxpZGF0b3JzLnB1c2goY29udmVydGVkVmFsaWRhdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRlZFZhbGlkYXRvcnM7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzaW5nbGUgdmFsaWRhdG9yIGludG8gYSBmb3JtIHZhbGlkYXRvci5cbiAgICogQHBhcmFtIHZhbGlkYXRvciBUaGUgdW5jb252ZXJ0ZWQgdmFsaWRhdG9yLlxuICAgKiBAcmV0dXJucyBBIGNvbnZlcnRlZCBmb3JtIHZhbGlkYXRvci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydFZhbGlkYXRvcih2YWxpZGF0b3I6IFZhbGlkYXRvcik6IFZhbGlkYXRvckZuIHwgbnVsbCB7XG4gICAgc3dpdGNoICh2YWxpZGF0b3IudHlwZSkge1xuICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZS5SZXF1aXJlZDpcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucmVxdWlyZWQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZm9ybXMgZm9yIHJlcGVhdGVycyBmcm9tIHNhdmVkIHN0YXRlLlxuICAgKiBAcGFyYW0gc2F2ZWRTdGF0ZSBUaGUgc2F2ZWQgc3RhdGUgdG8gbG9hZC5cbiAgICogQHBhcmFtIHNlY3Rpb25zIFRoZSBzZWN0aW9ucyBhbHJlYWR5IGdlbmVyYXRlZCBieSB0aGUgZm9ybSBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RSZXBlYXRlckZyb21zRnJvbVN0YXRlKHNhdmVkU3RhdGU6IGFueSwgc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCkge1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBzZWN0aW9uLnF1ZXN0aW9ucykge1xuICAgICAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBlYXRlckFycmF5ID0gc2F2ZWRTdGF0ZVtzZWN0aW9uLm5hbWVdW3F1ZXN0aW9uLm5hbWVdO1xuICAgICAgICBpZiAoIXJlcGVhdGVyQXJyYXkgfHwgcmVwZWF0ZXJBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcGVhdGVyRm9ybUFycmF5ID0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSkgYXMgRm9ybUFycmF5O1xuXG4gICAgICAgIGlmIChyZXBlYXRlckZvcm1BcnJheS5jb250cm9scy5sZW5ndGggPT09IHJlcGVhdGVyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3IgZWFjaCBpdGVtIHRoYXQgdXNlZCB0byBiZSB0aGVyZSBwdXNoIGEgbmV3IGVtcHR5IHRlbXBsYXRlIHRoZXJlIHRvIGJlIHBvcHVsYXRlZC5cbiAgICAgICAgZm9yIChjb25zdCByZXBlYXRlckl0ZW0gb2YgcmVwZWF0ZXJBcnJheSkge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVwZWF0ZXJBcnJheS5pbmRleE9mKHJlcGVhdGVySXRlbSk7XG4gICAgICAgICAgY29uc3QgcmVwZWF0ZXJJdGVtVGVtcGxhdGUgPSB0aGlzLmdlbmVyYXRlRm9ybXNGb3JSZXBlYXRlcihxdWVzdGlvbiwgaW5kZXgpO1xuICAgICAgICAgIHJlcGVhdGVyRm9ybUFycmF5LnB1c2gocmVwZWF0ZXJJdGVtVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|