@bnsights/bbsf-controls 1.0.48 → 1.0.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +14 -0
  2. package/bnsights-bbsf-controls-1.0.51.tgz +0 -0
  3. package/bnsights-bbsf-controls.metadata.json +1 -1
  4. package/bundles/bnsights-bbsf-controls.umd.js +88 -31
  5. package/bundles/bnsights-bbsf-controls.umd.js.map +1 -1
  6. package/esm2015/lib/Shared/Enums/LanguageMode.js +8 -8
  7. package/esm2015/lib/Shared/Models/DropdownOptions.js +2 -1
  8. package/esm2015/lib/Shared/Models/HtmlEditorOptions.js +2 -2
  9. package/esm2015/lib/Shared/components/ng-tag-input.js +16 -1
  10. package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +2 -2
  11. package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +3 -1
  12. package/esm2015/lib/controls/DropdownList/DropdownList.component.js +2 -2
  13. package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +3 -3
  14. package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +36 -8
  15. package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +10 -2
  16. package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +12 -4
  17. package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +14 -4
  18. package/esm2015/lib/controls/TagsInput/TagsInput.component.js +2 -2
  19. package/esm2015/lib/controls/TextArea/TextArea.component.js +2 -2
  20. package/esm2015/lib/controls/TextBox/TextBox.component.js +2 -2
  21. package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +2 -2
  22. package/esm2015/lib/controls/bbsf-controls.module.js +3 -3
  23. package/fesm2015/bnsights-bbsf-controls.js +103 -31
  24. package/fesm2015/bnsights-bbsf-controls.js.map +1 -1
  25. package/lib/Shared/Enums/LanguageMode.d.ts +7 -7
  26. package/lib/Shared/Models/DropdownOptions.d.ts +1 -0
  27. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +1 -0
  28. package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +2 -0
  29. package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +2 -0
  30. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +2 -0
  31. package/package.json +2 -2
  32. package/bnsights-bbsf-controls-1.0.48.tgz +0 -0
@@ -186,7 +186,7 @@ export class MultiLingualTextAreaComponent {
186
186
  //MaxLength should be gretaer than or equals chars limit so that minCharsLimit would be >= 0
187
187
  if (this.options.MaxLength && this.minCharsLimit >= 0) {
188
188
  this.englishCurrentCharsCount = this.EnglishTextAreaFormControl.value.length;
189
- if (this.englishCurrentCharsCount >= this.minCharsLimit) {
189
+ if (this.englishCurrentCharsCount > this.minCharsLimit) {
190
190
  this.showEnglishCharsLimitMsg = true;
191
191
  this.hasEnglishCharsLimitValidationError = true;
192
192
  if (this.englishCurrentCharsCount == this.options.MaxLength)
@@ -228,7 +228,7 @@ export class MultiLingualTextAreaComponent {
228
228
  //MaxLength should be gretaer than or equals chars limit so that minCharsLimit would be >= 0
229
229
  if (this.options.MaxLength && this.minCharsLimit >= 0) {
230
230
  this.arabicCurrentCharsCount = this.ArabicTextAreaFormControl.value.length;
231
- if (this.arabicCurrentCharsCount >= this.minCharsLimit) {
231
+ if (this.arabicCurrentCharsCount > this.minCharsLimit) {
232
232
  this.showArabicCharsLimitMsg = true;
233
233
  this.hasArabicCharsLimitValidationError = true;
234
234
  if (this.arabicCurrentCharsCount == this.options.MaxLength)
@@ -303,6 +303,8 @@ export class MultiLingualTextAreaComponent {
303
303
  if (this.options.IsRequired == true) {
304
304
  this.EnglishValidationRules.push(Validators.required);
305
305
  this.ArabicValidationRules.push(Validators.required);
306
+ this.IsShowAsteriskInArabic = true;
307
+ this.IsShowAsteriskInEnglish = true;
306
308
  }
307
309
  break;
308
310
  case LanguageMode.Arabic_Language_only_is_visible:
@@ -317,11 +319,13 @@ export class MultiLingualTextAreaComponent {
317
319
  if (this.CurrentLanguage == 'ar') {
318
320
  if (this.options.IsRequired == true) {
319
321
  this.ArabicValidationRules.push(Validators.required);
322
+ this.IsShowAsteriskInArabic = true;
320
323
  }
321
324
  }
322
325
  if (this.CurrentLanguage == 'en') {
323
326
  if (this.options.IsRequired == true) {
324
327
  this.EnglishValidationRules.push(Validators.required);
328
+ this.IsShowAsteriskInEnglish = true;
325
329
  }
326
330
  }
327
331
  break;
@@ -330,6 +334,7 @@ export class MultiLingualTextAreaComponent {
330
334
  this.ShowEngishTextArea = true;
331
335
  if (this.options.IsRequired == true) {
332
336
  this.ArabicValidationRules.push(Validators.required);
337
+ this.IsShowAsteriskInArabic = true;
333
338
  }
334
339
  break;
335
340
  case LanguageMode.Both_Languages_but_only_English_is_required:
@@ -337,6 +342,7 @@ export class MultiLingualTextAreaComponent {
337
342
  this.ShowEngishTextArea = true;
338
343
  if (this.options.IsRequired == true) {
339
344
  this.EnglishValidationRules.push(Validators.required);
345
+ this.IsShowAsteriskInEnglish = true;
340
346
  }
341
347
  break;
342
348
  case LanguageMode.Current_Language_only_is_visible_and_required:
@@ -345,6 +351,7 @@ export class MultiLingualTextAreaComponent {
345
351
  this.ShowEngishTextArea = false;
346
352
  if (this.options.IsRequired == true) {
347
353
  this.ArabicValidationRules.push(Validators.required);
354
+ this.IsShowAsteriskInArabic = true;
348
355
  }
349
356
  }
350
357
  if (this.CurrentLanguage == 'en') {
@@ -352,6 +359,7 @@ export class MultiLingualTextAreaComponent {
352
359
  this.ShowEngishTextArea = true;
353
360
  if (this.options.IsRequired == true) {
354
361
  this.EnglishValidationRules.push(Validators.required);
362
+ this.IsShowAsteriskInEnglish = true;
355
363
  }
356
364
  }
357
365
  break;
@@ -388,7 +396,7 @@ MultiLingualTextAreaComponent.controlContainerstatic = null;
388
396
  MultiLingualTextAreaComponent.decorators = [
389
397
  { type: Component, args: [{
390
398
  selector: 'BBSF-MultiLingualTextArea',
391
- template: "<div class=\"b-control b-multilangual-textarea\">\r\n <div class=\"form-group validate is-invalid\" [formGroup]=\"group\">\r\n\r\n <div class=\"form-group row\" [formGroup]=\"MultiLanguageTextAreagroup\">\r\n <div [ngClass]=\"(options.MultiControlPlacementType==1)?'col-md-12':'col-md-6'\">\r\n <div class=\"row\" *ngIf=\"ShowEngishTextArea\">\r\n <label class=\"b-label col-form-label col-sm-12 \"\r\n [ngClass]=\"(options.ViewType==1)?'col-md-9':'col-md-3'\" [hidden]=\"options.IsHideEnglishLabel\">\r\n {{(options.EnglishLabelValue!=null&&options.EnglishLabelValue!=\"\")?options.EnglishLabelValue:options.LabelValue+\"in English\"}}\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\"\r\n class=\"text-danger Required-text\" aria-required=\"true\">*</span>\r\n </label>\r\n\r\n <div class=\"col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n <div class=\"input-group\">\r\n <textarea class=\"form-control bnsights-control\" rows=\"{{options.Rows}}\" cols=\"{{options.Cols}}\"\r\n (focus)=\"onEnglishFocus(true)\" (focusout)=\"onEnglishFocus(false)\"\r\n maxlength=\"{{options.MaxLength}}\" minlength=\"{{options.MinLength}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"English\" [hidden]=\"options.IsHideEnglishFields\"\r\n [class.is-invalid]=\"EnglishTextAreaFormControl.invalid && EnglishTextAreaFormControl.touched\"\r\n placeholder=\"{{options.EnglishPlaceholder}}\" (change)=\"trimControlValue('En')\"\r\n (keyup)=\"onTextChange()\"\r\n (keydown)=\"EnglishWordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\"\r\n #userinputTextAreaEnglish>\r\n </textarea>\r\n <div class=\"input-group-append\" [hidden]=\"options.IsHideEnglishFields\" *ngIf=\"options.EnableCopyToClipboard\">\r\n <span class=\"input-group-text\" (click)=\"copyInputMessage(userinputTextAreaEnglish)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"text-muted font-weight-500 float-end word-count\" *ngIf=\"options.MaxWordCount>0&&IsShowEnglishWordCount\">{{EnglishWordCount}}/{{options.MaxWordCount}}</div>\r\n <div class=\"text-danger Required-text\"\r\n *ngIf=\"(EnglishTextAreaFormControl.invalid && EnglishTextAreaFormControl.touched)\">\r\n {{getErrorValidation(EnglishTextAreaFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"showEnglishCharsLimitMsg\">\r\n <span class=\"badge b-character-warning float-end\" [ngClass]=\"{'badge-light-warning': englishCharsLimitMsgClass === 'warning', 'badge-light-danger' : englishCharsLimitMsgClass === 'danger' }\">\r\n {{englishMaxLimitWarningMsg}}\r\n </span>\r\n </div>\r\n <div class=\"control-desc\" *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='') ||(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!='')\">\r\n {{(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!=\"\")?options.EnglishLabelDescription:options.LabelDescription}}\r\n </div>\r\n\r\n <!-- <div *ngIf=\"EnglishTextAreaFormControl.valid\">{{resetError()}}</div> -->\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"(options.MultiControlPlacementType==1)?'col-md-12':'col-md-6'\">\r\n <div class=\"row\" *ngIf=\"ShowArabicTextArea\">\r\n\r\n <label class=\"b-label col-form-label col-sm-12 \"\r\n [ngClass]=\"(options.ViewType==1)?'col-md-12':'col-md-3'\" [hidden]=\"options.IsHideArabicLabel\">\r\n {{(options.ArabicLabelValue!=null&&options.ArabicLabelValue!=\"\")?options.ArabicLabelValue:options.LabelValue+\"in Arabic\"}}\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\"\r\n class=\"text-danger Required-text\" aria-required=\"true\">*</span>\r\n </label>\r\n <div class=\" col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n <div class=\"input-group\">\r\n <textarea class=\"form-control bnsights-control\" dir=\"rtl\" rows=\"{{options.Rows}}\" cols=\"{{options.Cols}}\"\r\n (focus)=\"onArabicFocus(true)\" (focusout)=\"onArabicFocus(false)\"\r\n [hidden]=\"options.IsHideArabicFields\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"Arabic\" rows=\"{{options.Rows}}\"\r\n maxlength=\"{{options.MaxLength}}\" minlength=\"{{options.MinLength}}\"\r\n [class.is-invalid]=\"ArabicTextAreaFormControl.invalid && ArabicTextAreaFormControl.touched\"\r\n placeholder=\"{{options.ArabicPlaceholder}}\" (change)=\"trimControlValue('Ar')\"\r\n (keyup)=\"onTextChange()\"\r\n (keydown)=\"ArabicWordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\"\r\n #userinputTextAreaArabic>\r\n </textarea>\r\n <div class=\"input-group-append\" [hidden]=\"options.IsHideArabicFields\" *ngIf=\"options.EnableCopyToClipboard\">\r\n <span class=\"input-group-text\" (click)=\"copyInputMessage(userinputTextAreaArabic)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"text-muted font-weight-500 float-end word-count\" *ngIf=\"options.MaxWordCount>0&&IsShowArabicWordCount\">{{ArabicWordCount}}/{{options.MaxWordCount}}</div>\r\n <div class=\"text-danger Required-text\"\r\n *ngIf=\"(ArabicTextAreaFormControl.invalid && ArabicTextAreaFormControl.touched)\">\r\n {{getErrorValidation(ArabicTextAreaFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"showArabicCharsLimitMsg\">\r\n <span class=\"badge b-character-warning float-end\" [ngClass]=\"{'badge-light-warning': arabicCharsLimitMsgClass === 'warning', 'badge-light-danger' : arabicCharsLimitMsgClass === 'danger' }\">\r\n {{arabicMaxLimitWarningMsg}}\r\n </span>\r\n </div>\r\n <div class=\"control-desc\" *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='')||(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!='')\">\r\n {{(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!=\"\")?options.ArabicLabelDescription:options.LabelDescription}}\r\n </div>\r\n <!-- <div *ngIf=\"ArabicTextAreaFormControl.valid\">{{resetError()}}</div> -->\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
399
+ template: "<div class=\"b-control b-multilangual-textarea\">\r\n <div class=\"form-group validate is-invalid\" [formGroup]=\"group\">\r\n\r\n <div class=\"form-group row\" [formGroup]=\"MultiLanguageTextAreagroup\">\r\n <div [ngClass]=\"(options.MultiControlPlacementType==1)?'col-md-12':'col-md-6'\">\r\n <div class=\"row\" *ngIf=\"ShowEngishTextArea\">\r\n <label class=\"b-label col-form-label col-sm-12 \"\r\n [ngClass]=\"(options.ViewType==1)?'col-md-9':'col-md-3'\" [hidden]=\"options.IsHideEnglishLabel\">\r\n {{(options.EnglishLabelValue!=null&&options.EnglishLabelValue!=\"\")?options.EnglishLabelValue:options.LabelValue+\"in English\"}}\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&IsShowAsteriskInEnglish\"\r\n class=\"text-danger Required-text\" aria-required=\"true\">*</span>\r\n </label>\r\n\r\n <div class=\"col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n <div class=\"input-group\">\r\n <textarea class=\"form-control bnsights-control\" rows=\"{{options.Rows}}\" cols=\"{{options.Cols}}\"\r\n (focus)=\"onEnglishFocus(true)\" (focusout)=\"onEnglishFocus(false)\"\r\n maxlength=\"{{options.MaxLength}}\" minlength=\"{{options.MinLength}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"English\" [hidden]=\"options.IsHideEnglishFields\"\r\n [class.is-invalid]=\"EnglishTextAreaFormControl.invalid && EnglishTextAreaFormControl.touched\"\r\n placeholder=\"{{options.EnglishPlaceholder}}\" (change)=\"trimControlValue('En')\"\r\n (keyup)=\"onTextChange()\"\r\n (keydown)=\"EnglishWordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\"\r\n #userinputTextAreaEnglish>\r\n </textarea>\r\n <div class=\"input-group-append\" [hidden]=\"options.IsHideEnglishFields\" *ngIf=\"options.EnableCopyToClipboard\">\r\n <span class=\"input-group-text\" (click)=\"copyInputMessage(userinputTextAreaEnglish)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"text-muted font-weight-500 float-end word-count\" *ngIf=\"options.MaxWordCount>0&&IsShowEnglishWordCount\">{{EnglishWordCount}}/{{options.MaxWordCount}}</div>\r\n <div class=\"text-danger Required-text\"\r\n *ngIf=\"(EnglishTextAreaFormControl.invalid && EnglishTextAreaFormControl.touched)\">\r\n {{getErrorValidation(EnglishTextAreaFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"showEnglishCharsLimitMsg\">\r\n <span class=\"badge b-character-warning float-end\" [ngClass]=\"{'badge-light-warning': englishCharsLimitMsgClass === 'warning', 'badge-light-danger' : englishCharsLimitMsgClass === 'danger' }\">\r\n {{englishMaxLimitWarningMsg}}\r\n </span>\r\n </div>\r\n <div class=\"control-desc\" *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='') ||(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!='')\">\r\n {{(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!=\"\")?options.EnglishLabelDescription:options.LabelDescription}}\r\n </div>\r\n\r\n <!-- <div *ngIf=\"EnglishTextAreaFormControl.valid\">{{resetError()}}</div> -->\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"(options.MultiControlPlacementType==1)?'col-md-12':'col-md-6'\">\r\n <div class=\"row\" *ngIf=\"ShowArabicTextArea\">\r\n\r\n <label class=\"b-label col-form-label col-sm-12 \"\r\n [ngClass]=\"(options.ViewType==1)?'col-md-12':'col-md-3'\" [hidden]=\"options.IsHideArabicLabel\">\r\n {{(options.ArabicLabelValue!=null&&options.ArabicLabelValue!=\"\")?options.ArabicLabelValue:options.LabelValue+\"in Arabic\"}}\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&IsShowAsteriskInArabic\"\r\n class=\"text-danger Required-text\" aria-required=\"true\">*</span>\r\n </label>\r\n <div class=\" col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n <div class=\"input-group\">\r\n <textarea class=\"form-control bnsights-control\" dir=\"rtl\" rows=\"{{options.Rows}}\" cols=\"{{options.Cols}}\"\r\n (focus)=\"onArabicFocus(true)\" (focusout)=\"onArabicFocus(false)\"\r\n [hidden]=\"options.IsHideArabicFields\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"Arabic\" rows=\"{{options.Rows}}\"\r\n maxlength=\"{{options.MaxLength}}\" minlength=\"{{options.MinLength}}\"\r\n [class.is-invalid]=\"ArabicTextAreaFormControl.invalid && ArabicTextAreaFormControl.touched\"\r\n placeholder=\"{{options.ArabicPlaceholder}}\" (change)=\"trimControlValue('Ar')\"\r\n (keyup)=\"onTextChange()\"\r\n (keydown)=\"ArabicWordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\"\r\n #userinputTextAreaArabic>\r\n </textarea>\r\n <div class=\"input-group-append\" [hidden]=\"options.IsHideArabicFields\" *ngIf=\"options.EnableCopyToClipboard\">\r\n <span class=\"input-group-text\" (click)=\"copyInputMessage(userinputTextAreaArabic)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"text-muted font-weight-500 float-end word-count\" *ngIf=\"options.MaxWordCount>0&&IsShowArabicWordCount\">{{ArabicWordCount}}/{{options.MaxWordCount}}</div>\r\n <div class=\"text-danger Required-text\"\r\n *ngIf=\"(ArabicTextAreaFormControl.invalid && ArabicTextAreaFormControl.touched)\">\r\n {{getErrorValidation(ArabicTextAreaFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"showArabicCharsLimitMsg\">\r\n <span class=\"badge b-character-warning float-end\" [ngClass]=\"{'badge-light-warning': arabicCharsLimitMsgClass === 'warning', 'badge-light-danger' : arabicCharsLimitMsgClass === 'danger' }\">\r\n {{arabicMaxLimitWarningMsg}}\r\n </span>\r\n </div>\r\n <div class=\"control-desc\" *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='')||(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!='')\">\r\n {{(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!=\"\")?options.ArabicLabelDescription:options.LabelDescription}}\r\n </div>\r\n <!-- <div *ngIf=\"ArabicTextAreaFormControl.valid\">{{resetError()}}</div> -->\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
392
400
  styles: [".example-form{min-width:150px;max-width:500px;width:100%}.example-full-width{width:100%}\n"]
393
401
  },] }
394
402
  ];
@@ -405,4 +413,4 @@ MultiLingualTextAreaComponent.propDecorators = {
405
413
  options: [{ type: Input }],
406
414
  OnChange: [{ type: Output }]
407
415
  };
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlMaW5ndWFsVGV4dEFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL011bHRpTGluZ3VhbFRleHRBcmVhL011bHRpTGluZ3VhbFRleHRBcmVhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVcsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFtQixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsTUFBTywwQkFBMEIsQ0FBQztBQUNyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFTOUUsTUFBTSxPQUFPLDZCQUE2QjtJQUd4QyxZQUFtQixtQ0FBdUQsRUFBc0IsZ0JBQWtDLEVBQ3hILGNBQThCLEVBQVUsY0FBOEIsRUFBVSx3QkFBa0QsRUFDbEksY0FBOEI7UUFGckIsd0NBQW1DLEdBQW5DLG1DQUFtQyxDQUFvQjtRQUFzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hILG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLDZCQUF3QixHQUF4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OlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBEb0NoZWNrLCBPcHRpb25hbCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElucHV0VHlwZSB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9JbnB1dFR5cGUnO1xyXG5pbXBvcnQgeyBFbmdsaXNoQXJhYmljRFRPIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9FbmdsaXNoQXJhYmljRFRPJztcclxuaW1wb3J0IHsgTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9NdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IExhbmd1YWdlTW9kZSB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9MYW5ndWFnZU1vZGUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAgJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IEdsb2JhbFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0dsb2JhbFNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdCQlNGLU11bHRpTGluZ3VhbFRleHRBcmVhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vTXVsdGlMaW5ndWFsVGV4dEFyZWEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL011bHRpTGluZ3VhbFRleHRBcmVhLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE11bHRpTGluZ3VhbFRleHRBcmVhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgc3RhdGljIGNvbnRyb2xDb250YWluZXJzdGF0aWMgPSBudWxsO1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBNdWx0aUxpbmd1YWxUZXh0QXJlYUZvcm1Db250cm9sSG9zdDogRm9ybUdyb3VwRGlyZWN0aXZlLCBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eSwgcHJpdmF0ZSBVdGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlOiBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdsb2JhbFNldHRpbmdzOiBHbG9iYWxTZXR0aW5nc1xyXG4gICkge1xyXG4gICAgTXVsdGlMaW5ndWFsVGV4dEFyZWFDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBBcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBNdWx0aVRleHRBcmVhRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBNdWx0aUxhbmd1YWdlVGV4dEFyZWFncm91cDogRm9ybUdyb3VwO1xyXG4gIEFyYWJpY1dvcmRDb3VudDogbnVtYmVyID0gMDtcclxuICBBcmFiaWNXb3JkQ291bnRBcnJheTogbnVtYmVyID0gMDtcclxuICBFbmdsaXNoV29yZENvdW50OiBudW1iZXIgPSAwO1xyXG4gIEVuZ2xpc2hXb3JkQ291bnRBcnJheTogbnVtYmVyID0gMDtcclxuICBDdXJyZW50TGFuZ3VhZ2U6IHN0cmluZyA9IFwiXCI7XHJcbiAgU2hvd0FyYWJpY1RleHRBcmVhOiBib29sZWFuXHJcbiAgU2hvd0VuZ2lzaFRleHRBcmVhOiBib29sZWFuXHJcbiAgQXJhYmljVmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgQXJhYmljVmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuICBFbmdsaXNoVmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgRW5nbGlzaFZhbGlkYXRpb25SdWxlc2FzeW5jID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuICBJc1Nob3dBcmFiaWNXb3JkQ291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc1Nob3dFbmdsaXNoV29yZENvdW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWFya0FsbEFzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBcclxuICBBcmFiaWNMZXR0ZXJPbmx5OnN0cmluZz1cIlwiXHJcbiAgRW5nbGlzaExldHRlck9ubHk6c3RyaW5nPVwiXCJcclxuXHJcbiAgLy9Gb3IgU2hvdyB3YXJuaW5nIG1lc3NhZ2Ugb2YgbWF4IGxlbmd0aCBsaW1pdFxyXG4gIG1pbkNoYXJzTGltaXQ6IG51bWJlciA9IC0xOyAvL1RvIGRpc2FibGUgY2hhcnMgbGltaXQgZmVhdHVyZSBieSBkZWZhdWx0XHJcbiAgZW5nbGlzaEN1cnJlbnRDaGFyc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIGFyYWJpY0N1cnJlbnRDaGFyc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIHNob3dFbmdsaXNoQ2hhcnNMaW1pdE1zZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dBcmFiaWNDaGFyc0xpbWl0TXNnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGFzRW5nbGlzaENoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNBcmFiaWNDaGFyc0xpbWl0VmFsaWRhdGlvbkVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5nbGlzaENoYXJzTGltaXRNc2dDbGFzczogc3RyaW5nO1xyXG4gIGFyYWJpY0NoYXJzTGltaXRNc2dDbGFzczogc3RyaW5nO1xyXG4gIGVuZ2xpc2hNYXhMaW1pdFdhcm5pbmdNc2c6IHN0cmluZyA9IFwiXCI7XHJcbiAgYXJhYmljTWF4TGltaXRXYXJuaW5nTXNnOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuIGdldEN1c3RvbUVycm9yc01hc3NhZ2VzKCkge1xyXG4gICB0aGlzLkFyYWJpY0xldHRlck9ubHkgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBcmFiaWNJc1JlcXVpcmVkQW5kT25seTUwQ2hhcmFjdGVyc0VuZ2xpc2hcIik7XHJcbiAgICB0aGlzLkVuZ2xpc2hMZXR0ZXJPbmx5ID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRW5nbGlzaExldHRlck9ubHlcIik7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UuaXNDcmVhdGVkQmVmb3IgPSBmYWxzZVxyXG4gICAgdGhpcy5DdXJyZW50TGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xyXG4gICAgLy8gVXRpbGl0eVNlcnZpY2UuVHJhbnNsYXRvci5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudDogTGFuZ0NoYW5nZUV2ZW50KSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuQ3VycmVudExhbmd1YWdlID0gZXZlbnQubGFuZ1xyXG4gICAgLy8gICB0aGlzLnNob3dJbnB1dFVzaW5nTGFuZ3VhZ2VNb2RlKCk7XHJcblxyXG4gICAgLy8gfSk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5WaWV3VHlwZSlcclxuICAgICAgdGhpcy5vcHRpb25zLlZpZXdUeXBlID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5WaWV3VHlwZTtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLkxhbmd1YWdlTW9kZSlcclxuICAgICAgdGhpcy5vcHRpb25zLkxhbmd1YWdlTW9kZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuTGFuZ3VhZ2VNb2RlO1xyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuTXVsdGlDb250cm9sUGxhY2VtZW50VHlwZSlcclxuICAgICAgdGhpcy5vcHRpb25zLk11bHRpQ29udHJvbFBsYWNlbWVudFR5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLk11bHRpQ29udHJvbFBsYWNlbWVudFR5cGU7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5NYXhMZW5ndGgpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5NYXhMZW5ndGggPSB0aGlzLmdsb2JhbFNldHRpbmdzLk1heExlbmd0aFRleHRBcmVhO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuQXJhYmljTGFiZWxLZXkgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuQXJhYmljTGFiZWxLZXkgIT0gXCJcIilcclxuICAgICAgdGhpcy5vcHRpb25zLkFyYWJpY0xhYmVsVmFsdWUgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUodGhpcy5vcHRpb25zLkFyYWJpY0xhYmVsS2V5KTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkVuZ2xpc2hMYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5FbmdsaXNoTGFiZWxLZXkgIT0gXCJcIilcclxuICAgICAgdGhpcy5vcHRpb25zLkVuZ2xpc2hMYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5FbmdsaXNoTGFiZWxLZXkpO1xyXG5cclxuICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuYWRkQ29udHJvbChcIkFyYWJpY1wiLCBuZXcgRm9ybUNvbnRyb2woJycpKTtcclxuICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuYWRkQ29udHJvbChcIkVuZ2xpc2hcIiwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wgPSB0aGlzLk11bHRpTGFuZ3VhZ2VUZXh0QXJlYWdyb3VwLmNvbnRyb2xzW1wiQXJhYmljXCJdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sID0gdGhpcy5NdWx0aUxhbmd1YWdlVGV4dEFyZWFncm91cC5jb250cm9sc1tcIkVuZ2xpc2hcIl07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgbmV3IEZvcm1Hcm91cCh0aGlzLk11bHRpTGFuZ3VhZ2VUZXh0QXJlYWdyb3VwLmNvbnRyb2xzKSk7XHJcbiAgICB0aGlzLmdldEN1c3RvbUVycm9yc01hc3NhZ2VzKClcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLkVtYWlsOlxyXG4gICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bYS16MC05Ll8lKy1dK0BbYS16MC05Li1dK1xcLlthLXpdezIsNH0kLywgeyBFbWFpbFZhbGlkYXRpb25LZXk6IFwiXCIgfSksXHJcblxyXG4gICAgICAgIF0pKTtcclxuICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bYS16MC05Ll8lKy1dK0BbYS16MC05Li1dK1xcLlthLXpdezIsNH0kLywgeyBFbWFpbFZhbGlkYXRpb25LZXk6IFwiXCIgfSksXHJcblxyXG4gICAgICAgIF0pKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLk51bWJlcjpcclxuICAgICAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oJ15bMC05XSsoXFwuP1swLTldKyk/JCcpKTtcclxuICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybignXlswLTldKyhcXC4/WzAtOV0rKT8kJykpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5DdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb25cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFZhbGlkYXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IFZhbGlkYXRpb24gPSBWYWxpZGF0aW9uc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuTWluTGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMub3B0aW9ucy5NaW5MZW5ndGgpKTtcclxuICAgICAgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5vcHRpb25zLk1pbkxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5NYXhMZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMub3B0aW9ucy5NYXhMZW5ndGgpKTtcclxuICAgICAgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoKSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5NYXhMZW5ndGhXYXJuaW5nTGltaXQpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLk1heExlbmd0aFdhcm5pbmdMaW1pdCA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuTWF4TGVuZ3RoV2FybmluZ0xpbWl0O1xyXG5cclxuICAgICAgdGhpcy5taW5DaGFyc0xpbWl0ID0gdGhpcy5vcHRpb25zLk1heExlbmd0aCAtIHRoaXMub3B0aW9ucy5NYXhMZW5ndGhXYXJuaW5nTGltaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zaG93SW5wdXRVc2luZ0xhbmd1YWdlTW9kZSgpO1xyXG5cclxuICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5hcmFiaWNWYWxpZGF0b3IoeyBBcmFiaWNJc1JlcXVpcmVkQW5kT25seTUwQ2hhcmFjdGVyc0VuZ2xpc2g6IHRoaXMuQXJhYmljTGV0dGVyT25seSB9KSxcclxuXHJcbiAgICBdKSk7XHJcbiAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bXFx4MDAtXFx4N0ZdKiQvLCB7IEVuZ2xpc2hMZXR0ZXJPbmx5OiB0aGlzLkVuZ2xpc2hMZXR0ZXJPbmx5IH0pLFxyXG4gICAgICAgXHJcbiAgICBdKSk7XHJcblxyXG4gICAgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuICAgIHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzYXN5bmMpO1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuQXJhYmljVGV4dEFyZWFGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlLkFyYWJpYylcclxuICAgIHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlLkVuZ2xpc2gpXHJcblxyXG4gICAgdGhpcy5NdWx0aUxpbmd1YWxUZXh0QXJlYUZvcm1Db250cm9sSG9zdC5uZ1N1Ym1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JvdXAubWFya0FsbEFzVG91Y2hlZCgpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWVcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIG9uVGV4dENoYW5nZSgpIHtcclxuICAgIGxldCBhcmFiaWNWYWx1ZSA9IFwiXCI7XHJcbiAgICBsZXQgZW5nbGlzaFZhbHVlID0gXCJcIjtcclxuICAgIGlmICh0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5FbmdsaXNoV29yZENvdW50QXJyYXkgPSAwO1xyXG4gICAgICB0aGlzLkVuZ2xpc2hXb3JkQ291bnQgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlICE9IG51bGwgfHwgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLkVuZ2xpc2hXb3JkQ291bnRBcnJheSA9IHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wudmFsdWUuc3BsaXQoXCIgXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5FbmdsaXNoV29yZENvdW50QXJyYXkgPiAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5FbmdsaXNoV29yZENvdW50QXJyYXkgPiB0aGlzLm9wdGlvbnMuTWF4V29yZENvdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuRW5nbGlzaFdvcmRDb3VudCA9IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuY29udHJvbHNbXCJFbmdsaXNoXCJdLnNldEVycm9ycyh7IE1heFdvcmRDb3VudFZhbGlkYXRpb25LZXk6IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuY29udHJvbHNbXCJFbmdsaXNoXCJdLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5NdWx0aUxhbmd1YWdlVGV4dEFyZWFncm91cC5jb250cm9sc1tcIkVuZ2xpc2hcIl0uaW52YWxpZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLkVuZ2xpc2hXb3JkQ291bnQgPSB0aGlzLkVuZ2xpc2hXb3JkQ291bnRBcnJheTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVuZ2xpc2hWYWx1ZT10aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vQ2hlY2sgZm9yIG1heGxlbmd0aCBsaW1pdCBjb3VudFxyXG4gICAgICAvL01heExlbmd0aCBzaG91bGQgYmUgZ3JldGFlciB0aGFuIG9yIGVxdWFscyBjaGFycyBsaW1pdCBzbyB0aGF0IG1pbkNoYXJzTGltaXQgd291bGQgYmUgPj0gMFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLk1heExlbmd0aCAmJiB0aGlzLm1pbkNoYXJzTGltaXQgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuZW5nbGlzaEN1cnJlbnRDaGFyc0NvdW50ID0gdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5nbGlzaEN1cnJlbnRDaGFyc0NvdW50ID49IHRoaXMubWluQ2hhcnNMaW1pdCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93RW5nbGlzaENoYXJzTGltaXRNc2cgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5oYXNFbmdsaXNoQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmdsaXNoQ3VycmVudENoYXJzQ291bnQgPT0gdGhpcy5vcHRpb25zLk1heExlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5lbmdsaXNoQ2hhcnNMaW1pdE1zZ0NsYXNzID0gXCJkYW5nZXJcIjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5lbmdsaXNoQ2hhcnNMaW1pdE1zZ0NsYXNzID0gXCJ3YXJuaW5nXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zaG93RW5nbGlzaENoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGFzRW5nbGlzaENoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1heDogbnVtYmVyID0gdGhpcy5vcHRpb25zLk1heExlbmd0aDtcclxuICAgICAgICB2YXIgY3VycmVudDogbnVtYmVyID0gdGhpcy5lbmdsaXNoQ3VycmVudENoYXJzQ291bnQ7XHJcblxyXG4gICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk1heExlbmd0aExpbWl0V2FybmluZ1wiKTtcclxuICAgICAgICB0aGlzLmVuZ2xpc2hNYXhMaW1pdFdhcm5pbmdNc2cgPSBldmFsKCdgJyArIHJlc291cmNlICsgJ2AnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuQXJhYmljVGV4dEFyZWFGb3JtQ29udHJvbC52YWx1ZSA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuQXJhYmljV29yZENvdW50QXJyYXkgPSAwO1xyXG4gICAgICB0aGlzLkFyYWJpY1dvcmRDb3VudCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuQXJhYmljVGV4dEFyZWFGb3JtQ29udHJvbC52YWx1ZSAhPSBudWxsIHx8IHRoaXMuQXJhYmljVGV4dEFyZWFGb3JtQ29udHJvbC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLkFyYWJpY1dvcmRDb3VudEFycmF5ID0gdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlLnNwbGl0KFwiIFwiKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHRoaXMuQXJhYmljV29yZENvdW50QXJyYXkgPiAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5BcmFiaWNXb3JkQ291bnRBcnJheSA+IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQpIHtcclxuICAgICAgICAgICAgdGhpcy5BcmFiaWNXb3JkQ291bnQgPSB0aGlzLm9wdGlvbnMuTWF4V29yZENvdW50O1xyXG4gICAgICAgICAgICB0aGlzLk11bHRpTGFuZ3VhZ2VUZXh0QXJlYWdyb3VwLmNvbnRyb2xzW1wiQXJhYmljXCJdLnNldEVycm9ycyh7IE1heFdvcmRDb3VudFZhbGlkYXRpb25LZXk6IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuY29udHJvbHNbXCJBcmFiaWNcIl0ubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLk11bHRpTGFuZ3VhZ2VUZXh0QXJlYWdyb3VwLmNvbnRyb2xzW1wiQXJhYmljXCJdLmludmFsaWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5BcmFiaWNXb3JkQ291bnQgPSB0aGlzLkFyYWJpY1dvcmRDb3VudEFycmF5O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXJhYmljVmFsdWU9dGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy9DaGVjayBmb3IgbWF4bGVuZ3RoIGxpbWl0IGNvdW50XHJcbiAgICAgIC8vTWF4TGVuZ3RoIHNob3VsZCBiZSBncmV0YWVyIHRoYW4gb3IgZXF1YWxzIGNoYXJzIGxpbWl0IHNvIHRoYXQgbWluQ2hhcnNMaW1pdCB3b3VsZCBiZSA+PSAwXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoICYmIHRoaXMubWluQ2hhcnNMaW1pdCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5hcmFiaWNDdXJyZW50Q2hhcnNDb3VudCA9IHRoaXMuQXJhYmljVGV4dEFyZWFGb3JtQ29udHJvbC52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHRoaXMuYXJhYmljQ3VycmVudENoYXJzQ291bnQgPj0gdGhpcy5taW5DaGFyc0xpbWl0KSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBcmFiaWNDaGFyc0xpbWl0TXNnID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaGFzQXJhYmljQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5hcmFiaWNDdXJyZW50Q2hhcnNDb3VudCA9PSB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmFyYWJpY0NoYXJzTGltaXRNc2dDbGFzcyA9IFwiZGFuZ2VyXCI7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuYXJhYmljQ2hhcnNMaW1pdE1zZ0NsYXNzID0gXCJ3YXJuaW5nXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zaG93QXJhYmljQ2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5oYXNBcmFiaWNDaGFyc0xpbWl0VmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtYXg6IG51bWJlciA9IHRoaXMub3B0aW9ucy5NYXhMZW5ndGg7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQ6IG51bWJlciA9IHRoaXMuYXJhYmljQ3VycmVudENoYXJzQ291bnQ7XHJcblxyXG4gICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk1heExlbmd0aExpbWl0V2FybmluZ1wiKTtcclxuICAgICAgICB0aGlzLmFyYWJpY01heExpbWl0V2FybmluZ01zZyA9IGV2YWwoJ2AnICsgcmVzb3VyY2UgKyAnYCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgbXVsaXRMYW5nTW9kZWwgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgbXVsaXRMYW5nTW9kZWwuQXJhYmljID0gYXJhYmljVmFsdWU7XHJcbiAgICBtdWxpdExhbmdNb2RlbC5FbmdsaXNoID0gZW5nbGlzaFZhbHVlO1xyXG4gICAgdGhpcy5PbkNoYW5nZS5lbWl0KG11bGl0TGFuZ01vZGVsKVxyXG4gICAgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnNldFZhbHVlKG11bGl0TGFuZ01vZGVsKTtcclxuICB9XHJcblxyXG4gIHJlc2V0RXJyb3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5SZW1vdmVHbG9iYWxFcnJvcigpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBzaG93R2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNob3dHbG9iYWxFcnJvcigpXHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9sVXRpbGl0eS5nZXRFcnJvclZhbGlkYXRpb25NYXNzYWdlKEVycm9yTGlzdCwgdGhpcy5ncm91cCwgdGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldElucHV0VHlwZSh0eXBlOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBJbnB1dFR5cGVbdHlwZV1cclxuICB9XHJcblxyXG4gIHRyaW1Db250cm9sVmFsdWUodHlwZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB3aGl0ZXNwYWNlOiBzdHJpbmcgPSAnICc7XHJcbiAgICBpZiAodHlwZSA9PSBcIkVuXCIpIHtcclxuICAgICAgbGV0IG9yaWdpbmFsVmFsdWUgPXRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiAmJiB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoICYmIHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wudmFsaWQpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdGNoQ29udHJvbFZhbHVlKG9yaWdpbmFsVmFsdWUsdGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gLHRoaXMub3B0aW9ucy5QYXRjaFBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCh3aGl0ZXNwYWNlKSB8fCB0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlLmVuZHNXaXRoKHdoaXRlc3BhY2UpKSB7XHJcbiAgICAgICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC5wYXRjaFZhbHVlKG9yaWdpbmFsVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PSBcIkFyXCIpIHtcclxuICAgICAgbGV0IG9yaWdpbmFsVmFsdWUgPXRoaXMuQXJhYmljVGV4dEFyZWFGb3JtQ29udHJvbC52YWx1ZTtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uICYmIHRoaXMub3B0aW9ucy5QYXRjaFBhdGggJiYgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShvcmlnaW5hbFZhbHVlLHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uICx0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCh3aGl0ZXNwYWNlKSB8fCB0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wudmFsdWUuZW5kc1dpdGgod2hpdGVzcGFjZSkpIHtcclxuICAgICAgICB0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShvcmlnaW5hbFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGNvcHlJbnB1dE1lc3NhZ2UoaW5wdXRFbGVtZW50KSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkNvcHlJbnB1dE1lc3NhZ2UoaW5wdXRFbGVtZW50KVxyXG4gIH1cclxuXHJcblxyXG4gIHNob3dJbnB1dFVzaW5nTGFuZ3VhZ2VNb2RlKCkge1xyXG5cclxuICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzID0gdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMgPSB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHJcbiAgICB0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuTGFuZ3VhZ2VNb2RlKSB7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkJvdGhfTGFuZ3VhZ2VzX2FyZV92aXNpYmxlOlxyXG4gICAgICAgIHRoaXMuU2hvd0FyYWJpY1RleHRBcmVhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlNob3dFbmdpc2hUZXh0QXJlYSA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5BcmFiaWNfTGFuZ3VhZ2Vfb25seV9pc192aXNpYmxlOlxyXG4gICAgICAgIHRoaXMuU2hvd0FyYWJpY1RleHRBcmVhID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMYW5ndWFnZU1vZGUuRW5nbGlzaF9MYW5ndWFnZV9vbmx5X2lzX3Zpc2libGU6XHJcbiAgICAgICAgdGhpcy5TaG93RW5naXNoVGV4dEFyZWEgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19hcmVfdmlzaWJsZV9idXRfb25seV9jdXJyZW50X2xhbmd1YWdlX2lzX3JlcXVpcmVkOlxyXG4gICAgICAgIHRoaXMuU2hvd0FyYWJpY1RleHRBcmVhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlNob3dFbmdpc2hUZXh0QXJlYSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLkN1cnJlbnRMYW5ndWFnZSA9PSAnYXInKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuQ3VycmVudExhbmd1YWdlID09ICdlbicpIHtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19idXRfb25seV9BcmFiaWNfaXNfcmVxdWlyZWQ6XHJcbiAgICAgICAgdGhpcy5TaG93QXJhYmljVGV4dEFyZWEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU2hvd0VuZ2lzaFRleHRBcmVhID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19idXRfb25seV9FbmdsaXNoX2lzX3JlcXVpcmVkOlxyXG4gICAgICAgIHRoaXMuU2hvd0FyYWJpY1RleHRBcmVhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlNob3dFbmdpc2hUZXh0QXJlYSA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkN1cnJlbnRfTGFuZ3VhZ2Vfb25seV9pc192aXNpYmxlX2FuZF9yZXF1aXJlZDpcclxuICAgICAgICBpZiAodGhpcy5DdXJyZW50TGFuZ3VhZ2UgPT0gJ2FyJykge1xyXG4gICAgICAgICAgdGhpcy5TaG93QXJhYmljVGV4dEFyZWEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5TaG93RW5naXNoVGV4dEFyZWEgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5DdXJyZW50TGFuZ3VhZ2UgPT0gJ2VuJykge1xyXG4gICAgICAgICAgdGhpcy5TaG93QXJhYmljVGV4dEFyZWEgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuU2hvd0VuZ2lzaFRleHRBcmVhID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25BcmFiaWNGb2N1cyhpc0ZvY3VzOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLklzU2hvd0FyYWJpY1dvcmRDb3VudCA9IGlzRm9jdXNcclxuXHJcbiAgICAvL29uRm9jdXNcclxuICAgIGlmIChpc0ZvY3VzKSB7XHJcbiAgICAgIGlmICh0aGlzLmhhc0FyYWJpY0NoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IpIC8vY2hlY2sgaWYgdGhlcmUgd2FzIHByZXZpb3VzIHZhbGlkYXRpb24gZXJyb3JcclxuICAgICAgICB0aGlzLnNob3dBcmFiaWNDaGFyc0xpbWl0TXNnID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgLy9vbkZvY3VzT3V0XHJcbiAgICAgIHRoaXMuc2hvd0FyYWJpY0NoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uRW5nbGlzaEZvY3VzKGlzRm9jdXM6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuSXNTaG93RW5nbGlzaFdvcmRDb3VudCA9IGlzRm9jdXNcclxuXHJcbiAgICAvL29uRm9jdXNcclxuICAgIGlmIChpc0ZvY3VzKSB7XHJcbiAgICAgIGlmICh0aGlzLmhhc0VuZ2xpc2hDaGFyc0xpbWl0VmFsaWRhdGlvbkVycm9yKSAvL2NoZWNrIGlmIHRoZXJlIHdhcyBwcmV2aW91cyB2YWxpZGF0aW9uIGVycm9yXHJcbiAgICAgICAgdGhpcy5zaG93RW5nbGlzaENoYXJzTGltaXRNc2cgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSAvL29uRm9jdXNPdXRcclxuICAgICAgdGhpcy5zaG93RW5nbGlzaENoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbCwgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wsIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbCwgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZFJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wsIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLCB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZUN1c3RvbVZhbGlkYXRpb24odGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLCB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLCB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZEN1c3RvbVZhbGlkYXRpb24odGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLCB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBJc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Jc1ZhbGlkKHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wpXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LklzVmFsaWQodGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sKVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==
416
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlMaW5ndWFsVGV4dEFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL011bHRpTGluZ3VhbFRleHRBcmVhL011bHRpTGluZ3VhbFRleHRBcmVhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVcsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFtQixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsTUFBTywwQkFBMEIsQ0FBQztBQUNyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFTOUUsTUFBTSxPQUFPLDZCQUE2QjtJQUt4QyxZQUFtQixtQ0FBdUQsRUFBc0IsZ0JBQWtDLEVBQ3hILGNBQThCLEVBQVUsY0FBOEIsRUFBVSx3QkFBa0QsRUFDbEksY0FBOEI7UUFGckIsd0NBQW1DLEdBQW5DLG1DQUFtQyxDQUFvQjtRQUFzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hILG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLDZCQUF3QixHQUF4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d0IsR0FBRyxJQUFJLENBQUM7U0FDeEM7YUFDSSxZQUFZO1lBQ2YsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztJQUMxQyxDQUFDOztBQWhiTSxvREFBc0IsR0FBRyxJQUFJLENBQUM7O1lBUHRDLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyw2alBBQW9EOzthQUVyRDs7O1lBZitFLGtCQUFrQjtZQUFwQyxnQkFBZ0IsdUJBcUJDLFFBQVE7WUFqQjlFLGNBQWM7WUFFWSxjQUFjO1lBQXhDLHdCQUF3QjtZQUN4QixjQUFjOzs7b0JBb0JwQixLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgRG9DaGVjaywgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvSW5wdXRUeXBlJztcclxuaW1wb3J0IHsgRW5nbGlzaEFyYWJpY0RUTyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvRW5nbGlzaEFyYWJpY0RUTyc7XHJcbmltcG9ydCB7IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBMYW5ndWFnZU1vZGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvTGFuZ3VhZ2VNb2RlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXR0aW5ncyB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9HbG9iYWxTZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL011bHRpTGluZ3VhbFRleHRBcmVhLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9NdWx0aUxpbmd1YWxUZXh0QXJlYS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aUxpbmd1YWxUZXh0QXJlYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHN0YXRpYyBjb250cm9sQ29udGFpbmVyc3RhdGljID0gbnVsbDtcclxuICBJc1Nob3dBc3Rlcmlza0luQXJhYmljOiBib29sZWFuO1xyXG4gIElzU2hvd0FzdGVyaXNrSW5FbmdsaXNoOiBib29sZWFuO1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBNdWx0aUxpbmd1YWxUZXh0QXJlYUZvcm1Db250cm9sSG9zdDogRm9ybUdyb3VwRGlyZWN0aXZlLCBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eSwgcHJpdmF0ZSBVdGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlOiBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdsb2JhbFNldHRpbmdzOiBHbG9iYWxTZXR0aW5nc1xyXG4gICkge1xyXG4gICAgTXVsdGlMaW5ndWFsVGV4dEFyZWFDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBBcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBNdWx0aVRleHRBcmVhRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBNdWx0aUxhbmd1YWdlVGV4dEFyZWFncm91cDogRm9ybUdyb3VwO1xyXG4gIEFyYWJpY1dvcmRDb3VudDogbnVtYmVyID0gMDtcclxuICBBcmFiaWNXb3JkQ291bnRBcnJheTogbnVtYmVyID0gMDtcclxuICBFbmdsaXNoV29yZENvdW50OiBudW1iZXIgPSAwO1xyXG4gIEVuZ2xpc2hXb3JkQ291bnRBcnJheTogbnVtYmVyID0gMDtcclxuICBDdXJyZW50TGFuZ3VhZ2U6IHN0cmluZyA9IFwiXCI7XHJcbiAgU2hvd0FyYWJpY1RleHRBcmVhOiBib29sZWFuXHJcbiAgU2hvd0VuZ2lzaFRleHRBcmVhOiBib29sZWFuXHJcbiAgQXJhYmljVmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgQXJhYmljVmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuICBFbmdsaXNoVmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgRW5nbGlzaFZhbGlkYXRpb25SdWxlc2FzeW5jID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuICBJc1Nob3dBcmFiaWNXb3JkQ291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc1Nob3dFbmdsaXNoV29yZENvdW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWFya0FsbEFzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBcclxuICBBcmFiaWNMZXR0ZXJPbmx5OnN0cmluZz1cIlwiXHJcbiAgRW5nbGlzaExldHRlck9ubHk6c3RyaW5nPVwiXCJcclxuXHJcbiAgLy9Gb3IgU2hvdyB3YXJuaW5nIG1lc3NhZ2Ugb2YgbWF4IGxlbmd0aCBsaW1pdFxyXG4gIG1pbkNoYXJzTGltaXQ6IG51bWJlciA9IC0xOyAvL1RvIGRpc2FibGUgY2hhcnMgbGltaXQgZmVhdHVyZSBieSBkZWZhdWx0XHJcbiAgZW5nbGlzaEN1cnJlbnRDaGFyc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIGFyYWJpY0N1cnJlbnRDaGFyc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIHNob3dFbmdsaXNoQ2hhcnNMaW1pdE1zZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dBcmFiaWNDaGFyc0xpbWl0TXNnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGFzRW5nbGlzaENoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNBcmFiaWNDaGFyc0xpbWl0VmFsaWRhdGlvbkVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5nbGlzaENoYXJzTGltaXRNc2dDbGFzczogc3RyaW5nO1xyXG4gIGFyYWJpY0NoYXJzTGltaXRNc2dDbGFzczogc3RyaW5nO1xyXG4gIGVuZ2xpc2hNYXhMaW1pdFdhcm5pbmdNc2c6IHN0cmluZyA9IFwiXCI7XHJcbiAgYXJhYmljTWF4TGltaXRXYXJuaW5nTXNnOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuIGdldEN1c3RvbUVycm9yc01hc3NhZ2VzKCkge1xyXG4gICB0aGlzLkFyYWJpY0xldHRlck9ubHkgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBcmFiaWNJc1JlcXVpcmVkQW5kT25seTUwQ2hhcmFjdGVyc0VuZ2xpc2hcIik7XHJcbiAgICB0aGlzLkVuZ2xpc2hMZXR0ZXJPbmx5ID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRW5nbGlzaExldHRlck9ubHlcIik7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UuaXNDcmVhdGVkQmVmb3IgPSBmYWxzZVxyXG4gICAgdGhpcy5DdXJyZW50TGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xyXG4gICAgLy8gVXRpbGl0eVNlcnZpY2UuVHJhbnNsYXRvci5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudDogTGFuZ0NoYW5nZUV2ZW50KSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuQ3VycmVudExhbmd1YWdlID0gZXZlbnQubGFuZ1xyXG4gICAgLy8gICB0aGlzLnNob3dJbnB1dFVzaW5nTGFuZ3VhZ2VNb2RlKCk7XHJcblxyXG4gICAgLy8gfSk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5WaWV3VHlwZSlcclxuICAgICAgdGhpcy5vcHRpb25zLlZpZXdUeXBlID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5WaWV3VHlwZTtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLkxhbmd1YWdlTW9kZSlcclxuICAgICAgdGhpcy5vcHRpb25zLkxhbmd1YWdlTW9kZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuTGFuZ3VhZ2VNb2RlO1xyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuTXVsdGlDb250cm9sUGxhY2VtZW50VHlwZSlcclxuICAgICAgdGhpcy5vcHRpb25zLk11bHRpQ29udHJvbFBsYWNlbWVudFR5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLk11bHRpQ29udHJvbFBsYWNlbWVudFR5cGU7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5NYXhMZW5ndGgpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5NYXhMZW5ndGggPSB0aGlzLmdsb2JhbFNldHRpbmdzLk1heExlbmd0aFRleHRBcmVhO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuQXJhYmljTGFiZWxLZXkgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuQXJhYmljTGFiZWxLZXkgIT0gXCJcIilcclxuICAgICAgdGhpcy5vcHRpb25zLkFyYWJpY0xhYmVsVmFsdWUgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUodGhpcy5vcHRpb25zLkFyYWJpY0xhYmVsS2V5KTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkVuZ2xpc2hMYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5FbmdsaXNoTGFiZWxLZXkgIT0gXCJcIilcclxuICAgICAgdGhpcy5vcHRpb25zLkVuZ2xpc2hMYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5FbmdsaXNoTGFiZWxLZXkpO1xyXG5cclxuICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuYWRkQ29udHJvbChcIkFyYWJpY1wiLCBuZXcgRm9ybUNvbnRyb2woJycpKTtcclxuICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuYWRkQ29udHJvbChcIkVuZ2xpc2hcIiwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wgPSB0aGlzLk11bHRpTGFuZ3VhZ2VUZXh0QXJlYWdyb3VwLmNvbnRyb2xzW1wiQXJhYmljXCJdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sID0gdGhpcy5NdWx0aUxhbmd1YWdlVGV4dEFyZWFncm91cC5jb250cm9sc1tcIkVuZ2xpc2hcIl07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgbmV3IEZvcm1Hcm91cCh0aGlzLk11bHRpTGFuZ3VhZ2VUZXh0QXJlYWdyb3VwLmNvbnRyb2xzKSk7XHJcbiAgICB0aGlzLmdldEN1c3RvbUVycm9yc01hc3NhZ2VzKClcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLkVtYWlsOlxyXG4gICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bYS16MC05Ll8lKy1dK0BbYS16MC05Li1dK1xcLlthLXpdezIsNH0kLywgeyBFbWFpbFZhbGlkYXRpb25LZXk6IFwiXCIgfSksXHJcblxyXG4gICAgICAgIF0pKTtcclxuICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bYS16MC05Ll8lKy1dK0BbYS16MC05Li1dK1xcLlthLXpdezIsNH0kLywgeyBFbWFpbFZhbGlkYXRpb25LZXk6IFwiXCIgfSksXHJcblxyXG4gICAgICAgIF0pKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLk51bWJlcjpcclxuICAgICAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oJ15bMC05XSsoXFwuP1swLTldKyk/JCcpKTtcclxuICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybignXlswLTldKyhcXC4/WzAtOV0rKT8kJykpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5DdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb25cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFZhbGlkYXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IFZhbGlkYXRpb24gPSBWYWxpZGF0aW9uc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuTWluTGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMub3B0aW9ucy5NaW5MZW5ndGgpKTtcclxuICAgICAgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5vcHRpb25zLk1pbkxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5NYXhMZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMub3B0aW9ucy5NYXhMZW5ndGgpKTtcclxuICAgICAgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoKSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5NYXhMZW5ndGhXYXJuaW5nTGltaXQpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLk1heExlbmd0aFdhcm5pbmdMaW1pdCA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuTWF4TGVuZ3RoV2FybmluZ0xpbWl0O1xyXG5cclxuICAgICAgdGhpcy5taW5DaGFyc0xpbWl0ID0gdGhpcy5vcHRpb25zLk1heExlbmd0aCAtIHRoaXMub3B0aW9ucy5NYXhMZW5ndGhXYXJuaW5nTGltaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zaG93SW5wdXRVc2luZ0xhbmd1YWdlTW9kZSgpO1xyXG5cclxuICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5hcmFiaWNWYWxpZGF0b3IoeyBBcmFiaWNJc1JlcXVpcmVkQW5kT25seTUwQ2hhcmFjdGVyc0VuZ2xpc2g6IHRoaXMuQXJhYmljTGV0dGVyT25seSB9KSxcclxuXHJcbiAgICBdKSk7XHJcbiAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bXFx4MDAtXFx4N0ZdKiQvLCB7IEVuZ2xpc2hMZXR0ZXJPbmx5OiB0aGlzLkVuZ2xpc2hMZXR0ZXJPbmx5IH0pLFxyXG4gICAgICAgXHJcbiAgICBdKSk7XHJcblxyXG4gICAgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuICAgIHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzYXN5bmMpO1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuQXJhYmljVGV4dEFyZWFGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlLkFyYWJpYylcclxuICAgIHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlLkVuZ2xpc2gpXHJcblxyXG4gICAgdGhpcy5NdWx0aUxpbmd1YWxUZXh0QXJlYUZvcm1Db250cm9sSG9zdC5uZ1N1Ym1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JvdXAubWFya0FsbEFzVG91Y2hlZCgpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWVcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIG9uVGV4dENoYW5nZSgpIHtcclxuICAgIGxldCBhcmFiaWNWYWx1ZSA9IFwiXCI7XHJcbiAgICBsZXQgZW5nbGlzaFZhbHVlID0gXCJcIjtcclxuICAgIGlmICh0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5FbmdsaXNoV29yZENvdW50QXJyYXkgPSAwO1xyXG4gICAgICB0aGlzLkVuZ2xpc2hXb3JkQ291bnQgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlICE9IG51bGwgfHwgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLkVuZ2xpc2hXb3JkQ291bnRBcnJheSA9IHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wudmFsdWUuc3BsaXQoXCIgXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5FbmdsaXNoV29yZENvdW50QXJyYXkgPiAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5FbmdsaXNoV29yZENvdW50QXJyYXkgPiB0aGlzLm9wdGlvbnMuTWF4V29yZENvdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuRW5nbGlzaFdvcmRDb3VudCA9IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuY29udHJvbHNbXCJFbmdsaXNoXCJdLnNldEVycm9ycyh7IE1heFdvcmRDb3VudFZhbGlkYXRpb25LZXk6IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuY29udHJvbHNbXCJFbmdsaXNoXCJdLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5NdWx0aUxhbmd1YWdlVGV4dEFyZWFncm91cC5jb250cm9sc1tcIkVuZ2xpc2hcIl0uaW52YWxpZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLkVuZ2xpc2hXb3JkQ291bnQgPSB0aGlzLkVuZ2xpc2hXb3JkQ291bnRBcnJheTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVuZ2xpc2hWYWx1ZT10aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vQ2hlY2sgZm9yIG1heGxlbmd0aCBsaW1pdCBjb3VudFxyXG4gICAgICAvL01heExlbmd0aCBzaG91bGQgYmUgZ3JldGFlciB0aGFuIG9yIGVxdWFscyBjaGFycyBsaW1pdCBzbyB0aGF0IG1pbkNoYXJzTGltaXQgd291bGQgYmUgPj0gMFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLk1heExlbmd0aCAmJiB0aGlzLm1pbkNoYXJzTGltaXQgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuZW5nbGlzaEN1cnJlbnRDaGFyc0NvdW50ID0gdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5nbGlzaEN1cnJlbnRDaGFyc0NvdW50ID4gdGhpcy5taW5DaGFyc0xpbWl0KSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dFbmdsaXNoQ2hhcnNMaW1pdE1zZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmhhc0VuZ2xpc2hDaGFyc0xpbWl0VmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLmVuZ2xpc2hDdXJyZW50Q2hhcnNDb3VudCA9PSB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmVuZ2xpc2hDaGFyc0xpbWl0TXNnQ2xhc3MgPSBcImRhbmdlclwiO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmVuZ2xpc2hDaGFyc0xpbWl0TXNnQ2xhc3MgPSBcIndhcm5pbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dFbmdsaXNoQ2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5oYXNFbmdsaXNoQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWF4OiBudW1iZXIgPSB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoO1xyXG4gICAgICAgIHZhciBjdXJyZW50OiBudW1iZXIgPSB0aGlzLmVuZ2xpc2hDdXJyZW50Q2hhcnNDb3VudDtcclxuXHJcbiAgICAgICAgdmFyIHJlc291cmNlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTWF4TGVuZ3RoTGltaXRXYXJuaW5nXCIpO1xyXG4gICAgICAgIHRoaXMuZW5nbGlzaE1heExpbWl0V2FybmluZ01zZyA9IGV2YWwoJ2AnICsgcmVzb3VyY2UgKyAnYCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5BcmFiaWNXb3JkQ291bnRBcnJheSA9IDA7XHJcbiAgICAgIHRoaXMuQXJhYmljV29yZENvdW50ID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlICE9IG51bGwgfHwgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuQXJhYmljV29yZENvdW50QXJyYXkgPSB0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wudmFsdWUuc3BsaXQoXCIgXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5BcmFiaWNXb3JkQ291bnRBcnJheSA+IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLkFyYWJpY1dvcmRDb3VudEFycmF5ID4gdGhpcy5vcHRpb25zLk1heFdvcmRDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLkFyYWJpY1dvcmRDb3VudCA9IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuY29udHJvbHNbXCJBcmFiaWNcIl0uc2V0RXJyb3JzKHsgTWF4V29yZENvdW50VmFsaWRhdGlvbktleTogdGhpcy5vcHRpb25zLk1heFdvcmRDb3VudCB9KTtcclxuICAgICAgICAgICAgdGhpcy5NdWx0aUxhbmd1YWdlVGV4dEFyZWFncm91cC5jb250cm9sc1tcIkFyYWJpY1wiXS5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuTXVsdGlMYW5ndWFnZVRleHRBcmVhZ3JvdXAuY29udHJvbHNbXCJBcmFiaWNcIl0uaW52YWxpZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLkFyYWJpY1dvcmRDb3VudCA9IHRoaXMuQXJhYmljV29yZENvdW50QXJyYXk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhcmFiaWNWYWx1ZT10aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvL0NoZWNrIGZvciBtYXhsZW5ndGggbGltaXQgY291bnRcclxuICAgICAgLy9NYXhMZW5ndGggc2hvdWxkIGJlIGdyZXRhZXIgdGhhbiBvciBlcXVhbHMgY2hhcnMgbGltaXQgc28gdGhhdCBtaW5DaGFyc0xpbWl0IHdvdWxkIGJlID49IDBcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5NYXhMZW5ndGggJiYgdGhpcy5taW5DaGFyc0xpbWl0ID49IDApIHtcclxuICAgICAgICB0aGlzLmFyYWJpY0N1cnJlbnRDaGFyc0NvdW50ID0gdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5hcmFiaWNDdXJyZW50Q2hhcnNDb3VudCA+IHRoaXMubWluQ2hhcnNMaW1pdCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93QXJhYmljQ2hhcnNMaW1pdE1zZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmhhc0FyYWJpY0NoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuYXJhYmljQ3VycmVudENoYXJzQ291bnQgPT0gdGhpcy5vcHRpb25zLk1heExlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5hcmFiaWNDaGFyc0xpbWl0TXNnQ2xhc3MgPSBcImRhbmdlclwiO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmFyYWJpY0NoYXJzTGltaXRNc2dDbGFzcyA9IFwid2FybmluZ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0FyYWJpY0NoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGFzQXJhYmljQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWF4OiBudW1iZXIgPSB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoO1xyXG4gICAgICAgIHZhciBjdXJyZW50OiBudW1iZXIgPSB0aGlzLmFyYWJpY0N1cnJlbnRDaGFyc0NvdW50O1xyXG5cclxuICAgICAgICB2YXIgcmVzb3VyY2UgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNYXhMZW5ndGhMaW1pdFdhcm5pbmdcIik7XHJcbiAgICAgICAgdGhpcy5hcmFiaWNNYXhMaW1pdFdhcm5pbmdNc2cgPSBldmFsKCdgJyArIHJlc291cmNlICsgJ2AnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IG11bGl0TGFuZ01vZGVsID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgIG11bGl0TGFuZ01vZGVsLkFyYWJpYyA9IGFyYWJpY1ZhbHVlO1xyXG4gICAgbXVsaXRMYW5nTW9kZWwuRW5nbGlzaCA9IGVuZ2xpc2hWYWx1ZTtcclxuICAgIHRoaXMuT25DaGFuZ2UuZW1pdChtdWxpdExhbmdNb2RlbClcclxuICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS5zZXRWYWx1ZShtdWxpdExhbmdNb2RlbCk7XHJcbiAgfVxyXG5cclxuICByZXNldEVycm9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UuUmVtb3ZlR2xvYmFsRXJyb3IoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgc2hvd0dsb2JhbEVycm9yKCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zaG93R2xvYmFsRXJyb3IoKVxyXG4gIH1cclxuXHJcbiAgZ2V0RXJyb3JWYWxpZGF0aW9uKEVycm9yTGlzdCkge1xyXG4gICAgaWYgKHRoaXMubWFya0FsbEFzVG91Y2hlZCAmJiB0aGlzLmdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zaG93R2xvYmFsRXJyb3IoKVxyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRJbnB1dFR5cGUodHlwZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gSW5wdXRUeXBlW3R5cGVdXHJcbiAgfVxyXG5cclxuICB0cmltQ29udHJvbFZhbHVlKHR5cGU6IHN0cmluZykge1xyXG4gICAgY29uc3Qgd2hpdGVzcGFjZTogc3RyaW5nID0gJyAnO1xyXG4gICAgaWYgKHR5cGUgPT0gXCJFblwiKSB7XHJcbiAgICAgIGxldCBvcmlnaW5hbFZhbHVlID10aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gJiYgdGhpcy5vcHRpb25zLlBhdGNoUGF0aCAmJiB0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShvcmlnaW5hbFZhbHVlLHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uICx0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlLnN0YXJ0c1dpdGgod2hpdGVzcGFjZSkgfHwgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC52YWx1ZS5lbmRzV2l0aCh3aGl0ZXNwYWNlKSkge1xyXG4gICAgICAgIHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShvcmlnaW5hbFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT0gXCJBclwiKSB7XHJcbiAgICAgIGxldCBvcmlnaW5hbFZhbHVlID10aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiAmJiB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoICYmIHRoaXMuQXJhYmljVGV4dEFyZWFGb3JtQ29udHJvbC52YWxpZCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0Y2hDb250cm9sVmFsdWUob3JpZ2luYWxWYWx1ZSx0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiAsdGhpcy5vcHRpb25zLlBhdGNoUGF0aClcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlLnN0YXJ0c1dpdGgod2hpdGVzcGFjZSkgfHwgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnZhbHVlLmVuZHNXaXRoKHdoaXRlc3BhY2UpKSB7XHJcbiAgICAgICAgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnBhdGNoVmFsdWUob3JpZ2luYWxWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBjb3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Db3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudClcclxuICB9XHJcblxyXG5cclxuICBzaG93SW5wdXRVc2luZ0xhbmd1YWdlTW9kZSgpIHtcclxuXHJcbiAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcyA9IHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzID0gdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgIHRoaXMuQXJhYmljVGV4dEFyZWFGb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcblxyXG4gICAgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLkxhbmd1YWdlTW9kZSkge1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19hcmVfdmlzaWJsZTpcclxuICAgICAgICB0aGlzLlNob3dBcmFiaWNUZXh0QXJlYSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TaG93RW5naXNoVGV4dEFyZWEgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5BcmFiaWM9dHJ1ZTtcclxuICAgICAgICAgIHRoaXMuSXNTaG93QXN0ZXJpc2tJbkVuZ2xpc2g9dHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkFyYWJpY19MYW5ndWFnZV9vbmx5X2lzX3Zpc2libGU6XHJcbiAgICAgICAgdGhpcy5TaG93QXJhYmljVGV4dEFyZWEgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5FbmdsaXNoX0xhbmd1YWdlX29ubHlfaXNfdmlzaWJsZTpcclxuICAgICAgICB0aGlzLlNob3dFbmdpc2hUZXh0QXJlYSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkJvdGhfTGFuZ3VhZ2VzX2FyZV92aXNpYmxlX2J1dF9vbmx5X2N1cnJlbnRfbGFuZ3VhZ2VfaXNfcmVxdWlyZWQ6XHJcbiAgICAgICAgdGhpcy5TaG93QXJhYmljVGV4dEFyZWEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU2hvd0VuZ2lzaFRleHRBcmVhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuQ3VycmVudExhbmd1YWdlID09ICdhcicpIHtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuSXNTaG93QXN0ZXJpc2tJbkFyYWJpYz10cnVlO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuQ3VycmVudExhbmd1YWdlID09ICdlbicpIHtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5FbmdsaXNoPXRydWU7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMYW5ndWFnZU1vZGUuQm90aF9MYW5ndWFnZXNfYnV0X29ubHlfQXJhYmljX2lzX3JlcXVpcmVkOlxyXG4gICAgICAgIHRoaXMuU2hvd0FyYWJpY1RleHRBcmVhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlNob3dFbmdpc2hUZXh0QXJlYSA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5BcmFiaWM9dHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19idXRfb25seV9FbmdsaXNoX2lzX3JlcXVpcmVkOlxyXG4gICAgICAgIHRoaXMuU2hvd0FyYWJpY1RleHRBcmVhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlNob3dFbmdpc2hUZXh0QXJlYSA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgdGhpcy5Jc1Nob3dBc3Rlcmlza0luRW5nbGlzaD10cnVlO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkN1cnJlbnRfTGFuZ3VhZ2Vfb25seV9pc192aXNpYmxlX2FuZF9yZXF1aXJlZDpcclxuICAgICAgICBpZiAodGhpcy5DdXJyZW50TGFuZ3VhZ2UgPT0gJ2FyJykge1xyXG4gICAgICAgICAgdGhpcy5TaG93QXJhYmljVGV4dEFyZWEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5TaG93RW5naXNoVGV4dEFyZWEgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuSXNTaG93QXN0ZXJpc2tJbkFyYWJpYz10cnVlO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuQ3VycmVudExhbmd1YWdlID09ICdlbicpIHtcclxuICAgICAgICAgIHRoaXMuU2hvd0FyYWJpY1RleHRBcmVhID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLlNob3dFbmdpc2hUZXh0QXJlYSA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5Jc1Nob3dBc3Rlcmlza0luRW5nbGlzaD10cnVlO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25BcmFiaWNGb2N1cyhpc0ZvY3VzOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLklzU2hvd0FyYWJpY1dvcmRDb3VudCA9IGlzRm9jdXNcclxuXHJcbiAgICAvL29uRm9jdXNcclxuICAgIGlmIChpc0ZvY3VzKSB7XHJcbiAgICAgIGlmICh0aGlzLmhhc0FyYWJpY0NoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IpIC8vY2hlY2sgaWYgdGhlcmUgd2FzIHByZXZpb3VzIHZhbGlkYXRpb24gZXJyb3JcclxuICAgICAgICB0aGlzLnNob3dBcmFiaWNDaGFyc0xpbWl0TXNnID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgLy9vbkZvY3VzT3V0XHJcbiAgICAgIHRoaXMuc2hvd0FyYWJpY0NoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uRW5nbGlzaEZvY3VzKGlzRm9jdXM6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuSXNTaG93RW5nbGlzaFdvcmRDb3VudCA9IGlzRm9jdXNcclxuXHJcbiAgICAvL29uRm9jdXNcclxuICAgIGlmIChpc0ZvY3VzKSB7XHJcbiAgICAgIGlmICh0aGlzLmhhc0VuZ2xpc2hDaGFyc0xpbWl0VmFsaWRhdGlvbkVycm9yKSAvL2NoZWNrIGlmIHRoZXJlIHdhcyBwcmV2aW91cyB2YWxpZGF0aW9uIGVycm9yXHJcbiAgICAgICAgdGhpcy5zaG93RW5nbGlzaENoYXJzTGltaXRNc2cgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSAvL29uRm9jdXNPdXRcclxuICAgICAgdGhpcy5zaG93RW5nbGlzaENoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbCwgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wsIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5FbmdsaXNoVGV4dEFyZWFGb3JtQ29udHJvbCwgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZFJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLkFyYWJpY1RleHRBcmVhRm9ybUNvbnRyb2wsIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLCB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZUN1c3RvbVZhbGlkYXRpb24odGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLCB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkVuZ2xpc2hUZXh0QXJlYUZvcm1Db250cm9sLCB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZEN1c3RvbVZhbGlkYXRpb24odGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sLCB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBJc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Jc1ZhbGlkKHRoaXMuRW5nbGlzaFRleHRBcmVhRm9ybUNvbnRyb2wpXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LklzVmFsaWQodGhpcy5BcmFiaWNUZXh0QXJlYUZvcm1Db250cm9sKVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==