@bnsights/bbsf-controls 1.0.189 → 1.0.191

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.
@@ -37,15 +37,15 @@ export class RepeaterFieldBuilderComponent {
37
37
  this.itemsValue = [];
38
38
  this.itemValue = null;
39
39
  }
40
- ngOnInit() {
41
- }
40
+ ngOnInit() { }
42
41
  ngAfterViewInit() {
43
42
  setTimeout(() => {
44
43
  if (this.itemsValue.length > 0)
45
44
  this.itemValue = this.itemsValue[this.itemNumber];
46
45
  if (this.itemValue) {
47
46
  for (const key in this.itemValue) {
48
- if (Object.prototype.hasOwnProperty.call(this.itemValue, key) && key == this.repeaterField.controlOptions.name) {
47
+ if (Object.prototype.hasOwnProperty.call(this.itemValue, key) &&
48
+ key == this.repeaterField.controlOptions.name) {
49
49
  const element = this.itemValue[key];
50
50
  this.value = element;
51
51
  }
@@ -56,12 +56,19 @@ export class RepeaterFieldBuilderComponent {
56
56
  //#region TextBox
57
57
  case DataType.Text:
58
58
  let Text = new TextBoxOptions();
59
- Text.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
59
+ Text.name =
60
+ this.repeaterField.controlOptions.name +
61
+ '.' +
62
+ this.itemNumber.toString() +
63
+ '.' +
64
+ this.controlNumber.toString();
60
65
  Text.hideLabel = this.repeaterField.controlOptions.hideLabel;
61
66
  Text.labelKey = this.repeaterField.controlOptions.labelKey;
62
67
  Text.isRequired = this.repeaterField.controlOptions.isRequired;
63
68
  Text.viewType = this.repeaterField.controlOptions.viewType;
64
- Text.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
69
+ Text.labelDescription = this.repeaterField.controlOptions.labelDescription
70
+ ? this.repeaterField.controlOptions.labelDescription
71
+ : '';
65
72
  Text.type = InputType.Text;
66
73
  Text.languageValidation = this.repeaterField.controlOptions.languageValidation;
67
74
  if (this.repeaterField.controlOptions.maxLength)
@@ -70,47 +77,77 @@ export class RepeaterFieldBuilderComponent {
70
77
  Text.minLength = this.repeaterField.controlOptions.minLength;
71
78
  Text.value = this.value;
72
79
  Text.isReadonly = this.repeaterField.controlOptions.isReadonly;
80
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
81
+ Text.customValidation = this.repeaterField.controlOptions.customValidation;
82
+ }
73
83
  this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, Text);
74
84
  break;
75
85
  case DataType.Name:
76
86
  let name = new TextBoxOptions();
77
- name.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
87
+ name.name =
88
+ this.repeaterField.controlOptions.name +
89
+ '.' +
90
+ this.itemNumber.toString() +
91
+ '.' +
92
+ this.controlNumber.toString();
78
93
  name.hideLabel = this.repeaterField.controlOptions.hideLabel;
79
94
  name.labelKey = this.repeaterField.controlOptions.labelKey;
80
95
  name.isRequired = this.repeaterField.controlOptions.isRequired;
81
96
  name.viewType = this.repeaterField.controlOptions.viewType;
82
97
  name.languageValidation = this.repeaterField.controlOptions.languageValidation;
83
- name.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
98
+ name.labelDescription = this.repeaterField.controlOptions.labelDescription
99
+ ? this.repeaterField.controlOptions.labelDescription
100
+ : '';
84
101
  if (this.repeaterField.controlOptions.maxLength)
85
102
  name.maxLength = this.repeaterField.controlOptions.maxLength;
86
103
  if (this.repeaterField.controlOptions.minLength)
87
104
  name.minLength = this.repeaterField.controlOptions.minLength;
88
105
  name.type = InputType.Text;
89
106
  name.value = this.value;
107
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
108
+ name.customValidation = this.repeaterField.controlOptions.customValidation;
109
+ }
90
110
  this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, name);
91
111
  break;
92
112
  case DataType.Email:
93
113
  let email = new TextBoxOptions();
94
- email.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
114
+ email.name =
115
+ this.repeaterField.controlOptions.name +
116
+ '.' +
117
+ this.itemNumber.toString() +
118
+ '.' +
119
+ this.controlNumber.toString();
95
120
  email.hideLabel = this.repeaterField.controlOptions.hideLabel;
96
121
  email.labelKey = this.repeaterField.controlOptions.labelKey;
97
122
  email.isRequired = this.repeaterField.controlOptions.isRequired;
98
123
  email.viewType = this.repeaterField.controlOptions.viewType;
99
124
  email.languageValidation = this.repeaterField.controlOptions.languageValidation;
100
- email.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
125
+ email.labelDescription = this.repeaterField.controlOptions.labelDescription
126
+ ? this.repeaterField.controlOptions.labelDescription
127
+ : '';
101
128
  email.type = InputType.Email;
102
129
  email.value = this.value;
130
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
131
+ email.customValidation = this.repeaterField.controlOptions.customValidation;
132
+ }
103
133
  this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, email);
104
134
  break;
105
135
  case DataType.Number:
106
136
  let number = new TextBoxOptions();
107
- number.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
137
+ number.name =
138
+ this.repeaterField.controlOptions.name +
139
+ '.' +
140
+ this.itemNumber.toString() +
141
+ '.' +
142
+ this.controlNumber.toString();
108
143
  number.hideLabel = this.repeaterField.controlOptions.hideLabel;
109
144
  number.labelKey = this.repeaterField.controlOptions.labelKey;
110
145
  number.isRequired = this.repeaterField.controlOptions.isRequired;
111
146
  number.viewType = this.repeaterField.controlOptions.viewType;
112
147
  number.languageValidation = this.repeaterField.controlOptions.languageValidation;
113
- number.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
148
+ number.labelDescription = this.repeaterField.controlOptions.labelDescription
149
+ ? this.repeaterField.controlOptions.labelDescription
150
+ : '';
114
151
  number.type = InputType.Number;
115
152
  let rangeNumber = new RangeNumber();
116
153
  if (this.repeaterField.controlOptions.numberRange) {
@@ -120,228 +157,378 @@ export class RepeaterFieldBuilderComponent {
120
157
  number.numberRange = rangeNumber;
121
158
  number.value = this.value;
122
159
  number.isReadonly = this.repeaterField.controlOptions.isReadonly;
160
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
161
+ number.customValidation = this.repeaterField.controlOptions.customValidation;
162
+ }
123
163
  this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, number);
124
164
  break;
125
165
  //#endregion
126
166
  //#region DateTime
127
167
  case DataType.Date:
128
168
  let date = new DatePickerOptions();
129
- date.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
169
+ date.name =
170
+ this.repeaterField.controlOptions.name +
171
+ '.' +
172
+ this.itemNumber.toString() +
173
+ '.' +
174
+ this.controlNumber.toString();
130
175
  date.hideLabel = this.repeaterField.controlOptions.hideLabel;
131
176
  date.labelKey = this.repeaterField.controlOptions.labelKey;
132
177
  date.isRequired = this.repeaterField.controlOptions.isRequired;
133
178
  date.viewType = this.repeaterField.controlOptions.viewType;
134
- date.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
179
+ date.labelDescription = this.repeaterField.controlOptions.labelDescription
180
+ ? this.repeaterField.controlOptions.labelDescription
181
+ : '';
135
182
  date.pickerType = PickerType.Calendar;
136
183
  date.selectMode = SelectMode.Single;
137
184
  date.startView = StartView.Month;
138
185
  date.value = this.value;
186
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
187
+ date.customValidation = this.repeaterField.controlOptions.customValidation;
188
+ }
139
189
  this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, date);
140
190
  break;
141
191
  case DataType.DateTime:
142
192
  let dateTime = new DatePickerOptions();
143
- dateTime.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
193
+ dateTime.name =
194
+ this.repeaterField.controlOptions.name +
195
+ '.' +
196
+ this.itemNumber.toString() +
197
+ '.' +
198
+ this.controlNumber.toString();
144
199
  dateTime.hideLabel = this.repeaterField.controlOptions.hideLabel;
145
200
  dateTime.labelKey = this.repeaterField.controlOptions.labelKey;
146
201
  dateTime.isRequired = this.repeaterField.controlOptions.isRequired;
147
202
  dateTime.viewType = this.repeaterField.controlOptions.viewType;
148
- dateTime.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
203
+ dateTime.labelDescription = this.repeaterField.controlOptions.labelDescription
204
+ ? this.repeaterField.controlOptions.labelDescription
205
+ : '';
149
206
  dateTime.pickerType = PickerType.Both;
150
207
  dateTime.selectMode = SelectMode.Single;
151
208
  dateTime.startView = StartView.Month;
152
209
  dateTime.value = this.value;
210
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
211
+ dateTime.customValidation = this.repeaterField.controlOptions.customValidation;
212
+ }
153
213
  this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, dateTime);
154
214
  break;
155
215
  case DataType.Time:
156
216
  let time = new DatePickerOptions();
157
- time.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
217
+ time.name =
218
+ this.repeaterField.controlOptions.name +
219
+ '.' +
220
+ this.itemNumber.toString() +
221
+ '.' +
222
+ this.controlNumber.toString();
158
223
  time.hideLabel = this.repeaterField.controlOptions.hideLabel;
159
224
  time.labelKey = this.repeaterField.controlOptions.labelKey;
160
225
  time.isRequired = this.repeaterField.controlOptions.isRequired;
161
226
  time.viewType = this.repeaterField.controlOptions.viewType;
162
- time.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
227
+ time.labelDescription = this.repeaterField.controlOptions.labelDescription
228
+ ? this.repeaterField.controlOptions.labelDescription
229
+ : '';
163
230
  time.pickerType = PickerType.Timer;
164
231
  time.selectMode = SelectMode.Single;
165
232
  time.startView = StartView.Month;
166
233
  time.value = this.value;
234
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
235
+ time.customValidation = this.repeaterField.controlOptions.customValidation;
236
+ }
167
237
  this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, time);
168
238
  break;
169
239
  //#endregion
170
240
  //#region Dropdown
171
241
  case DataType.SingleSelect:
172
242
  let singleSelect = new DropdownOptions();
173
- singleSelect.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
243
+ singleSelect.name =
244
+ this.repeaterField.controlOptions.name +
245
+ '.' +
246
+ this.itemNumber.toString() +
247
+ '.' +
248
+ this.controlNumber.toString();
174
249
  singleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
175
250
  singleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
176
251
  singleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
177
252
  singleSelect.viewType = this.repeaterField.controlOptions.viewType;
178
- singleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
253
+ singleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
254
+ ? this.repeaterField.controlOptions.labelDescription
255
+ : '';
179
256
  singleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
180
257
  singleSelect.singleSelection = true;
181
258
  singleSelect.showCheckbox = false;
182
259
  singleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
183
260
  singleSelect.selectedItems = this.value;
261
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
262
+ singleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
263
+ }
184
264
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, singleSelect);
185
265
  break;
186
266
  case DataType.MulipleSelect:
187
267
  let mulipleSelect = new DropdownOptions();
188
- mulipleSelect.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
268
+ mulipleSelect.name =
269
+ this.repeaterField.controlOptions.name +
270
+ '.' +
271
+ this.itemNumber.toString() +
272
+ '.' +
273
+ this.controlNumber.toString();
189
274
  mulipleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
190
275
  mulipleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
191
276
  mulipleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
192
277
  mulipleSelect.viewType = this.repeaterField.controlOptions.viewType;
193
- mulipleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
278
+ mulipleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
279
+ ? this.repeaterField.controlOptions.labelDescription
280
+ : '';
194
281
  mulipleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
195
282
  mulipleSelect.singleSelection = false;
196
283
  mulipleSelect.showCheckbox = false;
197
284
  mulipleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
198
285
  mulipleSelect.selectedItems = this.value;
286
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
287
+ mulipleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
288
+ }
199
289
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, mulipleSelect);
200
290
  break;
201
291
  case DataType.Goal:
202
292
  let goal = new DropdownOptions();
203
- goal.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
293
+ goal.name =
294
+ this.repeaterField.controlOptions.name +
295
+ '.' +
296
+ this.itemNumber.toString() +
297
+ '.' +
298
+ this.controlNumber.toString();
204
299
  goal.hideLabel = this.repeaterField.controlOptions.hideLabel;
205
300
  goal.labelKey = this.repeaterField.controlOptions.labelKey;
206
301
  goal.isRequired = this.repeaterField.controlOptions.isRequired;
207
302
  goal.viewType = this.repeaterField.controlOptions.viewType;
208
- goal.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
303
+ goal.labelDescription = this.repeaterField.controlOptions.labelDescription
304
+ ? this.repeaterField.controlOptions.labelDescription
305
+ : '';
209
306
  goal.dataSource = this.repeaterField.controlOptions.dataSource;
210
307
  goal.singleSelection = !this.repeaterField.controlOptions.isMultiple;
211
308
  goal.showCheckbox = false;
212
309
  goal.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
213
310
  goal.selectedItems = this.value;
311
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
312
+ goal.customValidation = this.repeaterField.controlOptions.customValidation;
313
+ }
214
314
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, goal);
215
315
  break;
216
316
  case DataType.Challenge:
217
317
  let challenge = new DropdownOptions();
218
- challenge.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
318
+ challenge.name =
319
+ this.repeaterField.controlOptions.name +
320
+ '.' +
321
+ this.itemNumber.toString() +
322
+ '.' +
323
+ this.controlNumber.toString();
219
324
  challenge.hideLabel = this.repeaterField.controlOptions.hideLabel;
220
325
  challenge.labelKey = this.repeaterField.controlOptions.labelKey;
221
326
  challenge.isRequired = this.repeaterField.controlOptions.isRequired;
222
327
  challenge.viewType = this.repeaterField.controlOptions.viewType;
223
- challenge.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
328
+ challenge.labelDescription = this.repeaterField.controlOptions.labelDescription
329
+ ? this.repeaterField.controlOptions.labelDescription
330
+ : '';
224
331
  challenge.dataSource = this.repeaterField.controlOptions.dataSource;
225
332
  challenge.dataSource = this.repeaterField.controlOptions.dataSource;
226
333
  challenge.singleSelection = !this.repeaterField.controlOptions.isMultiple;
227
334
  challenge.showCheckbox = false;
228
335
  challenge.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
229
336
  challenge.selectedItems = this.value;
337
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
338
+ challenge.customValidation = this.repeaterField.controlOptions.customValidation;
339
+ }
230
340
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, challenge);
231
341
  break;
232
342
  case DataType.InnovationLab:
233
343
  let innovationLab = new DropdownOptions();
234
- innovationLab.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
344
+ innovationLab.name =
345
+ this.repeaterField.controlOptions.name +
346
+ '.' +
347
+ this.itemNumber.toString() +
348
+ '.' +
349
+ this.controlNumber.toString();
235
350
  innovationLab.hideLabel = this.repeaterField.controlOptions.hideLabel;
236
351
  innovationLab.labelKey = this.repeaterField.controlOptions.labelKey;
237
352
  innovationLab.isRequired = this.repeaterField.controlOptions.isRequired;
238
353
  innovationLab.viewType = this.repeaterField.controlOptions.viewType;
239
- innovationLab.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
354
+ innovationLab.labelDescription = this.repeaterField.controlOptions.labelDescription
355
+ ? this.repeaterField.controlOptions.labelDescription
356
+ : '';
240
357
  innovationLab.dataSource = this.repeaterField.controlOptions.dataSource;
241
358
  innovationLab.singleSelection = !this.repeaterField.controlOptions.isMultiple;
242
359
  innovationLab.showCheckbox = false;
243
360
  innovationLab.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
244
361
  innovationLab.selectedItems = this.value;
362
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
363
+ innovationLab.customValidation = this.repeaterField.controlOptions.customValidation;
364
+ }
245
365
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, innovationLab);
246
366
  break;
247
367
  case DataType.Country:
248
368
  let country = new DropdownOptions();
249
- country.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
369
+ country.name =
370
+ this.repeaterField.controlOptions.name +
371
+ '.' +
372
+ this.itemNumber.toString() +
373
+ '.' +
374
+ this.controlNumber.toString();
250
375
  country.hideLabel = this.repeaterField.controlOptions.hideLabel;
251
376
  country.labelKey = this.repeaterField.controlOptions.labelKey;
252
377
  country.isRequired = this.repeaterField.controlOptions.isRequired;
253
378
  country.viewType = this.repeaterField.controlOptions.viewType;
254
- country.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
379
+ country.labelDescription = this.repeaterField.controlOptions.labelDescription
380
+ ? this.repeaterField.controlOptions.labelDescription
381
+ : '';
255
382
  country.dataSource = this.repeaterField.controlOptions.dataSource;
256
383
  country.singleSelection = !this.repeaterField.controlOptions.isMultiple;
257
384
  country.showCheckbox = false;
258
385
  country.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
259
386
  country.selectedItems = this.value;
387
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
388
+ country.customValidation = this.repeaterField.controlOptions.customValidation;
389
+ }
260
390
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, country);
261
391
  break;
262
392
  //#endregion
263
393
  //#region FileUpload
264
394
  case DataType.File:
265
395
  let file = new FileUploadOptions();
266
- file.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
396
+ file.name =
397
+ this.repeaterField.controlOptions.name +
398
+ '.' +
399
+ this.itemNumber.toString() +
400
+ '.' +
401
+ this.controlNumber.toString();
267
402
  file.hideLabel = this.repeaterField.controlOptions.hideLabel;
268
403
  file.labelKey = this.repeaterField.controlOptions.labelKey;
269
404
  file.isRequired = this.repeaterField.controlOptions.isRequired;
270
405
  file.viewType = this.repeaterField.controlOptions.viewType;
271
- file.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
406
+ file.labelDescription = this.repeaterField.controlOptions.labelDescription
407
+ ? this.repeaterField.controlOptions.labelDescription
408
+ : '';
272
409
  file.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
273
410
  file.value = this.value;
411
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
412
+ file.customValidation = this.repeaterField.controlOptions.customValidation;
413
+ }
274
414
  this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, file);
275
415
  break;
276
416
  case DataType.MultiFile:
277
417
  let multiFile = new FileUploadOptions();
278
- file.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
418
+ file.name =
419
+ this.repeaterField.controlOptions.name +
420
+ '.' +
421
+ this.itemNumber.toString() +
422
+ '.' +
423
+ this.controlNumber.toString();
279
424
  file.hideLabel = this.repeaterField.controlOptions.hideLabel;
280
425
  file.labelKey = this.repeaterField.controlOptions.labelKey;
281
426
  file.isRequired = this.repeaterField.controlOptions.isRequired;
282
427
  file.viewType = this.repeaterField.controlOptions.viewType;
283
- file.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
428
+ file.labelDescription = this.repeaterField.controlOptions.labelDescription
429
+ ? this.repeaterField.controlOptions.labelDescription
430
+ : '';
284
431
  multiFile.maxSizeForAllFilesInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
285
432
  multiFile.maxNoOfFiles = this.repeaterField.controlOptions.maxFileCount;
286
433
  multiFile.isMultipleFile = true;
287
434
  multiFile.value = this.value;
435
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
436
+ multiFile.customValidation = this.repeaterField.controlOptions.customValidation;
437
+ }
288
438
  this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, multiFile);
289
439
  break;
290
440
  //#endregion
291
441
  //#region ImageUpload
292
442
  case DataType.Image:
293
443
  let image = new ImageUploadOptions();
294
- image.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
444
+ image.name =
445
+ this.repeaterField.controlOptions.name +
446
+ '.' +
447
+ this.itemNumber.toString() +
448
+ '.' +
449
+ this.controlNumber.toString();
295
450
  image.hideLabel = this.repeaterField.controlOptions.hideLabel;
296
451
  image.labelKey = this.repeaterField.controlOptions.labelKey;
297
452
  image.isRequired = this.repeaterField.controlOptions.isRequired;
298
453
  image.viewType = this.repeaterField.controlOptions.viewType;
299
- image.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
454
+ image.labelDescription = this.repeaterField.controlOptions.labelDescription
455
+ ? this.repeaterField.controlOptions.labelDescription
456
+ : '';
300
457
  if (this.repeaterField.controlOptions.maxFileSizeInMB)
301
458
  image.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
302
459
  image.value = this.value;
460
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
461
+ image.customValidation = this.repeaterField.controlOptions.customValidation;
462
+ }
303
463
  this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, image);
304
464
  break;
305
465
  case DataType.CoverPhoto:
306
466
  let coverPhoto = new ImageUploadOptions();
307
- coverPhoto.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
467
+ coverPhoto.name =
468
+ this.repeaterField.controlOptions.name +
469
+ '.' +
470
+ this.itemNumber.toString() +
471
+ '.' +
472
+ this.controlNumber.toString();
308
473
  coverPhoto.hideLabel = this.repeaterField.controlOptions.hideLabel;
309
474
  coverPhoto.labelKey = this.repeaterField.controlOptions.labelKey;
310
475
  coverPhoto.isRequired = this.repeaterField.controlOptions.isRequired;
311
476
  coverPhoto.viewType = this.repeaterField.controlOptions.viewType;
312
- coverPhoto.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
477
+ coverPhoto.labelDescription = this.repeaterField.controlOptions.labelDescription
478
+ ? this.repeaterField.controlOptions.labelDescription
479
+ : '';
313
480
  if (this.repeaterField.controlOptions.maxFileSizeInMB)
314
481
  coverPhoto.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
315
482
  coverPhoto.value = this.value;
483
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
484
+ coverPhoto.customValidation = this.repeaterField.controlOptions.customValidation;
485
+ }
316
486
  this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, coverPhoto);
317
487
  break;
318
488
  //#endregion
319
489
  //#region Mobile
320
490
  case DataType.Mobile:
321
491
  let mobile = new PhoneOptions();
322
- mobile.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
492
+ mobile.name =
493
+ this.repeaterField.controlOptions.name +
494
+ '.' +
495
+ this.itemNumber.toString() +
496
+ '.' +
497
+ this.controlNumber.toString();
323
498
  mobile.hideLabel = this.repeaterField.controlOptions.hideLabel;
324
499
  mobile.labelKey = this.repeaterField.controlOptions.labelKey;
325
500
  mobile.isRequired = this.repeaterField.controlOptions.isRequired;
326
501
  mobile.viewType = this.repeaterField.controlOptions.viewType;
327
- mobile.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
502
+ mobile.labelDescription = this.repeaterField.controlOptions.labelDescription
503
+ ? this.repeaterField.controlOptions.labelDescription
504
+ : '';
328
505
  mobile.allowSearch = true;
329
506
  mobile.phoneValidation = true;
330
507
  mobile.selectFirstCountry = true;
331
508
  mobile.enablePlaceholder = true;
332
509
  mobile.value = this.value;
510
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
511
+ mobile.customValidation = this.repeaterField.controlOptions.customValidation;
512
+ }
333
513
  this.renderComponentService.renderDynamicComponent(this.item, PhoneComponent, this.group, mobile);
334
514
  break;
335
515
  //#endregion
336
516
  //#region MultilineText
337
517
  case DataType.MultilineText:
338
518
  let multilineText = new TextAreaOptions();
339
- multilineText.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
519
+ multilineText.name =
520
+ this.repeaterField.controlOptions.name +
521
+ '.' +
522
+ this.itemNumber.toString() +
523
+ '.' +
524
+ this.controlNumber.toString();
340
525
  multilineText.hideLabel = this.repeaterField.controlOptions.hideLabel;
341
526
  multilineText.labelKey = this.repeaterField.controlOptions.labelKey;
342
527
  multilineText.isRequired = this.repeaterField.controlOptions.isRequired;
343
528
  multilineText.viewType = this.repeaterField.controlOptions.viewType;
344
- multilineText.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
529
+ multilineText.labelDescription = this.repeaterField.controlOptions.labelDescription
530
+ ? this.repeaterField.controlOptions.labelDescription
531
+ : '';
345
532
  if (this.repeaterField.controlOptions.maxLength)
346
533
  multilineText.maxLength = this.repeaterField.controlOptions.maxLength;
347
534
  if (this.repeaterField.controlOptions.minLength)
@@ -349,63 +536,106 @@ export class RepeaterFieldBuilderComponent {
349
536
  multilineText.rows = this.repeaterField.controlOptions.rows;
350
537
  multilineText.forceDirection = this.repeaterField.controlOptions.forceDirection;
351
538
  multilineText.value = this.value;
539
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
540
+ multilineText.customValidation = this.repeaterField.controlOptions.customValidation;
541
+ }
352
542
  this.renderComponentService.renderDynamicComponent(this.item, TextAreaComponent, this.group, multilineText);
353
543
  break;
354
544
  //#endregion
355
545
  //#region HTML
356
546
  case DataType.HTML:
357
- let HTML = new HtmlEditorOptions();
358
- HTML.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
359
- HTML.hideLabel = this.repeaterField.controlOptions.hideLabel;
360
- HTML.labelKey = this.repeaterField.controlOptions.labelKey;
361
- HTML.isRequired = this.repeaterField.controlOptions.isRequired;
362
- HTML.viewType = this.repeaterField.controlOptions.viewType;
363
- HTML.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
547
+ let html = new HtmlEditorOptions();
548
+ html.name =
549
+ this.repeaterField.controlOptions.name +
550
+ '.' +
551
+ this.itemNumber.toString() +
552
+ '.' +
553
+ this.controlNumber.toString();
554
+ html.hideLabel = this.repeaterField.controlOptions.hideLabel;
555
+ html.labelKey = this.repeaterField.controlOptions.labelKey;
556
+ html.isRequired = this.repeaterField.controlOptions.isRequired;
557
+ html.viewType = this.repeaterField.controlOptions.viewType;
558
+ html.labelDescription = this.repeaterField.controlOptions.labelDescription
559
+ ? this.repeaterField.controlOptions.labelDescription
560
+ : '';
364
561
  if (this.repeaterField.controlOptions.maxLength)
365
- HTML.maxLength = this.repeaterField.controlOptions.maxLength;
562
+ html.maxLength = this.repeaterField.controlOptions.maxLength;
366
563
  if (this.repeaterField.controlOptions.minLength)
367
- HTML.minLength = this.repeaterField.controlOptions.minLength;
368
- HTML.height = this.repeaterField.controlOptions.rows;
369
- HTML.forceDirection = this.repeaterField.controlOptions.forceDirection;
370
- HTML.value = this.value;
371
- this.renderComponentService.renderDynamicComponent(this.item, HtmlEditorComponent, this.group, HTML);
564
+ html.minLength = this.repeaterField.controlOptions.minLength;
565
+ html.height = this.repeaterField.controlOptions.rows;
566
+ html.forceDirection = this.repeaterField.controlOptions.forceDirection;
567
+ html.value = this.value;
568
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
569
+ html.customValidation = this.repeaterField.controlOptions.customValidation;
570
+ }
571
+ this.renderComponentService.renderDynamicComponent(this.item, HtmlEditorComponent, this.group, html);
372
572
  break;
373
573
  //#endregion
374
574
  //#region Boolean
375
575
  case DataType.Boolean:
376
576
  let boolean = new ToggleSlideOptions();
377
- boolean.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
577
+ boolean.name =
578
+ this.repeaterField.controlOptions.name +
579
+ '.' +
580
+ this.itemNumber.toString() +
581
+ '.' +
582
+ this.controlNumber.toString();
378
583
  boolean.hideLabel = this.repeaterField.controlOptions.hideLabel;
379
584
  boolean.labelKey = this.repeaterField.controlOptions.labelKey;
380
585
  boolean.viewType = this.repeaterField.controlOptions.viewType;
381
586
  boolean.value = this.value;
382
- boolean.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
587
+ boolean.labelDescription = this.repeaterField.controlOptions.labelDescription
588
+ ? this.repeaterField.controlOptions.labelDescription
589
+ : '';
590
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
591
+ boolean.customValidation = this.repeaterField.controlOptions.customValidation;
592
+ }
383
593
  this.renderComponentService.renderDynamicComponent(this.item, ToggleslideComponent, this.group, boolean);
384
594
  break;
385
595
  //#endregion
386
596
  //#region Location
387
597
  case DataType.Location:
388
598
  let location = new MapAutoCompleteOptions();
389
- location.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
599
+ location.name =
600
+ this.repeaterField.controlOptions.name +
601
+ '.' +
602
+ this.itemNumber.toString() +
603
+ '.' +
604
+ this.controlNumber.toString();
390
605
  location.hideLabel = this.repeaterField.controlOptions.hideLabel;
391
606
  location.labelKey = this.repeaterField.controlOptions.labelKey;
392
607
  location.isRequired = this.repeaterField.controlOptions.isRequired;
393
608
  location.viewType = this.repeaterField.controlOptions.viewType;
394
609
  location.value = this.value;
395
- location.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
610
+ location.labelDescription = this.repeaterField.controlOptions.labelDescription
611
+ ? this.repeaterField.controlOptions.labelDescription
612
+ : '';
613
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
614
+ location.customValidation = this.repeaterField.controlOptions.customValidation;
615
+ }
396
616
  this.renderComponentService.renderDynamicComponent(this.item, MapAutoCompleteComponent, this.group, location);
397
617
  break;
398
618
  //#endregion
399
619
  //#region CheckBox
400
620
  case DataType.CheckBox:
401
621
  let checkBox = new CheckBoxOptions();
402
- checkBox.name = this.repeaterField.controlOptions.name + "." + this.itemNumber.toString() + "." + this.controlNumber.toString();
622
+ checkBox.name =
623
+ this.repeaterField.controlOptions.name +
624
+ '.' +
625
+ this.itemNumber.toString() +
626
+ '.' +
627
+ this.controlNumber.toString();
403
628
  checkBox.hideLabel = this.repeaterField.controlOptions.hideLabel;
404
629
  checkBox.labelKey = this.repeaterField.controlOptions.labelKey;
405
630
  checkBox.viewType = this.repeaterField.controlOptions.viewType;
406
631
  checkBox.outputFunction = this.repeaterField.controlOptions.outputFunction;
407
- checkBox.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
632
+ checkBox.labelDescription = this.repeaterField.controlOptions.labelDescription
633
+ ? this.repeaterField.controlOptions.labelDescription
634
+ : '';
408
635
  checkBox.value = this.value;
636
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
637
+ checkBox.customValidation = this.repeaterField.controlOptions.customValidation;
638
+ }
409
639
  this.renderComponentService.renderDynamicComponent(this.item, CheckBoxComponent, this.group, checkBox);
410
640
  break;
411
641
  //#endregion
@@ -417,7 +647,11 @@ export class RepeaterFieldBuilderComponent {
417
647
  ngOnChanges(changes) {
418
648
  if (changes.itemNumber)
419
649
  if (changes.itemNumber.previousValue) {
420
- let name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.previousValue.toString() + "." + this.controlNumber.toString();
650
+ let name = this.repeaterField.controlOptions.name +
651
+ '.' +
652
+ changes.itemNumber.previousValue.toString() +
653
+ '.' +
654
+ this.controlNumber.toString();
421
655
  let value = this.group.controls[name].value;
422
656
  this.item.clear();
423
657
  this.group.removeControl(name);
@@ -425,284 +659,471 @@ export class RepeaterFieldBuilderComponent {
425
659
  //#region TextBox
426
660
  case DataType.Text:
427
661
  let text = new TextBoxOptions();
428
- text.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
662
+ text.name =
663
+ this.repeaterField.controlOptions.name +
664
+ '.' +
665
+ changes.itemNumber.currentValue +
666
+ '.' +
667
+ this.controlNumber.toString();
429
668
  text.hideLabel = this.repeaterField.controlOptions.hideLabel;
430
669
  text.labelKey = this.repeaterField.controlOptions.labelKey;
431
670
  text.isRequired = this.repeaterField.controlOptions.isRequired;
432
671
  text.viewType = this.repeaterField.controlOptions.viewType;
433
- text.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
672
+ text.labelDescription = this.repeaterField.controlOptions.labelDescription
673
+ ? this.repeaterField.controlOptions.labelDescription
674
+ : '';
434
675
  text.type = InputType.Text;
435
676
  if (this.repeaterField.controlOptions.maxLength)
436
677
  text.maxLength = this.repeaterField.controlOptions.maxLength;
437
678
  if (this.repeaterField.controlOptions.minLength)
438
679
  text.minLength = this.repeaterField.controlOptions.minLength;
439
680
  text.value = value;
681
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
682
+ text.customValidation = this.repeaterField.controlOptions.customValidation;
683
+ }
440
684
  this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, text);
441
685
  break;
442
686
  case DataType.Name:
443
687
  let name = new TextBoxOptions();
444
- name.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
688
+ name.name =
689
+ this.repeaterField.controlOptions.name +
690
+ '.' +
691
+ changes.itemNumber.currentValue +
692
+ '.' +
693
+ this.controlNumber.toString();
445
694
  name.hideLabel = this.repeaterField.controlOptions.hideLabel;
446
695
  name.labelKey = this.repeaterField.controlOptions.labelKey;
447
696
  name.isRequired = this.repeaterField.controlOptions.isRequired;
448
697
  name.viewType = this.repeaterField.controlOptions.viewType;
449
- name.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
698
+ name.labelDescription = this.repeaterField.controlOptions.labelDescription
699
+ ? this.repeaterField.controlOptions.labelDescription
700
+ : '';
450
701
  if (this.repeaterField.controlOptions.maxLength)
451
702
  name.maxLength = this.repeaterField.controlOptions.maxLength;
452
703
  if (this.repeaterField.controlOptions.minLength)
453
704
  name.minLength = this.repeaterField.controlOptions.minLength;
454
705
  name.type = InputType.Text;
455
706
  name.value = value;
707
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
708
+ name.customValidation = this.repeaterField.controlOptions.customValidation;
709
+ }
456
710
  this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, name);
457
711
  break;
458
712
  case DataType.Email:
459
713
  let email = new TextBoxOptions();
460
- email.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
714
+ email.name =
715
+ this.repeaterField.controlOptions.name +
716
+ '.' +
717
+ changes.itemNumber.currentValue +
718
+ '.' +
719
+ this.controlNumber.toString();
461
720
  email.hideLabel = this.repeaterField.controlOptions.hideLabel;
462
721
  email.labelKey = this.repeaterField.controlOptions.labelKey;
463
722
  email.isRequired = this.repeaterField.controlOptions.isRequired;
464
723
  email.viewType = this.repeaterField.controlOptions.viewType;
465
- email.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
724
+ email.labelDescription = this.repeaterField.controlOptions.labelDescription
725
+ ? this.repeaterField.controlOptions.labelDescription
726
+ : '';
466
727
  email.type = InputType.Email;
467
728
  email.value = value;
729
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
730
+ email.customValidation = this.repeaterField.controlOptions.customValidation;
731
+ }
468
732
  this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, email);
469
733
  break;
470
734
  case DataType.Number:
471
735
  let number = new TextBoxOptions();
472
- number.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
736
+ number.name =
737
+ this.repeaterField.controlOptions.name +
738
+ '.' +
739
+ changes.itemNumber.currentValue +
740
+ '.' +
741
+ this.controlNumber.toString();
473
742
  number.hideLabel = this.repeaterField.controlOptions.hideLabel;
474
743
  number.labelKey = this.repeaterField.controlOptions.labelKey;
475
744
  number.isRequired = this.repeaterField.controlOptions.isRequired;
476
745
  number.viewType = this.repeaterField.controlOptions.viewType;
477
- number.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
746
+ number.labelDescription = this.repeaterField.controlOptions.labelDescription
747
+ ? this.repeaterField.controlOptions.labelDescription
748
+ : '';
478
749
  number.type = InputType.Number;
479
750
  let rangeNumber = new RangeNumber();
480
751
  rangeNumber.to = this.repeaterField.controlOptions.maxLength;
481
752
  rangeNumber.from = this.repeaterField.controlOptions.minLength;
482
753
  number.numberRange = rangeNumber;
483
754
  number.value = value;
755
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
756
+ number.customValidation = this.repeaterField.controlOptions.customValidation;
757
+ }
484
758
  this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, number);
485
759
  break;
486
760
  //#endregion
487
761
  //#region DateTime
488
762
  case DataType.Date:
489
- let Date = new DatePickerOptions();
490
- Date.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
491
- Date.hideLabel = this.repeaterField.controlOptions.hideLabel;
492
- Date.labelKey = this.repeaterField.controlOptions.labelKey;
493
- Date.isRequired = this.repeaterField.controlOptions.isRequired;
494
- Date.viewType = this.repeaterField.controlOptions.viewType;
495
- Date.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
496
- Date.pickerType = PickerType.Calendar;
497
- Date.selectMode = SelectMode.Single;
498
- Date.startView = StartView.Month;
499
- Date.value = value;
500
- this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, Date);
763
+ let date = new DatePickerOptions();
764
+ date.name =
765
+ this.repeaterField.controlOptions.name +
766
+ '.' +
767
+ changes.itemNumber.currentValue +
768
+ '.' +
769
+ this.controlNumber.toString();
770
+ date.hideLabel = this.repeaterField.controlOptions.hideLabel;
771
+ date.labelKey = this.repeaterField.controlOptions.labelKey;
772
+ date.isRequired = this.repeaterField.controlOptions.isRequired;
773
+ date.viewType = this.repeaterField.controlOptions.viewType;
774
+ date.labelDescription = this.repeaterField.controlOptions.labelDescription
775
+ ? this.repeaterField.controlOptions.labelDescription
776
+ : '';
777
+ date.pickerType = PickerType.Calendar;
778
+ date.selectMode = SelectMode.Single;
779
+ date.startView = StartView.Month;
780
+ date.value = value;
781
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
782
+ date.customValidation = this.repeaterField.controlOptions.customValidation;
783
+ }
784
+ this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, date);
501
785
  break;
502
786
  case DataType.DateTime:
503
787
  let dateTime = new DatePickerOptions();
504
- dateTime.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
788
+ dateTime.name =
789
+ this.repeaterField.controlOptions.name +
790
+ '.' +
791
+ changes.itemNumber.currentValue +
792
+ '.' +
793
+ this.controlNumber.toString();
505
794
  dateTime.hideLabel = this.repeaterField.controlOptions.hideLabel;
506
795
  dateTime.labelKey = this.repeaterField.controlOptions.labelKey;
507
796
  dateTime.isRequired = this.repeaterField.controlOptions.isRequired;
508
797
  dateTime.viewType = this.repeaterField.controlOptions.viewType;
509
- dateTime.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
798
+ dateTime.labelDescription = this.repeaterField.controlOptions.labelDescription
799
+ ? this.repeaterField.controlOptions.labelDescription
800
+ : '';
510
801
  dateTime.pickerType = PickerType.Both;
511
802
  dateTime.selectMode = SelectMode.Single;
512
803
  dateTime.startView = StartView.Month;
513
804
  dateTime.value = value;
805
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
806
+ dateTime.customValidation = this.repeaterField.controlOptions.customValidation;
807
+ }
514
808
  this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, dateTime);
515
809
  break;
516
810
  case DataType.Time:
517
811
  let time = new DatePickerOptions();
518
- time.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
812
+ time.name =
813
+ this.repeaterField.controlOptions.name +
814
+ '.' +
815
+ changes.itemNumber.currentValue +
816
+ '.' +
817
+ this.controlNumber.toString();
519
818
  time.hideLabel = this.repeaterField.controlOptions.hideLabel;
520
819
  time.labelKey = this.repeaterField.controlOptions.labelKey;
521
820
  time.isRequired = this.repeaterField.controlOptions.isRequired;
522
821
  time.viewType = this.repeaterField.controlOptions.viewType;
523
- time.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
822
+ time.labelDescription = this.repeaterField.controlOptions.labelDescription
823
+ ? this.repeaterField.controlOptions.labelDescription
824
+ : '';
524
825
  time.pickerType = PickerType.Timer;
525
826
  time.selectMode = SelectMode.Single;
526
827
  time.startView = StartView.Month;
527
828
  time.value = value;
829
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
830
+ time.customValidation = this.repeaterField.controlOptions.customValidation;
831
+ }
528
832
  this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, time);
529
833
  break;
530
834
  //#endregion
531
835
  //#region Dropdown
532
836
  case DataType.SingleSelect:
533
837
  let singleSelect = new DropdownOptions();
534
- singleSelect.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
838
+ singleSelect.name =
839
+ this.repeaterField.controlOptions.name +
840
+ '.' +
841
+ changes.itemNumber.currentValue +
842
+ '.' +
843
+ this.controlNumber.toString();
535
844
  singleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
536
845
  singleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
537
846
  singleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
538
847
  singleSelect.viewType = this.repeaterField.controlOptions.viewType;
539
- singleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
848
+ singleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
849
+ ? this.repeaterField.controlOptions.labelDescription
850
+ : '';
540
851
  singleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
541
852
  singleSelect.singleSelection = true;
542
853
  singleSelect.showCheckbox = false;
543
854
  singleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
544
855
  singleSelect.selectedItems = value;
856
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
857
+ singleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
858
+ }
545
859
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, singleSelect);
546
860
  break;
547
861
  case DataType.MulipleSelect:
548
862
  let mulipleSelect = new DropdownOptions();
549
- mulipleSelect.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
863
+ mulipleSelect.name =
864
+ this.repeaterField.controlOptions.name +
865
+ '.' +
866
+ changes.itemNumber.currentValue +
867
+ '.' +
868
+ this.controlNumber.toString();
550
869
  mulipleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
551
870
  mulipleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
552
871
  mulipleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
553
872
  mulipleSelect.viewType = this.repeaterField.controlOptions.viewType;
554
- mulipleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
873
+ mulipleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
874
+ ? this.repeaterField.controlOptions.labelDescription
875
+ : '';
555
876
  mulipleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
556
877
  mulipleSelect.singleSelection = false;
557
878
  mulipleSelect.showCheckbox = false;
558
879
  mulipleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
559
880
  mulipleSelect.selectedItems = value;
881
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
882
+ mulipleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
883
+ }
560
884
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, mulipleSelect);
561
885
  break;
562
886
  case DataType.Goal:
563
- let Goal = new DropdownOptions();
564
- Goal.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
565
- Goal.hideLabel = this.repeaterField.controlOptions.hideLabel;
566
- Goal.labelKey = this.repeaterField.controlOptions.labelKey;
567
- Goal.isRequired = this.repeaterField.controlOptions.isRequired;
568
- Goal.viewType = this.repeaterField.controlOptions.viewType;
569
- Goal.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
570
- Goal.dataSource = this.repeaterField.controlOptions.dataSource;
571
- Goal.singleSelection = !this.repeaterField.controlOptions.isMultiple;
572
- Goal.showCheckbox = false;
573
- Goal.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
574
- Goal.selectedItems = value;
575
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, Goal);
887
+ let goal = new DropdownOptions();
888
+ goal.name =
889
+ this.repeaterField.controlOptions.name +
890
+ '.' +
891
+ changes.itemNumber.currentValue +
892
+ '.' +
893
+ this.controlNumber.toString();
894
+ goal.hideLabel = this.repeaterField.controlOptions.hideLabel;
895
+ goal.labelKey = this.repeaterField.controlOptions.labelKey;
896
+ goal.isRequired = this.repeaterField.controlOptions.isRequired;
897
+ goal.viewType = this.repeaterField.controlOptions.viewType;
898
+ goal.labelDescription = this.repeaterField.controlOptions.labelDescription
899
+ ? this.repeaterField.controlOptions.labelDescription
900
+ : '';
901
+ goal.dataSource = this.repeaterField.controlOptions.dataSource;
902
+ goal.singleSelection = !this.repeaterField.controlOptions.isMultiple;
903
+ goal.showCheckbox = false;
904
+ goal.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
905
+ goal.selectedItems = value;
906
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
907
+ goal.customValidation = this.repeaterField.controlOptions.customValidation;
908
+ }
909
+ this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, goal);
576
910
  break;
577
911
  case DataType.Challenge:
578
912
  let challenge = new DropdownOptions();
579
- challenge.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
913
+ challenge.name =
914
+ this.repeaterField.controlOptions.name +
915
+ '.' +
916
+ changes.itemNumber.currentValue +
917
+ '.' +
918
+ this.controlNumber.toString();
580
919
  challenge.hideLabel = this.repeaterField.controlOptions.hideLabel;
581
920
  challenge.labelKey = this.repeaterField.controlOptions.labelKey;
582
921
  challenge.isRequired = this.repeaterField.controlOptions.isRequired;
583
922
  challenge.viewType = this.repeaterField.controlOptions.viewType;
584
- challenge.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
923
+ challenge.labelDescription = this.repeaterField.controlOptions.labelDescription
924
+ ? this.repeaterField.controlOptions.labelDescription
925
+ : '';
585
926
  challenge.dataSource = this.repeaterField.controlOptions.dataSource;
586
927
  challenge.dataSource = this.repeaterField.controlOptions.dataSource;
587
928
  challenge.singleSelection = !this.repeaterField.controlOptions.isMultiple;
588
929
  challenge.showCheckbox = false;
589
930
  challenge.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
590
931
  challenge.selectedItems = value;
932
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
933
+ challenge.customValidation = this.repeaterField.controlOptions.customValidation;
934
+ }
591
935
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, challenge);
592
936
  break;
593
937
  case DataType.InnovationLab:
594
938
  let innovationLab = new DropdownOptions();
595
- innovationLab.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
939
+ innovationLab.name =
940
+ this.repeaterField.controlOptions.name +
941
+ '.' +
942
+ changes.itemNumber.currentValue +
943
+ '.' +
944
+ this.controlNumber.toString();
596
945
  innovationLab.hideLabel = this.repeaterField.controlOptions.hideLabel;
597
946
  innovationLab.labelKey = this.repeaterField.controlOptions.labelKey;
598
947
  innovationLab.isRequired = this.repeaterField.controlOptions.isRequired;
599
948
  innovationLab.viewType = this.repeaterField.controlOptions.viewType;
600
- innovationLab.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
949
+ innovationLab.labelDescription = this.repeaterField.controlOptions.labelDescription
950
+ ? this.repeaterField.controlOptions.labelDescription
951
+ : '';
601
952
  innovationLab.dataSource = this.repeaterField.controlOptions.dataSource;
602
953
  innovationLab.singleSelection = !this.repeaterField.controlOptions.isMultiple;
603
954
  innovationLab.showCheckbox = false;
604
955
  innovationLab.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
605
956
  innovationLab.selectedItems = value;
957
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
958
+ innovationLab.customValidation = this.repeaterField.controlOptions.customValidation;
959
+ }
606
960
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, innovationLab);
607
961
  break;
608
962
  case DataType.Country:
609
963
  let country = new DropdownOptions();
610
- country.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
964
+ country.name =
965
+ this.repeaterField.controlOptions.name +
966
+ '.' +
967
+ changes.itemNumber.currentValue +
968
+ '.' +
969
+ this.controlNumber.toString();
611
970
  country.hideLabel = this.repeaterField.controlOptions.hideLabel;
612
971
  country.labelKey = this.repeaterField.controlOptions.labelKey;
613
972
  country.isRequired = this.repeaterField.controlOptions.isRequired;
614
973
  country.viewType = this.repeaterField.controlOptions.viewType;
615
- country.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
974
+ country.labelDescription = this.repeaterField.controlOptions.labelDescription
975
+ ? this.repeaterField.controlOptions.labelDescription
976
+ : '';
616
977
  country.dataSource = this.repeaterField.controlOptions.dataSource;
617
978
  country.singleSelection = !this.repeaterField.controlOptions.isMultiple;
618
979
  country.showCheckbox = false;
619
980
  country.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
620
981
  country.selectedItems = value;
982
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
983
+ country.customValidation = this.repeaterField.controlOptions.customValidation;
984
+ }
621
985
  this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, country);
622
986
  break;
623
987
  //#endregion
624
988
  //#region FileUpload
625
989
  case DataType.File:
626
990
  let file = new FileUploadOptions();
627
- file.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
991
+ file.name =
992
+ this.repeaterField.controlOptions.name +
993
+ '.' +
994
+ changes.itemNumber.currentValue +
995
+ '.' +
996
+ this.controlNumber.toString();
628
997
  file.hideLabel = this.repeaterField.controlOptions.hideLabel;
629
998
  file.labelKey = this.repeaterField.controlOptions.labelKey;
630
999
  file.isRequired = this.repeaterField.controlOptions.isRequired;
631
1000
  file.viewType = this.repeaterField.controlOptions.viewType;
632
- file.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
1001
+ file.labelDescription = this.repeaterField.controlOptions.labelDescription
1002
+ ? this.repeaterField.controlOptions.labelDescription
1003
+ : '';
633
1004
  file.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
634
1005
  file.value = value;
1006
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
1007
+ file.customValidation = this.repeaterField.controlOptions.customValidation;
1008
+ }
635
1009
  this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, file);
636
1010
  break;
637
1011
  case DataType.MultiFile:
638
1012
  let multiFile = new FileUploadOptions();
639
- file.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
1013
+ file.name =
1014
+ this.repeaterField.controlOptions.name +
1015
+ '.' +
1016
+ changes.itemNumber.currentValue +
1017
+ '.' +
1018
+ this.controlNumber.toString();
640
1019
  file.hideLabel = this.repeaterField.controlOptions.hideLabel;
641
1020
  file.labelKey = this.repeaterField.controlOptions.labelKey;
642
1021
  file.isRequired = this.repeaterField.controlOptions.isRequired;
643
1022
  file.viewType = this.repeaterField.controlOptions.viewType;
644
- file.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
1023
+ file.labelDescription = this.repeaterField.controlOptions.labelDescription
1024
+ ? this.repeaterField.controlOptions.labelDescription
1025
+ : '';
645
1026
  multiFile.maxSizeForAllFilesInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
646
1027
  multiFile.maxNoOfFiles = this.repeaterField.controlOptions.maxFileCount;
647
1028
  multiFile.isMultipleFile = true;
648
1029
  multiFile.value = value;
1030
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
1031
+ multiFile.customValidation = this.repeaterField.controlOptions.customValidation;
1032
+ }
649
1033
  this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, multiFile);
650
1034
  break;
651
1035
  //#endregion
652
1036
  //#region ImageUpload
653
1037
  case DataType.Image:
654
1038
  let image = new ImageUploadOptions();
655
- image.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
1039
+ image.name =
1040
+ this.repeaterField.controlOptions.name +
1041
+ '.' +
1042
+ changes.itemNumber.currentValue +
1043
+ '.' +
1044
+ this.controlNumber.toString();
656
1045
  image.hideLabel = this.repeaterField.controlOptions.hideLabel;
657
1046
  image.labelKey = this.repeaterField.controlOptions.labelKey;
658
1047
  image.isRequired = this.repeaterField.controlOptions.isRequired;
659
1048
  image.viewType = this.repeaterField.controlOptions.viewType;
660
- image.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
1049
+ image.labelDescription = this.repeaterField.controlOptions.labelDescription
1050
+ ? this.repeaterField.controlOptions.labelDescription
1051
+ : '';
661
1052
  if (this.repeaterField.controlOptions.maxFileSizeInMB)
662
1053
  image.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
663
1054
  image.value = value;
1055
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
1056
+ image.customValidation = this.repeaterField.controlOptions.customValidation;
1057
+ }
664
1058
  this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, image);
665
1059
  break;
666
1060
  case DataType.CoverPhoto:
667
1061
  let coverPhoto = new ImageUploadOptions();
668
- coverPhoto.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
1062
+ coverPhoto.name =
1063
+ this.repeaterField.controlOptions.name +
1064
+ '.' +
1065
+ changes.itemNumber.currentValue +
1066
+ '.' +
1067
+ this.controlNumber.toString();
669
1068
  coverPhoto.hideLabel = this.repeaterField.controlOptions.hideLabel;
670
1069
  coverPhoto.labelKey = this.repeaterField.controlOptions.labelKey;
671
1070
  coverPhoto.isRequired = this.repeaterField.controlOptions.isRequired;
672
1071
  coverPhoto.viewType = this.repeaterField.controlOptions.viewType;
673
- coverPhoto.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
1072
+ coverPhoto.labelDescription = this.repeaterField.controlOptions.labelDescription
1073
+ ? this.repeaterField.controlOptions.labelDescription
1074
+ : '';
674
1075
  if (this.repeaterField.controlOptions.maxFileSizeInMB)
675
1076
  coverPhoto.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
676
1077
  coverPhoto.value = value;
1078
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
1079
+ coverPhoto.customValidation = this.repeaterField.controlOptions.customValidation;
1080
+ }
677
1081
  this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, coverPhoto);
678
1082
  break;
679
1083
  //#endregion
680
1084
  //#region Mobile
681
1085
  case DataType.Mobile:
682
1086
  let mobile = new PhoneOptions();
683
- mobile.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
1087
+ mobile.name =
1088
+ this.repeaterField.controlOptions.name +
1089
+ '.' +
1090
+ changes.itemNumber.currentValue +
1091
+ '.' +
1092
+ this.controlNumber.toString();
684
1093
  mobile.hideLabel = this.repeaterField.controlOptions.hideLabel;
685
1094
  mobile.labelKey = this.repeaterField.controlOptions.labelKey;
686
1095
  mobile.isRequired = this.repeaterField.controlOptions.isRequired;
687
1096
  mobile.viewType = this.repeaterField.controlOptions.viewType;
688
- mobile.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
1097
+ mobile.labelDescription = this.repeaterField.controlOptions.labelDescription
1098
+ ? this.repeaterField.controlOptions.labelDescription
1099
+ : '';
689
1100
  mobile.allowSearch = true;
690
1101
  mobile.phoneValidation = true;
691
1102
  mobile.selectFirstCountry = true;
692
1103
  mobile.enablePlaceholder = true;
693
1104
  mobile.value = value;
1105
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
1106
+ mobile.customValidation = this.repeaterField.controlOptions.customValidation;
1107
+ }
694
1108
  this.renderComponentService.renderDynamicComponent(this.item, PhoneComponent, this.group, mobile);
695
1109
  break;
696
1110
  //#endregion
697
1111
  //#region MultilineText
698
1112
  case DataType.MultilineText:
699
1113
  let multilineText = new TextAreaOptions();
700
- multilineText.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
1114
+ multilineText.name =
1115
+ this.repeaterField.controlOptions.name +
1116
+ '.' +
1117
+ changes.itemNumber.currentValue +
1118
+ '.' +
1119
+ this.controlNumber.toString();
701
1120
  multilineText.hideLabel = this.repeaterField.controlOptions.hideLabel;
702
1121
  multilineText.labelKey = this.repeaterField.controlOptions.labelKey;
703
1122
  multilineText.isRequired = this.repeaterField.controlOptions.isRequired;
704
1123
  multilineText.viewType = this.repeaterField.controlOptions.viewType;
705
- multilineText.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
1124
+ multilineText.labelDescription = this.repeaterField.controlOptions.labelDescription
1125
+ ? this.repeaterField.controlOptions.labelDescription
1126
+ : '';
706
1127
  if (this.repeaterField.controlOptions.maxLength)
707
1128
  multilineText.maxLength = this.repeaterField.controlOptions.maxLength;
708
1129
  if (this.repeaterField.controlOptions.minLength)
@@ -710,63 +1131,106 @@ export class RepeaterFieldBuilderComponent {
710
1131
  multilineText.rows = this.repeaterField.controlOptions.rows;
711
1132
  multilineText.forceDirection = this.repeaterField.controlOptions.forceDirection;
712
1133
  multilineText.value = value;
1134
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
1135
+ multilineText.customValidation = this.repeaterField.controlOptions.customValidation;
1136
+ }
713
1137
  this.renderComponentService.renderDynamicComponent(this.item, TextAreaComponent, this.group, multilineText);
714
1138
  break;
715
1139
  //#endregion
716
1140
  //#region HTML
717
1141
  case DataType.HTML:
718
- let HTML = new HtmlEditorOptions();
719
- HTML.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
720
- HTML.hideLabel = this.repeaterField.controlOptions.hideLabel;
721
- HTML.labelKey = this.repeaterField.controlOptions.labelKey;
722
- HTML.isRequired = this.repeaterField.controlOptions.isRequired;
723
- HTML.viewType = this.repeaterField.controlOptions.viewType;
724
- HTML.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
1142
+ let html = new HtmlEditorOptions();
1143
+ html.name =
1144
+ this.repeaterField.controlOptions.name +
1145
+ '.' +
1146
+ changes.itemNumber.currentValue +
1147
+ '.' +
1148
+ this.controlNumber.toString();
1149
+ html.hideLabel = this.repeaterField.controlOptions.hideLabel;
1150
+ html.labelKey = this.repeaterField.controlOptions.labelKey;
1151
+ html.isRequired = this.repeaterField.controlOptions.isRequired;
1152
+ html.viewType = this.repeaterField.controlOptions.viewType;
1153
+ html.labelDescription = this.repeaterField.controlOptions.labelDescription
1154
+ ? this.repeaterField.controlOptions.labelDescription
1155
+ : '';
725
1156
  if (this.repeaterField.controlOptions.maxLength)
726
- HTML.maxLength = this.repeaterField.controlOptions.maxLength;
1157
+ html.maxLength = this.repeaterField.controlOptions.maxLength;
727
1158
  if (this.repeaterField.controlOptions.minLength)
728
- HTML.minLength = this.repeaterField.controlOptions.minLength;
729
- HTML.height = this.repeaterField.controlOptions.rows;
730
- HTML.forceDirection = this.repeaterField.controlOptions.forceDirection;
731
- HTML.value = value;
732
- this.renderComponentService.renderDynamicComponent(this.item, HtmlEditorComponent, this.group, HTML);
1159
+ html.minLength = this.repeaterField.controlOptions.minLength;
1160
+ html.height = this.repeaterField.controlOptions.rows;
1161
+ html.forceDirection = this.repeaterField.controlOptions.forceDirection;
1162
+ html.value = value;
1163
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
1164
+ html.customValidation = this.repeaterField.controlOptions.customValidation;
1165
+ }
1166
+ this.renderComponentService.renderDynamicComponent(this.item, HtmlEditorComponent, this.group, html);
733
1167
  break;
734
1168
  //#endregion
735
1169
  //#region Boolean
736
1170
  case DataType.Boolean:
737
1171
  let boolean = new ToggleSlideOptions();
738
- boolean.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
1172
+ boolean.name =
1173
+ this.repeaterField.controlOptions.name +
1174
+ '.' +
1175
+ changes.itemNumber.currentValue +
1176
+ '.' +
1177
+ this.controlNumber.toString();
739
1178
  boolean.hideLabel = this.repeaterField.controlOptions.hideLabel;
740
1179
  boolean.labelKey = this.repeaterField.controlOptions.labelKey;
741
1180
  boolean.viewType = this.repeaterField.controlOptions.viewType;
742
- boolean.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
1181
+ boolean.labelDescription = this.repeaterField.controlOptions.labelDescription
1182
+ ? this.repeaterField.controlOptions.labelDescription
1183
+ : '';
743
1184
  boolean.value = value;
1185
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
1186
+ boolean.customValidation = this.repeaterField.controlOptions.customValidation;
1187
+ }
744
1188
  this.renderComponentService.renderDynamicComponent(this.item, ToggleslideComponent, this.group, boolean);
745
1189
  break;
746
1190
  //#endregion
747
1191
  //#region Location
748
1192
  case DataType.Location:
749
- let Location = new MapAutoCompleteOptions();
750
- Location.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
751
- Location.hideLabel = this.repeaterField.controlOptions.hideLabel;
752
- Location.labelKey = this.repeaterField.controlOptions.labelKey;
753
- Location.isRequired = this.repeaterField.controlOptions.isRequired;
754
- Location.viewType = this.repeaterField.controlOptions.viewType;
755
- Location.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
756
- Location.value = value;
757
- this.renderComponentService.renderDynamicComponent(this.item, MapAutoCompleteComponent, this.group, Location);
1193
+ let location = new MapAutoCompleteOptions();
1194
+ location.name =
1195
+ this.repeaterField.controlOptions.name +
1196
+ '.' +
1197
+ changes.itemNumber.currentValue +
1198
+ '.' +
1199
+ this.controlNumber.toString();
1200
+ location.hideLabel = this.repeaterField.controlOptions.hideLabel;
1201
+ location.labelKey = this.repeaterField.controlOptions.labelKey;
1202
+ location.isRequired = this.repeaterField.controlOptions.isRequired;
1203
+ location.viewType = this.repeaterField.controlOptions.viewType;
1204
+ location.labelDescription = this.repeaterField.controlOptions.labelDescription
1205
+ ? this.repeaterField.controlOptions.labelDescription
1206
+ : '';
1207
+ location.value = value;
1208
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
1209
+ location.customValidation = this.repeaterField.controlOptions.customValidation;
1210
+ }
1211
+ this.renderComponentService.renderDynamicComponent(this.item, MapAutoCompleteComponent, this.group, location);
758
1212
  break;
759
1213
  //#endregion
760
1214
  //#region CheckBox
761
1215
  case DataType.CheckBox:
762
1216
  let checkBox = new CheckBoxOptions();
763
- checkBox.name = this.repeaterField.controlOptions.name + "." + changes.itemNumber.currentValue + "." + this.controlNumber.toString();
1217
+ checkBox.name =
1218
+ this.repeaterField.controlOptions.name +
1219
+ '.' +
1220
+ changes.itemNumber.currentValue +
1221
+ '.' +
1222
+ this.controlNumber.toString();
764
1223
  checkBox.hideLabel = this.repeaterField.controlOptions.hideLabel;
765
1224
  checkBox.labelKey = this.repeaterField.controlOptions.labelKey;
766
1225
  checkBox.viewType = this.repeaterField.controlOptions.viewType;
767
- checkBox.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : "";
1226
+ checkBox.labelDescription = this.repeaterField.controlOptions.labelDescription
1227
+ ? this.repeaterField.controlOptions.labelDescription
1228
+ : '';
768
1229
  checkBox.outputFunction = this.repeaterField.controlOptions.outputFunction;
769
1230
  checkBox.value = value;
1231
+ if (this.repeaterField.controlOptions.customValidation.length > 0) {
1232
+ checkBox.customValidation = this.repeaterField.controlOptions.customValidation;
1233
+ }
770
1234
  this.renderComponentService.renderDynamicComponent(this.item, CheckBoxComponent, this.group, checkBox);
771
1235
  break;
772
1236
  //#endregion
@@ -783,7 +1247,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
783
1247
  args: [{ selector: 'repeater-field-builder', template: "<ng-container #Item></ng-container>\r\n" }]
784
1248
  }], ctorParameters: () => [{ type: i1.RenderComponentService }, { type: i2.FormGroupDirective }], propDecorators: { item: [{
785
1249
  type: ViewChild,
786
- args: ["Item", { read: ViewContainerRef }]
1250
+ args: ['Item', { read: ViewContainerRef }]
787
1251
  }], group: [{
788
1252
  type: Input
789
1253
  }], itemNumber: [{
@@ -795,4 +1259,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
795
1259
  }], itemsValue: [{
796
1260
  type: Input
797
1261
  }] } });
798
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItZmllbGQtYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvUmVwZWF0ZXIvcmVwZWF0ZXItZmllbGQtYnVpbGRlci9yZXBlYXRlci1maWVsZC1idWlsZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZXBlYXRlci9yZXBlYXRlci1maWVsZC1idWlsZGVyL3JlcGVhdGVyLWZpZWxkLWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUF5QixTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFF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d0JBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBb0IsSUFBSSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO3dCQUMxSCxNQUFNO29CQUNSLFlBQVk7b0JBRVo7d0JBQ0UsTUFBTTtpQkFDVDthQUVGO0lBRUwsQ0FBQzsrR0FoeEJVLDZCQUE2QjttR0FBN0IsNkJBQTZCLHVSQUViLGdCQUFnQixrREN4QzdDLHlDQUNBOzs0RkRxQ2EsNkJBQTZCO2tCQUp6QyxTQUFTOytCQUNFLHdCQUF3Qjs0SEFLYSxJQUFJO3NCQUFsRCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDcEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvRW51bXMvRW51bXMnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvRW51bXMvSW5wdXRUeXBlJztcclxuaW1wb3J0IHsgUGlja2VyVHlwZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9FbnVtcy9QaWNrZXJUeXBlJztcclxuaW1wb3J0IHsgU2VsZWN0TW9kZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9FbnVtcy9TZWxlY3RNb2RlJztcclxuaW1wb3J0IHsgU3RhcnRWaWV3IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL0VudW1zL1N0YXJ0Vmlldyc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9EYXRlUGlja2VyT3B0aW9ucyc7XHJcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvRHJvcGRvd25PcHRpb25zJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL0ZpbGVVcGxvYWRPcHRpb25zJztcclxuaW1wb3J0IHsgSHRtbEVkaXRvck9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL0h0bWxFZGl0b3JPcHRpb25zJztcclxuaW1wb3J0IHsgSW1hZ2VVcGxvYWRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9JbWFnZVVwbG9hZE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBNYXBBdXRvQ29tcGxldGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9NYXBBdXRvQ29tcGxldGVPcHRpb25zJztcclxuaW1wb3J0IHsgUGhvbmVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9QaG9uZU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBSYW5nZU51bWJlciB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvUmFuZ2VOdW1iZXInO1xyXG5pbXBvcnQgeyBSZXBlYXRlckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9SZXBlYXRlckZpZWxkJztcclxuaW1wb3J0IHsgVGV4dEFyZWFPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9UZXh0QXJlYU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvVGV4dEJveE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBUb2dnbGVTbGlkZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL1RvZ2dsZVNsaWRlT3B0aW9ucyc7XHJcbmltcG9ydCB7IFJlbmRlckNvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvc2VydmljZXMvcmVuZGVyLWNvbXBvbmVudC1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9EYXRlVGltZVBpY2tlci9EYXRlVGltZVBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9Ecm9wZG93bkxpc3QvRHJvcGRvd25MaXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9GaWxlVXBsb2FkL0ZpbGVVcGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHRtbEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL0h0bWxFZGl0b3IvSHRtbEVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbWFnZVVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vSW1hZ2VVcGxvYWQvSW1hZ2VVcGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vTWFwQXV0b0NvbXBsZXRlL01hcEF1dG9Db21wbGV0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQaG9uZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL1Bob25lL1Bob25lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRleHRBcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vVGV4dEFyZWEvVGV4dEFyZWEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL1RleHRCb3gvVGV4dEJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb2dnbGVzbGlkZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL1RvZ2dsZXNsaWRlL1RvZ2dsZXNsaWRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrQm94T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvQ2hlY2tCb3hPcHRpb25zJztcclxuaW1wb3J0IHsgQ2hlY2tCb3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9DaGVja0JveC9DaGVja0JveC5jb21wb25lbnQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmVwZWF0ZXItZmllbGQtYnVpbGRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLWZpZWxkLWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwZWF0ZXJGaWVsZEJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBAVmlld0NoaWxkKFwiSXRlbVwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgaXRlbTogVmlld0NvbnRhaW5lclJlZjtcclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIGl0ZW1OdW1iZXI6IG51bWJlcjtcclxuICBASW5wdXQoKSBjb250cm9sTnVtYmVyOiBudW1iZXI7XHJcbiAgQElucHV0KCkgcmVwZWF0ZXJGaWVsZDogUmVwZWF0ZXJGaWVsZDtcclxuICBASW5wdXQoKSBpdGVtc1ZhbHVlOiBhbnlbXSA9IFtdO1xyXG4gIGl0ZW1WYWx1ZTogYW55ID0gbnVsbDtcclxuICB2YWx1ZTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlckNvbXBvbmVudFNlcnZpY2U6IFJlbmRlckNvbXBvbmVudFNlcnZpY2UsIHB1YmxpYyB0ZXh0Q29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zVmFsdWUubGVuZ3RoID4gMClcclxuICAgICAgICB0aGlzLml0ZW1WYWx1ZSA9IHRoaXMuaXRlbXNWYWx1ZVt0aGlzLml0ZW1OdW1iZXJdO1xyXG4gICAgICBpZiAodGhpcy5pdGVtVmFsdWUpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLml0ZW1WYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLml0ZW1WYWx1ZSwga2V5KSAmJiBrZXkgPT0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuaXRlbVZhbHVlW2tleV07XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBlbGVtZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLml0ZW0uY2xlYXIoKTtcclxuICAgICAgc3dpdGNoICh0aGlzLnJlcGVhdGVyRmllbGQ/LmNvbnRyb2xUeXBlKSB7XHJcbiAgICAgICAgLy8jcmVnaW9uIFRleHRCb3hcclxuICAgICAgICBjYXNlIERhdGFUeXBlLlRleHQ6XHJcbiAgICAgICAgICBsZXQgVGV4dCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgVGV4dC5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIFRleHQuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIFRleHQubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBUZXh0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIFRleHQudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBUZXh0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgIFRleHQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgVGV4dC5sYW5ndWFnZVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIFRleHQubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBUZXh0Lm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBUZXh0LnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIFRleHQuaXNSZWFkb25seSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlYWRvbmx5O1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4odGhpcy5pdGVtLCBUZXh0Ym94Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBUZXh0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIERhdGFUeXBlLk5hbWU6XHJcbiAgICAgICAgICBsZXQgbmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgbmFtZS5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIG5hbWUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG5hbWUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBuYW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIG5hbWUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBuYW1lLmxhbmd1YWdlVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYW5ndWFnZVZhbGlkYXRpb247XHJcbiAgICAgICAgICBuYW1lLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICBuYW1lLm1heExlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgbmFtZS5taW5MZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgbmFtZS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICBuYW1lLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRib3hDb21wb25lbnQ+KHRoaXMuaXRlbSwgVGV4dGJveENvbXBvbmVudCwgdGhpcy5ncm91cCwgbmFtZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5FbWFpbDpcclxuICAgICAgICAgIGxldCBlbWFpbCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgZW1haWwubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBlbWFpbC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZW1haWwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBlbWFpbC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBlbWFpbC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGVtYWlsLmxhbmd1YWdlVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYW5ndWFnZVZhbGlkYXRpb247XHJcbiAgICAgICAgICBlbWFpbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICBlbWFpbC50eXBlID0gSW5wdXRUeXBlLkVtYWlsO1xyXG4gICAgICAgICAgZW1haWwudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4odGhpcy5pdGVtLCBUZXh0Ym94Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBlbWFpbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5OdW1iZXI6XHJcbiAgICAgICAgICBsZXQgbnVtYmVyID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICBudW1iZXIubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBudW1iZXIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG51bWJlci5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIG51bWJlci5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBudW1iZXIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBudW1iZXIubGFuZ3VhZ2VWYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhbmd1YWdlVmFsaWRhdGlvbjtcclxuICAgICAgICAgIG51bWJlci5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICBudW1iZXIudHlwZSA9IElucHV0VHlwZS5OdW1iZXI7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VOdW1iZXIgPSBuZXcgUmFuZ2VOdW1iZXIoKTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubnVtYmVyUmFuZ2UpIHtcclxuICAgICAgICAgICAgcmFuZ2VOdW1iZXIudG8gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubnVtYmVyUmFuZ2UudG87XHJcbiAgICAgICAgICAgIHJhbmdlTnVtYmVyLmZyb20gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubnVtYmVyUmFuZ2UuZnJvbTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG51bWJlci5udW1iZXJSYW5nZSA9IHJhbmdlTnVtYmVyO1xyXG4gICAgICAgICAgbnVtYmVyLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIG51bWJlci5pc1JlYWRvbmx5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVhZG9ubHk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50Pih0aGlzLml0ZW0sIFRleHRib3hDb21wb25lbnQsIHRoaXMuZ3JvdXAsIG51bWJlcik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uICBEYXRlVGltZVxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuRGF0ZTpcclxuICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICBkYXRlLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZGF0ZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZGF0ZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGRhdGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZGF0ZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGRhdGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgZGF0ZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhcjtcclxuICAgICAgICAgIGRhdGUuc2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlO1xyXG4gICAgICAgICAgZGF0ZS5zdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICBkYXRlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERhdGVJbnB1dENvbXBvbmVudD4odGhpcy5pdGVtLCBEYXRlSW5wdXRDb21wb25lbnQsIHRoaXMuZ3JvdXAsIGRhdGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuRGF0ZVRpbWU6XHJcbiAgICAgICAgICBsZXQgZGF0ZVRpbWUgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgICAgICAgIGRhdGVUaW1lLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZGF0ZVRpbWUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGRhdGVUaW1lLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgZGF0ZVRpbWUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZGF0ZVRpbWUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBkYXRlVGltZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICBkYXRlVGltZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5Cb3RoO1xyXG4gICAgICAgICAgZGF0ZVRpbWUuc2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlO1xyXG4gICAgICAgICAgZGF0ZVRpbWUuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgZGF0ZVRpbWUudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RGF0ZUlucHV0Q29tcG9uZW50Pih0aGlzLml0ZW0sIERhdGVJbnB1dENvbXBvbmVudCwgdGhpcy5ncm91cCwgZGF0ZVRpbWUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuVGltZTpcclxuICAgICAgICAgIGxldCB0aW1lID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICB0aW1lLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgdGltZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgdGltZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIHRpbWUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgdGltZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIHRpbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgdGltZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5UaW1lcjtcclxuICAgICAgICAgIHRpbWUuc2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlO1xyXG4gICAgICAgICAgdGltZS5zdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICB0aW1lLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERhdGVJbnB1dENvbXBvbmVudD4odGhpcy5pdGVtLCBEYXRlSW5wdXRDb21wb25lbnQsIHRoaXMuZ3JvdXAsIHRpbWUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBEcm9wZG93blxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuU2luZ2xlU2VsZWN0OlxyXG4gICAgICAgICAgbGV0IHNpbmdsZVNlbGVjdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHNpbmdsZVNlbGVjdC5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIHNpbmdsZVNlbGVjdC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIHNpbmdsZVNlbGVjdC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIHNpbmdsZVNlbGVjdC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3Quc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50Pih0aGlzLml0ZW0sIERyb3Bkb3duTGlzdENvbXBvbmVudCwgdGhpcy5ncm91cCwgc2luZ2xlU2VsZWN0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuTXVsaXBsZVNlbGVjdDpcclxuICAgICAgICAgIGxldCBtdWxpcGxlU2VsZWN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgbXVsaXBsZVNlbGVjdC5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3Qudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgbXVsaXBsZVNlbGVjdC5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3Quc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3Quc2VsZWN0ZWRJdGVtcyA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KHRoaXMuaXRlbSwgRHJvcGRvd25MaXN0Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBtdWxpcGxlU2VsZWN0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuR29hbDpcclxuICAgICAgICAgIGxldCBnb2FsID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgZ29hbC5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGdvYWwuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGdvYWwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBnb2FsLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIGdvYWwudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBnb2FsLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgIGdvYWwuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgZ29hbC5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICBnb2FsLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgZ29hbC5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICBnb2FsLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50Pih0aGlzLml0ZW0sIERyb3Bkb3duTGlzdENvbXBvbmVudCwgdGhpcy5ncm91cCwgZ29hbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkNoYWxsZW5nZTpcclxuICAgICAgICAgIGxldCBjaGFsbGVuZ2UgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGNoYWxsZW5nZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGNoYWxsZW5nZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBjaGFsbGVuZ2Uudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGNoYWxsZW5nZS5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICBjaGFsbGVuZ2Uuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgIGNoYWxsZW5nZS5zZWxlY3RlZEl0ZW1zID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4odGhpcy5pdGVtLCBEcm9wZG93bkxpc3RDb21wb25lbnQsIHRoaXMuZ3JvdXAsIGNoYWxsZW5nZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLklubm92YXRpb25MYWI6XHJcbiAgICAgICAgICBsZXQgaW5ub3ZhdGlvbkxhYiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgaW5ub3ZhdGlvbkxhYi5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgaW5ub3ZhdGlvbkxhYi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zZWxlY3RlZEl0ZW1zID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4odGhpcy5pdGVtLCBEcm9wZG93bkxpc3RDb21wb25lbnQsIHRoaXMuZ3JvdXAsIGlubm92YXRpb25MYWIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5Db3VudHJ5OlxyXG4gICAgICAgICAgbGV0IGNvdW50cnkgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBjb3VudHJ5Lm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgY291bnRyeS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgY291bnRyeS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGNvdW50cnkuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgY291bnRyeS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGNvdW50cnkubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgY291bnRyeS5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICBjb3VudHJ5LnNpbmdsZVNlbGVjdGlvbiA9ICF0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNNdWx0aXBsZTtcclxuICAgICAgICAgIGNvdW50cnkuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBjb3VudHJ5LmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgIGNvdW50cnkuc2VsZWN0ZWRJdGVtcyA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KHRoaXMuaXRlbSwgRHJvcGRvd25MaXN0Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBjb3VudHJ5KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gRmlsZVVwbG9hZFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuRmlsZTpcclxuICAgICAgICAgIGxldCBmaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBmaWxlLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZmlsZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGZpbGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGZpbGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgZmlsZS5maWxlTWF4U2l6ZUluTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgZmlsZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxGaWxlVXBsb2FkQ29tcG9uZW50Pih0aGlzLml0ZW0sIEZpbGVVcGxvYWRDb21wb25lbnQsIHRoaXMuZ3JvdXAsIGZpbGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5NdWx0aUZpbGU6XHJcbiAgICAgICAgICBsZXQgbXVsdGlGaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBmaWxlLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZmlsZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGZpbGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGZpbGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLm1heFNpemVGb3JBbGxGaWxlc0luTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLm1heE5vT2ZGaWxlcyA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlQ291bnQ7XHJcbiAgICAgICAgICBtdWx0aUZpbGUuaXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEZpbGVVcGxvYWRDb21wb25lbnQ+KHRoaXMuaXRlbSwgRmlsZVVwbG9hZENvbXBvbmVudCwgdGhpcy5ncm91cCwgbXVsdGlGaWxlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gSW1hZ2VVcGxvYWRcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkltYWdlOlxyXG4gICAgICAgICAgbGV0IGltYWdlID0gbmV3IEltYWdlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgaW1hZ2UubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpbWFnZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgaW1hZ2UubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBpbWFnZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBpbWFnZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGltYWdlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CKVxyXG4gICAgICAgICAgICBpbWFnZS5maWxlTWF4U2l6ZUluTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgaW1hZ2UudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8SW1hZ2VVcGxvYWRlckNvbXBvbmVudD4odGhpcy5pdGVtLCBJbWFnZVVwbG9hZGVyQ29tcG9uZW50LCB0aGlzLmdyb3VwLCBpbWFnZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkNvdmVyUGhvdG86XHJcbiAgICAgICAgICBsZXQgY292ZXJQaG90byA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgIGNvdmVyUGhvdG8ubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgY292ZXJQaG90by5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgY292ZXJQaG90by5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQilcclxuICAgICAgICAgICAgY292ZXJQaG90by5maWxlTWF4U2l6ZUluTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgY292ZXJQaG90by52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxJbWFnZVVwbG9hZGVyQ29tcG9uZW50Pih0aGlzLml0ZW0sIEltYWdlVXBsb2FkZXJDb21wb25lbnQsIHRoaXMuZ3JvdXAsIGNvdmVyUGhvdG8pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBNb2JpbGVcclxuICAgICAgICBjYXNlIERhdGFUeXBlLk1vYmlsZTpcclxuICAgICAgICAgIGxldCBtb2JpbGUgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgICAgICBtb2JpbGUubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBtb2JpbGUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG1vYmlsZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIG1vYmlsZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBtb2JpbGUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBtb2JpbGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgbW9iaWxlLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuICAgICAgICAgIG1vYmlsZS5waG9uZVZhbGlkYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgbW9iaWxlLnNlbGVjdEZpcnN0Q291bnRyeSA9IHRydWU7XHJcbiAgICAgICAgICBtb2JpbGUuZW5hYmxlUGxhY2Vob2xkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgbW9iaWxlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFBob25lQ29tcG9uZW50Pih0aGlzLml0ZW0sIFBob25lQ29tcG9uZW50LCB0aGlzLmdyb3VwLCBtb2JpbGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBNdWx0aWxpbmVUZXh0XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5NdWx0aWxpbmVUZXh0OlxyXG4gICAgICAgICAgbGV0IG11bHRpbGluZVRleHQgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgICAgICBtdWx0aWxpbmVUZXh0Lm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIG11bHRpbGluZVRleHQuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIG11bHRpbGluZVRleHQubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIG11bHRpbGluZVRleHQubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0Lm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBtdWx0aWxpbmVUZXh0LnJvd3MgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMucm93cztcclxuICAgICAgICAgIG11bHRpbGluZVRleHQuZm9yY2VEaXJlY3Rpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZm9yY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICBtdWx0aWxpbmVUZXh0LnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRBcmVhQ29tcG9uZW50Pih0aGlzLml0ZW0sIFRleHRBcmVhQ29tcG9uZW50LCB0aGlzLmdyb3VwLCBtdWx0aWxpbmVUZXh0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gSFRNTFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuSFRNTDpcclxuICAgICAgICAgIGxldCBIVE1MID0gbmV3IEh0bWxFZGl0b3JPcHRpb25zKCk7XHJcbiAgICAgICAgICBIVE1MLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgSFRNTC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgSFRNTC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIEhUTUwuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgSFRNTC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIEhUTUwubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIEhUTUwubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBIVE1MLm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBIVE1MLmhlaWdodCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgSFRNTC5mb3JjZURpcmVjdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5mb3JjZURpcmVjdGlvbjtcclxuICAgICAgICAgIEhUTUwudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8SHRtbEVkaXRvckNvbXBvbmVudD4odGhpcy5pdGVtLCBIdG1sRWRpdG9yQ29tcG9uZW50LCB0aGlzLmdyb3VwLCBIVE1MKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gQm9vbGVhblxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuQm9vbGVhbjpcclxuICAgICAgICAgIGxldCBib29sZWFuID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgYm9vbGVhbi5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGJvb2xlYW4uaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGJvb2xlYW4ubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBib29sZWFuLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgYm9vbGVhbi52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBib29sZWFuLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRvZ2dsZXNsaWRlQ29tcG9uZW50Pih0aGlzLml0ZW0sIFRvZ2dsZXNsaWRlQ29tcG9uZW50LCB0aGlzLmdyb3VwLCBib29sZWFuKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gTG9jYXRpb25cclxuICAgICAgICBjYXNlIERhdGFUeXBlLkxvY2F0aW9uOlxyXG4gICAgICAgICAgbGV0IGxvY2F0aW9uID0gbmV3IE1hcEF1dG9Db21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgICAgIGxvY2F0aW9uLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgbG9jYXRpb24uaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGxvY2F0aW9uLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgbG9jYXRpb24uaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgbG9jYXRpb24udmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBsb2NhdGlvbi52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBsb2NhdGlvbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxNYXBBdXRvQ29tcGxldGVDb21wb25lbnQ+KHRoaXMuaXRlbSwgTWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50LCB0aGlzLmdyb3VwLCBsb2NhdGlvbik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uIENoZWNrQm94XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5DaGVja0JveDpcclxuICAgICAgICAgIGxldCBjaGVja0JveCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICAgIGNoZWNrQm94Lm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgY2hlY2tCb3guaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGNoZWNrQm94LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgY2hlY2tCb3gudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBjaGVja0JveC5vdXRwdXRGdW5jdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5vdXRwdXRGdW5jdGlvbjtcclxuICAgICAgICAgIGNoZWNrQm94LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgIGNoZWNrQm94LnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PENoZWNrQm94Q29tcG9uZW50Pih0aGlzLml0ZW0sIENoZWNrQm94Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBjaGVja0JveCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMuaXRlbU51bWJlcilcclxuICAgICAgaWYgKGNoYW5nZXMuaXRlbU51bWJlci5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgY2hhbmdlcy5pdGVtTnVtYmVyLnByZXZpb3VzVmFsdWUudG9TdHJpbmcoKSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5ncm91cC5jb250cm9sc1tuYW1lXS52YWx1ZTtcclxuICAgICAgICB0aGlzLml0ZW0uY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmdyb3VwLnJlbW92ZUNvbnRyb2wobmFtZSk7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbFR5cGUpIHtcclxuICAgICAgICAgIC8vI3JlZ2lvbiBUZXh0Qm94XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLlRleHQ6XHJcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRleHQubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgdGV4dC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICB0ZXh0LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICB0ZXh0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgdGV4dC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgdGV4dC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRleHQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgICB0ZXh0Lm1heExlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICAgIHRleHQubWluTGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgICAgdGV4dC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50Pih0aGlzLml0ZW0sIFRleHRib3hDb21wb25lbnQsIHRoaXMuZ3JvdXAsIHRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk5hbWU6XHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG5hbWUubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgbmFtZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBuYW1lLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBuYW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgbmFtZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbmFtZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICAgIG5hbWUubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgICAgbmFtZS5taW5MZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgICBuYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgICAgbmFtZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50Pih0aGlzLml0ZW0sIFRleHRib3hDb21wb25lbnQsIHRoaXMuZ3JvdXAsIG5hbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkVtYWlsOlxyXG4gICAgICAgICAgICBsZXQgZW1haWwgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZW1haWwubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZW1haWwuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgZW1haWwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGVtYWlsLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgZW1haWwudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGVtYWlsLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgZW1haWwudHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgICAgICAgZW1haWwudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4odGhpcy5pdGVtLCBUZXh0Ym94Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBlbWFpbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTnVtYmVyOlxyXG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG51bWJlci5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBudW1iZXIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgbnVtYmVyLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBudW1iZXIuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBudW1iZXIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIG51bWJlci5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICAgIG51bWJlci50eXBlID0gSW5wdXRUeXBlLk51bWJlcjtcclxuICAgICAgICAgICAgbGV0IHJhbmdlTnVtYmVyID0gbmV3IFJhbmdlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgIHJhbmdlTnVtYmVyLnRvID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgICAgcmFuZ2VOdW1iZXIuZnJvbSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICAgIG51bWJlci5udW1iZXJSYW5nZSA9IHJhbmdlTnVtYmVyO1xyXG4gICAgICAgICAgICBudW1iZXIudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4odGhpcy5pdGVtLCBUZXh0Ym94Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBudW1iZXIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAgIC8vI3JlZ2lvbiBEYXRlVGltZVxyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5EYXRlOlxyXG4gICAgICAgICAgICBsZXQgRGF0ZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBEYXRlLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIERhdGUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgRGF0ZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgRGF0ZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIERhdGUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIERhdGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgICBEYXRlLnBpY2tlclR5cGUgPSBQaWNrZXJUeXBlLkNhbGVuZGFyO1xyXG4gICAgICAgICAgICBEYXRlLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgICAgRGF0ZS5zdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICAgIERhdGUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RGF0ZUlucHV0Q29tcG9uZW50Pih0aGlzLml0ZW0sIERhdGVJbnB1dENvbXBvbmVudCwgdGhpcy5ncm91cCwgRGF0ZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuRGF0ZVRpbWU6XHJcbiAgICAgICAgICAgIGxldCBkYXRlVGltZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgZGF0ZVRpbWUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBkYXRlVGltZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgZGF0ZVRpbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5Cb3RoO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5zZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGU7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lLnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgICAgZGF0ZVRpbWUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RGF0ZUlucHV0Q29tcG9uZW50Pih0aGlzLml0ZW0sIERhdGVJbnB1dENvbXBvbmVudCwgdGhpcy5ncm91cCwgZGF0ZVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLlRpbWU6XHJcbiAgICAgICAgICAgIGxldCB0aW1lID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRpbWUubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgdGltZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICB0aW1lLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICB0aW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgdGltZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgdGltZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRpbWUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuVGltZXI7XHJcbiAgICAgICAgICAgIHRpbWUuc2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlO1xyXG4gICAgICAgICAgICB0aW1lLnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgICAgdGltZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEYXRlSW5wdXRDb21wb25lbnQ+KHRoaXMuaXRlbSwgRGF0ZUlucHV0Q29tcG9uZW50LCB0aGlzLmdyb3VwLCB0aW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gRHJvcGRvd25cclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuU2luZ2xlU2VsZWN0OlxyXG4gICAgICAgICAgICBsZXQgc2luZ2xlU2VsZWN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3QubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3QubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3QuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3Quc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3QuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3Quc2VsZWN0ZWRJdGVtcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KHRoaXMuaXRlbSwgRHJvcGRvd25MaXN0Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBzaW5nbGVTZWxlY3QpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTXVsaXBsZVNlbGVjdDpcclxuICAgICAgICAgICAgbGV0IG11bGlwbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3QubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3QuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4odGhpcy5pdGVtLCBEcm9wZG93bkxpc3RDb21wb25lbnQsIHRoaXMuZ3JvdXAsIG11bGlwbGVTZWxlY3QpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuR29hbDpcclxuICAgICAgICAgICAgbGV0IEdvYWwgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIEdvYWwubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgR29hbC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBHb2FsLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBHb2FsLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgR29hbC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgR29hbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICAgIEdvYWwuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICBHb2FsLnNpbmdsZVNlbGVjdGlvbiA9ICF0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNNdWx0aXBsZTtcclxuICAgICAgICAgICAgR29hbC5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgICAgR29hbC5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICAgIEdvYWwuc2VsZWN0ZWRJdGVtcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KHRoaXMuaXRlbSwgRHJvcGRvd25MaXN0Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBHb2FsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkNoYWxsZW5nZTpcclxuICAgICAgICAgICAgbGV0IGNoYWxsZW5nZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2UubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLnNpbmdsZVNlbGVjdGlvbiA9ICF0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNNdWx0aXBsZTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2UuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2Uuc2VsZWN0ZWRJdGVtcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KHRoaXMuaXRlbSwgRHJvcGRvd25MaXN0Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBjaGFsbGVuZ2UpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuSW5ub3ZhdGlvbkxhYjpcclxuICAgICAgICAgICAgbGV0IGlubm92YXRpb25MYWIgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLnNpbmdsZVNlbGVjdGlvbiA9ICF0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNNdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIuc2VsZWN0ZWRJdGVtcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KHRoaXMuaXRlbSwgRHJvcGRvd25MaXN0Q29tcG9uZW50LCB0aGlzLmdyb3VwLCBpbm5vdmF0aW9uTGFiKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkNvdW50cnk6XHJcbiAgICAgICAgICAgIGxldCBjb3VudHJ5ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBjb3VudHJ5Lm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGNvdW50cnkuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgY291bnRyeS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgY291bnRyeS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIGNvdW50cnkudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGNvdW50cnkubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgICBjb3VudHJ5LmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgY291bnRyeS5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICAgIGNvdW50cnkuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvdW50cnkuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgICBjb3VudHJ5LnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50Pih0aGlzLml0ZW0sIERyb3Bkb3duTGlzdENvbXBvbmVudCwgdGhpcy5ncm91cCwgY291bnRyeSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIEZpbGVVcGxvYWRcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuRmlsZTpcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBuZXcgRmlsZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZmlsZS5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBmaWxlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGZpbGUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGZpbGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBmaWxlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBmaWxlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgZmlsZS5maWxlTWF4U2l6ZUluTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgICBmaWxlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEZpbGVVcGxvYWRDb21wb25lbnQ+KHRoaXMuaXRlbSwgRmlsZVVwbG9hZENvbXBvbmVudCwgdGhpcy5ncm91cCwgZmlsZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5NdWx0aUZpbGU6XHJcbiAgICAgICAgICAgIGxldCBtdWx0aUZpbGUgPSBuZXcgRmlsZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZmlsZS5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBmaWxlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGZpbGUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGZpbGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBmaWxlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBmaWxlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgbXVsdGlGaWxlLm1heFNpemVGb3JBbGxGaWxlc0luTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgICBtdWx0aUZpbGUubWF4Tm9PZkZpbGVzID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVDb3VudDtcclxuICAgICAgICAgICAgbXVsdGlGaWxlLmlzTXVsdGlwbGVGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgbXVsdGlGaWxlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEZpbGVVcGxvYWRDb21wb25lbnQ+KHRoaXMuaXRlbSwgRmlsZVVwbG9hZENvbXBvbmVudCwgdGhpcy5ncm91cCwgbXVsdGlGaWxlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gSW1hZ2VVcGxvYWRcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuSW1hZ2U6XHJcbiAgICAgICAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgaW1hZ2UubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaW1hZ2UuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgaW1hZ2UubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGltYWdlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgaW1hZ2Uudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGltYWdlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUIpXHJcbiAgICAgICAgICAgICAgaW1hZ2UuZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgICAgaW1hZ2UudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8SW1hZ2VVcGxvYWRlckNvbXBvbmVudD4odGhpcy5pdGVtLCBJbWFnZVVwbG9hZGVyQ29tcG9uZW50LCB0aGlzLmdyb3VwLCBpbWFnZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5Db3ZlclBob3RvOlxyXG4gICAgICAgICAgICBsZXQgY292ZXJQaG90byA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgY292ZXJQaG90by5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGNvdmVyUGhvdG8ubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGNvdmVyUGhvdG8uaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUIpXHJcbiAgICAgICAgICAgICAgY292ZXJQaG90by5maWxlTWF4U2l6ZUluTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEltYWdlVXBsb2FkZXJDb21wb25lbnQ+KHRoaXMuaXRlbSwgSW1hZ2VVcGxvYWRlckNvbXBvbmVudCwgdGhpcy5ncm91cCwgY292ZXJQaG90byk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcbiAgICAgICAgICAvLyNyZWdpb24gTW9iaWxlXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk1vYmlsZTpcclxuICAgICAgICAgICAgbGV0IG1vYmlsZSA9IG5ldyBQaG9uZU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgbW9iaWxlLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIG1vYmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBtb2JpbGUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIG1vYmlsZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIG1vYmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbW9iaWxlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgbW9iaWxlLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgbW9iaWxlLnBob25lVmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIG1vYmlsZS5zZWxlY3RGaXJzdENvdW50cnkgPSB0cnVlO1xyXG4gICAgICAgICAgICBtb2JpbGUuZW5hYmxlUGxhY2Vob2xkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICBtb2JpbGUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8UGhvbmVDb21wb25lbnQ+KHRoaXMuaXRlbSwgUGhvbmVDb21wb25lbnQsIHRoaXMuZ3JvdXAsIG1vYmlsZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIE11bHRpbGluZVRleHRcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTXVsdGlsaW5lVGV4dDpcclxuICAgICAgICAgICAgbGV0IG11bHRpbGluZVRleHQgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG11bHRpbGluZVRleHQubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICAgIG11bHRpbGluZVRleHQubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5taW5MZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LnJvd3MgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMucm93cztcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5mb3JjZURpcmVjdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5mb3JjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0QXJlYUNvbXBvbmVudD4odGhpcy5pdGVtLCBUZXh0QXJlYUNvbXBvbmVudCwgdGhpcy5ncm91cCwgbXVsdGlsaW5lVGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIEhUTUxcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuSFRNTDpcclxuICAgICAgICAgICAgbGV0IEhUTUwgPSBuZXcgSHRtbEVkaXRvck9wdGlvbnMoKTtcclxuICAgICAgICAgICAgSFRNTC5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBIVE1MLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIEhUTUwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIEhUTUwuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBIVE1MLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBIVE1MLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgICAgSFRNTC5tYXhMZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgICBIVE1MLm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICAgIEhUTUwuaGVpZ2h0ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnJvd3M7XHJcbiAgICAgICAgICAgIEhUTUwuZm9yY2VEaXJlY3Rpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZm9yY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICAgIEhUTUwudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8SHRtbEVkaXRvckNvbXBvbmVudD4odGhpcy5pdGVtLCBIdG1sRWRpdG9yQ29tcG9uZW50LCB0aGlzLmdyb3VwLCBIVE1MKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gQm9vbGVhblxyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5Cb29sZWFuOlxyXG4gICAgICAgICAgICBsZXQgYm9vbGVhbiA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgYm9vbGVhbi5uYW1lID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgKyBcIi5cIiArIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgKyBcIi5cIiArIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBib29sZWFuLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGJvb2xlYW4ubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGJvb2xlYW4udmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGJvb2xlYW4ubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiBcIlwiO1xyXG4gICAgICAgICAgICBib29sZWFuLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRvZ2dsZXNsaWRlQ29tcG9uZW50Pih0aGlzLml0ZW0sIFRvZ2dsZXNsaWRlQ29tcG9uZW50LCB0aGlzLmdyb3VwLCBib29sZWFuKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gTG9jYXRpb25cclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTG9jYXRpb246XHJcbiAgICAgICAgICAgIGxldCBMb2NhdGlvbiA9IG5ldyBNYXBBdXRvQ29tcGxldGVPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIExvY2F0aW9uLm5hbWUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArIFwiLlwiICsgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArIFwiLlwiICsgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIExvY2F0aW9uLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIExvY2F0aW9uLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBMb2NhdGlvbi5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIExvY2F0aW9uLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBMb2NhdGlvbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICAgIExvY2F0aW9uLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PE1hcEF1dG9Db21wbGV0ZUNvbXBvbmVudD4odGhpcy5pdGVtLCBNYXBBdXRvQ29tcGxldGVDb21wb25lbnQsIHRoaXMuZ3JvdXAsIExvY2F0aW9uKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gQ2hlY2tCb3hcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuQ2hlY2tCb3g6XHJcbiAgICAgICAgICAgIGxldCBjaGVja0JveCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgY2hlY2tCb3gubmFtZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICsgXCIuXCIgKyBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICsgXCIuXCIgKyB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgY2hlY2tCb3guaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgY2hlY2tCb3gubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGNoZWNrQm94LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBjaGVja0JveC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA6IFwiXCI7XHJcbiAgICAgICAgICAgIGNoZWNrQm94Lm91dHB1dEZ1bmN0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm91dHB1dEZ1bmN0aW9uO1xyXG4gICAgICAgICAgICBjaGVja0JveC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxDaGVja0JveENvbXBvbmVudD4odGhpcy5pdGVtLCBDaGVja0JveENvbXBvbmVudCwgdGhpcy5ncm91cCwgY2hlY2tCb3gpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8bmctY29udGFpbmVyICNJdGVtPjwvbmctY29udGFpbmVyPlxyXG4iXX0=
1262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItZmllbGQtYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvUmVwZWF0ZXIvcmVwZWF0ZXItZmllbGQtYnVpbGRlci9yZXBlYXRlci1maWVsZC1idWlsZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZXBlYXRlci9yZXBlYXRlci1maWVsZC1idWlsZGVyL3JlcGVhdGVyLWZpZWxkLWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUs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QUFhLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQzt3QkFDM0UsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ3ZCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUNoRjt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQyxLQUFLLEVBQ1YsUUFBUSxDQUNULENBQUM7d0JBQ0YsTUFBTTtvQkFDUixZQUFZO29CQUVaO3dCQUNFLE1BQU07aUJBQ1Q7YUFDRjtJQUNMLENBQUM7K0dBdjhDVSw2QkFBNkI7bUdBQTdCLDZCQUE2Qix1UkFDYixnQkFBZ0Isa0RDOUM3Qyx5Q0FDQTs7NEZENENhLDZCQUE2QjtrQkFKekMsU0FBUzsrQkFDRSx3QkFBd0I7NEhBSWEsSUFBSTtzQkFBbEQsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3BDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvRW51bXMvRW51bXMnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvRW51bXMvSW5wdXRUeXBlJztcclxuaW1wb3J0IHsgUGlja2VyVHlwZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9FbnVtcy9QaWNrZXJUeXBlJztcclxuaW1wb3J0IHsgU2VsZWN0TW9kZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9FbnVtcy9TZWxlY3RNb2RlJztcclxuaW1wb3J0IHsgU3RhcnRWaWV3IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL0VudW1zL1N0YXJ0Vmlldyc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9EYXRlUGlja2VyT3B0aW9ucyc7XHJcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvRHJvcGRvd25PcHRpb25zJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL0ZpbGVVcGxvYWRPcHRpb25zJztcclxuaW1wb3J0IHsgSHRtbEVkaXRvck9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL0h0bWxFZGl0b3JPcHRpb25zJztcclxuaW1wb3J0IHsgSW1hZ2VVcGxvYWRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9JbWFnZVVwbG9hZE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBNYXBBdXRvQ29tcGxldGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9NYXBBdXRvQ29tcGxldGVPcHRpb25zJztcclxuaW1wb3J0IHsgUGhvbmVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9QaG9uZU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBSYW5nZU51bWJlciB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvUmFuZ2VOdW1iZXInO1xyXG5pbXBvcnQgeyBSZXBlYXRlckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9SZXBlYXRlckZpZWxkJztcclxuaW1wb3J0IHsgVGV4dEFyZWFPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9UZXh0QXJlYU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvVGV4dEJveE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBUb2dnbGVTbGlkZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL1RvZ2dsZVNsaWRlT3B0aW9ucyc7XHJcbmltcG9ydCB7IFJlbmRlckNvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvc2VydmljZXMvcmVuZGVyLWNvbXBvbmVudC1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9EYXRlVGltZVBpY2tlci9EYXRlVGltZVBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9Ecm9wZG93bkxpc3QvRHJvcGRvd25MaXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9GaWxlVXBsb2FkL0ZpbGVVcGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHRtbEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL0h0bWxFZGl0b3IvSHRtbEVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbWFnZVVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vSW1hZ2VVcGxvYWQvSW1hZ2VVcGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vTWFwQXV0b0NvbXBsZXRlL01hcEF1dG9Db21wbGV0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQaG9uZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL1Bob25lL1Bob25lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRleHRBcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vVGV4dEFyZWEvVGV4dEFyZWEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL1RleHRCb3gvVGV4dEJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb2dnbGVzbGlkZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL1RvZ2dsZXNsaWRlL1RvZ2dsZXNsaWRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrQm94T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvQ2hlY2tCb3hPcHRpb25zJztcclxuaW1wb3J0IHsgQ2hlY2tCb3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9DaGVja0JveC9DaGVja0JveC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyZXBlYXRlci1maWVsZC1idWlsZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVwZWF0ZXItZmllbGQtYnVpbGRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcGVhdGVyRmllbGRCdWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdJdGVtJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGl0ZW06IFZpZXdDb250YWluZXJSZWY7XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBpdGVtTnVtYmVyOiBudW1iZXI7XHJcbiAgQElucHV0KCkgY29udHJvbE51bWJlcjogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHJlcGVhdGVyRmllbGQ6IFJlcGVhdGVyRmllbGQ7XHJcbiAgQElucHV0KCkgaXRlbXNWYWx1ZTogYW55W10gPSBbXTtcclxuICBpdGVtVmFsdWU6IGFueSA9IG51bGw7XHJcbiAgdmFsdWU6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlbmRlckNvbXBvbmVudFNlcnZpY2U6IFJlbmRlckNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdGV4dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmVcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge31cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaXRlbXNWYWx1ZS5sZW5ndGggPiAwKSB0aGlzLml0ZW1WYWx1ZSA9IHRoaXMuaXRlbXNWYWx1ZVt0aGlzLml0ZW1OdW1iZXJdO1xyXG4gICAgICBpZiAodGhpcy5pdGVtVmFsdWUpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLml0ZW1WYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5pdGVtVmFsdWUsIGtleSkgJiZcclxuICAgICAgICAgICAga2V5ID09IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuaXRlbVZhbHVlW2tleV07XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBlbGVtZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLml0ZW0uY2xlYXIoKTtcclxuICAgICAgc3dpdGNoICh0aGlzLnJlcGVhdGVyRmllbGQ/LmNvbnRyb2xUeXBlKSB7XHJcbiAgICAgICAgLy8jcmVnaW9uIFRleHRCb3hcclxuICAgICAgICBjYXNlIERhdGFUeXBlLlRleHQ6XHJcbiAgICAgICAgICBsZXQgVGV4dCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgVGV4dC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgVGV4dC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgVGV4dC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIFRleHQuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgVGV4dC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIFRleHQubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIFRleHQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgVGV4dC5sYW5ndWFnZVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIFRleHQubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBUZXh0Lm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBUZXh0LnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIFRleHQuaXNSZWFkb25seSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlYWRvbmx5O1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgVGV4dC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBUZXh0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuTmFtZTpcclxuICAgICAgICAgIGxldCBuYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICBuYW1lLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBuYW1lLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBuYW1lLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgbmFtZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBuYW1lLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgbmFtZS5sYW5ndWFnZVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgbmFtZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIG5hbWUubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBuYW1lLm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBuYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgIG5hbWUudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbmFtZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBuYW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuRW1haWw6XHJcbiAgICAgICAgICBsZXQgZW1haWwgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIGVtYWlsLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBlbWFpbC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZW1haWwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBlbWFpbC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBlbWFpbC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGVtYWlsLmxhbmd1YWdlVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYW5ndWFnZVZhbGlkYXRpb247XHJcbiAgICAgICAgICBlbWFpbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgZW1haWwudHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgICAgIGVtYWlsLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGVtYWlsLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRib3hDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGVtYWlsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuTnVtYmVyOlxyXG4gICAgICAgICAgbGV0IG51bWJlciA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgbnVtYmVyLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBudW1iZXIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG51bWJlci5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIG51bWJlci5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBudW1iZXIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBudW1iZXIubGFuZ3VhZ2VWYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhbmd1YWdlVmFsaWRhdGlvbjtcclxuICAgICAgICAgIG51bWJlci5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgbnVtYmVyLnR5cGUgPSBJbnB1dFR5cGUuTnVtYmVyO1xyXG4gICAgICAgICAgbGV0IHJhbmdlTnVtYmVyID0gbmV3IFJhbmdlTnVtYmVyKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm51bWJlclJhbmdlKSB7XHJcbiAgICAgICAgICAgIHJhbmdlTnVtYmVyLnRvID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm51bWJlclJhbmdlLnRvO1xyXG4gICAgICAgICAgICByYW5nZU51bWJlci5mcm9tID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm51bWJlclJhbmdlLmZyb207XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBudW1iZXIubnVtYmVyUmFuZ2UgPSByYW5nZU51bWJlcjtcclxuICAgICAgICAgIG51bWJlci52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBudW1iZXIuaXNSZWFkb25seSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlYWRvbmx5O1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbnVtYmVyLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRib3hDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIG51bWJlclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gIERhdGVUaW1lXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5EYXRlOlxyXG4gICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgICAgICAgIGRhdGUubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGRhdGUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGRhdGUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBkYXRlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIGRhdGUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBkYXRlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBkYXRlLnBpY2tlclR5cGUgPSBQaWNrZXJUeXBlLkNhbGVuZGFyO1xyXG4gICAgICAgICAgZGF0ZS5zZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGU7XHJcbiAgICAgICAgICBkYXRlLnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgIGRhdGUudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZGF0ZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEYXRlSW5wdXRDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIERhdGVJbnB1dENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgZGF0ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIERhdGFUeXBlLkRhdGVUaW1lOlxyXG4gICAgICAgICAgbGV0IGRhdGVUaW1lID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICBkYXRlVGltZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZGF0ZVRpbWUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGRhdGVUaW1lLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgZGF0ZVRpbWUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZGF0ZVRpbWUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBkYXRlVGltZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgZGF0ZVRpbWUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQm90aDtcclxuICAgICAgICAgIGRhdGVUaW1lLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIGRhdGVUaW1lLnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgIGRhdGVUaW1lLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERhdGVJbnB1dENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBkYXRlVGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIERhdGFUeXBlLlRpbWU6XHJcbiAgICAgICAgICBsZXQgdGltZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGltZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgdGltZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgdGltZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIHRpbWUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgdGltZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIHRpbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIHRpbWUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuVGltZXI7XHJcbiAgICAgICAgICB0aW1lLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIHRpbWUuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgdGltZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aW1lLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERhdGVJbnB1dENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICB0aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBEcm9wZG93blxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuU2luZ2xlU2VsZWN0OlxyXG4gICAgICAgICAgbGV0IHNpbmdsZVNlbGVjdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHNpbmdsZVNlbGVjdC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3Quc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLk11bGlwbGVTZWxlY3Q6XHJcbiAgICAgICAgICBsZXQgbXVsaXBsZVNlbGVjdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3Qudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3Quc2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgbXVsaXBsZVNlbGVjdC5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIERyb3Bkb3duTGlzdENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuR29hbDpcclxuICAgICAgICAgIGxldCBnb2FsID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgZ29hbC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZ29hbC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZ29hbC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGdvYWwuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZ29hbC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGdvYWwubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGdvYWwuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgZ29hbC5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICBnb2FsLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgZ29hbC5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICBnb2FsLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZ29hbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIERyb3Bkb3duTGlzdENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgZ29hbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuQ2hhbGxlbmdlOlxyXG4gICAgICAgICAgbGV0IGNoYWxsZW5nZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIGNoYWxsZW5nZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGNoYWxsZW5nZS5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICBjaGFsbGVuZ2Uuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBjaGFsbGVuZ2VcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLklubm92YXRpb25MYWI6XHJcbiAgICAgICAgICBsZXQgaW5ub3ZhdGlvbkxhYiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zZWxlY3RlZEl0ZW1zID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkNvdW50cnk6XHJcbiAgICAgICAgICBsZXQgY291bnRyeSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIGNvdW50cnkubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGNvdW50cnkuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGNvdW50cnkubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBjb3VudHJ5LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIGNvdW50cnkudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBjb3VudHJ5LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBjb3VudHJ5LmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGNvdW50cnkuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgY291bnRyeS5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIGNvdW50cnkuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgY291bnRyeS5zZWxlY3RlZEl0ZW1zID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvdW50cnkuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGNvdW50cnlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uIEZpbGVVcGxvYWRcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkZpbGU6XHJcbiAgICAgICAgICBsZXQgZmlsZSA9IG5ldyBGaWxlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgZmlsZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZmlsZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGZpbGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGZpbGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGZpbGUuZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIGZpbGUudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxGaWxlVXBsb2FkQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBmaWxlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5NdWx0aUZpbGU6XHJcbiAgICAgICAgICBsZXQgbXVsdGlGaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBmaWxlLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBmaWxlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBmaWxlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgZmlsZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBmaWxlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgZmlsZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLm1heFNpemVGb3JBbGxGaWxlc0luTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLm1heE5vT2ZGaWxlcyA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlQ291bnQ7XHJcbiAgICAgICAgICBtdWx0aUZpbGUuaXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG11bHRpRmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxGaWxlVXBsb2FkQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBtdWx0aUZpbGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uIEltYWdlVXBsb2FkXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5JbWFnZTpcclxuICAgICAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgIGltYWdlLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpbWFnZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgaW1hZ2UubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBpbWFnZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBpbWFnZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGltYWdlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQilcclxuICAgICAgICAgICAgaW1hZ2UuZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIGltYWdlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGltYWdlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEltYWdlVXBsb2FkZXJDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIEltYWdlVXBsb2FkZXJDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGltYWdlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5Db3ZlclBob3RvOlxyXG4gICAgICAgICAgbGV0IGNvdmVyUGhvdG8gPSBuZXcgSW1hZ2VVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgY292ZXJQaG90by5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgY292ZXJQaG90by5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUIpXHJcbiAgICAgICAgICAgIGNvdmVyUGhvdG8uZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIGNvdmVyUGhvdG8udmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY292ZXJQaG90by5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxJbWFnZVVwbG9hZGVyQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBJbWFnZVVwbG9hZGVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBjb3ZlclBob3RvXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBNb2JpbGVcclxuICAgICAgICBjYXNlIERhdGFUeXBlLk1vYmlsZTpcclxuICAgICAgICAgIGxldCBtb2JpbGUgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgICAgICBtb2JpbGUubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIG1vYmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgbW9iaWxlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgbW9iaWxlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIG1vYmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIG1vYmlsZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgbW9iaWxlLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuICAgICAgICAgIG1vYmlsZS5waG9uZVZhbGlkYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgbW9iaWxlLnNlbGVjdEZpcnN0Q291bnRyeSA9IHRydWU7XHJcbiAgICAgICAgICBtb2JpbGUuZW5hYmxlUGxhY2Vob2xkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgbW9iaWxlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG1vYmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxQaG9uZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgUGhvbmVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIG1vYmlsZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gTXVsdGlsaW5lVGV4dFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuTXVsdGlsaW5lVGV4dDpcclxuICAgICAgICAgIGxldCBtdWx0aWxpbmVUZXh0ID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIG11bHRpbGluZVRleHQuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIG11bHRpbGluZVRleHQubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0Lm1heExlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5taW5MZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5yb3dzID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnJvd3M7XHJcbiAgICAgICAgICBtdWx0aWxpbmVUZXh0LmZvcmNlRGlyZWN0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmZvcmNlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRBcmVhQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0QXJlYUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gSFRNTFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuSFRNTDpcclxuICAgICAgICAgIGxldCBodG1sID0gbmV3IEh0bWxFZGl0b3JPcHRpb25zKCk7XHJcbiAgICAgICAgICBodG1sLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBodG1sLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBodG1sLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgaHRtbC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBodG1sLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgaHRtbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIGh0bWwubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBodG1sLm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBodG1sLmhlaWdodCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgaHRtbC5mb3JjZURpcmVjdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5mb3JjZURpcmVjdGlvbjtcclxuICAgICAgICAgIGh0bWwudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaHRtbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxIdG1sRWRpdG9yQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBIdG1sRWRpdG9yQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBodG1sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBCb29sZWFuXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5Cb29sZWFuOlxyXG4gICAgICAgICAgbGV0IGJvb2xlYW4gPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgICAgICBib29sZWFuLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBib29sZWFuLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBib29sZWFuLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgYm9vbGVhbi52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGJvb2xlYW4udmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgYm9vbGVhbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYm9vbGVhbi5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUb2dnbGVzbGlkZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgVG9nZ2xlc2xpZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGJvb2xlYW5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uIExvY2F0aW9uXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5Mb2NhdGlvbjpcclxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9IG5ldyBNYXBBdXRvQ29tcGxldGVPcHRpb25zKCk7XHJcbiAgICAgICAgICBsb2NhdGlvbi5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgbG9jYXRpb24uaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGxvY2F0aW9uLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgbG9jYXRpb24uaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgbG9jYXRpb24udmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBsb2NhdGlvbi52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBsb2NhdGlvbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbG9jYXRpb24uY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8TWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBNYXBBdXRvQ29tcGxldGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBDaGVja0JveFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuQ2hlY2tCb3g6XHJcbiAgICAgICAgICBsZXQgY2hlY2tCb3ggPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICBjaGVja0JveC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgY2hlY2tCb3guaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGNoZWNrQm94LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgY2hlY2tCb3gudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBjaGVja0JveC5vdXRwdXRGdW5jdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5vdXRwdXRGdW5jdGlvbjtcclxuICAgICAgICAgIGNoZWNrQm94LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBjaGVja0JveC52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjaGVja0JveC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxDaGVja0JveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgQ2hlY2tCb3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGNoZWNrQm94XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLml0ZW1OdW1iZXIpXHJcbiAgICAgIGlmIChjaGFuZ2VzLml0ZW1OdW1iZXIucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgIGxldCBuYW1lID1cclxuICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIucHJldmlvdXNWYWx1ZS50b1N0cmluZygpICtcclxuICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdyb3VwLmNvbnRyb2xzW25hbWVdLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuaXRlbS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAucmVtb3ZlQ29udHJvbChuYW1lKTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sVHlwZSkge1xyXG4gICAgICAgICAgLy8jcmVnaW9uIFRleHRCb3hcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuVGV4dDpcclxuICAgICAgICAgICAgbGV0IHRleHQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGV4dC5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB0ZXh0LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIHRleHQubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIHRleHQuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICB0ZXh0LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICB0ZXh0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICB0ZXh0LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgICAgdGV4dC5tYXhMZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgICB0ZXh0Lm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICAgIHRleHQudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0ZXh0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgVGV4dGJveENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIHRleHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5OYW1lOlxyXG4gICAgICAgICAgICBsZXQgbmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgICBuYW1lLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIG5hbWUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgbmFtZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgbmFtZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIG5hbWUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIG5hbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICAgIG5hbWUubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgICAgbmFtZS5taW5MZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgICBuYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgICAgbmFtZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIG5hbWUuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRib3hDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgbmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkVtYWlsOlxyXG4gICAgICAgICAgICBsZXQgZW1haWwgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZW1haWwubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZW1haWwuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgZW1haWwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGVtYWlsLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgZW1haWwudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGVtYWlsLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBlbWFpbC50eXBlID0gSW5wdXRUeXBlLkVtYWlsO1xyXG4gICAgICAgICAgICBlbWFpbC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGVtYWlsLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgVGV4dGJveENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIGVtYWlsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTnVtYmVyOlxyXG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG51bWJlci5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBudW1iZXIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgbnVtYmVyLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBudW1iZXIuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBudW1iZXIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIG51bWJlci5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgbnVtYmVyLnR5cGUgPSBJbnB1dFR5cGUuTnVtYmVyO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2VOdW1iZXIgPSBuZXcgUmFuZ2VOdW1iZXIoKTtcclxuICAgICAgICAgICAgcmFuZ2VOdW1iZXIudG8gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICByYW5nZU51bWJlci5mcm9tID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgICAgbnVtYmVyLm51bWJlclJhbmdlID0gcmFuZ2VOdW1iZXI7XHJcbiAgICAgICAgICAgIG51bWJlci52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIG51bWJlci5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBudW1iZXJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gRGF0ZVRpbWVcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuRGF0ZTpcclxuICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZGF0ZS5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBkYXRlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGRhdGUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGRhdGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBkYXRlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBkYXRlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBkYXRlLnBpY2tlclR5cGUgPSBQaWNrZXJUeXBlLkNhbGVuZGFyO1xyXG4gICAgICAgICAgICBkYXRlLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgICAgZGF0ZS5zdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICAgIGRhdGUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBkYXRlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEYXRlSW5wdXRDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBEYXRlSW5wdXRDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBkYXRlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuRGF0ZVRpbWU6XHJcbiAgICAgICAgICAgIGxldCBkYXRlVGltZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgZGF0ZVRpbWUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBkYXRlVGltZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgZGF0ZVRpbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lLnBpY2tlclR5cGUgPSBQaWNrZXJUeXBlLkJvdGg7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgICAgZGF0ZVRpbWUuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgICBkYXRlVGltZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGRhdGVUaW1lLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEYXRlSW5wdXRDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBEYXRlSW5wdXRDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLlRpbWU6XHJcbiAgICAgICAgICAgIGxldCB0aW1lID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRpbWUubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgdGltZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICB0aW1lLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICB0aW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgdGltZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgdGltZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgdGltZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5UaW1lcjtcclxuICAgICAgICAgICAgdGltZS5zZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGU7XHJcbiAgICAgICAgICAgIHRpbWUuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgICB0aW1lLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGltZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RGF0ZUlucHV0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgdGltZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAgIC8vI3JlZ2lvbiBEcm9wZG93blxyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5TaW5nbGVTZWxlY3Q6XHJcbiAgICAgICAgICAgIGxldCBzaW5nbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3QuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3QuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3Qudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBzaW5nbGVTZWxlY3QuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIERyb3Bkb3duTGlzdENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIHNpbmdsZVNlbGVjdFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTXVsaXBsZVNlbGVjdDpcclxuICAgICAgICAgICAgbGV0IG11bGlwbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3QubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3Quc2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3Quc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3QuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBtdWxpcGxlU2VsZWN0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBtdWxpcGxlU2VsZWN0XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5Hb2FsOlxyXG4gICAgICAgICAgICBsZXQgZ29hbCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZ29hbC5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBnb2FsLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGdvYWwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGdvYWwuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBnb2FsLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBnb2FsLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBnb2FsLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgZ29hbC5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICAgIGdvYWwuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGdvYWwuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgICBnb2FsLnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBnb2FsLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBnb2FsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5DaGFsbGVuZ2U6XHJcbiAgICAgICAgICAgIGxldCBjaGFsbGVuZ2UgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2UuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2UuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2Uudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLnNpbmdsZVNlbGVjdGlvbiA9ICF0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNNdWx0aXBsZTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2UuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2Uuc2VsZWN0ZWRJdGVtcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGNoYWxsZW5nZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgY2hhbGxlbmdlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5Jbm5vdmF0aW9uTGFiOlxyXG4gICAgICAgICAgICBsZXQgaW5ub3ZhdGlvbkxhYiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBpbm5vdmF0aW9uTGFiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5Db3VudHJ5OlxyXG4gICAgICAgICAgICBsZXQgY291bnRyeSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgY291bnRyeS5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBjb3VudHJ5LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGNvdW50cnkubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGNvdW50cnkuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBjb3VudHJ5LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBjb3VudHJ5LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBjb3VudHJ5LmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgY291bnRyeS5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICAgIGNvdW50cnkuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvdW50cnkuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgICBjb3VudHJ5LnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb3VudHJ5LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBjb3VudHJ5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIEZpbGVVcGxvYWRcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuRmlsZTpcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBuZXcgRmlsZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZmlsZS5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBmaWxlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGZpbGUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGZpbGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBmaWxlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBmaWxlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBmaWxlLmZpbGVNYXhTaXplSW5NQiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUI7XHJcbiAgICAgICAgICAgIGZpbGUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBmaWxlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxGaWxlVXBsb2FkQ29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRmlsZVVwbG9hZENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIGZpbGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk11bHRpRmlsZTpcclxuICAgICAgICAgICAgbGV0IG11bHRpRmlsZSA9IG5ldyBGaWxlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBmaWxlLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGZpbGUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgZmlsZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgZmlsZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIGZpbGUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGZpbGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIG11bHRpRmlsZS5tYXhTaXplRm9yQWxsRmlsZXNJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgICAgbXVsdGlGaWxlLm1heE5vT2ZGaWxlcyA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlQ291bnQ7XHJcbiAgICAgICAgICAgIG11bHRpRmlsZS5pc011bHRpcGxlRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIG11bHRpRmlsZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIG11bHRpRmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RmlsZVVwbG9hZENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIEZpbGVVcGxvYWRDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBtdWx0aUZpbGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gSW1hZ2VVcGxvYWRcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuSW1hZ2U6XHJcbiAgICAgICAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgaW1hZ2UubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaW1hZ2UuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgaW1hZ2UubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGltYWdlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgaW1hZ2Uudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGltYWdlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQilcclxuICAgICAgICAgICAgICBpbWFnZS5maWxlTWF4U2l6ZUluTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgICBpbWFnZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGltYWdlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxJbWFnZVVwbG9hZGVyQ29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgSW1hZ2VVcGxvYWRlckNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIGltYWdlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5Db3ZlclBob3RvOlxyXG4gICAgICAgICAgICBsZXQgY292ZXJQaG90byA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgY292ZXJQaG90by5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGNvdmVyUGhvdG8ubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGNvdmVyUGhvdG8uaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQilcclxuICAgICAgICAgICAgICBjb3ZlclBob3RvLmZpbGVNYXhTaXplSW5NQiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUI7XHJcbiAgICAgICAgICAgIGNvdmVyUGhvdG8udmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb3ZlclBob3RvLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxJbWFnZVVwbG9hZGVyQ29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgSW1hZ2VVcGxvYWRlckNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIGNvdmVyUGhvdG9cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuICAgICAgICAgIC8vI3JlZ2lvbiBNb2JpbGVcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTW9iaWxlOlxyXG4gICAgICAgICAgICBsZXQgbW9iaWxlID0gbmV3IFBob25lT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBtb2JpbGUubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgbW9iaWxlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIG1vYmlsZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgbW9iaWxlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgbW9iaWxlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBtb2JpbGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIG1vYmlsZS5hbGxvd1NlYXJjaCA9IHRydWU7XHJcbiAgICAgICAgICAgIG1vYmlsZS5waG9uZVZhbGlkYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICBtb2JpbGUuc2VsZWN0Rmlyc3RDb3VudHJ5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbW9iaWxlLmVuYWJsZVBsYWNlaG9sZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgbW9iaWxlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgbW9iaWxlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxQaG9uZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIFBob25lQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgbW9iaWxlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIE11bHRpbGluZVRleHRcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTXVsdGlsaW5lVGV4dDpcclxuICAgICAgICAgICAgbGV0IG11bHRpbGluZVRleHQgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG11bHRpbGluZVRleHQubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5tYXhMZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgICBtdWx0aWxpbmVUZXh0Lm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICAgIG11bHRpbGluZVRleHQucm93cyA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LmZvcmNlRGlyZWN0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmZvcmNlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dEFyZWFDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBUZXh0QXJlYUNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIG11bHRpbGluZVRleHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gSFRNTFxyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5IVE1MOlxyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IG5ldyBIdG1sRWRpdG9yT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBodG1sLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGh0bWwuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgaHRtbC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgaHRtbC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIGh0bWwudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGh0bWwubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICAgIGh0bWwubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgICAgaHRtbC5taW5MZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgICBodG1sLmhlaWdodCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgICBodG1sLmZvcmNlRGlyZWN0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmZvcmNlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgICBodG1sLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgaHRtbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8SHRtbEVkaXRvckNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIEh0bWxFZGl0b3JDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBodG1sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIEJvb2xlYW5cclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuQm9vbGVhbjpcclxuICAgICAgICAgICAgbGV0IGJvb2xlYW4gPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGJvb2xlYW4ubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgYm9vbGVhbi5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBib29sZWFuLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBib29sZWFuLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBib29sZWFuLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBib29sZWFuLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgYm9vbGVhbi5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VG9nZ2xlc2xpZGVDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBUb2dnbGVzbGlkZUNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIGJvb2xlYW5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gTG9jYXRpb25cclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTG9jYXRpb246XHJcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbiA9IG5ldyBNYXBBdXRvQ29tcGxldGVPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgbG9jYXRpb24udmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBsb2NhdGlvbi5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8TWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgTWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgbG9jYXRpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gQ2hlY2tCb3hcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuQ2hlY2tCb3g6XHJcbiAgICAgICAgICAgIGxldCBjaGVja0JveCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgY2hlY2tCb3gubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgY2hlY2tCb3guaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgY2hlY2tCb3gubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGNoZWNrQm94LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBjaGVja0JveC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgY2hlY2tCb3gub3V0cHV0RnVuY3Rpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMub3V0cHV0RnVuY3Rpb247XHJcbiAgICAgICAgICAgIGNoZWNrQm94LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY2hlY2tCb3guY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PENoZWNrQm94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgQ2hlY2tCb3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBjaGVja0JveFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICNJdGVtPjwvbmctY29udGFpbmVyPlxyXG4iXX0=