@piserve-tech/form-submission 1.3.253 → 1.3.255

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +59 -27
  2. package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +33 -7
  3. package/esm2022/form-fields/form-fields.module.mjs +10 -5
  4. package/esm2022/form-fields/iframe-fields/iframe-fields.component.mjs +111 -0
  5. package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +49 -17
  6. package/esm2022/models/appearance.model.mjs +1 -1
  7. package/esm2022/models/elementOptionAPI.model.mjs +1 -1
  8. package/esm2022/models/elementOptionDB.model.mjs +1 -1
  9. package/esm2022/models/formElement.model.mjs +1 -1
  10. package/esm2022/models/iFrameProperties.model.mjs +2 -0
  11. package/esm2022/question/card-subform/card-subform.component.mjs +4 -3
  12. package/esm2022/question/question/question.component.mjs +4 -3
  13. package/esm2022/question/question-group/question-group.component.mjs +4 -3
  14. package/esm2022/question/sub-form/sub-form.component.mjs +9 -8
  15. package/esm2022/services/mapper.service.mjs +17 -3
  16. package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +4 -3
  17. package/fesm2022/piserve-tech-form-submission.mjs +297 -82
  18. package/fesm2022/piserve-tech-form-submission.mjs.map +1 -1
  19. package/form-fields/check-box-fields/check-box-fields.component.d.ts +1 -0
  20. package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +1 -0
  21. package/form-fields/form-fields.module.d.ts +12 -11
  22. package/form-fields/iframe-fields/iframe-fields.component.d.ts +32 -0
  23. package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +1 -0
  24. package/models/appearance.model.d.ts +2 -0
  25. package/models/elementOptionAPI.model.d.ts +1 -0
  26. package/models/elementOptionDB.model.d.ts +1 -0
  27. package/models/formElement.model.d.ts +2 -0
  28. package/models/iFrameProperties.model.d.ts +13 -0
  29. package/package.json +1 -1
@@ -51,7 +51,7 @@ export class CheckBoxFieldsComponent {
51
51
  this.customOptions = this.question.formElement.option.customOptions;
52
52
  this.customOptions = this.question.formElement.option.customOptions.map((option) => ({
53
53
  value: option.value,
54
- label: option.value
54
+ label: option.value,
55
55
  }));
56
56
  if (this.question.answer) {
57
57
  this.initializeCustomOption();
@@ -82,8 +82,10 @@ export class CheckBoxFieldsComponent {
82
82
  this.minimumSelection = undefined;
83
83
  this.maximumSelection = undefined;
84
84
  }
85
- if (this.question.formElement.scoring && this.question.formElement.scoring.enableScoring) {
86
- this.maxPossibleScore = this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);
85
+ if (this.question.formElement.scoring &&
86
+ this.question.formElement.scoring.enableScoring) {
87
+ this.maxPossibleScore =
88
+ this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);
87
89
  this.question.maxPossibleScore = this.maxPossibleScore;
88
90
  }
89
91
  }
@@ -125,14 +127,14 @@ export class CheckBoxFieldsComponent {
125
127
  else {
126
128
  this.selectedOptions = this.selectedOptions.filter((item) => item !== option);
127
129
  }
128
- this.question.answer = this.selectedOptions.map(item => `${item.label}|${item.value}`);
130
+ this.question.answer = this.selectedOptions.map((item) => `${item.label}|${item.value}`);
129
131
  this.isMinimumSelectionValid();
130
132
  }
131
133
  if (this.maximumSelection !== undefined &&
132
134
  this.selectedOptions.length > this.maximumSelection) {
133
135
  event.target.checked = false;
134
136
  this.selectedOptions = this.selectedOptions.filter((item) => item !== option);
135
- this.question.answer = this.selectedOptions.map(item => `${item.label}|${item.value}`);
137
+ this.question.answer = this.selectedOptions.map((item) => `${item.label}|${item.value}`);
136
138
  this.isMinimumSelectionValid();
137
139
  }
138
140
  if (this.question.childLogics) {
@@ -140,7 +142,10 @@ export class CheckBoxFieldsComponent {
140
142
  }
141
143
  const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(this.question.answer, this.question);
142
144
  this.question.score = scoreResult?.scores;
143
- this.answerChange.emit({ answer: this.question.answer, maxPossibleScore: this.maxPossibleScore });
145
+ this.answerChange.emit({
146
+ answer: this.question.answer,
147
+ maxPossibleScore: this.maxPossibleScore,
148
+ });
144
149
  }
145
150
  updateChildLogics(question) {
146
151
  if (question.childLogics && Array.isArray(question.childLogics)) {
@@ -206,16 +211,16 @@ export class CheckBoxFieldsComponent {
206
211
  }
207
212
  evaluateCondition(answer, condition, inputValue) {
208
213
  const inputValues = Array.isArray(inputValue)
209
- ? inputValue.map(val => val.toString())
214
+ ? inputValue.map((val) => val.toString())
210
215
  : [inputValue.toString()];
211
216
  switch (condition) {
212
- case "!=":
217
+ case '!=':
213
218
  return !inputValues.includes(answer);
214
- case "=":
219
+ case '=':
215
220
  return inputValues.includes(answer);
216
- case "IN":
221
+ case 'IN':
217
222
  return inputValues.includes(answer);
218
- case "NOT IN":
223
+ case 'NOT IN':
219
224
  return !inputValues.includes(answer);
220
225
  default:
221
226
  return false;
@@ -223,17 +228,17 @@ export class CheckBoxFieldsComponent {
223
228
  }
224
229
  evaluateMultipleCondition(answers, condition, inputValue) {
225
230
  const inputValues = Array.isArray(inputValue)
226
- ? inputValue.map(val => val.toString())
231
+ ? inputValue.map((val) => val.toString())
227
232
  : [inputValue.toString()];
228
233
  switch (condition) {
229
- case "!=":
230
- return answers.every(answer => !inputValues.includes(answer));
231
- case "=":
232
- return answers.some(answer => inputValues.includes(answer));
233
- case "IN":
234
- return answers.some(answer => inputValues.includes(answer));
235
- case "NOT IN":
236
- return answers.every(answer => !inputValues.includes(answer));
234
+ case '!=':
235
+ return answers.every((answer) => !inputValues.includes(answer));
236
+ case '=':
237
+ return answers.some((answer) => inputValues.includes(answer));
238
+ case 'IN':
239
+ return answers.some((answer) => inputValues.includes(answer));
240
+ case 'NOT IN':
241
+ return answers.every((answer) => !inputValues.includes(answer));
237
242
  default:
238
243
  return false;
239
244
  }
@@ -275,6 +280,7 @@ export class CheckBoxFieldsComponent {
275
280
  tableName: database.tableName,
276
281
  valueField: database.valueField,
277
282
  labelField: database.labelField,
283
+ labelPattern: database?.labelPattern,
278
284
  criteria: database.criteria.map((criteria) => ({
279
285
  field: criteria?.field,
280
286
  valueSource: criteria?.valueSource,
@@ -285,6 +291,7 @@ export class CheckBoxFieldsComponent {
285
291
  };
286
292
  }
287
293
  fetchDataFromAPI() {
294
+ const allowedChars = ['.', ',', '-', '_', '(', ')', ''];
288
295
  const apiConfig = this.api;
289
296
  this.formService.fetchDataFromExternalAPI(apiConfig).subscribe((response) => {
290
297
  let data;
@@ -294,10 +301,34 @@ export class CheckBoxFieldsComponent {
294
301
  else {
295
302
  data = response;
296
303
  }
297
- this.customOptions = data.map((item) => ({
298
- value: item[apiConfig.valueField],
299
- label: item[apiConfig.labelField],
300
- }));
304
+ this.customOptions = data.map((item) => {
305
+ if (apiConfig.labelPattern &&
306
+ Array.isArray(apiConfig.labelPattern) &&
307
+ apiConfig.labelPattern.length > 0) {
308
+ let label = '';
309
+ apiConfig.labelPattern.forEach((pattern) => {
310
+ pattern = pattern.trim();
311
+ if (allowedChars.includes(pattern)) {
312
+ label += pattern;
313
+ }
314
+ else {
315
+ if (item[pattern] !== undefined && item[pattern] !== null) {
316
+ label += item[pattern] + ' ';
317
+ }
318
+ }
319
+ });
320
+ return {
321
+ value: item[apiConfig.valueField.trim()],
322
+ label: label,
323
+ };
324
+ }
325
+ else {
326
+ return {
327
+ value: item[apiConfig.valueField.trim()],
328
+ label: item[apiConfig.labelField.trim()],
329
+ };
330
+ }
331
+ });
301
332
  if (this.question.answer) {
302
333
  this.initializeCustomOption();
303
334
  }
@@ -320,7 +351,8 @@ export class CheckBoxFieldsComponent {
320
351
  else if (this.minimumSelection !== undefined) {
321
352
  if (this.selectionType == 'SINGLE') {
322
353
  this.validationService.clearInvalid(this.buildElementId());
323
- if (this.selectedOptions.length < this.minimumSelection && this.required) {
354
+ if (this.selectedOptions.length < this.minimumSelection &&
355
+ this.required) {
324
356
  this.validationFailed = true;
325
357
  this.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;
326
358
  this.question.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;
@@ -378,7 +410,7 @@ export class CheckBoxFieldsComponent {
378
410
  }
379
411
  }
380
412
  buildElementId() {
381
- return (this.inLine || this.inCard)
413
+ return this.inLine || this.inCard
382
414
  ? `${this.submissionIndex}-${this.question.id}`
383
415
  : `${this.question.id}`;
384
416
  }
@@ -419,4 +451,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
419
451
  }], answerChange: [{
420
452
  type: Output
421
453
  }] } });
422
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2NoZWNrLWJveC1maWVsZHMvY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2NoZWNrLWJveC1maWVsZHMvY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBV3ZFLE1BQU0sT0FBTyx1QkFBdUI7SUEwQmxDLFlBQ1UsV0FBd0IsRUFDeEIsaUJBQW9DLEVBQ3BDLE9BQThCLEVBQzlCLGdCQUF5QztRQUh6QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUE3QjFDLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBRXZCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFFeEYsVUFBSyxHQUFXLENBQUMsQ0FBQztRQUNsQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFHM0IsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQUMxQixhQUFR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QU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDOytHQS9iVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixpTkNYcEMsNCtIQStHQTs7NEZEcEdhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxzQkFBc0I7NE1BS3ZCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWxlbWVudFRyYWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxlbWVudC10cmFja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NvcmVDYWxjdWxhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zY29yZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNoZWNrLWJveC1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoZWNrLWJveC1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tCb3hGaWVsZHNDb21wb25lbnQge1xuICBASW5wdXQoKSBxdWVzdGlvbjogYW55ID0ge307XG4gIEBJbnB1dCgpIGluTGluZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpbkNhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3VibWlzc2lvbkluZGV4ITogbnVtYmVyO1xuICBAT3V0cHV0KCkgYW5zd2VyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGFuc3dlcjogYW55OyBtYXhQb3NzaWJsZVNjb3JlPzogbnVtYmVyIH0+KCk7XG5cbiAgY291bnQ6IG51bWJlciA9IDA7XG4gIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIGhpbnQ6IHN0cmluZyA9ICcnO1xuICBzZWxlY3Rpb25UeXBlOiBzdHJpbmcgPSAnJztcbiAgbWluaW11bVNlbGVjdGlvbj86IG51bWJlcjtcbiAgbWF4aW11bVNlbGVjdGlvbj86IG51bWJlcjtcbiAgb3B0aW9uVHlwZTogc3RyaW5nID0gJyc7XG4gIGxvb2t1cFRhYmxlOiBhbnkgPSB7fTtcbiAgY3VzdG9tT3B0aW9uczogYW55W10gPSBbXTtcbiAgZGF0YWJhc2U6IGFueSA9IHt9O1xuICBhcGk6IGFueSA9IHt9O1xuICBhcGlPcHRpb25zOiBhbnlbXSA9IFtdOyBcbiAgc2VsZWN0ZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xuICB2YWxpZGF0aW9uRmFpbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGRpc3BsYXlPcHRpb25zSW5Db2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGVsZW1lbnRJZDogc3RyaW5nPScnO1xuICBtYXhQb3NzaWJsZVNjb3JlPzpudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFja2VyOiBFbGVtZW50VHJhY2tlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY29yZUNhbGNTZXJ2aWNlOiBTY29yZUNhbGN1bGF0aW9uU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmFsdWVBc3NpZ25lZCgpO1xuICB9XG5cbiAgdmFsdWVBc3NpZ25lZCgpIHtcbiAgICB0aGlzLmNvdW50ID0gdGhpcy5xdWVzdGlvbi5jb3VudDtcbiAgICB0aGlzLnJlcXVpcmVkID0gdGhpcy5xdWVzdGlvbi5yZXF1aXJlZDtcbiAgICB0aGlzLmhpbnQgPSB0aGlzLnF1ZXN0aW9uLmhpbnQ7XG4gICAgdGhpcy5zZWxlY3Rpb25UeXBlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLnNlbGVjdGlvblR5cGU7XG4gICAgdGhpcy5kaXNwbGF5T3B0aW9uc0luQ29sdW1uID1cbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5kaXNwbGF5T3B0aW9uc0luQ29sdW1uID8/IGZhbHNlO1xuICAgIHRoaXMubWluaW11bVNlbGVjdGlvbiA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWluaW11bVNlbGVjdGlvbjtcbiAgICB0aGlzLm1heGltdW1TZWxlY3Rpb24gPVxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLm1heGltdW1TZWxlY3Rpb247XG4gICAgdGhpcy5vcHRpb25UeXBlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24ub3B0aW9uVHlwZTtcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9uVHlwZSkge1xuICAgICAgY2FzZSAnT1BUSU9OJzpcbiAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24uY3VzdG9tT3B0aW9ucztcbiAgICAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQub3B0aW9uLmN1c3RvbU9wdGlvbnMubWFwKChvcHRpb246YW55KSA9PiAoe1xuICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi52YWx1ZVxuICAgICAgICB9KSk7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUN1c3RvbU9wdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTE9PS1VQJzpcbiAgICAgICAgdGhpcy5sb29rdXBUYWJsZSA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQub3B0aW9uLmxvb2t1cFRhYmxlO1xuICAgICAgICB0aGlzLmZldGNoRGF0YUZyb21Mb29rdXAoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdEQVRBQkFTRSc6XG4gICAgICAgIHRoaXMuZGF0YWJhc2UgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5kYXRhYmFzZTtcbiAgICAgICAgdGhpcy5mZXRjaERhdGFGcm9tRGF0YWJhc2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBUEknOlxuICAgICAgICB0aGlzLmFwaSA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQub3B0aW9uLmFwaTtcbiAgICAgICAgdGhpcy5mZXRjaERhdGFGcm9tQVBJKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIG9wdGlvbiB0eXBlOicsIHRoaXMub3B0aW9uVHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gJ1NJTkdMRScpIHtcbiAgICAgIHRoaXMubWluaW11bVNlbGVjdGlvbiA9IDE7XG4gICAgICB0aGlzLm1heGltdW1TZWxlY3Rpb24gPSAxO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gJ01VTFRJUExFJyAmJlxuICAgICAgIXRoaXMubWluaW11bVNlbGVjdGlvbiAmJlxuICAgICAgIXRoaXMubWF4aW11bVNlbGVjdGlvblxuICAgICkge1xuICAgICAgdGhpcy5taW5pbXVtU2VsZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5tYXhpbXVtU2VsZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZih0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnNjb3JpbmcgJiYgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5zY29yaW5nLmVuYWJsZVNjb3JpbmdcbiAgICApe1xuICAgICAgdGhpcy5tYXhQb3NzaWJsZVNjb3JlID0gdGhpcy5zY29yZUNhbGNTZXJ2aWNlLmdldE1heFBvc3NpYmxlU2NvcmVGb3JRdWVzdGlvbih0aGlzLnF1ZXN0aW9uKTtcbiAgICAgIHRoaXMucXVlc3Rpb24ubWF4UG9zc2libGVTY29yZSA9IHRoaXMubWF4UG9zc2libGVTY29yZTtcbiAgICB9XG4gIH1cblxuICBpbml0aWFsaXplQ3VzdG9tT3B0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jdXN0b21PcHRpb25zPy5mb3JFYWNoKChvcHRpb246IGFueSkgPT4ge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24/LmFuc3dlcj8uZmluZCgoYTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgYS5pbmNsdWRlcygnfCcpKSB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBhLnNwbGl0KCd8Jyk7XG4gICAgICAgICAgcmV0dXJuIHBhcnRzWzFdID09PSBvcHRpb24udmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYS50b1N0cmluZygpID09PSBvcHRpb24udmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIH0pKSB7ICAgICAgICBcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgfSAgICAgIFxuICAgIH0pO1xuICAgIGlmKHRoaXMucXVlc3Rpb24uY2hpbGRMb2dpY3MgJiYgdGhpcy5xdWVzdGlvbi5hbnN3ZXIpe1xuICAgICAgdGhpcy51cGRhdGVDaGlsZExvZ2ljcyh0aGlzLnF1ZXN0aW9uKVxuICAgIH1cbiAgfVxuXG4gIG9uQ2hlY2tib3hDaGFuZ2Uob3B0aW9uOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSAnU0lOR0xFJykge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gW29wdGlvbl07XG4gICAgICAgIHRoaXMucXVlc3Rpb24uYW5zd2VyID0gW2Ake29wdGlvbi5sYWJlbH18JHtvcHRpb24udmFsdWV9YF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5pc01pbmltdW1TZWxlY3Rpb25WYWxpZCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSAnTVVMVElQTEUnKSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbSAhPT0gb3B0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcChpdGVtID0+IGAke2l0ZW0ubGFiZWx9fCR7aXRlbS52YWx1ZX1gKTtcbiAgICAgIHRoaXMuaXNNaW5pbXVtU2VsZWN0aW9uVmFsaWQoKTtcbiAgICB9XG4gIFxuICAgIGlmIChcbiAgICAgIHRoaXMubWF4aW11bVNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiB0aGlzLm1heGltdW1TZWxlY3Rpb25cbiAgICApIHtcbiAgICAgIGV2ZW50LnRhcmdldC5jaGVja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbHRlcihcbiAgICAgICAgKGl0ZW0pID0+IGl0ZW0gIT09IG9wdGlvblxuICAgICAgKTtcbiAgICAgIHRoaXMucXVlc3Rpb24uYW5zd2VyID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMubWFwKGl0ZW0gPT4gYCR7aXRlbS5sYWJlbH18JHtpdGVtLnZhbHVlfWApO1xuICAgICAgdGhpcy5pc01pbmltdW1TZWxlY3Rpb25WYWxpZCgpO1xuICAgIH1cbiAgXG4gICAgaWYgKHRoaXMucXVlc3Rpb24uY2hpbGRMb2dpY3MpIHtcbiAgICAgIHRoaXMudXBkYXRlQ2hpbGRMb2dpY3ModGhpcy5xdWVzdGlvbik7XG4gICAgfVxuICAgIGNvbnN0IHNjb3JlUmVzdWx0ID0gdGhpcy5zY29yZUNhbGNTZXJ2aWNlLmNhbGN1bGF0ZVNjb3JlRnJvbUFuc3dlcih0aGlzLnF1ZXN0aW9uLmFuc3dlciwgdGhpcy5xdWVzdGlvbik7XG4gICAgdGhpcy5xdWVzdGlvbi5zY29yZSA9IHNjb3JlUmVzdWx0Py5zY29yZXM7XG4gICAgdGhpcy5hbnN3ZXJDaGFuZ2UuZW1pdCh7YW5zd2VyOnRoaXMucXVlc3Rpb24uYW5zd2VyLG1heFBvc3NpYmxlU2NvcmU6dGhpcy5tYXhQb3NzaWJsZVNjb3JlfSk7XG4gIH1cblxuICB1cGRhdGVDaGlsZExvZ2ljcyhxdWVzdGlvbjogYW55KSB7ICAgIFxuICAgIGlmIChxdWVzdGlvbi5jaGlsZExvZ2ljcyAmJiBBcnJheS5pc0FycmF5KHF1ZXN0aW9uLmNoaWxkTG9naWNzKSkge1xuICAgICAgcXVlc3Rpb24uY2hpbGRMb2dpY3MuZm9yRWFjaCgoY2hpbGRMb2dpYzogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdTSU5HTEUnKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoY2hpbGRMb2dpYyk7XG4gICAgICAgICAgfSBlbHNlIHsgXG4gICAgICAgICAgICBpZih0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKHRoaXMuc2VsZWN0ZWRPcHRpb25zWzBdPy5sYWJlbCwgY2hpbGRMb2dpYy5jb25kaXRpb24sIGNoaWxkTG9naWMuaW5wdXRWYWx1ZSkpe1xuICAgICAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IHRydWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhckFuc3dlcnNSZWN1cnNpdmVseShjaGlsZExvZ2ljKTtcbiAgICAgICAgICAgIH0gICAgICAgICAgIFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdNVUxUSVBMRScpIHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jbGVhckFuc3dlcnNSZWN1cnNpdmVseShjaGlsZExvZ2ljKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRMYWJlbHMgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5sYWJlbCk7XG4gICAgICAgICAgICBpZih0aGlzLmV2YWx1YXRlTXVsdGlwbGVDb25kaXRpb24oc2VsZWN0ZWRMYWJlbHMsIGNoaWxkTG9naWMuY29uZGl0aW9uLCBjaGlsZExvZ2ljLmlucHV0VmFsdWUpKXtcbiAgICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWMgPSB0cnVlO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIGNoaWxkTG9naWMuc2hvd0xvZ2ljID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoY2hpbGRMb2dpYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjbGVhckFuc3dlcnNSZWN1cnNpdmVseShsb2dpYzogYW55KSB7XG4gICAgaWYgKCFsb2dpYyB8fCAhbG9naWMucm93cykgcmV0dXJuO1xuICBcbiAgICBsb2dpYy5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICByb3cuZ3JpZC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGl0ZW0uZWxlbWVudDtcbiAgXG4gICAgICAgIGlmIChpdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiYgZWxlbWVudCkge1xuICAgICAgICAgIC8vIENsZWFyIGFuc3dlciBpZiBwcmVzZW50XG4gICAgICAgICAgaWYgKCdhbnN3ZXInIGluIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYW5zd2VyID0gJyc7XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBjbGVhciBjaGlsZExvZ2ljcyBpZiBhbnlcbiAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZExvZ2ljcyAmJiBlbGVtZW50LmNoaWxkTG9naWNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRMb2dpY3MuZm9yRWFjaCgoY2hpbGRMb2dpYzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoY2hpbGRMb2dpYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGlmIChpdGVtLmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJiBlbGVtZW50ICYmIGVsZW1lbnQucm93cykge1xuICAgICAgICAgIC8vIFNVQkZPUk0gY29udGFpbnMgaXRzIG93biByb3dzIHN0cnVjdHVyZSBsaWtlIGEgZm9ybVxuICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoeyByb3dzOiBlbGVtZW50LnJvd3MgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIFxuICBcbiAgZXZhbHVhdGVDb25kaXRpb24oYW5zd2VyOiBhbnksIGNvbmRpdGlvbjogc3RyaW5nLCBpbnB1dFZhbHVlOiBhbnkpOiBib29sZWFuIHsgICAgXG4gICAgY29uc3QgaW5wdXRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpXG4gICAgICA/IGlucHV0VmFsdWUubWFwKHZhbCA9PiB2YWwudG9TdHJpbmcoKSlcbiAgICAgIDogW2lucHV0VmFsdWUudG9TdHJpbmcoKV07XG4gIFxuICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7XG4gICAgICBjYXNlIFwiIT1cIjpcbiAgICAgICAgcmV0dXJuICFpbnB1dFZhbHVlcy5pbmNsdWRlcyhhbnN3ZXIpO1xuICAgICAgY2FzZSBcIj1cIjpcbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWVzLmluY2x1ZGVzKGFuc3dlcik7XG4gICAgICBjYXNlIFwiSU5cIjpcbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWVzLmluY2x1ZGVzKGFuc3dlcik7XG4gICAgICBjYXNlIFwiTk9UIElOXCI6XG4gICAgICAgIHJldHVybiAhaW5wdXRWYWx1ZXMuaW5jbHVkZXMoYW5zd2VyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgXG4gIGV2YWx1YXRlTXVsdGlwbGVDb25kaXRpb24oYW5zd2VyczogYW55W10sIGNvbmRpdGlvbjogc3RyaW5nLCBpbnB1dFZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlcyA9IEFycmF5LmlzQXJyYXkoaW5wdXRWYWx1ZSlcbiAgICAgID8gaW5wdXRWYWx1ZS5tYXAodmFsID0+IHZhbC50b1N0cmluZygpKVxuICAgICAgOiBbaW5wdXRWYWx1ZS50b1N0cmluZygpXTtcbiAgXG4gICAgc3dpdGNoIChjb25kaXRpb24pIHtcbiAgICAgIGNhc2UgXCIhPVwiOlxuICAgICAgICByZXR1cm4gYW5zd2Vycy5ldmVyeShhbnN3ZXIgPT4gIWlucHV0VmFsdWVzLmluY2x1ZGVzKGFuc3dlcikpO1xuICAgICAgY2FzZSBcIj1cIjpcbiAgICAgICAgcmV0dXJuIGFuc3dlcnMuc29tZShhbnN3ZXIgPT4gaW5wdXRWYWx1ZXMuaW5jbHVkZXMoYW5zd2VyKSk7XG4gICAgICBjYXNlIFwiSU5cIjpcbiAgICAgICAgcmV0dXJuIGFuc3dlcnMuc29tZShhbnN3ZXIgPT4gaW5wdXRWYWx1ZXMuaW5jbHVkZXMoYW5zd2VyKSk7XG4gICAgICBjYXNlIFwiTk9UIElOXCI6XG4gICAgICAgIHJldHVybiBhbnN3ZXJzLmV2ZXJ5KGFuc3dlciA9PiAhaW5wdXRWYWx1ZXMuaW5jbHVkZXMoYW5zd2VyKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZmV0Y2hEYXRhRnJvbUxvb2t1cCgpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZldGNoRGF0YUZyb21Mb29rdXAodGhpcy5sb29rdXBUYWJsZSkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IHJlc3BvbnNlLnJlc3VsdC52YWx1ZXMubWFwKFxuICAgICAgICAgIChpdGVtOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSkgPT4gKHtcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uYW5zd2VyKSB7XG4gICAgICAgICAgdGhpcy5pbml0aWFsaXplQ3VzdG9tT3B0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSFRUUCBFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGZldGNoRGF0YUZyb21EYXRhYmFzZSgpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGFiYXNlID0gdGhpcy50cmFuc2Zvcm1EYXRhYmFzZU9iamVjdCh0aGlzLmRhdGFiYXNlKTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZldGNoRGF0YUZyb21EYXRhYmFzZSh0cmFuc2Zvcm1lZERhdGFiYXNlKS5zdWJzY3JpYmUoXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSByZXNwb25zZS5yZXN1bHQubWFwKFxuICAgICAgICAgICAgKGl0ZW06IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9KSA9PiAoe1xuICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uYW5zd2VyKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21PcHRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YSBmcm9tIGRhdGFiYXNlOicsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hUVFAgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICB0cmFuc2Zvcm1EYXRhYmFzZU9iamVjdChkYXRhYmFzZTogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYmxlTmFtZTogZGF0YWJhc2UudGFibGVOYW1lLFxuICAgICAgdmFsdWVGaWVsZDogZGF0YWJhc2UudmFsdWVGaWVsZCxcbiAgICAgIGxhYmVsRmllbGQ6IGRhdGFiYXNlLmxhYmVsRmllbGQsXG4gICAgICBjcml0ZXJpYTogZGF0YWJhc2UuY3JpdGVyaWEubWFwKChjcml0ZXJpYTogYW55KSA9PiAoe1xuICAgICAgICBmaWVsZDogY3JpdGVyaWE/LmZpZWxkLFxuICAgICAgICB2YWx1ZVNvdXJjZTpjcml0ZXJpYT8udmFsdWVTb3VyY2UsXG4gICAgICAgIGNvbmRpdGlvbjogY3JpdGVyaWE/LmNvbmRpdGlvbixcbiAgICAgICAgdmFsdWU6IGNyaXRlcmlhPy5pbnB1dFZhbHVlLFxuICAgICAgICBsb2dpY2FsT3BlcmF0b3I6IGNyaXRlcmlhPy5sb2dpY2FsT3BlcmF0b3IsXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIGZldGNoRGF0YUZyb21BUEkoKSB7XG4gICAgY29uc3QgYXBpQ29uZmlnID0gdGhpcy5hcGk7XG4gICAgdGhpcy5mb3JtU2VydmljZS5mZXRjaERhdGFGcm9tRXh0ZXJuYWxBUEkoYXBpQ29uZmlnKS5zdWJzY3JpYmUoXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIGlmKGFwaUNvbmZpZy5wYXRoVG9WYWx1ZSkge1xuICAgICAgICAgIGRhdGEgPSB0aGlzLmV4dHJhY3REYXRhQnlQYXRoKHJlc3BvbnNlLCBhcGlDb25maWcucGF0aFRvVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGEgPSByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogaXRlbVthcGlDb25maWcudmFsdWVGaWVsZF0sXG4gICAgICAgICAgbGFiZWw6IGl0ZW1bYXBpQ29uZmlnLmxhYmVsRmllbGRdLFxuICAgICAgICB9KSk7ICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uYW5zd2VyKSB7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5pbml0aWFsaXplQ3VzdG9tT3B0aW9uKCk7XG4gICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSFRUUCBFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGV4dHJhY3REYXRhQnlQYXRoKGRhdGE6IGFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgcGFydCkgPT4gYWNjICYmIGFjY1twYXJ0XSwgZGF0YSk7XG4gIH1cblxuICBpc01pbmltdW1TZWxlY3Rpb25WYWxpZCgpIHtcbiAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSBmYWxzZTtcbiAgICBcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09IDAgJiYgdGhpcy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbic7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbic7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluaW11bVNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZih0aGlzLnNlbGVjdGlvblR5cGU9PSdTSU5HTEUnKXtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA8IHRoaXMubWluaW11bVNlbGVjdGlvbiAmJiB0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gYE1pbmltdW0gJHt0aGlzLm1pbmltdW1TZWxlY3Rpb259ICBzZWxlY3Rpb24ocykgcmVxdWlyZWQuYDtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gYE1pbmltdW0gJHt0aGlzLm1pbmltdW1TZWxlY3Rpb259ICBzZWxlY3Rpb24ocykgcmVxdWlyZWQuYDtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICAgICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2V7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPCB0aGlzLm1pbmltdW1TZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBNaW5pbXVtICR7dGhpcy5taW5pbXVtU2VsZWN0aW9ufSAgc2VsZWN0aW9uKHMpIHJlcXVpcmVkLmA7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBNaW5pbXVtICR7dGhpcy5taW5pbXVtU2VsZWN0aW9ufSAgc2VsZWN0aW9uKHMpIHJlcXVpcmVkLmA7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGdldE9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uVHlwZSA9PT0gJ09QVElPTicpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbU9wdGlvbnM7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvblR5cGUgPT09ICdMT09LVVAnKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmxvb2t1cFRhYmxlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9uVHlwZSA9PT0gJ0FQSScpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaU9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZUZpZWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tYXhpbXVtU2VsZWN0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+PSB0aGlzLm1heGltdW1TZWxlY3Rpb24gJiZcbiAgICAgICF0aGlzLnNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pXG4gICAgKTtcbiAgfVxuXG4gIFxuICBoYW5kbGVWYWxpZGF0aW9uKGlzVmFsaWQ6IGJvb2xlYW4sIG1lc3NhZ2U6IHN0cmluZyA9ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJykge1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnNldEludmFsaWQodGhpcy5xdWVzdGlvbi5pZCwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5pbkxpbmUgfHwgdGhpcy5pbkNhcmQpXG4gICAgICA/IGAke3RoaXMuc3VibWlzc2lvbkluZGV4fS0ke3RoaXMucXVlc3Rpb24uaWR9YFxuICAgICAgOiBgJHt0aGlzLnF1ZXN0aW9uLmlkfWA7XG4gIH1cblxuICBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XG4gIH1cblxuICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEVycm9yTWVzc2FnZSh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmluTGluZSB8fCB0aGlzLmluQ2FyZCkge1xuICAgICAgdGhpcy5lbGVtZW50SWQgPSBgcXVlc3Rpb24tJHt0aGlzLnN1Ym1pc3Npb25JbmRleH0tJHt0aGlzLnF1ZXN0aW9uLmlkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWxlbWVudElkID0gYHF1ZXN0aW9uLSR7dGhpcy5xdWVzdGlvbi5pZH1gO1xuICAgIH1cbiAgXG4gICAgdGhpcy50cmFja2VyLnJlZ2lzdGVyRWxlbWVudCh0aGlzLmVsZW1lbnRJZCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5lbGVtZW50SWQpIHtcbiAgICAgIHRoaXMudHJhY2tlci51bnJlZ2lzdGVyRWxlbWVudCh0aGlzLmVsZW1lbnRJZCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIFtuZ0NsYXNzXT1cInsgJ21iLTQnOiAhaW5MaW5lIH1cIlxuICBjbGFzcz1cInB4LTNcIlxuICBbaWRdPVwiKGluTGluZSB8fCBpbkNhcmQpID8gJ3F1ZXN0aW9uLScgKyBzdWJtaXNzaW9uSW5kZXggKyAnLScgKyBxdWVzdGlvbi5pZCA6ICdxdWVzdGlvbi0nICsgcXVlc3Rpb24uaWRcIlxuICBbYXR0ci5uYW1lXT1cInF1ZXN0aW9uLnRlc3RFbGVtZW50TmFtZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyIG1iLTNcIiAqbmdJZj1cIiFpbkxpbmVcIj5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25OdW1iZXJcIiBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCI+PC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvbk51bWJlclwiIGNsYXNzPVwic3BhY2VcIj48L3NwYW4+IDxsYWJlbD57eyBxdWVzdGlvbi5xdWVzdGlvbiB9fTwvbGFiZWxcbiAgICA+Jm5ic3A7XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic3ZnLXdyYXBwZXIgbWItMiBoaW50SWNvblwiXG4gICAgICBbYXR0ci5kYXRhLXRpdGxlXT1cImhpbnRcIlxuICAgICAgKm5nSWY9XCJoaW50XCJcbiAgICA+XG4gICAgICA8c3ZnXG4gICAgICAgIGNsYXNzPVwiaGludFN2Z1wiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMzAgMzBcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBkPVwiTTE1IDI2LjI1VjI2LjI1QzguNzg2MjUgMjYuMjUgMy43NSAyMS4yMTM4IDMuNzUgMTVWMTVDMy43NSA4Ljc4NjI1IDguNzg2MjUgMy43NSAxNSAzLjc1VjMuNzVDMjEuMjEzOCAzLjc1IDI2LjI1IDguNzg2MjUgMjYuMjUgMTVWMTVDMjYuMjUgMjEuMjEzOCAyMS4yMTM4IDI2LjI1IDE1IDI2LjI1WlwiXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xNSAxNi41NjIzVjE2LjI0OThDMTUgMTUuMjI4NSAxNS42MzEyIDE0LjY3NDggMTYuMjYzNyAxNC4yNDk4QzE2Ljg4MTIgMTMuODMzNSAxNy41IDEzLjI5MSAxNy41IDEyLjI5MUMxNy41IDEwLjkwOTggMTYuMzgxMyA5Ljc5MTAyIDE1IDkuNzkxMDJDMTMuNjE4NyA5Ljc5MTAyIDEyLjUgMTAuOTA5OCAxMi41IDEyLjI5MVwiXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xNC45OTg4IDIwQzE0LjgyNjMgMjAgMTQuNjg2MyAyMC4xNCAxNC42ODc1IDIwLjMxMjVDMTQuNjg3NSAyMC40ODUgMTQuODI3NSAyMC42MjUgMTUgMjAuNjI1QzE1LjE3MjUgMjAuNjI1IDE1LjMxMjUgMjAuNDg1IDE1LjMxMjUgMjAuMzEyNUMxNS4zMTI1IDIwLjE0IDE1LjE3MjUgMjAgMTQuOTk4OCAyMFwiXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNoZWNrYm94RmllbGQtY29udGFpbmVyXCJcbiAgICBbY2xhc3MudHdvLWNvbHVtbl09XCJkaXNwbGF5T3B0aW9uc0luQ29sdW1uXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjdXN0b21PcHRpb25zXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgW2lkXT1cIm9wdGlvbi52YWx1ZSArIHF1ZXN0aW9uPy5pZFwiXG4gICAgICAgIFtuYW1lXT1cIm9wdGlvbi52YWx1ZSArICdDaGVja2JveCdcIlxuICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKG9wdGlvbiwgJGV2ZW50KVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc09wdGlvbkRpc2FibGVkKG9wdGlvbilcIlxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZE9wdGlvbnMuaW5jbHVkZXMob3B0aW9uKVwiXG4gICAgICAgIFthdHRyLmRhdGEtdmFsdWVdPVwic2VsZWN0ZWRPcHRpb25zLmluY2x1ZGVzKG9wdGlvbilcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImZvcm1DaGVja0xhYmVsIG1lLTQgbWItMlwiXG4gICAgICAgIFtmb3JdPVwib3B0aW9uLnZhbHVlICsgcXVlc3Rpb24/LmlkXCJcbiAgICAgICAgPnt7IG9wdGlvbi5sYWJlbCB9fTwvbGFiZWxcbiAgICAgID5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cImlzSW52YWxpZCAmJiAoIWluTGluZSB8fCBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwKVwiXG4gICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgPlxuICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInZhbGlkYXRpb25GYWlsZWQgJiYgIWlzSW52YWxpZFwiIGNsYXNzPVwidGV4dC1kYW5nZXIgZXJyb3ItbWVzc2FnZVwiPlxuICAgIDxzdmdcbiAgICAgIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiXG4gICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgID5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMTIuMDAxIDE2Ljc1QzEyLjEzOSAxNi43NSAxMi4yNTEgMTYuNjM4IDEyLjI1IDE2LjVDMTIuMjUgMTYuMzYyIDEyLjEzOCAxNi4yNSAxMiAxNi4yNUMxMS44NjIgMTYuMjUgMTEuNzUgMTYuMzYyIDExLjc1IDE2LjVDMTEuNzUgMTYuNjM4IDExLjg2MiAxNi43NSAxMi4wMDEgMTYuNzVcIlxuICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTEyIDIxQzcuMDI5IDIxIDMgMTYuOTcxIDMgMTJDMyA3LjAyOSA3LjAyOSAzIDEyIDNDMTYuOTcxIDMgMjEgNy4wMjkgMjEgMTJDMjEgMTYuOTcxIDE2Ljk3MSAyMSAxMiAyMVpcIlxuICAgICAgICBmaWxsPVwiI0ZGMDAwMFwiXG4gICAgICAgIHN0cm9rZT1cIiNGRjAwMDBcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMTIgMTIuNzVMMTIgNy43NVwiXG4gICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjE2XCIgcj1cIjFcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgIDwvc3ZnPlxuICAgIHt7IHZhbGlkYXRpb25NZXNzYWdlIH19XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2NoZWNrLWJveC1maWVsZHMvY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2NoZWNrLWJveC1maWVsZHMvY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBV3ZFLE1BQU0sT0FBTyx1QkFBdUI7SUE2QmxDLFlBQ1UsV0FBd0IsRUFDeEIsaUJBQW9DLEVBQ3BDLE9BQThCLEVBQzlCLGdCQUF5QztRQUh6QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUFoQzFDLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBRXZCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBR3JDLENBQUM7UUFFTCxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUczQixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzFCLGFBQVEs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QUNILENBQUM7K0dBOWZVLHVCQUF1QjttR0FBdkIsdUJBQXVCLGlOQ1hwQyw0K0hBK0dBOzs0RkRwR2EsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHNCQUFzQjs0TUFLdkIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBFbGVtZW50VHJhY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGVtZW50LXRyYWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTY29yZUNhbGN1bGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Njb3JlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY2hlY2stYm94LWZpZWxkcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVjay1ib3gtZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDaGVja0JveEZpZWxkc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgaW5MaW5lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGluQ2FyZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uSW5kZXghOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBhbnN3ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBhbnN3ZXI6IGFueTtcbiAgICBtYXhQb3NzaWJsZVNjb3JlPzogbnVtYmVyO1xuICB9PigpO1xuXG4gIGNvdW50OiBudW1iZXIgPSAwO1xuICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBoaW50OiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0aW9uVHlwZTogc3RyaW5nID0gJyc7XG4gIG1pbmltdW1TZWxlY3Rpb24/OiBudW1iZXI7XG4gIG1heGltdW1TZWxlY3Rpb24/OiBudW1iZXI7XG4gIG9wdGlvblR5cGU6IHN0cmluZyA9ICcnO1xuICBsb29rdXBUYWJsZTogYW55ID0ge307XG4gIGN1c3RvbU9wdGlvbnM6IGFueVtdID0gW107XG4gIGRhdGFiYXNlOiBhbnkgPSB7fTtcbiAgYXBpOiBhbnkgPSB7fTtcbiAgYXBpT3B0aW9uczogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xuICB2YWxpZGF0aW9uRmFpbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGRpc3BsYXlPcHRpb25zSW5Db2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGVsZW1lbnRJZDogc3RyaW5nID0gJyc7XG4gIG1heFBvc3NpYmxlU2NvcmU/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFja2VyOiBFbGVtZW50VHJhY2tlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY29yZUNhbGNTZXJ2aWNlOiBTY29yZUNhbGN1bGF0aW9uU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy52YWx1ZUFzc2lnbmVkKCk7XG4gIH1cblxuICB2YWx1ZUFzc2lnbmVkKCkge1xuICAgIHRoaXMuY291bnQgPSB0aGlzLnF1ZXN0aW9uLmNvdW50O1xuICAgIHRoaXMucmVxdWlyZWQgPSB0aGlzLnF1ZXN0aW9uLnJlcXVpcmVkO1xuICAgIHRoaXMuaGludCA9IHRoaXMucXVlc3Rpb24uaGludDtcbiAgICB0aGlzLnNlbGVjdGlvblR5cGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LmFwcGVhcmFuY2Uuc2VsZWN0aW9uVHlwZTtcbiAgICB0aGlzLmRpc3BsYXlPcHRpb25zSW5Db2x1bW4gPVxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLmRpc3BsYXlPcHRpb25zSW5Db2x1bW4gPz8gZmFsc2U7XG4gICAgdGhpcy5taW5pbXVtU2VsZWN0aW9uID1cbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5taW5pbXVtU2VsZWN0aW9uO1xuICAgIHRoaXMubWF4aW11bVNlbGVjdGlvbiA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWF4aW11bVNlbGVjdGlvbjtcbiAgICB0aGlzLm9wdGlvblR5cGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5vcHRpb25UeXBlO1xuICAgIHN3aXRjaCAodGhpcy5vcHRpb25UeXBlKSB7XG4gICAgICBjYXNlICdPUFRJT04nOlxuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5jdXN0b21PcHRpb25zO1xuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5jdXN0b21PcHRpb25zLm1hcChcbiAgICAgICAgICAob3B0aW9uOiBhbnkpID0+ICh7XG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgICAgICAgICAgbGFiZWw6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5hbnN3ZXIpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21PcHRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0xPT0tVUCc6XG4gICAgICAgIHRoaXMubG9va3VwVGFibGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5sb29rdXBUYWJsZTtcbiAgICAgICAgdGhpcy5mZXRjaERhdGFGcm9tTG9va3VwKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnREFUQUJBU0UnOlxuICAgICAgICB0aGlzLmRhdGFiYXNlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24uZGF0YWJhc2U7XG4gICAgICAgIHRoaXMuZmV0Y2hEYXRhRnJvbURhdGFiYXNlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQVBJJzpcbiAgICAgICAgdGhpcy5hcGkgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5hcGk7XG4gICAgICAgIHRoaXMuZmV0Y2hEYXRhRnJvbUFQSSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBvcHRpb24gdHlwZTonLCB0aGlzLm9wdGlvblR5cGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdTSU5HTEUnKSB7XG4gICAgICB0aGlzLm1pbmltdW1TZWxlY3Rpb24gPSAxO1xuICAgICAgdGhpcy5tYXhpbXVtU2VsZWN0aW9uID0gMTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdNVUxUSVBMRScgJiZcbiAgICAgICF0aGlzLm1pbmltdW1TZWxlY3Rpb24gJiZcbiAgICAgICF0aGlzLm1heGltdW1TZWxlY3Rpb25cbiAgICApIHtcbiAgICAgIHRoaXMubWluaW11bVNlbGVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubWF4aW11bVNlbGVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5zY29yaW5nICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnNjb3JpbmcuZW5hYmxlU2NvcmluZ1xuICAgICkge1xuICAgICAgdGhpcy5tYXhQb3NzaWJsZVNjb3JlID1cbiAgICAgICAgdGhpcy5zY29yZUNhbGNTZXJ2aWNlLmdldE1heFBvc3NpYmxlU2NvcmVGb3JRdWVzdGlvbih0aGlzLnF1ZXN0aW9uKTtcbiAgICAgIHRoaXMucXVlc3Rpb24ubWF4UG9zc2libGVTY29yZSA9IHRoaXMubWF4UG9zc2libGVTY29yZTtcbiAgICB9XG4gIH1cblxuICBpbml0aWFsaXplQ3VzdG9tT3B0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jdXN0b21PcHRpb25zPy5mb3JFYWNoKChvcHRpb246IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnF1ZXN0aW9uPy5hbnN3ZXI/LmZpbmQoKGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgYS5pbmNsdWRlcygnfCcpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGEuc3BsaXQoJ3wnKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1sxXSA9PT0gb3B0aW9uLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhLnRvU3RyaW5nKCkgPT09IG9wdGlvbi52YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9KVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5jaGlsZExvZ2ljcyAmJiB0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xuICAgICAgdGhpcy51cGRhdGVDaGlsZExvZ2ljcyh0aGlzLnF1ZXN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBvbkNoZWNrYm94Q2hhbmdlKG9wdGlvbjogYW55LCBldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gJ1NJTkdMRScpIHtcbiAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IFtvcHRpb25dO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IFtgJHtvcHRpb24ubGFiZWx9fCR7b3B0aW9uLnZhbHVlfWBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNNaW5pbXVtU2VsZWN0aW9uVmFsaWQoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gJ01VTFRJUExFJykge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE9wdGlvbnMuaW5jbHVkZXMob3B0aW9uKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0gIT09IG9wdGlvblxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAoXG4gICAgICAgIChpdGVtKSA9PiBgJHtpdGVtLmxhYmVsfXwke2l0ZW0udmFsdWV9YFxuICAgICAgKTtcbiAgICAgIHRoaXMuaXNNaW5pbXVtU2VsZWN0aW9uVmFsaWQoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLm1heGltdW1TZWxlY3Rpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gdGhpcy5tYXhpbXVtU2VsZWN0aW9uXG4gICAgKSB7XG4gICAgICBldmVudC50YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PiBpdGVtICE9PSBvcHRpb25cbiAgICAgICk7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcChcbiAgICAgICAgKGl0ZW0pID0+IGAke2l0ZW0ubGFiZWx9fCR7aXRlbS52YWx1ZX1gXG4gICAgICApO1xuICAgICAgdGhpcy5pc01pbmltdW1TZWxlY3Rpb25WYWxpZCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNoaWxkTG9naWNzKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNoaWxkTG9naWNzKHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgICBjb25zdCBzY29yZVJlc3VsdCA9IHRoaXMuc2NvcmVDYWxjU2VydmljZS5jYWxjdWxhdGVTY29yZUZyb21BbnN3ZXIoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlcixcbiAgICAgIHRoaXMucXVlc3Rpb25cbiAgICApO1xuICAgIHRoaXMucXVlc3Rpb24uc2NvcmUgPSBzY29yZVJlc3VsdD8uc2NvcmVzO1xuICAgIHRoaXMuYW5zd2VyQ2hhbmdlLmVtaXQoe1xuICAgICAgYW5zd2VyOiB0aGlzLnF1ZXN0aW9uLmFuc3dlcixcbiAgICAgIG1heFBvc3NpYmxlU2NvcmU6IHRoaXMubWF4UG9zc2libGVTY29yZSxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUNoaWxkTG9naWNzKHF1ZXN0aW9uOiBhbnkpIHtcbiAgICBpZiAocXVlc3Rpb24uY2hpbGRMb2dpY3MgJiYgQXJyYXkuaXNBcnJheShxdWVzdGlvbi5jaGlsZExvZ2ljcykpIHtcbiAgICAgIHF1ZXN0aW9uLmNoaWxkTG9naWNzLmZvckVhY2goKGNoaWxkTG9naWM6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSAnU0lOR0xFJykge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNoaWxkTG9naWMuc2hvd0xvZ2ljID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KGNoaWxkTG9naWMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVDb25kaXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnNbMF0/LmxhYmVsLFxuICAgICAgICAgICAgICAgIGNoaWxkTG9naWMuY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIGNoaWxkTG9naWMuaW5wdXRWYWx1ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhckFuc3dlcnNSZWN1cnNpdmVseShjaGlsZExvZ2ljKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSAnTVVMVElQTEUnKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoY2hpbGRMb2dpYyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTGFiZWxzID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMubWFwKFxuICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLmxhYmVsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlTXVsdGlwbGVDb25kaXRpb24oXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRMYWJlbHMsXG4gICAgICAgICAgICAgICAgY2hpbGRMb2dpYy5jb25kaXRpb24sXG4gICAgICAgICAgICAgICAgY2hpbGRMb2dpYy5pbnB1dFZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KGNoaWxkTG9naWMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkobG9naWM6IGFueSkge1xuICAgIGlmICghbG9naWMgfHwgIWxvZ2ljLnJvd3MpIHJldHVybjtcblxuICAgIGxvZ2ljLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgIHJvdy5ncmlkLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gaXRlbS5lbGVtZW50O1xuXG4gICAgICAgIGlmIChpdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiYgZWxlbWVudCkge1xuICAgICAgICAgIC8vIENsZWFyIGFuc3dlciBpZiBwcmVzZW50XG4gICAgICAgICAgaWYgKCdhbnN3ZXInIGluIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYW5zd2VyID0gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY2xlYXIgY2hpbGRMb2dpY3MgaWYgYW55XG4gICAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRMb2dpY3MgJiYgZWxlbWVudC5jaGlsZExvZ2ljcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50LmNoaWxkTG9naWNzLmZvckVhY2goKGNoaWxkTG9naWM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KGNoaWxkTG9naWMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0uZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmIGVsZW1lbnQgJiYgZWxlbWVudC5yb3dzKSB7XG4gICAgICAgICAgLy8gU1VCRk9STSBjb250YWlucyBpdHMgb3duIHJvd3Mgc3RydWN0dXJlIGxpa2UgYSBmb3JtXG4gICAgICAgICAgdGhpcy5jbGVhckFuc3dlcnNSZWN1cnNpdmVseSh7IHJvd3M6IGVsZW1lbnQucm93cyB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBldmFsdWF0ZUNvbmRpdGlvbihhbnN3ZXI6IGFueSwgY29uZGl0aW9uOiBzdHJpbmcsIGlucHV0VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlucHV0VmFsdWVzID0gQXJyYXkuaXNBcnJheShpbnB1dFZhbHVlKVxuICAgICAgPyBpbnB1dFZhbHVlLm1hcCgodmFsKSA9PiB2YWwudG9TdHJpbmcoKSlcbiAgICAgIDogW2lucHV0VmFsdWUudG9TdHJpbmcoKV07XG5cbiAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuICAgICAgY2FzZSAnIT0nOlxuICAgICAgICByZXR1cm4gIWlucHV0VmFsdWVzLmluY2x1ZGVzKGFuc3dlcik7XG4gICAgICBjYXNlICc9JzpcbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWVzLmluY2x1ZGVzKGFuc3dlcik7XG4gICAgICBjYXNlICdJTic6XG4gICAgICAgIHJldHVybiBpbnB1dFZhbHVlcy5pbmNsdWRlcyhhbnN3ZXIpO1xuICAgICAgY2FzZSAnTk9UIElOJzpcbiAgICAgICAgcmV0dXJuICFpbnB1dFZhbHVlcy5pbmNsdWRlcyhhbnN3ZXIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlTXVsdGlwbGVDb25kaXRpb24oXG4gICAgYW5zd2VyczogYW55W10sXG4gICAgY29uZGl0aW9uOiBzdHJpbmcsXG4gICAgaW5wdXRWYWx1ZTogYW55XG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlucHV0VmFsdWVzID0gQXJyYXkuaXNBcnJheShpbnB1dFZhbHVlKVxuICAgICAgPyBpbnB1dFZhbHVlLm1hcCgodmFsKSA9PiB2YWwudG9TdHJpbmcoKSlcbiAgICAgIDogW2lucHV0VmFsdWUudG9TdHJpbmcoKV07XG5cbiAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuICAgICAgY2FzZSAnIT0nOlxuICAgICAgICByZXR1cm4gYW5zd2Vycy5ldmVyeSgoYW5zd2VyKSA9PiAhaW5wdXRWYWx1ZXMuaW5jbHVkZXMoYW5zd2VyKSk7XG4gICAgICBjYXNlICc9JzpcbiAgICAgICAgcmV0dXJuIGFuc3dlcnMuc29tZSgoYW5zd2VyKSA9PiBpbnB1dFZhbHVlcy5pbmNsdWRlcyhhbnN3ZXIpKTtcbiAgICAgIGNhc2UgJ0lOJzpcbiAgICAgICAgcmV0dXJuIGFuc3dlcnMuc29tZSgoYW5zd2VyKSA9PiBpbnB1dFZhbHVlcy5pbmNsdWRlcyhhbnN3ZXIpKTtcbiAgICAgIGNhc2UgJ05PVCBJTic6XG4gICAgICAgIHJldHVybiBhbnN3ZXJzLmV2ZXJ5KChhbnN3ZXIpID0+ICFpbnB1dFZhbHVlcy5pbmNsdWRlcyhhbnN3ZXIpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmZXRjaERhdGFGcm9tTG9va3VwKCkge1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuZmV0Y2hEYXRhRnJvbUxvb2t1cCh0aGlzLmxvb2t1cFRhYmxlKS5zdWJzY3JpYmUoXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gcmVzcG9uc2UucmVzdWx0LnZhbHVlcy5tYXAoXG4gICAgICAgICAgKGl0ZW06IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9KSA9PiAoe1xuICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5hbnN3ZXIpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21PcHRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdIVFRQIEVycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZmV0Y2hEYXRhRnJvbURhdGFiYXNlKCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YWJhc2UgPSB0aGlzLnRyYW5zZm9ybURhdGFiYXNlT2JqZWN0KHRoaXMuZGF0YWJhc2UpO1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuZmV0Y2hEYXRhRnJvbURhdGFiYXNlKHRyYW5zZm9ybWVkRGF0YWJhc2UpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IHJlc3BvbnNlLnJlc3VsdC5tYXAoXG4gICAgICAgICAgICAoaXRlbTogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0pID0+ICh7XG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5hbnN3ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUN1c3RvbU9wdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBkYXRhIGZyb20gZGF0YWJhc2U6JywgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSFRUUCBFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHRyYW5zZm9ybURhdGFiYXNlT2JqZWN0KGRhdGFiYXNlOiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFibGVOYW1lOiBkYXRhYmFzZS50YWJsZU5hbWUsXG4gICAgICB2YWx1ZUZpZWxkOiBkYXRhYmFzZS52YWx1ZUZpZWxkLFxuICAgICAgbGFiZWxGaWVsZDogZGF0YWJhc2UubGFiZWxGaWVsZCxcbiAgICAgIGxhYmVsUGF0dGVybjogZGF0YWJhc2U/LmxhYmVsUGF0dGVybixcbiAgICAgIGNyaXRlcmlhOiBkYXRhYmFzZS5jcml0ZXJpYS5tYXAoKGNyaXRlcmlhOiBhbnkpID0+ICh7XG4gICAgICAgIGZpZWxkOiBjcml0ZXJpYT8uZmllbGQsXG4gICAgICAgIHZhbHVlU291cmNlOiBjcml0ZXJpYT8udmFsdWVTb3VyY2UsXG4gICAgICAgIGNvbmRpdGlvbjogY3JpdGVyaWE/LmNvbmRpdGlvbixcbiAgICAgICAgdmFsdWU6IGNyaXRlcmlhPy5pbnB1dFZhbHVlLFxuICAgICAgICBsb2dpY2FsT3BlcmF0b3I6IGNyaXRlcmlhPy5sb2dpY2FsT3BlcmF0b3IsXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIGZldGNoRGF0YUZyb21BUEkoKSB7XG4gICAgY29uc3QgYWxsb3dlZENoYXJzID0gWycuJywgJywnLCAnLScsICdfJywgJygnLCAnKScsICcnXTtcbiAgICBjb25zdCBhcGlDb25maWcgPSB0aGlzLmFwaTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZldGNoRGF0YUZyb21FeHRlcm5hbEFQSShhcGlDb25maWcpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgaWYgKGFwaUNvbmZpZy5wYXRoVG9WYWx1ZSkge1xuICAgICAgICAgIGRhdGEgPSB0aGlzLmV4dHJhY3REYXRhQnlQYXRoKHJlc3BvbnNlLCBhcGlDb25maWcucGF0aFRvVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGEgPSByZXNwb25zZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IGRhdGEubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhcGlDb25maWcubGFiZWxQYXR0ZXJuICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGFwaUNvbmZpZy5sYWJlbFBhdHRlcm4pICYmXG4gICAgICAgICAgICBhcGlDb25maWcubGFiZWxQYXR0ZXJuLmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBsYWJlbCA9ICcnO1xuICAgICAgICAgICAgYXBpQ29uZmlnLmxhYmVsUGF0dGVybi5mb3JFYWNoKChwYXR0ZXJuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4udHJpbSgpO1xuICAgICAgICAgICAgICBpZiAoYWxsb3dlZENoYXJzLmluY2x1ZGVzKHBhdHRlcm4pKSB7XG4gICAgICAgICAgICAgICAgbGFiZWwgKz0gcGF0dGVybjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVtwYXR0ZXJuXSAhPT0gdW5kZWZpbmVkICYmIGl0ZW1bcGF0dGVybl0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsICs9IGl0ZW1bcGF0dGVybl0gKyAnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtW2FwaUNvbmZpZy52YWx1ZUZpZWxkLnRyaW0oKV0sXG4gICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtW2FwaUNvbmZpZy52YWx1ZUZpZWxkLnRyaW0oKV0sXG4gICAgICAgICAgICAgIGxhYmVsOiBpdGVtW2FwaUNvbmZpZy5sYWJlbEZpZWxkLnRyaW0oKV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUN1c3RvbU9wdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hUVFAgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBleHRyYWN0RGF0YUJ5UGF0aChkYXRhOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IGFjYyAmJiBhY2NbcGFydF0sIGRhdGEpO1xuICB9XG5cbiAgaXNNaW5pbXVtU2VsZWN0aW9uVmFsaWQoKSB7XG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09IDAgJiYgdGhpcy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbic7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbic7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluaW11bVNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09ICdTSU5HTEUnKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPCB0aGlzLm1pbmltdW1TZWxlY3Rpb24gJiZcbiAgICAgICAgICB0aGlzLnJlcXVpcmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBNaW5pbXVtICR7dGhpcy5taW5pbXVtU2VsZWN0aW9ufSAgc2VsZWN0aW9uKHMpIHJlcXVpcmVkLmA7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBNaW5pbXVtICR7dGhpcy5taW5pbXVtU2VsZWN0aW9ufSAgc2VsZWN0aW9uKHMpIHJlcXVpcmVkLmA7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoIDwgdGhpcy5taW5pbXVtU2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgTWluaW11bSAke3RoaXMubWluaW11bVNlbGVjdGlvbn0gIHNlbGVjdGlvbihzKSByZXF1aXJlZC5gO1xuICAgICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbk1lc3NhZ2UgPSBgTWluaW11bSAke3RoaXMubWluaW11bVNlbGVjdGlvbn0gIHNlbGVjdGlvbihzKSByZXF1aXJlZC5gO1xuICAgICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRPcHRpb25zKCkge1xuICAgIGlmICh0aGlzLm9wdGlvblR5cGUgPT09ICdPUFRJT04nKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21PcHRpb25zO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25UeXBlID09PSAnTE9PS1VQJykge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5sb29rdXBUYWJsZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvblR5cGUgPT09ICdBUEknKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGlPcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWVGaWVsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBpc09wdGlvbkRpc2FibGVkKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubWF4aW11bVNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPj0gdGhpcy5tYXhpbXVtU2VsZWN0aW9uICYmXG4gICAgICAhdGhpcy5zZWxlY3RlZE9wdGlvbnMuaW5jbHVkZXMob3B0aW9uKVxuICAgICk7XG4gIH1cblxuICBoYW5kbGVWYWxpZGF0aW9uKFxuICAgIGlzVmFsaWQ6IGJvb2xlYW4sXG4gICAgbWVzc2FnZTogc3RyaW5nID0gJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnXG4gICkge1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnNldEludmFsaWQodGhpcy5xdWVzdGlvbi5pZCwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluTGluZSB8fCB0aGlzLmluQ2FyZFxuICAgICAgPyBgJHt0aGlzLnN1Ym1pc3Npb25JbmRleH0tJHt0aGlzLnF1ZXN0aW9uLmlkfWBcbiAgICAgIDogYCR7dGhpcy5xdWVzdGlvbi5pZH1gO1xuICB9XG5cbiAgZ2V0IGlzSW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEVycm9yTWVzc2FnZSh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICB9XG5cbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pbkxpbmUgfHwgdGhpcy5pbkNhcmQpIHtcbiAgICAgIHRoaXMuZWxlbWVudElkID0gYHF1ZXN0aW9uLSR7dGhpcy5zdWJtaXNzaW9uSW5kZXh9LSR7dGhpcy5xdWVzdGlvbi5pZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsZW1lbnRJZCA9IGBxdWVzdGlvbi0ke3RoaXMucXVlc3Rpb24uaWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLnRyYWNrZXIucmVnaXN0ZXJFbGVtZW50KHRoaXMuZWxlbWVudElkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmVsZW1lbnRJZCkge1xuICAgICAgdGhpcy50cmFja2VyLnVucmVnaXN0ZXJFbGVtZW50KHRoaXMuZWxlbWVudElkKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgW25nQ2xhc3NdPVwieyAnbWItNCc6ICFpbkxpbmUgfVwiXG4gIGNsYXNzPVwicHgtM1wiXG4gIFtpZF09XCIoaW5MaW5lIHx8IGluQ2FyZCkgPyAncXVlc3Rpb24tJyArIHN1Ym1pc3Npb25JbmRleCArICctJyArIHF1ZXN0aW9uLmlkIDogJ3F1ZXN0aW9uLScgKyBxdWVzdGlvbi5pZFwiXG4gIFthdHRyLm5hbWVdPVwicXVlc3Rpb24udGVzdEVsZW1lbnROYW1lXCJcbj5cbiAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXIgbWItM1wiICpuZ0lmPVwiIWluTGluZVwiPlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvbk51bWJlclwiIFtpbm5lckhUTUxdPVwicXVlc3Rpb24ucXVlc3Rpb25OdW1iZXJcIj48L2Rpdj5cbiAgICA8c3BhbiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCIgY2xhc3M9XCJzcGFjZVwiPjwvc3Bhbj4gPGxhYmVsPnt7IHF1ZXN0aW9uLnF1ZXN0aW9uIH19PC9sYWJlbFxuICAgID4mbmJzcDtcbiAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzdmctd3JhcHBlciBtYi0yIGhpbnRJY29uXCJcbiAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiaGludFwiXG4gICAgICAqbmdJZj1cImhpbnRcIlxuICAgID5cbiAgICAgIDxzdmdcbiAgICAgICAgY2xhc3M9XCJoaW50U3ZnXCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAzMCAzMFwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGQ9XCJNMTUgMjYuMjVWMjYuMjVDOC43ODYyNSAyNi4yNSAzLjc1IDIxLjIxMzggMy43NSAxNVYxNUMzLjc1IDguNzg2MjUgOC43ODYyNSAzLjc1IDE1IDMuNzVWMy43NUMyMS4yMTM4IDMuNzUgMjYuMjUgOC43ODYyNSAyNi4yNSAxNVYxNUMyNi4yNSAyMS4yMTM4IDIxLjIxMzggMjYuMjUgMTUgMjYuMjVaXCJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTE1IDE2LjU2MjNWMTYuMjQ5OEMxNSAxNS4yMjg1IDE1LjYzMTIgMTQuNjc0OCAxNi4yNjM3IDE0LjI0OThDMTYuODgxMiAxMy44MzM1IDE3LjUgMTMuMjkxIDE3LjUgMTIuMjkxQzE3LjUgMTAuOTA5OCAxNi4zODEzIDkuNzkxMDIgMTUgOS43OTEwMkMxMy42MTg3IDkuNzkxMDIgMTIuNSAxMC45MDk4IDEyLjUgMTIuMjkxXCJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTE0Ljk5ODggMjBDMTQuODI2MyAyMCAxNC42ODYzIDIwLjE0IDE0LjY4NzUgMjAuMzEyNUMxNC42ODc1IDIwLjQ4NSAxNC44Mjc1IDIwLjYyNSAxNSAyMC42MjVDMTUuMTcyNSAyMC42MjUgMTUuMzEyNSAyMC40ODUgMTUuMzEyNSAyMC4zMTI1QzE1LjMxMjUgMjAuMTQgMTUuMTcyNSAyMCAxNC45OTg4IDIwXCJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2hlY2tib3hGaWVsZC1jb250YWluZXJcIlxuICAgIFtjbGFzcy50d28tY29sdW1uXT1cImRpc3BsYXlPcHRpb25zSW5Db2x1bW5cIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGN1c3RvbU9wdGlvbnNcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBbaWRdPVwib3B0aW9uLnZhbHVlICsgcXVlc3Rpb24/LmlkXCJcbiAgICAgICAgW25hbWVdPVwib3B0aW9uLnZhbHVlICsgJ0NoZWNrYm94J1wiXG4gICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2Uob3B0aW9uLCAkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKVwiXG4gICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pXCJcbiAgICAgICAgW2F0dHIuZGF0YS12YWx1ZV09XCJzZWxlY3RlZE9wdGlvbnMuaW5jbHVkZXMob3B0aW9uKVwiXG4gICAgICAvPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZm9ybUNoZWNrTGFiZWwgbWUtNCBtYi0yXCJcbiAgICAgICAgW2Zvcl09XCJvcHRpb24udmFsdWUgKyBxdWVzdGlvbj8uaWRcIlxuICAgICAgICA+e3sgb3B0aW9uLmxhYmVsIH19PC9sYWJlbFxuICAgICAgPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiaXNJbnZhbGlkICYmICghaW5MaW5lIHx8IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDApXCJcbiAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICA+XG4gICAge3sgZXJyb3JNZXNzYWdlIH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwidmFsaWRhdGlvbkZhaWxlZCAmJiAhaXNJbnZhbGlkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBlcnJvci1tZXNzYWdlXCI+XG4gICAgPHN2Z1xuICAgICAgY2xhc3M9XCJ2YWxpZGF0aW9uU3ZnXCJcbiAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0xMi4wMDEgMTYuNzVDMTIuMTM5IDE2Ljc1IDEyLjI1MSAxNi42MzggMTIuMjUgMTYuNUMxMi4yNSAxNi4zNjIgMTIuMTM4IDE2LjI1IDEyIDE2LjI1QzExLjg2MiAxNi4yNSAxMS43NSAxNi4zNjIgMTEuNzUgMTYuNUMxMS43NSAxNi42MzggMTEuODYyIDE2Ljc1IDEyLjAwMSAxNi43NVwiXG4gICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGQ9XCJNMTIgMjFDNy4wMjkgMjEgMyAxNi45NzEgMyAxMkMzIDcuMDI5IDcuMDI5IDMgMTIgM0MxNi45NzEgMyAyMSA3LjAyOSAyMSAxMkMyMSAxNi45NzEgMTYuOTcxIDIxIDEyIDIxWlwiXG4gICAgICAgIGZpbGw9XCIjRkYwMDAwXCJcbiAgICAgICAgc3Ryb2tlPVwiI0ZGMDAwMFwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0xMiAxMi43NUwxMiA3Ljc1XCJcbiAgICAgICAgc3Ryb2tlPVwid2hpdGVcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgLz5cbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgPC9zdmc+XG4gICAge3sgdmFsaWRhdGlvbk1lc3NhZ2UgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==