@bnsights/bbsf-admin-portal 1.0.74 → 1.0.76
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/README.md +5 -1
- package/{bnsights-bbsf-admin-portal-1.0.74.tgz → bnsights-bbsf-admin-portal-1.0.76.tgz} +0 -0
- package/bundles/bnsights-bbsf-admin-portal.umd.js +603 -299
- package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
- package/esm2015/lib/Pages/shared/components/external-url/external-url.component.js +2 -2
- package/esm2015/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.js +2 -1
- package/esm2015/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.js +148 -91
- package/esm2015/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.js +159 -97
- package/esm2015/lib/Pages/shared/components/survey/survey-info/preview/preview.component.js +2 -2
- package/esm2015/lib/Pages/shared/components/survey/survey-info/survey-info.component.js +8 -3
- package/esm2015/lib/Pages/shared/components/survey/survey.component.js +94 -47
- package/esm2015/lib/Pages/shared/components/survey-form/survey-form.component.js +219 -87
- package/fesm2015/bnsights-bbsf-admin-portal.js +616 -312
- package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
- package/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.d.ts +1 -0
- package/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.d.ts +1 -0
- package/lib/Pages/shared/components/survey/survey.component.d.ts +1 -0
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Component, Input, ViewChild } from '@angular/core';
|
|
2
|
-
import { FormGroup, FormGroupDirective, NgForm, Validators } from '@angular/forms';
|
|
3
|
-
import { ControlLayout, InputType, TextBoxOptions, ToggleSlideOptions, ForceDirection, TextAreaOptions, ImageUploadOptions, DropdownOptions, StartView, SelectMode, PickerType, DatePickerOptions, RangeNumber, FileUploadOptions, DropdownListComponent, FileType, RadioButtonOptions } from '@bnsights/bbsf-controls';
|
|
1
|
+
import { Component, Input, ViewChild, } from '@angular/core';
|
|
2
|
+
import { FormGroup, FormGroupDirective, NgForm, Validators, } from '@angular/forms';
|
|
3
|
+
import { ControlLayout, InputType, TextBoxOptions, ToggleSlideOptions, ForceDirection, TextAreaOptions, ImageUploadOptions, DropdownOptions, StartView, SelectMode, PickerType, DatePickerOptions, RangeNumber, FileUploadOptions, DropdownListComponent, FileType, RadioButtonOptions, } from '@bnsights/bbsf-controls';
|
|
4
4
|
import { AdDirective } from '../AdDirective';
|
|
5
5
|
import { SurveyFiledValueDTO } from '../../models/SurveyModels/survey-filed-value';
|
|
6
6
|
import { SurveyOptionType } from '../../Enums/Enums';
|
|
@@ -25,10 +25,10 @@ export class SurveyFormComponent {
|
|
|
25
25
|
this.checkList = [];
|
|
26
26
|
this.showedChildQuestion = [];
|
|
27
27
|
this.isFirstValid = true;
|
|
28
|
-
this.labelClass =
|
|
28
|
+
this.labelClass = 'Testtsadfv';
|
|
29
29
|
this.toCamel = (obj) => {
|
|
30
30
|
if (Array.isArray(obj)) {
|
|
31
|
-
return obj.map(v => this.toCamel(v));
|
|
31
|
+
return obj.map((v) => this.toCamel(v));
|
|
32
32
|
}
|
|
33
33
|
else if (obj != null && obj.constructor === Object) {
|
|
34
34
|
return Object.keys(obj).reduceRight((result, key) => (Object.assign(Object.assign({}, result), { [(key.charAt(0).toUpperCase() + key.slice(1) || key).toString()]: this.toCamel(obj[key]) })), {});
|
|
@@ -42,7 +42,7 @@ export class SurveyFormComponent {
|
|
|
42
42
|
this.filedGroup = new FormGroup({});
|
|
43
43
|
this.group.addControl(this.options.Name, this.filedGroup);
|
|
44
44
|
this.group.statusChanges.subscribe((e) => {
|
|
45
|
-
console.log(
|
|
45
|
+
console.log('Group', e);
|
|
46
46
|
});
|
|
47
47
|
for (let index = 0; index < this.options.QuestionList.length; index++) {
|
|
48
48
|
var element = this.options.QuestionList[index];
|
|
@@ -50,15 +50,21 @@ export class SurveyFormComponent {
|
|
|
50
50
|
///TextBox
|
|
51
51
|
case SurveyOptionType.Text.toLocaleLowerCase():
|
|
52
52
|
var Text = new TextBoxOptions();
|
|
53
|
-
Text.Name =
|
|
54
|
-
Text.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
53
|
+
Text.Name = 'q' + element.iD_GUID;
|
|
54
|
+
Text.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
55
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
56
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
55
57
|
Text.HideLabel = false;
|
|
56
|
-
Text.IsRequired = element.isRelatedToSurveyQuestion
|
|
58
|
+
Text.IsRequired = element.isRelatedToSurveyQuestion
|
|
59
|
+
? false
|
|
60
|
+
: element.options.isRequired;
|
|
57
61
|
Text.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
58
62
|
Text.IsDisabled = this.options.Readonly;
|
|
59
63
|
Text.LabelExtraClasses = this.labelClass;
|
|
60
64
|
Text.ViewType = ControlLayout.Vertical;
|
|
61
|
-
Text.LabelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
65
|
+
Text.LabelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
66
|
+
? element.options.description.arabic
|
|
67
|
+
: element.options.description.english;
|
|
62
68
|
if (element.value.text)
|
|
63
69
|
Text.Value = element.value.text;
|
|
64
70
|
if (element.options.maxLength)
|
|
@@ -72,15 +78,21 @@ export class SurveyFormComponent {
|
|
|
72
78
|
break;
|
|
73
79
|
case SurveyOptionType.Email.toLocaleLowerCase():
|
|
74
80
|
let Email = new TextBoxOptions();
|
|
75
|
-
Email.Name =
|
|
76
|
-
Email.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
81
|
+
Email.Name = 'q' + element.iD_GUID;
|
|
82
|
+
Email.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
83
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
84
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
77
85
|
Email.HideLabel = false;
|
|
78
86
|
Email.LabelExtraClasses = this.labelClass;
|
|
79
|
-
Email.IsRequired = element.isRelatedToSurveyQuestion
|
|
87
|
+
Email.IsRequired = element.isRelatedToSurveyQuestion
|
|
88
|
+
? false
|
|
89
|
+
: element.options.isRequired;
|
|
80
90
|
Email.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
81
91
|
Email.ViewType = ControlLayout.Vertical;
|
|
82
92
|
Email.IsDisabled = this.options.Readonly;
|
|
83
|
-
Email.LabelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
93
|
+
Email.LabelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
94
|
+
? element.options.description.arabic
|
|
95
|
+
: element.options.description.english;
|
|
84
96
|
Email.Type = InputType.Email;
|
|
85
97
|
if (element.value.text)
|
|
86
98
|
Email.Value = element.value.text;
|
|
@@ -90,15 +102,22 @@ export class SurveyFormComponent {
|
|
|
90
102
|
break;
|
|
91
103
|
case SurveyOptionType.Number.toLocaleLowerCase():
|
|
92
104
|
let Number = new TextBoxOptions();
|
|
93
|
-
Number.Name =
|
|
105
|
+
Number.Name = 'q' + element.iD_GUID;
|
|
94
106
|
Number.HideLabel = false;
|
|
95
107
|
Number.LabelExtraClasses = this.labelClass;
|
|
96
|
-
Number.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
97
|
-
|
|
108
|
+
Number.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
109
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
110
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
111
|
+
Number.IsRequired = element.isRelatedToSurveyQuestion
|
|
112
|
+
? false
|
|
113
|
+
: element.options.isRequired;
|
|
98
114
|
Number.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
99
115
|
Number.ViewType = ControlLayout.Vertical;
|
|
100
116
|
Number.IsDisabled = this.options.Readonly;
|
|
101
|
-
Number.LabelDescription =
|
|
117
|
+
Number.LabelDescription =
|
|
118
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
119
|
+
? element.options.description.arabic
|
|
120
|
+
: element.options.description.english;
|
|
102
121
|
Number.Type = InputType.Number;
|
|
103
122
|
let rangeNumber = new RangeNumber();
|
|
104
123
|
rangeNumber.To = element.options.maxLength;
|
|
@@ -113,15 +132,21 @@ export class SurveyFormComponent {
|
|
|
113
132
|
///DateTime
|
|
114
133
|
case SurveyOptionType.Date.toLocaleLowerCase():
|
|
115
134
|
let Date = new DatePickerOptions();
|
|
116
|
-
Date.Name =
|
|
135
|
+
Date.Name = 'q' + element.iD_GUID;
|
|
117
136
|
Date.HideLabel = false;
|
|
118
137
|
Date.LabelExtraClasses = this.labelClass;
|
|
119
|
-
Date.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
120
|
-
|
|
138
|
+
Date.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
139
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
140
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
141
|
+
Date.IsRequired = element.isRelatedToSurveyQuestion
|
|
142
|
+
? false
|
|
143
|
+
: element.options.isRequired;
|
|
121
144
|
Date.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
122
145
|
Date.ViewType = ControlLayout.Vertical;
|
|
123
146
|
Date.IsDisabled = this.options.Readonly;
|
|
124
|
-
Date.LabelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
147
|
+
Date.LabelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
148
|
+
? element.options.description.arabic
|
|
149
|
+
: element.options.description.english;
|
|
125
150
|
Date.PickerType = PickerType.Calendar;
|
|
126
151
|
Date.SelectMode = SelectMode.Single;
|
|
127
152
|
Date.StartView = StartView.Month;
|
|
@@ -133,15 +158,22 @@ export class SurveyFormComponent {
|
|
|
133
158
|
break;
|
|
134
159
|
case SurveyOptionType.DateTime.toLocaleLowerCase():
|
|
135
160
|
let DateTime = new DatePickerOptions();
|
|
136
|
-
DateTime.Name =
|
|
161
|
+
DateTime.Name = 'q' + element.iD_GUID;
|
|
137
162
|
DateTime.HideLabel = false;
|
|
138
163
|
DateTime.LabelExtraClasses = this.labelClass;
|
|
139
|
-
DateTime.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
140
|
-
|
|
164
|
+
DateTime.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
165
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
166
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
167
|
+
DateTime.IsRequired = element.isRelatedToSurveyQuestion
|
|
168
|
+
? false
|
|
169
|
+
: element.options.isRequired;
|
|
141
170
|
DateTime.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
142
171
|
DateTime.ViewType = ControlLayout.Vertical;
|
|
143
172
|
DateTime.IsDisabled = this.options.Readonly;
|
|
144
|
-
DateTime.LabelDescription =
|
|
173
|
+
DateTime.LabelDescription =
|
|
174
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
175
|
+
? element.options.description.arabic
|
|
176
|
+
: element.options.description.english;
|
|
145
177
|
DateTime.PickerType = PickerType.Both;
|
|
146
178
|
DateTime.SelectMode = SelectMode.Single;
|
|
147
179
|
DateTime.StartView = StartView.Month;
|
|
@@ -154,22 +186,33 @@ export class SurveyFormComponent {
|
|
|
154
186
|
//Dropdown
|
|
155
187
|
case SurveyOptionType.SingleSelect.toLocaleLowerCase():
|
|
156
188
|
let SingleSelect = new DropdownOptions();
|
|
157
|
-
SingleSelect.Name =
|
|
189
|
+
SingleSelect.Name = 'q' + element.iD_GUID;
|
|
158
190
|
SingleSelect.HideLabel = false;
|
|
159
191
|
SingleSelect.LabelExtraClasses = this.labelClass;
|
|
160
|
-
SingleSelect.LabelValue =
|
|
161
|
-
|
|
192
|
+
SingleSelect.LabelValue =
|
|
193
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
194
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
195
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
196
|
+
SingleSelect.IsRequired = element.isRelatedToSurveyQuestion
|
|
197
|
+
? false
|
|
198
|
+
: element.options.isRequired;
|
|
162
199
|
SingleSelect.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
163
|
-
SingleSelect.Placeholder =
|
|
200
|
+
SingleSelect.Placeholder =
|
|
201
|
+
this.utilityService.getResourceValue('DefaultOptionText');
|
|
164
202
|
SingleSelect.ViewType = ControlLayout.Vertical;
|
|
165
203
|
SingleSelect.IsDisabled = this.options.Readonly;
|
|
166
|
-
SingleSelect.LabelDescription =
|
|
204
|
+
SingleSelect.LabelDescription =
|
|
205
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
206
|
+
? element.options.description.arabic
|
|
207
|
+
: element.options.description.english;
|
|
167
208
|
let dataSource = [];
|
|
168
209
|
for (let index = 0; index < element.questionOptions.length; index++) {
|
|
169
210
|
const option = element.questionOptions[index];
|
|
170
211
|
let item = {};
|
|
171
212
|
item.key = option.iD_GUID;
|
|
172
|
-
item.value = this.utilityService.isCurrentLanguageArabic()
|
|
213
|
+
item.value = this.utilityService.isCurrentLanguageArabic()
|
|
214
|
+
? option.name.arabic
|
|
215
|
+
: option.name.english;
|
|
173
216
|
dataSource.push(item);
|
|
174
217
|
}
|
|
175
218
|
SingleSelect.DataSource = dataSource;
|
|
@@ -184,21 +227,30 @@ export class SurveyFormComponent {
|
|
|
184
227
|
break;
|
|
185
228
|
case SurveyOptionType.RadioButton.toLocaleLowerCase():
|
|
186
229
|
let radioButton = new RadioButtonOptions();
|
|
187
|
-
radioButton.Name =
|
|
230
|
+
radioButton.Name = 'q' + element.iD_GUID;
|
|
188
231
|
radioButton.HideLabel = false;
|
|
189
232
|
radioButton.LabelExtraClasses = this.labelClass;
|
|
190
|
-
radioButton.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
191
|
-
|
|
233
|
+
radioButton.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
234
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
235
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
236
|
+
radioButton.IsRequired = element.isRelatedToSurveyQuestion
|
|
237
|
+
? false
|
|
238
|
+
: element.options.isRequired;
|
|
192
239
|
radioButton.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
193
240
|
radioButton.ViewType = ControlLayout.Vertical;
|
|
194
241
|
radioButton.IsDisabled = this.options.Readonly;
|
|
195
|
-
radioButton.LabelDescription =
|
|
242
|
+
radioButton.LabelDescription =
|
|
243
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
244
|
+
? element.options.description.arabic
|
|
245
|
+
: element.options.description.english;
|
|
196
246
|
let dataSourceRadio = [];
|
|
197
247
|
for (let index = 0; index < element.questionOptions.length; index++) {
|
|
198
248
|
const option = element.questionOptions[index];
|
|
199
249
|
let item = {};
|
|
200
250
|
item.Value = option.iD_GUID;
|
|
201
|
-
item.Text = this.utilityService.isCurrentLanguageArabic()
|
|
251
|
+
item.Text = this.utilityService.isCurrentLanguageArabic()
|
|
252
|
+
? option.name.arabic
|
|
253
|
+
: option.name.english;
|
|
202
254
|
dataSourceRadio.push(item);
|
|
203
255
|
}
|
|
204
256
|
radioButton.Items = dataSourceRadio;
|
|
@@ -210,22 +262,33 @@ export class SurveyFormComponent {
|
|
|
210
262
|
break;
|
|
211
263
|
case SurveyOptionType.MultipleSelect.toLocaleLowerCase():
|
|
212
264
|
let MulipleSelect = new DropdownOptions();
|
|
213
|
-
MulipleSelect.Name =
|
|
265
|
+
MulipleSelect.Name = 'q' + element.iD_GUID;
|
|
214
266
|
MulipleSelect.HideLabel = false;
|
|
215
267
|
MulipleSelect.LabelExtraClasses = this.labelClass;
|
|
216
|
-
MulipleSelect.LabelValue =
|
|
217
|
-
|
|
268
|
+
MulipleSelect.LabelValue =
|
|
269
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
270
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
271
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
272
|
+
MulipleSelect.IsRequired = element.isRelatedToSurveyQuestion
|
|
273
|
+
? false
|
|
274
|
+
: element.options.isRequired;
|
|
218
275
|
MulipleSelect.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
219
|
-
MulipleSelect.Placeholder =
|
|
276
|
+
MulipleSelect.Placeholder =
|
|
277
|
+
this.utilityService.getResourceValue('DefaultOptionText');
|
|
220
278
|
MulipleSelect.ViewType = ControlLayout.Vertical;
|
|
221
279
|
MulipleSelect.IsDisabled = this.options.Readonly;
|
|
222
|
-
MulipleSelect.LabelDescription =
|
|
280
|
+
MulipleSelect.LabelDescription =
|
|
281
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
282
|
+
? element.options.description.arabic
|
|
283
|
+
: element.options.description.english;
|
|
223
284
|
let multipleSelectDataSource = [];
|
|
224
285
|
for (let index = 0; index < element.questionOptions.length; index++) {
|
|
225
286
|
const option = element.questionOptions[index];
|
|
226
287
|
let item = {};
|
|
227
288
|
item.key = option.iD_GUID;
|
|
228
|
-
item.value = this.utilityService.isCurrentLanguageArabic()
|
|
289
|
+
item.value = this.utilityService.isCurrentLanguageArabic()
|
|
290
|
+
? option.name.arabic
|
|
291
|
+
: option.name.english;
|
|
229
292
|
multipleSelectDataSource.push(item);
|
|
230
293
|
}
|
|
231
294
|
MulipleSelect.DataSource = multipleSelectDataSource;
|
|
@@ -240,15 +303,22 @@ export class SurveyFormComponent {
|
|
|
240
303
|
break;
|
|
241
304
|
case SurveyOptionType.Country.toLocaleLowerCase():
|
|
242
305
|
let Country = new DropdownOptions();
|
|
243
|
-
Country.Name =
|
|
306
|
+
Country.Name = 'q' + element.iD_GUID;
|
|
244
307
|
Country.HideLabel = false;
|
|
245
308
|
Country.LabelExtraClasses = this.labelClass;
|
|
246
|
-
Country.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
247
|
-
|
|
309
|
+
Country.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
310
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
311
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
312
|
+
Country.IsRequired = element.isRelatedToSurveyQuestion
|
|
313
|
+
? false
|
|
314
|
+
: element.options.isRequired;
|
|
248
315
|
Country.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
249
316
|
Country.ViewType = ControlLayout.Vertical;
|
|
250
317
|
Country.IsDisabled = this.options.Readonly;
|
|
251
|
-
Country.LabelDescription =
|
|
318
|
+
Country.LabelDescription =
|
|
319
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
320
|
+
? element.options.description.arabic
|
|
321
|
+
: element.options.description.english;
|
|
252
322
|
Country.SingleSelection = true;
|
|
253
323
|
Country.ShowCheckbox = false;
|
|
254
324
|
Country.AllowSearchFilter = true;
|
|
@@ -262,15 +332,22 @@ export class SurveyFormComponent {
|
|
|
262
332
|
//FileUpload
|
|
263
333
|
case SurveyOptionType.MultiFile.toLocaleLowerCase():
|
|
264
334
|
let MultiFile = new FileUploadOptions();
|
|
265
|
-
MultiFile.Name =
|
|
335
|
+
MultiFile.Name = 'q' + element.iD_GUID;
|
|
266
336
|
MultiFile.HideLabel = false;
|
|
267
337
|
MultiFile.LabelExtraClasses = this.labelClass;
|
|
268
|
-
MultiFile.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
269
|
-
|
|
338
|
+
MultiFile.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
339
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
340
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
341
|
+
MultiFile.IsRequired = element.isRelatedToSurveyQuestion
|
|
342
|
+
? false
|
|
343
|
+
: element.options.isRequired;
|
|
270
344
|
MultiFile.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
271
345
|
MultiFile.ViewType = ControlLayout.Vertical;
|
|
272
346
|
MultiFile.IsDisabled = this.options.Readonly;
|
|
273
|
-
MultiFile.LabelDescription =
|
|
347
|
+
MultiFile.LabelDescription =
|
|
348
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
349
|
+
? element.options.description.arabic
|
|
350
|
+
: element.options.description.english;
|
|
274
351
|
MultiFile.MaxSizeForAllFilesInMB = element.options.maxFileSizeInMB;
|
|
275
352
|
MultiFile.MaxNoOfFiles = element.options.maxFileCount;
|
|
276
353
|
MultiFile.IsMultipleFile = true;
|
|
@@ -278,15 +355,21 @@ export class SurveyFormComponent {
|
|
|
278
355
|
for (let index = 0; index < element.options.allowedExtensions.length; index++) {
|
|
279
356
|
const elementValue = element.options.allowedExtensions[index];
|
|
280
357
|
switch (elementValue) {
|
|
281
|
-
case
|
|
358
|
+
case '0':
|
|
282
359
|
acceptedTypes.push(FileType.PDF);
|
|
283
360
|
break;
|
|
284
|
-
case
|
|
361
|
+
case '1':
|
|
285
362
|
acceptedTypes.push(FileType.Word);
|
|
286
363
|
break;
|
|
287
|
-
case
|
|
364
|
+
case '2':
|
|
288
365
|
acceptedTypes.push(FileType.Excel);
|
|
289
366
|
break;
|
|
367
|
+
case '3':
|
|
368
|
+
acceptedTypes.push(FileType.ImageTypes);
|
|
369
|
+
break;
|
|
370
|
+
case '15':
|
|
371
|
+
acceptedTypes.push(FileType.PowerPoint);
|
|
372
|
+
break;
|
|
290
373
|
default:
|
|
291
374
|
break;
|
|
292
375
|
}
|
|
@@ -302,30 +385,42 @@ export class SurveyFormComponent {
|
|
|
302
385
|
break;
|
|
303
386
|
case SurveyOptionType.File.toLocaleLowerCase():
|
|
304
387
|
let File = new FileUploadOptions();
|
|
305
|
-
File.Name =
|
|
388
|
+
File.Name = 'q' + element.iD_GUID;
|
|
306
389
|
File.HideLabel = false;
|
|
307
390
|
File.LabelExtraClasses = this.labelClass;
|
|
308
|
-
File.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
309
|
-
|
|
391
|
+
File.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
392
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
393
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
394
|
+
File.IsRequired = element.isRelatedToSurveyQuestion
|
|
395
|
+
? false
|
|
396
|
+
: element.options.isRequired;
|
|
310
397
|
File.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
311
398
|
File.ViewType = ControlLayout.Vertical;
|
|
312
399
|
File.IsDisabled = this.options.Readonly;
|
|
313
|
-
File.LabelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
400
|
+
File.LabelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
401
|
+
? element.options.description.arabic
|
|
402
|
+
: element.options.description.english;
|
|
314
403
|
File.FileMaxSizeInMB = element.options.maxFileSizeInMB;
|
|
315
404
|
let acceptedTypesFile = [];
|
|
316
405
|
debugger;
|
|
317
406
|
for (let index = 0; index < element.options.allowedExtensions.length; index++) {
|
|
318
407
|
const elementValue = element.options.allowedExtensions[index];
|
|
319
408
|
switch (elementValue) {
|
|
320
|
-
case
|
|
409
|
+
case '0':
|
|
321
410
|
acceptedTypesFile.push(FileType.PDF);
|
|
322
411
|
break;
|
|
323
|
-
case
|
|
412
|
+
case '1':
|
|
324
413
|
acceptedTypesFile.push(FileType.Word);
|
|
325
414
|
break;
|
|
326
|
-
case
|
|
415
|
+
case '2':
|
|
327
416
|
acceptedTypesFile.push(FileType.Excel);
|
|
328
417
|
break;
|
|
418
|
+
case '3':
|
|
419
|
+
acceptedTypesFile.push(FileType.ImageTypes);
|
|
420
|
+
break;
|
|
421
|
+
case '15':
|
|
422
|
+
acceptedTypesFile.push(FileType.PowerPoint);
|
|
423
|
+
break;
|
|
329
424
|
default:
|
|
330
425
|
break;
|
|
331
426
|
}
|
|
@@ -342,15 +437,21 @@ export class SurveyFormComponent {
|
|
|
342
437
|
//ImageUpload
|
|
343
438
|
case SurveyOptionType.Image.toLocaleLowerCase():
|
|
344
439
|
let Image = new ImageUploadOptions();
|
|
345
|
-
Image.Name =
|
|
440
|
+
Image.Name = 'q' + element.iD_GUID;
|
|
346
441
|
Image.HideLabel = false;
|
|
347
442
|
Image.LabelExtraClasses = this.labelClass;
|
|
348
|
-
Image.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
349
|
-
|
|
443
|
+
Image.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
444
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
445
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
446
|
+
Image.IsRequired = element.isRelatedToSurveyQuestion
|
|
447
|
+
? false
|
|
448
|
+
: element.options.isRequired;
|
|
350
449
|
Image.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
351
450
|
Image.ViewType = ControlLayout.Vertical;
|
|
352
451
|
Image.IsDisabled = this.options.Readonly;
|
|
353
|
-
Image.LabelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
452
|
+
Image.LabelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
453
|
+
? element.options.description.arabic
|
|
454
|
+
: element.options.description.english;
|
|
354
455
|
if (element.options.maxFileSizeInMB)
|
|
355
456
|
Image.FileMaxSizeInMB = element.options.maxFileSizeInMB;
|
|
356
457
|
if (element.isRelatedToSurveyQuestion)
|
|
@@ -362,15 +463,23 @@ export class SurveyFormComponent {
|
|
|
362
463
|
//MultilineText
|
|
363
464
|
case SurveyOptionType.MultilineText.toLocaleLowerCase():
|
|
364
465
|
let MultilineText = new TextAreaOptions();
|
|
365
|
-
MultilineText.Name =
|
|
466
|
+
MultilineText.Name = 'q' + element.iD_GUID;
|
|
366
467
|
MultilineText.HideLabel = false;
|
|
367
468
|
MultilineText.LabelExtraClasses = this.labelClass;
|
|
368
|
-
MultilineText.LabelValue =
|
|
369
|
-
|
|
469
|
+
MultilineText.LabelValue =
|
|
470
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
471
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
472
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
473
|
+
MultilineText.IsRequired = element.isRelatedToSurveyQuestion
|
|
474
|
+
? false
|
|
475
|
+
: element.options.isRequired;
|
|
370
476
|
MultilineText.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
371
477
|
MultilineText.ViewType = ControlLayout.Vertical;
|
|
372
478
|
MultilineText.IsDisabled = this.options.Readonly;
|
|
373
|
-
MultilineText.LabelDescription =
|
|
479
|
+
MultilineText.LabelDescription =
|
|
480
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
481
|
+
? element.options.description.arabic
|
|
482
|
+
: element.options.description.english;
|
|
374
483
|
if (element.options.maxLength)
|
|
375
484
|
MultilineText.MaxLength = element.options.maxLength;
|
|
376
485
|
if (element.options.minLength)
|
|
@@ -380,13 +489,16 @@ export class SurveyFormComponent {
|
|
|
380
489
|
MultilineText.Value = element.value.text;
|
|
381
490
|
if (element.isRelatedToSurveyQuestion)
|
|
382
491
|
this.checkList.push(MultilineText);
|
|
383
|
-
MultilineText.ForceDirection =
|
|
492
|
+
MultilineText.ForceDirection =
|
|
493
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
494
|
+
? ForceDirection.Arabic
|
|
495
|
+
: ForceDirection.English;
|
|
384
496
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, MultilineText, element.options.size);
|
|
385
497
|
break;
|
|
386
498
|
//HTML
|
|
387
499
|
case SurveyOptionType.Boolean.toLocaleLowerCase():
|
|
388
500
|
let Boolean = new ToggleSlideOptions();
|
|
389
|
-
Boolean.Name =
|
|
501
|
+
Boolean.Name = 'q' + element.iD_GUID;
|
|
390
502
|
Boolean.LabelExtraClasses = this.labelClass;
|
|
391
503
|
Boolean.ViewType = ControlLayout.Vertical;
|
|
392
504
|
Boolean.IsReadonly = element.isRelatedToSurveyQuestion;
|
|
@@ -396,8 +508,13 @@ export class SurveyFormComponent {
|
|
|
396
508
|
Boolean.Value = element.value.boolean;
|
|
397
509
|
if (element.isRelatedToSurveyQuestion)
|
|
398
510
|
this.checkList.push(Boolean);
|
|
399
|
-
Boolean.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
400
|
-
|
|
511
|
+
Boolean.LabelValue = this.utilityService.isCurrentLanguageArabic()
|
|
512
|
+
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
513
|
+
: element.text.english + `.${element.questionTypeItemID}`;
|
|
514
|
+
Boolean.LabelDescription =
|
|
515
|
+
this.utilityService.isCurrentLanguageArabic()
|
|
516
|
+
? element.options.description.arabic
|
|
517
|
+
: element.options.description.english;
|
|
401
518
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Boolean, element.options.size);
|
|
402
519
|
break;
|
|
403
520
|
//Location
|
|
@@ -423,7 +540,7 @@ export class SurveyFormComponent {
|
|
|
423
540
|
let score = 0;
|
|
424
541
|
let element = this.filedGroup.controls[key];
|
|
425
542
|
let id = key.replace('q', '');
|
|
426
|
-
var filteredItem = this.options.QuestionList.filter(item => item.iD_GUID == id)[0];
|
|
543
|
+
var filteredItem = this.options.QuestionList.filter((item) => item.iD_GUID == id)[0];
|
|
427
544
|
let item = new SurveyFiledValueDTO();
|
|
428
545
|
item.QuestionFieldID = id;
|
|
429
546
|
item.QuestionTypeItemID = filteredItem.questionTypeItemID;
|
|
@@ -454,13 +571,17 @@ export class SurveyFormComponent {
|
|
|
454
571
|
this.addShowedChildQuestions(element.value);
|
|
455
572
|
debugger;
|
|
456
573
|
if (filteredItem.isAllowScoring)
|
|
457
|
-
score = ((_a = filteredItem.questionOptions.filter(item => item.iD_GUID == element.value)[0]) === null || _a === void 0 ? void 0 : _a.score)
|
|
574
|
+
score = ((_a = filteredItem.questionOptions.filter((item) => item.iD_GUID == element.value)[0]) === null || _a === void 0 ? void 0 : _a.score)
|
|
575
|
+
? (_b = filteredItem.questionOptions) === null || _b === void 0 ? void 0 : _b.filter((item) => item.iD_GUID == element.value)[0].score
|
|
576
|
+
: 0;
|
|
458
577
|
break;
|
|
459
578
|
case SurveyOptionType.RadioButton.toLocaleLowerCase():
|
|
460
579
|
item.SelectedIDs = [element.value];
|
|
461
580
|
this.addShowedChildQuestions(element.value);
|
|
462
581
|
if (filteredItem.isAllowScoring)
|
|
463
|
-
score = ((_c = filteredItem.questionOptions.filter(item => item.iD_GUID == element.value)[0]) === null || _c === void 0 ? void 0 : _c.score)
|
|
582
|
+
score = ((_c = filteredItem.questionOptions.filter((item) => item.iD_GUID == element.value)[0]) === null || _c === void 0 ? void 0 : _c.score)
|
|
583
|
+
? (_d = filteredItem.questionOptions) === null || _d === void 0 ? void 0 : _d.filter((item) => item.iD_GUID == element.value)[0].score
|
|
584
|
+
: 0;
|
|
464
585
|
break;
|
|
465
586
|
case SurveyOptionType.MultipleSelect.toLocaleLowerCase():
|
|
466
587
|
item.SelectedIDs = element.value;
|
|
@@ -469,7 +590,9 @@ export class SurveyFormComponent {
|
|
|
469
590
|
const item = element.value[index];
|
|
470
591
|
this.addShowedChildQuestions(item);
|
|
471
592
|
if (filteredItem.isAllowScoring) {
|
|
472
|
-
let scoreValue = ((_e = filteredItem.questionOptions.filter(itemOptions => itemOptions.iD_GUID == item)[0]) === null || _e === void 0 ? void 0 : _e.score)
|
|
593
|
+
let scoreValue = ((_e = filteredItem.questionOptions.filter((itemOptions) => itemOptions.iD_GUID == item)[0]) === null || _e === void 0 ? void 0 : _e.score)
|
|
594
|
+
? (_f = filteredItem.questionOptions) === null || _f === void 0 ? void 0 : _f.filter((itemOptions) => itemOptions.iD_GUID == item)[0].score
|
|
595
|
+
: 0;
|
|
473
596
|
score = scoreValue + score;
|
|
474
597
|
}
|
|
475
598
|
}
|
|
@@ -482,7 +605,9 @@ export class SurveyFormComponent {
|
|
|
482
605
|
break;
|
|
483
606
|
case SurveyOptionType.File.toLocaleLowerCase():
|
|
484
607
|
if (element.value)
|
|
485
|
-
item.FileDTO = element.value.File
|
|
608
|
+
item.FileDTO = element.value.File
|
|
609
|
+
? element.value.File
|
|
610
|
+
: element.value;
|
|
486
611
|
break;
|
|
487
612
|
case SurveyOptionType.MultiFile.toLocaleLowerCase():
|
|
488
613
|
item.FileCorrelationDTO = element.value;
|
|
@@ -502,11 +627,11 @@ export class SurveyFormComponent {
|
|
|
502
627
|
addShowedChildQuestions(newKey) {
|
|
503
628
|
for (let index = 0; index < this.options.QuestionList.length; index++) {
|
|
504
629
|
var questionOption = this.options.QuestionList[index].questionOptions;
|
|
505
|
-
let Option = questionOption.filter(x => x.iD_GUID === newKey)[0];
|
|
630
|
+
let Option = questionOption.filter((x) => x.iD_GUID === newKey)[0];
|
|
506
631
|
if (Option && (Option === null || Option === void 0 ? void 0 : Option.linkedQuestions.length) > 0) {
|
|
507
632
|
for (let index = 0; index < Option.linkedQuestions.length; index++) {
|
|
508
633
|
const linkedQuestion = Option.linkedQuestions[index];
|
|
509
|
-
let checkIsQuestionExist = this.showedChildQuestion.some(x => x === `q${linkedQuestion}`);
|
|
634
|
+
let checkIsQuestionExist = this.showedChildQuestion.some((x) => x === `q${linkedQuestion}`);
|
|
510
635
|
if (!checkIsQuestionExist)
|
|
511
636
|
this.showedChildQuestion.push(`q${linkedQuestion}`);
|
|
512
637
|
}
|
|
@@ -516,16 +641,23 @@ export class SurveyFormComponent {
|
|
|
516
641
|
changeHiddenQuestionsStatus() {
|
|
517
642
|
let questions = this.showedChildQuestion;
|
|
518
643
|
for (let index = 0; index < this.checkList.length; index++) {
|
|
519
|
-
let checkIfExist = this.showedChildQuestion.some(x => x === this.checkList[index].Name);
|
|
644
|
+
let checkIfExist = this.showedChildQuestion.some((x) => x === this.checkList[index].Name);
|
|
520
645
|
if (checkIfExist) {
|
|
521
646
|
let questionId = this.checkList[index].Name.replace('q', '');
|
|
522
|
-
let Question = this.options.QuestionList.filter(item => item.iD_GUID == questionId)[0];
|
|
647
|
+
let Question = this.options.QuestionList.filter((item) => item.iD_GUID == questionId)[0];
|
|
523
648
|
this.checkList[index].IsReadonly = false;
|
|
524
649
|
if (Question.options.isRequired && !this.checkList[index].IsRequired) {
|
|
525
650
|
this.checkList[index].IsRequired = true;
|
|
526
|
-
this.filedGroup
|
|
527
|
-
|
|
528
|
-
|
|
651
|
+
this.filedGroup
|
|
652
|
+
.get(this.checkList[index].Name)
|
|
653
|
+
.addValidators(Validators.required);
|
|
654
|
+
if (this.filedGroup.get(this.checkList[index].Name).value == null ||
|
|
655
|
+
this.filedGroup.get(this.checkList[index].Name).value ==
|
|
656
|
+
undefined ||
|
|
657
|
+
this.filedGroup.get(this.checkList[index].Name).value == '')
|
|
658
|
+
this.filedGroup
|
|
659
|
+
.get(this.checkList[index].Name)
|
|
660
|
+
.setErrors({ required: true });
|
|
529
661
|
else
|
|
530
662
|
this.filedGroup.get(this.checkList[index].Name).setErrors(null);
|
|
531
663
|
}
|
|
@@ -547,7 +679,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
|
|
|
547
679
|
args: [{
|
|
548
680
|
selector: 'survey-form',
|
|
549
681
|
templateUrl: './survey-form.component.html',
|
|
550
|
-
providers: [FormGroupDirective]
|
|
682
|
+
providers: [FormGroupDirective],
|
|
551
683
|
}]
|
|
552
684
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.RenderComponentService }, { type: i2.UtilityService }, { type: i3.FormGroupDirective }]; }, propDecorators: { group: [{
|
|
553
685
|
type: Input
|
|
@@ -563,4 +695,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
|
|
|
563
695
|
type: ViewChild,
|
|
564
696
|
args: [NgForm]
|
|
565
697
|
}] } });
|
|
566
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9zaGFyZWQvY29tcG9uZW50cy9zdXJ2ZXktZm9ybS9zdXJ2ZXktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3NoYXJlZC9jb21wb25lbnRzL3N1cnZleS1mb3JtL3N1cnZleS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTRCLEtBQUssRUFBa0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBb0UsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkssT0FBTyxFQUFzQixhQUFhLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBMEIsa0JBQWtCLEVBQXFCLGNBQWMsRUFBRSxlQUFlLEVBQWdCLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBMkMsV0FBVyxFQUErQixpQkFBaUIsRUFBb0IscUJBQXFCLEVBQW1RLFFBQVEsRUFBb0Isa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUlodkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7Ozs7QUFPekYsTUFB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QUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFBO2dCQUMxRixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUVqRTtTQUVGO0lBRUgsQ0FBQzs7aUhBL2lCVSxtQkFBbUI7cUdBQW5CLG1CQUFtQixzRkFGbkIsQ0FBQyxrQkFBa0IsQ0FBQyxrRUFLcEIsV0FBVyx3RkFDWCxxQkFBcUIsbUZBVXJCLE1BQU0sZ0RDOUJuQiw0RkFJQTs0RkRZYSxtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFdBQVcsRUFBRSw4QkFBOEI7b0JBQzNDLFNBQVMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUNoQztvTUFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNvQyxNQUFNO3NCQUEvQyxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ3FCLE9BQU87c0JBQW5FLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQVVoQyxnQkFBZ0I7c0JBQWxDLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIENvbnRyb2xDb250YWluZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTmdGb3JtLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXRDb21wb25lbnQsIENvbnRyb2xMYXlvdXQsIElucHV0VHlwZSwgVGV4dEJveE9wdGlvbnMsIE1hcEF1dG9Db21wbGV0ZU9wdGlvbnMsIFRvZ2dsZVNsaWRlT3B0aW9ucywgSHRtbEVkaXRvck9wdGlvbnMsIEZvcmNlRGlyZWN0aW9uLCBUZXh0QXJlYU9wdGlvbnMsIFBob25lT3B0aW9ucywgSW1hZ2VVcGxvYWRPcHRpb25zLCBEcm9wZG93bk9wdGlvbnMsIFN0YXJ0VmlldywgU2VsZWN0TW9kZSwgUGlja2VyVHlwZSwgRGF0ZVBpY2tlck9wdGlvbnMsIEZvcm1PcHRpb25zLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUmFuZ2VOdW1iZXIsIE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucywgRmlsZVVwbG9hZE9wdGlvbnMsIFRleHRib3hDb21wb25lbnQsIERyb3Bkb3duTGlzdENvbXBvbmVudCwgRmlsZVVwbG9hZENvbXBvbmVudCwgSW1hZ2VVcGxvYWRlckNvbXBvbmVudCwgUGhvbmVDb21wb25lbnQsIFRleHRBcmVhQ29tcG9uZW50LCBIdG1sRWRpdG9yQ29tcG9uZW50LCBUb2dnbGVzbGlkZUNvbXBvbmVudCwgTWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50LCBSZW5kZXJDb21wb25lbnRTZXJ2aWNlLCBNdWx0aUxpbmd1YWxUZXh0Qm94Q29tcG9uZW50LCBMYW5ndWFnZVZhbGlkYXRpb24sIExhbmd1YWdlTW9kZSwgTWFwQXV0b2NvbXBsZXRlRFRPLCBGaWxlVHlwZSwgRHJvcGRvd25MaXN0SXRlbSwgUmFkaW9CdXR0b25PcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IEZpbGVEVE8gfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFN1cnZleUZvcm1PcHRpb25zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1N1cnZleU1vZGVscy9zdXJ2ZXktZm9ybS1vcHRpb25zJztcclxuaW1wb3J0IHsgQWREaXJlY3RpdmUgfSBmcm9tICcuLi9BZERpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFN1cnZleUZpbGVkVmFsdWVEVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvU3VydmV5TW9kZWxzL3N1cnZleS1maWxlZC12YWx1ZSc7XHJcbmltcG9ydCB7IFN1cnZleU9wdGlvblR5cGUgfSBmcm9tICcuLi8uLi9FbnVtcy9FbnVtcyc7XHJcbmltcG9ydCB7IFN1cnZleUZvcm1JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vc3VydmV5LWZvcm0taXRlbS9zdXJ2ZXktZm9ybS1pdGVtLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3N1cnZleS1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3VydmV5LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW0Zvcm1Hcm91cERpcmVjdGl2ZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFN1cnZleUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogU3VydmV5Rm9ybU9wdGlvbnM7XHJcbiAgQFZpZXdDaGlsZChBZERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgYWRIb3N0ITogQWREaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZChEcm9wZG93bkxpc3RDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIG15Q2hpbGQ6IERyb3Bkb3duTGlzdENvbXBvbmVudDtcclxuXHJcbiAgZmlsZWRHcm91cDogRm9ybUdyb3VwO1xyXG4gIHJlc3VsdDogU3VydmV5RmlsZWRWYWx1ZURUT1tdID0gW107XHJcbiAgY2hpbGRJZExpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgY2hpbGRRdWVzdGlvbkxpc3Q6IGFueVtdID0gW107XHJcbiAgYXJlYU9mRm9jdXNDb250cm9sTmFtZTogc3RyaW5nO1xyXG4gIGNoYWxsZW5nZUNvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgYXJlYU9mRm9jdXNDb250cm9sSW5kZXggPSAwO1xyXG4gIGNoYWxsZW5nZUNvbnRyb2xJbmRleCA9IDA7XHJcbiAgQFZpZXdDaGlsZChOZ0Zvcm0pIGRvY3VtZW50RWRpdEZvcm0hOiBOZ0Zvcm07XHJcbiAgaXNEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjaGVja0xpc3Q6IGFueVtdID0gW107XHJcbiAgc2hvd2VkQ2hpbGRRdWVzdGlvbjogYW55W10gPSBbXTtcclxuICBUZXh0Q29udGV4dDogYW55XHJcbiAgaXNGaXJzdFZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuICBsYWJlbENsYXNzOiBzdHJpbmc9XCJUZXN0dHNhZGZ2XCI7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyQ29tcG9uZW50U2VydmljZTogUmVuZGVyQ29tcG9uZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHVibGljIFRleHRDb250cm9sSG9zdDogRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gICkgeyB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy5hZEhvc3Qudmlld0NvbnRhaW5lclJlZjtcclxuICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuICAgIHRoaXMuZmlsZWRHcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5OYW1lLCB0aGlzLmZpbGVkR3JvdXApO1xyXG5cclxuICAgIHRoaXMuZ3JvdXAuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coXCJHcm91cFwiLCBlKVxyXG4gICAgfSlcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm9wdGlvbnMuUXVlc3Rpb25MaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICB2YXIgZWxlbWVudCA9IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3RbaW5kZXhdO1xyXG5cclxuICAgICAgc3dpdGNoIChlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRCkge1xyXG5cclxuICAgICAgICAvLy9UZXh0Qm94XHJcblxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5UZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICB2YXIgVGV4dCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgVGV4dC5OYW1lID0gXCJxXCIgKyBlbGVtZW50LmlEX0dVSURcclxuICAgICAgICAgIFRleHQuTGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKSA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YCA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgIFRleHQuSGlkZUxhYmVsID0gZmFsc2VcclxuICAgICAgICAgIFRleHQuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbiA/IGZhbHNlIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBUZXh0LklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBUZXh0LklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBUZXh0LkxhYmVsRXh0cmFDbGFzc2VzID10aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBUZXh0LlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIFRleHQuTGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKSA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWMgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaFxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dClcclxuICAgICAgICAgICAgVGV4dC5WYWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dFxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQub3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIFRleHQuTWF4TGVuZ3RoID0gZWxlbWVudC5vcHRpb25zLm1heExlbmd0aFxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQub3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgIFRleHQuTWluTGVuZ3RoID0gZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aFxyXG4gICAgICAgICAgVGV4dC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdC5wdXNoKFRleHQpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KHZpZXdDb250YWluZXJSZWYsIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LCB0aGlzLmZpbGVkR3JvdXAsIFRleHQsIGVsZW1lbnQub3B0aW9ucy5zaXplKVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5FbWFpbC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IEVtYWlsID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICBFbWFpbC5OYW1lID0gXCJxXCIgKyBlbGVtZW50LmlEX0dVSURcclxuICAgICAgICAgIEVtYWlsLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICBFbWFpbC5IaWRlTGFiZWwgPSBmYWxzZVxyXG4gICAgICAgICAgRW1haWwuTGFiZWxFeHRyYUNsYXNzZXMgPXRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEVtYWlsLklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24gPyBmYWxzZSA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgRW1haWwuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEVtYWlsLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIEVtYWlsLklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBFbWFpbC5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpYyA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoXHJcbiAgICAgICAgICBFbWFpbC5UeXBlID0gSW5wdXRUeXBlLkVtYWlsO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dClcclxuICAgICAgICAgICAgRW1haWwuVmFsdWUgPSBlbGVtZW50LnZhbHVlLnRleHRcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goRW1haWwpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KHZpZXdDb250YWluZXJSZWYsIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LCB0aGlzLmZpbGVkR3JvdXAsIEVtYWlsLCBlbGVtZW50Lm9wdGlvbnMuc2l6ZSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5OdW1iZXIudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBOdW1iZXIgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIE51bWJlci5OYW1lID0gXCJxXCIgKyBlbGVtZW50LmlEX0dVSURcclxuICAgICAgICAgIE51bWJlci5IaWRlTGFiZWwgPSBmYWxzZVxyXG4gICAgICAgICAgTnVtYmVyLkxhYmVsRXh0cmFDbGFzc2VzID10aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBOdW1iZXIuTGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKSA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YCA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgIE51bWJlci5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uID8gZmFsc2UgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE51bWJlci5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgTnVtYmVyLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE51bWJlci5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgTnVtYmVyLkxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2hcclxuICAgICAgICAgIE51bWJlci5UeXBlID0gSW5wdXRUeXBlLk51bWJlcjtcclxuICAgICAgICAgIGxldCByYW5nZU51bWJlciA9IG5ldyBSYW5nZU51bWJlcigpXHJcbiAgICAgICAgICByYW5nZU51bWJlci5UbyA9IGVsZW1lbnQub3B0aW9ucy5tYXhMZW5ndGhcclxuICAgICAgICAgIHJhbmdlTnVtYmVyLkZyb20gPSBlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoXHJcbiAgICAgICAgICBOdW1iZXIuTnVtYmVyUmFuZ2UgPSByYW5nZU51bWJlcjtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnRleHQpXHJcbiAgICAgICAgICAgIE51bWJlci5WYWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dFxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChOdW1iZXIpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KHZpZXdDb250YWluZXJSZWYsIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LCB0aGlzLmZpbGVkR3JvdXAsIE51bWJlciwgZWxlbWVudC5vcHRpb25zLnNpemUpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLy9EYXRlVGltZVxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRGF0ZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgRGF0ZS5OYW1lID0gXCJxXCIgKyBlbGVtZW50LmlEX0dVSURcclxuICAgICAgICAgIERhdGUuSGlkZUxhYmVsID0gZmFsc2VcclxuICAgICAgICAgIERhdGUuTGFiZWxFeHRyYUNsYXNzZXMgPXRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIERhdGUuTGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKSA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YCA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgIERhdGUuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbiA/IGZhbHNlIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBEYXRlLklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBEYXRlLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIERhdGUuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIERhdGUuTGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKSA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWMgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaFxyXG4gICAgICAgICAgRGF0ZS5QaWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhcjtcclxuICAgICAgICAgIERhdGUuU2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlXHJcbiAgICAgICAgICBEYXRlLlN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aFxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuZGF0ZVRpbWUpXHJcbiAgICAgICAgICAgIERhdGUuVmFsdWUgPSBlbGVtZW50LnZhbHVlLmRhdGVUaW1lXHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdC5wdXNoKERhdGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KHZpZXdDb250YWluZXJSZWYsIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LCB0aGlzLmZpbGVkR3JvdXAsIERhdGUsIGVsZW1lbnQub3B0aW9ucy5zaXplKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkRhdGVUaW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRGF0ZVRpbWUgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgICAgICAgIERhdGVUaW1lLk5hbWUgPSBcInFcIiArIGVsZW1lbnQuaURfR1VJRFxyXG4gICAgICAgICAgRGF0ZVRpbWUuSGlkZUxhYmVsID0gZmFsc2VcclxuICAgICAgICAgIERhdGVUaW1lLkxhYmVsRXh0cmFDbGFzc2VzID10aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBEYXRlVGltZS5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgRGF0ZVRpbWUuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbiA/IGZhbHNlIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBEYXRlVGltZS5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIERhdGVUaW1lLkxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2hcclxuICAgICAgICAgIERhdGVUaW1lLlBpY2tlclR5cGUgPSBQaWNrZXJUeXBlLkJvdGg7XHJcbiAgICAgICAgICBEYXRlVGltZS5TZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGVcclxuICAgICAgICAgIERhdGVUaW1lLlN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aFxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuZGF0ZVRpbWUpXHJcbiAgICAgICAgICAgIERhdGVUaW1lLlZhbHVlID0gZWxlbWVudC52YWx1ZS5kYXRlVGltZVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChEYXRlVGltZSk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4odmlld0NvbnRhaW5lclJlZiwgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsIHRoaXMuZmlsZWRHcm91cCwgRGF0ZVRpbWUsIGVsZW1lbnQub3B0aW9ucy5zaXplKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9Ecm9wZG93blxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5TaW5nbGVTZWxlY3QudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBTaW5nbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuTmFtZSA9IFwicVwiICsgZWxlbWVudC5pRF9HVUlEXHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSGlkZUxhYmVsID0gZmFsc2VcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5MYWJlbEV4dHJhQ2xhc3NlcyA9dGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgU2luZ2xlU2VsZWN0LkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbiA/IGZhbHNlIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRGVmYXVsdE9wdGlvblRleHQnKTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpYyA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoXHJcbiAgICAgICAgICBsZXQgZGF0YVNvdXJjZTogYW55W10gPSBbXVxyXG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQucXVlc3Rpb25PcHRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSBlbGVtZW50LnF1ZXN0aW9uT3B0aW9uc1tpbmRleF07XHJcbiAgICAgICAgICAgIGxldCBpdGVtOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgaXRlbS5rZXkgPSBvcHRpb24uaURfR1VJRFxyXG4gICAgICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gb3B0aW9uLm5hbWUuYXJhYmljIDogb3B0aW9uLm5hbWUuZW5nbGlzaFxyXG4gICAgICAgICAgICBkYXRhU291cmNlLnB1c2goaXRlbSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5EYXRhU291cmNlID0gZGF0YVNvdXJjZVxyXG4gICAgICAgICAgU2luZ2xlU2VsZWN0LlNpbmdsZVNlbGVjdGlvbiA9IHRydWVcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5TaG93Q2hlY2tib3ggPSBmYWxzZVxyXG4gICAgICAgICAgU2luZ2xlU2VsZWN0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHMpXHJcbiAgICAgICAgICAgIFNpbmdsZVNlbGVjdC5TZWxlY3RlZEl0ZW1zID0gZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEc1swXVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChTaW5nbGVTZWxlY3QpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KHZpZXdDb250YWluZXJSZWYsIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LCB0aGlzLmZpbGVkR3JvdXAsIFNpbmdsZVNlbGVjdCwgZWxlbWVudC5vcHRpb25zLnNpemUpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuUmFkaW9CdXR0b24udG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCByYWRpb0J1dHRvbiA9IG5ldyBSYWRpb0J1dHRvbk9wdGlvbnMoKTtcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLk5hbWUgPSBcInFcIiArIGVsZW1lbnQuaURfR1VJRFxyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSGlkZUxhYmVsID0gZmFsc2VcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLkxhYmVsRXh0cmFDbGFzc2VzID10aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbiA/IGZhbHNlIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLkxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2hcclxuICAgICAgICAgIGxldCBkYXRhU291cmNlUmFkaW86IGFueVtdID0gW11cclxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50LnF1ZXN0aW9uT3B0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZWxlbWVudC5xdWVzdGlvbk9wdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGl0ZW0uVmFsdWUgPSBvcHRpb24uaURfR1VJRFxyXG4gICAgICAgICAgICBpdGVtLlRleHQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBvcHRpb24ubmFtZS5hcmFiaWMgOiBvcHRpb24ubmFtZS5lbmdsaXNoXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VSYWRpby5wdXNoKGl0ZW0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5JdGVtcyA9IGRhdGFTb3VyY2VSYWRpb1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHMpXHJcbiAgICAgICAgICAgIHJhZGlvQnV0dG9uLlZhbHVlID0gZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEc1swXVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChyYWRpb0J1dHRvbik7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4odmlld0NvbnRhaW5lclJlZiwgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsIHRoaXMuZmlsZWRHcm91cCwgcmFkaW9CdXR0b24sIGVsZW1lbnQub3B0aW9ucy5zaXplKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpcGxlU2VsZWN0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgTXVsaXBsZVNlbGVjdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuTmFtZSA9IFwicVwiICsgZWxlbWVudC5pRF9HVUlEXHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkhpZGVMYWJlbCA9IGZhbHNlXHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkxhYmVsRXh0cmFDbGFzc2VzID10aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24gPyBmYWxzZSA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRGVmYXVsdE9wdGlvblRleHQnKTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpYyA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoXHJcbiAgICAgICAgICBsZXQgbXVsdGlwbGVTZWxlY3REYXRhU291cmNlOiBEcm9wZG93bkxpc3RJdGVtW10gPSBbXVxyXG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQucXVlc3Rpb25PcHRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSBlbGVtZW50LnF1ZXN0aW9uT3B0aW9uc1tpbmRleF07XHJcbiAgICAgICAgICAgIGxldCBpdGVtOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgaXRlbS5rZXkgPSBvcHRpb24uaURfR1VJRFxyXG4gICAgICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gb3B0aW9uLm5hbWUuYXJhYmljIDogb3B0aW9uLm5hbWUuZW5nbGlzaFxyXG4gICAgICAgICAgICBtdWx0aXBsZVNlbGVjdERhdGFTb3VyY2UucHVzaChpdGVtKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5EYXRhU291cmNlID0gbXVsdGlwbGVTZWxlY3REYXRhU291cmNlXHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LlNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlXHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LlNob3dDaGVja2JveCA9IGZhbHNlXHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHMpXHJcbiAgICAgICAgICAgIE11bGlwbGVTZWxlY3QuU2VsZWN0ZWRJdGVtcyA9IGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHNcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsaXBsZVNlbGVjdCk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4odmlld0NvbnRhaW5lclJlZiwgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsIHRoaXMuZmlsZWRHcm91cCwgTXVsaXBsZVNlbGVjdCwgZWxlbWVudC5vcHRpb25zLnNpemUpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuQ291bnRyeS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IENvdW50cnkgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBDb3VudHJ5Lk5hbWUgPSBcInFcIiArIGVsZW1lbnQuaURfR1VJRFxyXG4gICAgICAgICAgQ291bnRyeS5IaWRlTGFiZWwgPSBmYWxzZVxyXG4gICAgICAgICAgQ291bnRyeS5MYWJlbEV4dHJhQ2xhc3NlcyA9dGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgQ291bnRyeS5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgQ291bnRyeS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uID8gZmFsc2UgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIENvdW50cnkuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIENvdW50cnkuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgQ291bnRyeS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgQ291bnRyeS5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpYyA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoXHJcbiAgICAgICAgICBDb3VudHJ5LlNpbmdsZVNlbGVjdGlvbiA9IHRydWVcclxuICAgICAgICAgIENvdW50cnkuU2hvd0NoZWNrYm94ID0gZmFsc2VcclxuICAgICAgICAgIENvdW50cnkuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlXHJcbiAgICAgICAgICBDb3VudHJ5LkRhdGFTb3VyY2UgPSBlbGVtZW50Lm9wdGlvbnMuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHMpXHJcbiAgICAgICAgICAgIENvdW50cnkuU2VsZWN0ZWRJdGVtcyA9IGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHNbMF1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goQ291bnRyeSk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4odmlld0NvbnRhaW5lclJlZiwgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsIHRoaXMuZmlsZWRHcm91cCwgQ291bnRyeSwgZWxlbWVudC5vcHRpb25zLnNpemUpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL0ZpbGVVcGxvYWRcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlGaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgTXVsdGlGaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuTmFtZSA9IFwicVwiICsgZWxlbWVudC5pRF9HVUlEXHJcbiAgICAgICAgICBNdWx0aUZpbGUuSGlkZUxhYmVsID0gZmFsc2VcclxuICAgICAgICAgIE11bHRpRmlsZS5MYWJlbEV4dHJhQ2xhc3NlcyA9dGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICBNdWx0aUZpbGUuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbiA/IGZhbHNlIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIE11bHRpRmlsZS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIE11bHRpRmlsZS5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpYyA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoXHJcbiAgICAgICAgICBNdWx0aUZpbGUuTWF4U2l6ZUZvckFsbEZpbGVzSW5NQiA9IGVsZW1lbnQub3B0aW9ucy5tYXhGaWxlU2l6ZUluTUJcclxuICAgICAgICAgIE11bHRpRmlsZS5NYXhOb09mRmlsZXMgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZUNvdW50XHJcbiAgICAgICAgICBNdWx0aUZpbGUuSXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IGFjY2VwdGVkVHlwZXM6IEZpbGVUeXBlW10gPSBbXVxyXG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQub3B0aW9ucy5hbGxvd2VkRXh0ZW5zaW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFZhbHVlID0gZWxlbWVudC5vcHRpb25zLmFsbG93ZWRFeHRlbnNpb25zW2luZGV4XTtcclxuICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICBjYXNlIFwiMFwiOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlcy5wdXNoKEZpbGVUeXBlLlBERilcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgXCIxXCI6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuV29yZClcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgXCIyXCI6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuRXhjZWwpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIE11bHRpRmlsZS5GaWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gYWNjZXB0ZWRUeXBlc1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuZmlsZUNvcnJlbGF0aW9uRFRPKSB7XHJcbiAgICAgICAgICAgIGxldCBtb2RlbCA9IHRoaXMudG9DYW1lbChlbGVtZW50LnZhbHVlLmZpbGVDb3JyZWxhdGlvbkRUTylcclxuICAgICAgICAgICAgTXVsdGlGaWxlLlZhbHVlID0gbW9kZWxcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsdGlGaWxlKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50Pih2aWV3Q29udGFpbmVyUmVmLCBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCwgdGhpcy5maWxlZEdyb3VwLCBNdWx0aUZpbGUsIGVsZW1lbnQub3B0aW9ucy5zaXplKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkZpbGUudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBGaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBGaWxlLk5hbWUgPSBcInFcIiArIGVsZW1lbnQuaURfR1VJRFxyXG4gICAgICAgICAgRmlsZS5IaWRlTGFiZWwgPSBmYWxzZVxyXG4gICAgICAgICAgRmlsZS5MYWJlbEV4dHJhQ2xhc3NlcyA9dGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgRmlsZS5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgRmlsZS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uID8gZmFsc2UgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEZpbGUuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEZpbGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRmlsZS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgRmlsZS5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpYyA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoXHJcbiAgICAgICAgICBGaWxlLkZpbGVNYXhTaXplSW5NQiA9IGVsZW1lbnQub3B0aW9ucy5tYXhGaWxlU2l6ZUluTUJcclxuXHJcbiAgICAgICAgICBsZXQgYWNjZXB0ZWRUeXBlc0ZpbGU6IEZpbGVUeXBlW10gPSBbXVxyXG4gICAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZWxlbWVudC5vcHRpb25zLmFsbG93ZWRFeHRlbnNpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSBlbGVtZW50Lm9wdGlvbnMuYWxsb3dlZEV4dGVuc2lvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgXCIwXCI6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLlBERilcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgXCIxXCI6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLldvcmQpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlIFwiMlwiOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5FeGNlbClcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuZmlsZURUTykge1xyXG4gICAgICAgICAgICBsZXQgbW9kZWwgPSB0aGlzLnRvQ2FtZWwoZWxlbWVudC52YWx1ZS5maWxlRFRPKSBhcyBGaWxlRFRPXHJcbiAgICAgICAgICAgIEZpbGUuVmFsdWUgPSBtb2RlbFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgRmlsZS5GaWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gYWNjZXB0ZWRUeXBlc0ZpbGU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdC5wdXNoKEZpbGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KHZpZXdDb250YWluZXJSZWYsIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LCB0aGlzLmZpbGVkR3JvdXAsIEZpbGUsIGVsZW1lbnQub3B0aW9ucy5zaXplKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9JbWFnZVVwbG9hZFxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5JbWFnZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IEltYWdlID0gbmV3IEltYWdlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgSW1hZ2UuTmFtZSA9IFwicVwiICsgZWxlbWVudC5pRF9HVUlEXHJcbiAgICAgICAgICBJbWFnZS5IaWRlTGFiZWwgPSBmYWxzZVxyXG4gICAgICAgICAgSW1hZ2UuTGFiZWxFeHRyYUNsYXNzZXMgPXRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEltYWdlLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICBJbWFnZS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uID8gZmFsc2UgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEltYWdlLklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBJbWFnZS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBJbWFnZS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgSW1hZ2UuTGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKSA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWMgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaFxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQub3B0aW9ucy5tYXhGaWxlU2l6ZUluTUIpXHJcbiAgICAgICAgICAgIEltYWdlLkZpbGVNYXhTaXplSW5NQiA9IGVsZW1lbnQub3B0aW9ucy5tYXhGaWxlU2l6ZUluTUJcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goSW1hZ2UpO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuZmlsZURUTylcclxuICAgICAgICAgICAgSW1hZ2UuVmFsdWUgPSBlbGVtZW50LnZhbHVlLmZpbGVEVE9cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50Pih2aWV3Q29udGFpbmVyUmVmLCBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCwgdGhpcy5maWxlZEdyb3VwLCBJbWFnZSwgZWxlbWVudC5vcHRpb25zLnNpemUpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL011bHRpbGluZVRleHRcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlsaW5lVGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IE11bHRpbGluZVRleHQgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0Lk5hbWUgPSBcInFcIiArIGVsZW1lbnQuaURfR1VJRFxyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5IaWRlTGFiZWwgPSBmYWxzZVxyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5MYWJlbEV4dHJhQ2xhc3NlcyA9dGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uID8gZmFsc2UgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpYyA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoXHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgTXVsdGlsaW5lVGV4dC5NYXhMZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWF4TGVuZ3RoXHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgTXVsdGlsaW5lVGV4dC5NaW5MZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoXHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LlJvd3MgPSBlbGVtZW50Lm9wdGlvbnMucm93cztcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnRleHQpXHJcbiAgICAgICAgICAgIE11bHRpbGluZVRleHQuVmFsdWUgPSBlbGVtZW50LnZhbHVlLnRleHRcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsdGlsaW5lVGV4dCk7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LkZvcmNlRGlyZWN0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpID8gRm9yY2VEaXJlY3Rpb24uQXJhYmljIDogRm9yY2VEaXJlY3Rpb24uRW5nbGlzaFxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KHZpZXdDb250YWluZXJSZWYsIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LCB0aGlzLmZpbGVkR3JvdXAsIE11bHRpbGluZVRleHQsIGVsZW1lbnQub3B0aW9ucy5zaXplKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9IVE1MXHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkJvb2xlYW4udG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBCb29sZWFuID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgQm9vbGVhbi5OYW1lID0gXCJxXCIgKyBlbGVtZW50LmlEX0dVSURcclxuICAgICAgICAgIEJvb2xlYW4uTGFiZWxFeHRyYUNsYXNzZXMgPXRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEJvb2xlYW4uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgQm9vbGVhbi5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgQm9vbGVhbi5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgQm9vbGVhbi5IaWRlTGFiZWwgPSBmYWxzZVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuYm9vbGVhbilcclxuICAgICAgICAgIEJvb2xlYW4uVmFsdWUgPSBlbGVtZW50LnZhbHVlLmJvb2xlYW5cclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goQm9vbGVhbik7XHJcbiAgICAgICAgICBCb29sZWFuLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICBCb29sZWFuLkxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKCkgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2hcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50Pih2aWV3Q29udGFpbmVyUmVmLCBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCwgdGhpcy5maWxlZEdyb3VwLCBCb29sZWFuLCBlbGVtZW50Lm9wdGlvbnMuc2l6ZSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vTG9jYXRpb25cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMub3B0aW9ucy5SZWFkb25seSlcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNoZWNrTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuXHJcbiAgICAgaWYoIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5WYWx1ZSlcclxuICAgICB7XHJcbiAgICAgICB0aGlzLmNoZWNrTGlzdFtpbmRleF0uSXNSZWFkb25seSA9IGZhbHNlO1xyXG4gICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWxlZEdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGVzKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmlsZWRHcm91cClcclxuICAgICAgdGhpcy5yZXN1bHQgPSBbXTtcclxuICAgICAgdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uID0gW107XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZmlsZWRHcm91cC5jb250cm9scykge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5maWxlZEdyb3VwLmNvbnRyb2xzLCBrZXkpKSB7XHJcbiAgICAgICAgICBsZXQgc2NvcmUgPSAwO1xyXG4gICAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNba2V5XTtcclxuICAgICAgICAgIGxldCBpZCA9IGtleS5yZXBsYWNlKCdxJywgJycpO1xyXG4gICAgICAgICAgdmFyIGZpbHRlcmVkSXRlbSA9IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pRF9HVUlEID09IGlkKVswXTtcclxuXHJcbiAgICAgICAgICBsZXQgaXRlbSA9IG5ldyBTdXJ2ZXlGaWxlZFZhbHVlRFRPKClcclxuICAgICAgICAgIGl0ZW0uUXVlc3Rpb25GaWVsZElEID0gaWQ7XHJcbiAgICAgICAgICBpdGVtLlF1ZXN0aW9uVHlwZUl0ZW1JRCA9IGZpbHRlcmVkSXRlbS5xdWVzdGlvblR5cGVJdGVtSURcclxuICAgICAgICAgIHN3aXRjaCAoZmlsdGVyZWRJdGVtLnF1ZXN0aW9uVHlwZUl0ZW1JRCkge1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuVGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uVGV4dCA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5FbWFpbC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uVGV4dCA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5OdW1iZXIudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aWxpbmVUZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5UZXh0ID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkJvb2xlYW4udG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLkJvb2xlYW4gPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRGF0ZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uRGF0ZVRpbWUgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkRhdGVUaW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5EYXRlVGltZSA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5TaW5nbGVTZWxlY3QudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlNlbGVjdGVkSURzID0gW2VsZW1lbnQudmFsdWVdO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkU2hvd2VkQ2hpbGRRdWVzdGlvbnMoZWxlbWVudC52YWx1ZSlcclxuICAgICAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtLmlzQWxsb3dTY29yaW5nKVxyXG4gICAgICAgICAgICAgICAgc2NvcmUgPSBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlKVswXT8uc2NvcmUgPyBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zPy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlEX0dVSUQgPT0gZWxlbWVudC52YWx1ZSlbMF0uc2NvcmUgOiAwXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5SYWRpb0J1dHRvbi50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhlbGVtZW50LnZhbHVlKVxyXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEl0ZW0uaXNBbGxvd1Njb3JpbmcpXHJcbiAgICAgICAgICAgICAgICBzY29yZSA9IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWUpWzBdPy5zY29yZSA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihpdGVtID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlKVswXS5zY29yZSA6IDBcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpcGxlU2VsZWN0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5TZWxlY3RlZElEcyA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUpXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZWxlbWVudC52YWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGVsZW1lbnQudmFsdWVbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFkZFNob3dlZENoaWxkUXVlc3Rpb25zKGl0ZW0pXHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEl0ZW0uaXNBbGxvd1Njb3JpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2NvcmVWYWx1ZSA9IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnMuZmlsdGVyKGl0ZW1PcHRpb25zID0+IGl0ZW1PcHRpb25zLmlEX0dVSUQgPT0gaXRlbSlbMF0/LnNjb3JlID8gZmlsdGVyZWRJdGVtLnF1ZXN0aW9uT3B0aW9ucz8uZmlsdGVyKGl0ZW1PcHRpb25zID0+IGl0ZW1PcHRpb25zLmlEX0dVSUQgPT0gaXRlbSlbMF0uc2NvcmUgOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcmUgPSBzY29yZVZhbHVlICsgc2NvcmVcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkNvdW50cnkudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlNlbGVjdGVkSURzID0gW2VsZW1lbnQudmFsdWVdO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuSW1hZ2UudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLkZpbGVEVE8gPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRmlsZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgaXRlbS5GaWxlRFRPID0gZWxlbWVudC52YWx1ZS5GaWxlID8gZWxlbWVudC52YWx1ZS5GaWxlIDogZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpRmlsZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uRmlsZUNvcnJlbGF0aW9uRFRPID0gZWxlbWVudC52YWx1ZVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsdGVyZWRJdGVtLnZhbHVlID0gaXRlbTtcclxuICAgICAgICAgIGZpbHRlcmVkSXRlbS52YWx1ZS5zY29yZSA9IHNjb3JlO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHQucHVzaChpdGVtKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9wdGlvbnMuVmFsdWVzTGlzdCA9IHRoaXMucmVzdWx0XHJcbiAgICAgIHRoaXMuY2hhbmdlSGlkZGVuUXVlc3Rpb25zU3RhdHVzKClcclxuICAgIH0pXHJcblxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGFkZFNob3dlZENoaWxkUXVlc3Rpb25zKG5ld0tleSkge1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIHZhciBxdWVzdGlvbk9wdGlvbiA9IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3RbaW5kZXhdLnF1ZXN0aW9uT3B0aW9ucztcclxuICAgICAgbGV0IE9wdGlvbiA9IHF1ZXN0aW9uT3B0aW9uLmZpbHRlcih4ID0+IHguaURfR1VJRCA9PT0gbmV3S2V5KVswXTtcclxuICAgICAgaWYgKE9wdGlvbiAmJiBPcHRpb24/LmxpbmtlZFF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IE9wdGlvbi5saW5rZWRRdWVzdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICBjb25zdCBsaW5rZWRRdWVzdGlvbiA9IE9wdGlvbi5saW5rZWRRdWVzdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgbGV0IGNoZWNrSXNRdWVzdGlvbkV4aXN0ID0gdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uLnNvbWUoeCA9PiB4ID09PSBgcSR7bGlua2VkUXVlc3Rpb259YCk7XHJcbiAgICAgICAgICBpZiAoIWNoZWNrSXNRdWVzdGlvbkV4aXN0KVxyXG4gICAgICAgICAgICB0aGlzLnNob3dlZENoaWxkUXVlc3Rpb24ucHVzaChgcSR7bGlua2VkUXVlc3Rpb259YClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgY2hhbmdlSGlkZGVuUXVlc3Rpb25zU3RhdHVzKCkge1xyXG4gICAgbGV0IHF1ZXN0aW9ucyA9IHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbjtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNoZWNrTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgbGV0IGNoZWNrSWZFeGlzdCA9IHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbi5zb21lKHggPT4geCA9PT0gdGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpXHJcbiAgICAgIGlmIChjaGVja0lmRXhpc3QpIHtcclxuICAgICAgICBsZXQgcXVlc3Rpb25JZCA9IHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lLnJlcGxhY2UoJ3EnLCAnJyk7XHJcbiAgICAgICAgbGV0IFF1ZXN0aW9uID0gdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLmlEX0dVSUQgPT0gcXVlc3Rpb25JZClbMF07XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVhZG9ubHkgPSBmYWxzZTtcclxuICAgICAgICBpZiAoUXVlc3Rpb24ub3B0aW9ucy5pc1JlcXVpcmVkICYmICF0aGlzLmNoZWNrTGlzdFtpbmRleF0uSXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICAgICAgaWYgKHRoaXMuZmlsZWRHcm91cC5nZXQodGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpLnZhbHVlID09IG51bGwgfHwgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT0gdW5kZWZpbmVkIHx8IHRoaXMuZmlsZWRHcm91cC5nZXQodGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpLnZhbHVlID09IFwiXCIpXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cC5nZXQodGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpLnNldEVycm9ycyh7ICdyZXF1aXJlZCc6IHRydWUgfSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cC5nZXQodGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVhZG9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLlZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNbdGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWVdLnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKS5zZXRFcnJvcnMobnVsbCk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHRvQ2FtZWwgPSAob2JqKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgIHJldHVybiBvYmoubWFwKHYgPT4gdGhpcy50b0NhbWVsKHYpKTtcclxuICAgIH0gZWxzZSBpZiAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikucmVkdWNlUmlnaHQoXHJcbiAgICAgICAgKHJlc3VsdCwga2V5KSA9PiAoe1xyXG4gICAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgICAgWyhrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSkgfHwga2V5KS50b1N0cmluZygpXTogdGhpcy50b0NhbWVsKG9ialtrZXldKSxcclxuICAgICAgICB9KSxcclxuICAgICAgICB7fSxcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfTtcclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInN1cnZleS1wcmV2aWV3XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgYWRIb3N0PjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG5cclxuIl19
|
|
698
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9zaGFyZWQvY29tcG9uZW50cy9zdXJ2ZXktZm9ybS9zdXJ2ZXktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3NoYXJlZC9jb21wb25lbnRzL3N1cnZleS1mb3JtL3N1cnZleS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBS0wsU0FBUyxFQUNULGtCQUFrQixFQUNsQixNQUFNLEVBRU4sVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUVMLGFBQWEsRUFDYixTQUFTLEVBQ1QsY0FBYyxFQUVkLGtCQUFrQixFQUVsQixjQUFjLEVBQ2QsZUFBZSxFQUVmLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsaUJBQWlCLEVBR2pCLFdBQVcsRUFFWCxpQkFBaUIsRUFFakIscUJBQXFCLEVBYXJCLFFBQVEsRUFFUixrQkFBa0IsR0FDbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7Ozs7OztBQU96RixNQUFNLE9BQU8s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QlUsbUJBQW1CO3FHQUFuQixtQkFBbUIsc0ZBRm5CLENBQUMsa0JBQWtCLENBQUMsa0VBS3BCLFdBQVcsd0ZBQ1gscUJBQXFCLG1GQVdyQixNQUFNLGdEQ3hGbkIsNEZBSUE7NEZEcUVhLG1CQUFtQjtrQkFML0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsa0JBQWtCLENBQUM7aUJBQ2hDO29NQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ29DLE1BQU07c0JBQS9DLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFaEMsT0FBTztzQkFEZCxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFXaEMsZ0JBQWdCO3NCQUFsQyxTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgQXN5bmNWYWxpZGF0b3JGbixcclxuICBDb250cm9sQ29udGFpbmVyLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Hcm91cCxcclxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgTmdGb3JtLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gIENvbnRyb2xMYXlvdXQsXHJcbiAgSW5wdXRUeXBlLFxyXG4gIFRleHRCb3hPcHRpb25zLFxyXG4gIE1hcEF1dG9Db21wbGV0ZU9wdGlvbnMsXHJcbiAgVG9nZ2xlU2xpZGVPcHRpb25zLFxyXG4gIEh0bWxFZGl0b3JPcHRpb25zLFxyXG4gIEZvcmNlRGlyZWN0aW9uLFxyXG4gIFRleHRBcmVhT3B0aW9ucyxcclxuICBQaG9uZU9wdGlvbnMsXHJcbiAgSW1hZ2VVcGxvYWRPcHRpb25zLFxyXG4gIERyb3Bkb3duT3B0aW9ucyxcclxuICBTdGFydFZpZXcsXHJcbiAgU2VsZWN0TW9kZSxcclxuICBQaWNrZXJUeXBlLFxyXG4gIERhdGVQaWNrZXJPcHRpb25zLFxyXG4gIEZvcm1PcHRpb25zLFxyXG4gIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLFxyXG4gIFJhbmdlTnVtYmVyLFxyXG4gIE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucyxcclxuICBGaWxlVXBsb2FkT3B0aW9ucyxcclxuICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gIERyb3Bkb3duTGlzdENvbXBvbmVudCxcclxuICBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gIEltYWdlVXBsb2FkZXJDb21wb25lbnQsXHJcbiAgUGhvbmVDb21wb25lbnQsXHJcbiAgVGV4dEFyZWFDb21wb25lbnQsXHJcbiAgSHRtbEVkaXRvckNvbXBvbmVudCxcclxuICBUb2dnbGVzbGlkZUNvbXBvbmVudCxcclxuICBNYXBBdXRvQ29tcGxldGVDb21wb25lbnQsXHJcbiAgUmVuZGVyQ29tcG9uZW50U2VydmljZSxcclxuICBNdWx0aUxpbmd1YWxUZXh0Qm94Q29tcG9uZW50LFxyXG4gIExhbmd1YWdlVmFsaWRhdGlvbixcclxuICBMYW5ndWFnZU1vZGUsXHJcbiAgTWFwQXV0b2NvbXBsZXRlRFRPLFxyXG4gIEZpbGVUeXBlLFxyXG4gIERyb3Bkb3duTGlzdEl0ZW0sXHJcbiAgUmFkaW9CdXR0b25PcHRpb25zLFxyXG59IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBGaWxlRFRPIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlGb3JtT3B0aW9ucyB9IGZyb20gJy4uLy4uL21vZGVscy9TdXJ2ZXlNb2RlbHMvc3VydmV5LWZvcm0tb3B0aW9ucyc7XHJcbmltcG9ydCB7IEFkRGlyZWN0aXZlIH0gZnJvbSAnLi4vQWREaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlGaWxlZFZhbHVlRFRPIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1N1cnZleU1vZGVscy9zdXJ2ZXktZmlsZWQtdmFsdWUnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlPcHRpb25UeXBlIH0gZnJvbSAnLi4vLi4vRW51bXMvRW51bXMnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3N1cnZleS1mb3JtLWl0ZW0vc3VydmV5LWZvcm0taXRlbS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzdXJ2ZXktZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3N1cnZleS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtGb3JtR3JvdXBEaXJlY3RpdmVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3VydmV5Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBTdXJ2ZXlGb3JtT3B0aW9ucztcclxuICBAVmlld0NoaWxkKEFkRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBhZEhvc3QhOiBBZERpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKERyb3Bkb3duTGlzdENvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgcHJpdmF0ZSBteUNoaWxkOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcblxyXG4gIGZpbGVkR3JvdXA6IEZvcm1Hcm91cDtcclxuICByZXN1bHQ6IFN1cnZleUZpbGVkVmFsdWVEVE9bXSA9IFtdO1xyXG4gIGNoaWxkSWRMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGNoaWxkUXVlc3Rpb25MaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGFyZWFPZkZvY3VzQ29udHJvbE5hbWU6IHN0cmluZztcclxuICBjaGFsbGVuZ2VDb250cm9sTmFtZTogc3RyaW5nO1xyXG4gIGFyZWFPZkZvY3VzQ29udHJvbEluZGV4ID0gMDtcclxuICBjaGFsbGVuZ2VDb250cm9sSW5kZXggPSAwO1xyXG4gIEBWaWV3Q2hpbGQoTmdGb3JtKSBkb2N1bWVudEVkaXRGb3JtITogTmdGb3JtO1xyXG4gIGlzRGVsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hlY2tMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHNob3dlZENoaWxkUXVlc3Rpb246IGFueVtdID0gW107XHJcbiAgVGV4dENvbnRleHQ6IGFueTtcclxuICBpc0ZpcnN0VmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGxhYmVsQ2xhc3M6IHN0cmluZyA9ICdUZXN0dHNhZGZ2JztcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHJlbmRlckNvbXBvbmVudFNlcnZpY2U6IFJlbmRlckNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHB1YmxpYyBUZXh0Q29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZVxyXG4gICkge31cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmFkSG9zdC52aWV3Q29udGFpbmVyUmVmO1xyXG4gICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgdGhpcy5maWxlZEdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLk5hbWUsIHRoaXMuZmlsZWRHcm91cCk7XHJcblxyXG4gICAgdGhpcy5ncm91cC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnR3JvdXAnLCBlKTtcclxuICAgIH0pO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdFtpbmRleF07XHJcblxyXG4gICAgICBzd2l0Y2ggKGVsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEKSB7XHJcbiAgICAgICAgLy8vVGV4dEJveFxyXG5cclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuVGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgdmFyIFRleHQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIFRleHQuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIFRleHQuTGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBUZXh0LkhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgVGV4dC5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIFRleHQuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIFRleHQuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIFRleHQuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBUZXh0LlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIFRleHQuTGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnRleHQpIFRleHQuVmFsdWUgPSBlbGVtZW50LnZhbHVlLnRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgVGV4dC5NYXhMZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQub3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgIFRleHQuTWluTGVuZ3RoID0gZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgIFRleHQuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChUZXh0KTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgVGV4dCxcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkVtYWlsLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRW1haWwgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIEVtYWlsLk5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBFbWFpbC5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIEVtYWlsLkhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgRW1haWwuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBFbWFpbC5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEVtYWlsLklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBFbWFpbC5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBFbWFpbC5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgRW1haWwuTGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIEVtYWlsLlR5cGUgPSBJbnB1dFR5cGUuRW1haWw7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS50ZXh0KSBFbWFpbC5WYWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pIHRoaXMuY2hlY2tMaXN0LnB1c2goRW1haWwpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBFbWFpbCxcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTnVtYmVyLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgTnVtYmVyID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICBOdW1iZXIuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIE51bWJlci5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIE51bWJlci5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIE51bWJlci5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIE51bWJlci5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE51bWJlci5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgTnVtYmVyLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE51bWJlci5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgTnVtYmVyLkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgTnVtYmVyLlR5cGUgPSBJbnB1dFR5cGUuTnVtYmVyO1xyXG4gICAgICAgICAgbGV0IHJhbmdlTnVtYmVyID0gbmV3IFJhbmdlTnVtYmVyKCk7XHJcbiAgICAgICAgICByYW5nZU51bWJlci5UbyA9IGVsZW1lbnQub3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICByYW5nZU51bWJlci5Gcm9tID0gZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgIE51bWJlci5OdW1iZXJSYW5nZSA9IHJhbmdlTnVtYmVyO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dCkgTnVtYmVyLlZhbHVlID0gZWxlbWVudC52YWx1ZS50ZXh0O1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChOdW1iZXIpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBOdW1iZXIsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8vRGF0ZVRpbWVcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRGF0ZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IERhdGUgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgICAgICAgIERhdGUuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIERhdGUuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBEYXRlLkxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgRGF0ZS5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIERhdGUuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBEYXRlLklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBEYXRlLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIERhdGUuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIERhdGUuTGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIERhdGUuUGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQ2FsZW5kYXI7XHJcbiAgICAgICAgICBEYXRlLlNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIERhdGUuU3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuZGF0ZVRpbWUpIERhdGUuVmFsdWUgPSBlbGVtZW50LnZhbHVlLmRhdGVUaW1lO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChEYXRlKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgRGF0ZSxcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRGF0ZVRpbWUudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBEYXRlVGltZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIERhdGVUaW1lLkhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBEYXRlVGltZS5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIERhdGVUaW1lLklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIERhdGVUaW1lLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIERhdGVUaW1lLklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBEYXRlVGltZS5MYWJlbERlc2NyaXB0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIERhdGVUaW1lLlBpY2tlclR5cGUgPSBQaWNrZXJUeXBlLkJvdGg7XHJcbiAgICAgICAgICBEYXRlVGltZS5TZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGU7XHJcbiAgICAgICAgICBEYXRlVGltZS5TdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5kYXRlVGltZSkgRGF0ZVRpbWUuVmFsdWUgPSBlbGVtZW50LnZhbHVlLmRhdGVUaW1lO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChEYXRlVGltZSk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIERhdGVUaW1lLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vRHJvcGRvd25cclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuU2luZ2xlU2VsZWN0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgU2luZ2xlU2VsZWN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgU2luZ2xlU2VsZWN0Lk5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuTGFiZWxWYWx1ZSA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgU2luZ2xlU2VsZWN0LklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgU2luZ2xlU2VsZWN0LklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuUGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0RlZmF1bHRPcHRpb25UZXh0Jyk7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgU2luZ2xlU2VsZWN0LklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBsZXQgZGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50LnF1ZXN0aW9uT3B0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZWxlbWVudC5xdWVzdGlvbk9wdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGl0ZW0ua2V5ID0gb3B0aW9uLmlEX0dVSUQ7XHJcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IG9wdGlvbi5uYW1lLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogb3B0aW9uLm5hbWUuZW5nbGlzaDtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgU2luZ2xlU2VsZWN0LkRhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgICAgICAgU2luZ2xlU2VsZWN0LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuU2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHMpXHJcbiAgICAgICAgICAgIFNpbmdsZVNlbGVjdC5TZWxlY3RlZEl0ZW1zID0gZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEc1swXTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goU2luZ2xlU2VsZWN0KTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgU2luZ2xlU2VsZWN0LFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5SYWRpb0J1dHRvbi50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IHJhZGlvQnV0dG9uID0gbmV3IFJhZGlvQnV0dG9uT3B0aW9ucygpO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLkhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5MYWJlbERlc2NyaXB0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIGxldCBkYXRhU291cmNlUmFkaW86IGFueVtdID0gW107XHJcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZWxlbWVudC5xdWVzdGlvbk9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGVsZW1lbnQucXVlc3Rpb25PcHRpb25zW2luZGV4XTtcclxuICAgICAgICAgICAgbGV0IGl0ZW06IGFueSA9IHt9O1xyXG4gICAgICAgICAgICBpdGVtLlZhbHVlID0gb3B0aW9uLmlEX0dVSUQ7XHJcbiAgICAgICAgICAgIGl0ZW0uVGV4dCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gb3B0aW9uLm5hbWUuYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBvcHRpb24ubmFtZS5lbmdsaXNoO1xyXG4gICAgICAgICAgICBkYXRhU291cmNlUmFkaW8ucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJhZGlvQnV0dG9uLkl0ZW1zID0gZGF0YVNvdXJjZVJhZGlvO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHMpXHJcbiAgICAgICAgICAgIHJhZGlvQnV0dG9uLlZhbHVlID0gZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEc1swXTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2gocmFkaW9CdXR0b24pO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICByYWRpb0J1dHRvbixcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlwbGVTZWxlY3QudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBNdWxpcGxlU2VsZWN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkxhYmVsVmFsdWUgPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LlBsYWNlaG9sZGVyID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdEZWZhdWx0T3B0aW9uVGV4dCcpO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgbGV0IG11bHRpcGxlU2VsZWN0RGF0YVNvdXJjZTogRHJvcGRvd25MaXN0SXRlbVtdID0gW107XHJcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZWxlbWVudC5xdWVzdGlvbk9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGVsZW1lbnQucXVlc3Rpb25PcHRpb25zW2luZGV4XTtcclxuICAgICAgICAgICAgbGV0IGl0ZW06IGFueSA9IHt9O1xyXG4gICAgICAgICAgICBpdGVtLmtleSA9IG9wdGlvbi5pRF9HVUlEO1xyXG4gICAgICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBvcHRpb24ubmFtZS5hcmFiaWNcclxuICAgICAgICAgICAgICA6IG9wdGlvbi5uYW1lLmVuZ2xpc2g7XHJcbiAgICAgICAgICAgIG11bHRpcGxlU2VsZWN0RGF0YVNvdXJjZS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5EYXRhU291cmNlID0gbXVsdGlwbGVTZWxlY3REYXRhU291cmNlO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5TaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuU2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzKVxyXG4gICAgICAgICAgICBNdWxpcGxlU2VsZWN0LlNlbGVjdGVkSXRlbXMgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChNdWxpcGxlU2VsZWN0KTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgTXVsaXBsZVNlbGVjdCxcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuQ291bnRyeS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IENvdW50cnkgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBDb3VudHJ5Lk5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBDb3VudHJ5LkhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgQ291bnRyeS5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIENvdW50cnkuTGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBDb3VudHJ5LklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgQ291bnRyeS5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgQ291bnRyeS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBDb3VudHJ5LklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBDb3VudHJ5LkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgQ291bnRyeS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgQ291bnRyeS5TaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIENvdW50cnkuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgQ291bnRyeS5EYXRhU291cmNlID0gZWxlbWVudC5vcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEcylcclxuICAgICAgICAgICAgQ291bnRyeS5TZWxlY3RlZEl0ZW1zID0gZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEc1swXTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pIHRoaXMuY2hlY2tMaXN0LnB1c2goQ291bnRyeSk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIENvdW50cnksXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9GaWxlVXBsb2FkXHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpRmlsZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IE11bHRpRmlsZSA9IG5ldyBGaWxlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLk5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuTGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIE11bHRpRmlsZS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIE11bHRpRmlsZS5MYWJlbERlc2NyaXB0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIE11bHRpRmlsZS5NYXhTaXplRm9yQWxsRmlsZXNJbk1CID0gZWxlbWVudC5vcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIE11bHRpRmlsZS5NYXhOb09mRmlsZXMgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZUNvdW50O1xyXG4gICAgICAgICAgTXVsdGlGaWxlLklzTXVsdGlwbGVGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBhY2NlcHRlZFR5cGVzOiBGaWxlVHlwZVtdID0gW107XHJcbiAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICBpbmRleCA8IGVsZW1lbnQub3B0aW9ucy5hbGxvd2VkRXh0ZW5zaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGluZGV4KytcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSBlbGVtZW50Lm9wdGlvbnMuYWxsb3dlZEV4dGVuc2lvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlcy5wdXNoKEZpbGVUeXBlLlBERik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgICAgICAgIGFjY2VwdGVkVHlwZXMucHVzaChGaWxlVHlwZS5Xb3JkKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlcy5wdXNoKEZpbGVUeXBlLkV4Y2VsKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzMnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlcy5wdXNoKEZpbGVUeXBlLkltYWdlVHlwZXMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMTUnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlcy5wdXNoKEZpbGVUeXBlLlBvd2VyUG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBNdWx0aUZpbGUuRmlsZVVwbG9hZEFjY2VwdHNUeXBlcyA9IGFjY2VwdGVkVHlwZXM7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5maWxlQ29ycmVsYXRpb25EVE8pIHtcclxuICAgICAgICAgICAgbGV0IG1vZGVsID0gdGhpcy50b0NhbWVsKGVsZW1lbnQudmFsdWUuZmlsZUNvcnJlbGF0aW9uRFRPKTtcclxuICAgICAgICAgICAgTXVsdGlGaWxlLlZhbHVlID0gbW9kZWw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKE11bHRpRmlsZSk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIE11bHRpRmlsZSxcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRmlsZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IEZpbGUgPSBuZXcgRmlsZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgIEZpbGUuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIEZpbGUuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBGaWxlLkxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgRmlsZS5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIEZpbGUuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBGaWxlLklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBGaWxlLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIEZpbGUuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIEZpbGUuTGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIEZpbGUuRmlsZU1heFNpemVJbk1CID0gZWxlbWVudC5vcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuXHJcbiAgICAgICAgICBsZXQgYWNjZXB0ZWRUeXBlc0ZpbGU6IEZpbGVUeXBlW10gPSBbXTtcclxuICAgICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICAgICAgaW5kZXggPCBlbGVtZW50Lm9wdGlvbnMuYWxsb3dlZEV4dGVuc2lvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICBpbmRleCsrXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFZhbHVlID0gZWxlbWVudC5vcHRpb25zLmFsbG93ZWRFeHRlbnNpb25zW2luZGV4XTtcclxuICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgICAgICAgIGFjY2VwdGVkVHlwZXNGaWxlLnB1c2goRmlsZVR5cGUuUERGKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5Xb3JkKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5FeGNlbCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICczJzpcclxuICAgICAgICAgICAgICAgIGFjY2VwdGVkVHlwZXNGaWxlLnB1c2goRmlsZVR5cGUuSW1hZ2VUeXBlcyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICcxNSc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLlBvd2VyUG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5maWxlRFRPKSB7XHJcbiAgICAgICAgICAgIGxldCBtb2RlbCA9IHRoaXMudG9DYW1lbChlbGVtZW50LnZhbHVlLmZpbGVEVE8pIGFzIEZpbGVEVE87XHJcbiAgICAgICAgICAgIEZpbGUuVmFsdWUgPSBtb2RlbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEZpbGUuRmlsZVVwbG9hZEFjY2VwdHNUeXBlcyA9IGFjY2VwdGVkVHlwZXNGaWxlO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChGaWxlKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgRmlsZSxcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL0ltYWdlVXBsb2FkXHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkltYWdlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgSW1hZ2UgPSBuZXcgSW1hZ2VVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBJbWFnZS5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgSW1hZ2UuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBJbWFnZS5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEltYWdlLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgSW1hZ2UuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBJbWFnZS5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgSW1hZ2UuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgSW1hZ2UuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIEltYWdlLkxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1heEZpbGVTaXplSW5NQilcclxuICAgICAgICAgICAgSW1hZ2UuRmlsZU1heFNpemVJbk1CID0gZWxlbWVudC5vcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pIHRoaXMuY2hlY2tMaXN0LnB1c2goSW1hZ2UpO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuZmlsZURUTykgSW1hZ2UuVmFsdWUgPSBlbGVtZW50LnZhbHVlLmZpbGVEVE87XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIEltYWdlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vTXVsdGlsaW5lVGV4dFxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aWxpbmVUZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgTXVsdGlsaW5lVGV4dCA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LkxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5MYWJlbFZhbHVlID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQub3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIE11bHRpbGluZVRleHQuTWF4TGVuZ3RoID0gZWxlbWVudC5vcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmIChlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBNdWx0aWxpbmVUZXh0Lk1pbkxlbmd0aCA9IGVsZW1lbnQub3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LlJvd3MgPSBlbGVtZW50Lm9wdGlvbnMucm93cztcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnRleHQpIE11bHRpbGluZVRleHQuVmFsdWUgPSBlbGVtZW50LnZhbHVlLnRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdC5wdXNoKE11bHRpbGluZVRleHQpO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5Gb3JjZURpcmVjdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gRm9yY2VEaXJlY3Rpb24uQXJhYmljXHJcbiAgICAgICAgICAgICAgOiBGb3JjZURpcmVjdGlvbi5FbmdsaXNoO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBNdWx0aWxpbmVUZXh0LFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vSFRNTFxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5Cb29sZWFuLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgQm9vbGVhbiA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgIEJvb2xlYW4uTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIEJvb2xlYW4uTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBCb29sZWFuLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIEJvb2xlYW4uSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEJvb2xlYW4uSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIEJvb2xlYW4uSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5ib29sZWFuKSBCb29sZWFuLlZhbHVlID0gZWxlbWVudC52YWx1ZS5ib29sZWFuO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChCb29sZWFuKTtcclxuICAgICAgICAgIEJvb2xlYW4uTGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBCb29sZWFuLkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBCb29sZWFuLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vTG9jYXRpb25cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuUmVhZG9ubHkpXHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNoZWNrTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja0xpc3RbaW5kZXhdLlZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrTGlzdFtpbmRleF0uSXNSZWFkb25seSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIHRoaXMuZmlsZWRHcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlcykgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmZpbGVkR3JvdXApO1xyXG4gICAgICB0aGlzLnJlc3VsdCA9IFtdO1xyXG4gICAgICB0aGlzLnNob3dlZENoaWxkUXVlc3Rpb24gPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5maWxlZEdyb3VwLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZmlsZWRHcm91cC5jb250cm9scywga2V5KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGV0IHNjb3JlID0gMDtcclxuICAgICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5maWxlZEdyb3VwLmNvbnRyb2xzW2tleV07XHJcbiAgICAgICAgICBsZXQgaWQgPSBrZXkucmVwbGFjZSgncScsICcnKTtcclxuICAgICAgICAgIHZhciBmaWx0ZXJlZEl0ZW0gPSB0aGlzLm9wdGlvbnMuUXVlc3Rpb25MaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBpZFxyXG4gICAgICAgICAgKVswXTtcclxuXHJcbiAgICAgICAgICBsZXQgaXRlbSA9IG5ldyBTdXJ2ZXlGaWxlZFZhbHVlRFRPKCk7XHJcbiAgICAgICAgICBpdGVtLlF1ZXN0aW9uRmllbGRJRCA9IGlkO1xyXG4gICAgICAgICAgaXRlbS5RdWVzdGlvblR5cGVJdGVtSUQgPSBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25UeXBlSXRlbUlEO1xyXG4gICAgICAgICAgc3dpdGNoIChmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25UeXBlSXRlbUlEKSB7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5UZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5UZXh0ID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkVtYWlsLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5UZXh0ID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk51bWJlci50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uVGV4dCA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aWxpbmVUZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5UZXh0ID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkJvb2xlYW4udG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLkJvb2xlYW4gPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRGF0ZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uRGF0ZVRpbWUgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkRhdGVUaW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5EYXRlVGltZSA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5TaW5nbGVTZWxlY3QudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlNlbGVjdGVkSURzID0gW2VsZW1lbnQudmFsdWVdO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkU2hvd2VkQ2hpbGRRdWVzdGlvbnMoZWxlbWVudC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkSXRlbS5pc0FsbG93U2NvcmluZylcclxuICAgICAgICAgICAgICAgIHNjb3JlID0gZmlsdGVyZWRJdGVtLnF1ZXN0aW9uT3B0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChpdGVtKSA9PiBpdGVtLmlEX0dVSUQgPT0gZWxlbWVudC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgKVswXT8uc2NvcmVcclxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zPy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICApWzBdLnNjb3JlXHJcbiAgICAgICAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlJhZGlvQnV0dG9uLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5TZWxlY3RlZElEcyA9IFtlbGVtZW50LnZhbHVlXTtcclxuICAgICAgICAgICAgICB0aGlzLmFkZFNob3dlZENoaWxkUXVlc3Rpb25zKGVsZW1lbnQudmFsdWUpO1xyXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEl0ZW0uaXNBbGxvd1Njb3JpbmcpXHJcbiAgICAgICAgICAgICAgICBzY29yZSA9IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWVcclxuICAgICAgICAgICAgICAgIClbMF0/LnNjb3JlXHJcbiAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRJdGVtLnF1ZXN0aW9uT3B0aW9ucz8uZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgKVswXS5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aXBsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQudmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50LnZhbHVlW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkSXRlbS5pc0FsbG93U2NvcmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzY29yZVZhbHVlID0gZmlsdGVyZWRJdGVtLnF1ZXN0aW9uT3B0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaXRlbU9wdGlvbnMpID0+IGl0ZW1PcHRpb25zLmlEX0dVSUQgPT0gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIClbMF0/LnNjb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbU9wdGlvbnMpID0+IGl0ZW1PcHRpb25zLmlEX0dVSUQgPT0gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApWzBdLnNjb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcmUgPSBzY29yZVZhbHVlICsgc2NvcmU7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkNvdW50cnkudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlNlbGVjdGVkSURzID0gW2VsZW1lbnQudmFsdWVdO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuSW1hZ2UudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLkZpbGVEVE8gPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRmlsZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgaXRlbS5GaWxlRFRPID0gZWxlbWVudC52YWx1ZS5GaWxlXHJcbiAgICAgICAgICAgICAgICAgID8gZWxlbWVudC52YWx1ZS5GaWxlXHJcbiAgICAgICAgICAgICAgICAgIDogZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpRmlsZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uRmlsZUNvcnJlbGF0aW9uRFRPID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZpbHRlcmVkSXRlbS52YWx1ZSA9IGl0ZW07XHJcbiAgICAgICAgICBmaWx0ZXJlZEl0ZW0udmFsdWUuc2NvcmUgPSBzY29yZTtcclxuICAgICAgICAgIHRoaXMucmVzdWx0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3B0aW9ucy5WYWx1ZXNMaXN0ID0gdGhpcy5yZXN1bHQ7XHJcbiAgICAgIHRoaXMuY2hhbmdlSGlkZGVuUXVlc3Rpb25zU3RhdHVzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZFNob3dlZENoaWxkUXVlc3Rpb25zKG5ld0tleSkge1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIHZhciBxdWVzdGlvbk9wdGlvbiA9IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3RbaW5kZXhdLnF1ZXN0aW9uT3B0aW9ucztcclxuICAgICAgbGV0IE9wdGlvbiA9IHF1ZXN0aW9uT3B0aW9uLmZpbHRlcigoeCkgPT4geC5pRF9HVUlEID09PSBuZXdLZXkpWzBdO1xyXG4gICAgICBpZiAoT3B0aW9uICYmIE9wdGlvbj8ubGlua2VkUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgT3B0aW9uLmxpbmtlZFF1ZXN0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgIGNvbnN0IGxpbmtlZFF1ZXN0aW9uID0gT3B0aW9uLmxpbmtlZFF1ZXN0aW9uc1tpbmRleF07XHJcbiAgICAgICAgICBsZXQgY2hlY2tJc1F1ZXN0aW9uRXhpc3QgPSB0aGlzLnNob3dlZENoaWxkUXVlc3Rpb24uc29tZShcclxuICAgICAgICAgICAgKHgpID0+IHggPT09IGBxJHtsaW5rZWRRdWVzdGlvbn1gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKCFjaGVja0lzUXVlc3Rpb25FeGlzdClcclxuICAgICAgICAgICAgdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uLnB1c2goYHEke2xpbmtlZFF1ZXN0aW9ufWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlSGlkZGVuUXVlc3Rpb25zU3RhdHVzKCkge1xyXG4gICAgbGV0IHF1ZXN0aW9ucyA9IHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbjtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNoZWNrTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgbGV0IGNoZWNrSWZFeGlzdCA9IHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbi5zb21lKFxyXG4gICAgICAgICh4KSA9PiB4ID09PSB0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoY2hlY2tJZkV4aXN0KSB7XHJcbiAgICAgICAgbGV0IHF1ZXN0aW9uSWQgPSB0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZS5yZXBsYWNlKCdxJywgJycpO1xyXG4gICAgICAgIGxldCBRdWVzdGlvbiA9IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBxdWVzdGlvbklkXHJcbiAgICAgICAgKVswXTtcclxuICAgICAgICB0aGlzLmNoZWNrTGlzdFtpbmRleF0uSXNSZWFkb25seSA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChRdWVzdGlvbi5vcHRpb25zLmlzUmVxdWlyZWQgJiYgIXRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrTGlzdFtpbmRleF0uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmZpbGVkR3JvdXBcclxuICAgICAgICAgICAgLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSlcclxuICAgICAgICAgICAgLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cC5nZXQodGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpLnZhbHVlID09IG51bGwgfHxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT1cclxuICAgICAgICAgICAgICB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT0gJydcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwXHJcbiAgICAgICAgICAgICAgLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSlcclxuICAgICAgICAgICAgICAuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICBlbHNlIHRoaXMuZmlsZWRHcm91cC5nZXQodGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVhZG9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLlZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNbdGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWVdLnJlbW92ZVZhbGlkYXRvcnMoXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvQ2FtZWwgPSAob2JqKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgIHJldHVybiBvYmoubWFwKCh2KSA9PiB0aGlzLnRvQ2FtZWwodikpO1xyXG4gICAgfSBlbHNlIGlmIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2VSaWdodChcclxuICAgICAgICAocmVzdWx0LCBrZXkpID0+ICh7XHJcbiAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICBbKGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKSB8fCBrZXkpLnRvU3RyaW5nKCldOlxyXG4gICAgICAgICAgICB0aGlzLnRvQ2FtZWwob2JqW2tleV0pLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHt9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH07XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInN1cnZleS1wcmV2aWV3XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgYWRIb3N0PjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG5cclxuIl19
|