@csmart/ngc-smart-victim 1.13.10 → 1.13.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -693,7 +693,7 @@ export class SmartVictimDetailComponent {
693
693
  else {
694
694
  this.victimForm.value.guardianCellPhone = null;
695
695
  }
696
- //data process
696
+ //data process
697
697
  console.log('this.phoneValidationFlag 1');
698
698
  console.log(this.phoneValidationFlag);
699
699
  if (this.phoneValidationFlag === false) {
@@ -753,11 +753,21 @@ export class SmartVictimDetailComponent {
753
753
  victimOffenderRelationshipTypeId: this.victimForm.value.victimOffenderRelationshipTypeId,
754
754
  lastName: this.victimForm.value.lastName,
755
755
  firstName: this.victimForm.value.firstName,
756
- middleName: this.victimForm.value.middleName ? this.victimForm.value.middleName : null,
757
- prefixId: this.victimForm.value.prefixId ? this.victimForm.value.prefixId : null,
758
- suffixId: this.victimForm.value.suffixId ? this.victimForm.value.suffixId : null,
759
- birthDate: this.victimForm.value.birthDate ? this.victimForm.value.birthDate : null,
760
- genderCode: this.victimForm.value.genderCode ? this.victimForm.value.genderCode : null,
756
+ middleName: this.victimForm.value.middleName
757
+ ? this.victimForm.value.middleName
758
+ : null,
759
+ prefixId: this.victimForm.value.prefixId
760
+ ? this.victimForm.value.prefixId
761
+ : null,
762
+ suffixId: this.victimForm.value.suffixId
763
+ ? this.victimForm.value.suffixId
764
+ : null,
765
+ birthDate: this.victimForm.value.birthDate
766
+ ? this.victimForm.value.birthDate
767
+ : null,
768
+ genderCode: this.victimForm.value.genderCode
769
+ ? this.victimForm.value.genderCode
770
+ : null,
761
771
  underSupervisionFlag: this.victimForm.value.underSupervisionFlag,
762
772
  minorFlag: this.victimForm.value.minorFlag,
763
773
  victimAdvocateFlag: this.victimForm.value.victimAdvocateFlag,
@@ -765,13 +775,19 @@ export class SmartVictimDetailComponent {
765
775
  workPhone: this.victimForm.value.workPhone,
766
776
  cellPhone: this.victimForm.value.cellPhone,
767
777
  email: this.victimForm.value.email ? this.victimForm.value.email : null,
768
- addressId: this.victimForm.value.addressId ? this.victimForm.value.addressId : 1,
769
- emergencyContact: this.victimForm.value.emergencyContact ? this.victimForm.value.emergencyContact : null,
778
+ addressId: this.victimForm.value.addressId
779
+ ? this.victimForm.value.addressId
780
+ : 1,
781
+ emergencyContact: this.victimForm.value.emergencyContact
782
+ ? this.victimForm.value.emergencyContact
783
+ : null,
770
784
  emergencyContactPhone: this.victimForm.value.emergencyContactPhone,
771
785
  commonChildrenFlag: this.victimForm.value.commonChildrenFlag,
772
786
  commonChildrenNumber: this.victimForm.value.commonChildrenNumber,
773
787
  cpoExpirationFlag: this.victimForm.value.cpoExpirationFlag,
774
- cpoExpirationDate: this.victimForm.value.cpoExpirationDate ? this.datePipe.transform(this.victimForm.value.startDate, 'short') : null,
788
+ cpoExpirationDate: this.victimForm.value.cpoExpirationDate
789
+ ? this.datePipe.transform(this.victimForm.value.cpoExpirationDate, "short")
790
+ : null,
775
791
  supportInPlaceFlag: this.victimForm.value.supportInPlaceFlag,
776
792
  weaponInvolvedFlag: this.victimForm.value.weaponInvolvedFlag,
777
793
  drugUseFlag: this.victimForm.value.drugUseFlag,
@@ -806,8 +822,12 @@ export class SmartVictimDetailComponent {
806
822
  guardianBirthDate: null,
807
823
  relationship: null,
808
824
  //relationship: this.victimForm.value.victimOffenderRelationshipTypeId? this.victimForm.value.victimOffenderRelationshipTypeId : null,
809
- allowCsosaContactFlag: this.victimForm.value.allowCsosaContactFlag ? this.victimForm.value.allowCsosaContactFlag : null,
810
- liveWithOffenderFlag: this.victimForm.value.liveWithOffenderFlag ? this.victimForm.value.liveWithOffenderFlag : null,
825
+ allowCsosaContactFlag: this.victimForm.value.allowCsosaContactFlag
826
+ ? this.victimForm.value.allowCsosaContactFlag
827
+ : null,
828
+ liveWithOffenderFlag: this.victimForm.value.liveWithOffenderFlag
829
+ ? this.victimForm.value.liveWithOffenderFlag
830
+ : null,
811
831
  };
812
832
  if (this.addressId == 0) {
813
833
  newVictim.addressId = null;
@@ -1023,9 +1043,9 @@ export class SmartVictimDetailComponent {
1023
1043
  return value;
1024
1044
  }
1025
1045
  }
1026
- /** @nocollapse */ /** @nocollapse */ SmartVictimDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SmartVictimDetailComponent, deps: [{ token: i1.Location }, { token: i2.FormBuilder }, { token: i3.MatDialog }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i5.MatSnackBar }, { token: i6.CommonDialogService }, { token: i7.NgcSmartVictimService }], target: i0.ɵɵFactoryTarget.Component });
1027
- /** @nocollapse */ /** @nocollapse */ SmartVictimDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SmartVictimDetailComponent, selector: "csmart-victim-detail", inputs: { victimDetail: "victimDetail", staffId: "staffId", offenderId: "offenderId", isIntake: "isIntake" }, outputs: { onSave: "onSave", onCancel: "onCancel" }, providers: [CommonDialogService], viewQueries: [{ propertyName: "addressComponent", first: true, predicate: ["addressComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card>\r\n <mat-card-content>\r\n\r\n <div [formGroup]=\"victimForm\">\r\n\r\n <mat-tab-group dynamicHeight mat-stretch-tabs>\r\n <mat-tab label=\"Victim Detail\" >\r\n <div class='container'>\r\n\r\n <mat-form-field>\r\n <mat-label>Is victim a minor?<font color=\"red\">* </font></mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"minorFlag\" (change)=\"radioMinorChange($event)\" [(ngModel)]=\"editVictim.minorFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors \r\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\r\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Does the Victim have a Victim Advocate or Social Worker with <br>whom CSOSA should maintain contact?<font color=\"red\">* </font></mat-label>\r\n <br>\r\n <br>\r\n <mat-radio-group class = \"tp-radio-group\" formControlName=\"victimAdvocateFlag\" (change)=\"radioAdvocateChange($event)\" [(ngModel)]=\"editVictim.victimAdvocateFlag\">\r\n <mat-radio-button color=\"primary\" *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\">{{item.name}} </mat-radio-button>&nbsp;\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors \r\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\r\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Victim Currently Under Supervision:</mat-label>\r\n <mat-select formControlName=\"underSupervisionFlag\" name=\"supervision\" [(ngModel)]=\"editVictim.underSupervisionFlag\" >\r\n <mat-option *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\" >\r\n {{item.name}}</mat-option>\r\n </mat-select>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors \r\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\r\n <mat-error>under supervision field is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Relationship to Offender:</mat-label>\r\n <mat-select formControlName=\"victimOffenderRelationshipTypeId\" [(ngModel)]=\"editVictim.victimOffenderRelationshipTypeId\" >\r\n <mat-option *ngFor=\"let item of relationshipTypes\" [value]=\"item.relationshipTypeId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors \r\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\r\n <mat-error>relationship is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Victim Last Name:</mat-label>\r\n <input matInput formControlName=\"lastName\" [(ngModel)]=\"editVictim.lastName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors \r\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\r\n <mat-error>victim last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim First Name: </mat-label>\r\n <input matInput formControlName=\"firstName\" [(ngModel)]=\"editVictim.firstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors \r\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\r\n <mat-error>victim first name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Middle Name:</mat-label>\r\n <input matInput formControlName=\"middleName\" [(ngModel)]=\"editVictim.middleName\">\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim Prefix:</mat-label>\r\n <mat-select formControlName=\"prefixId\" [(ngModel)]=\"editVictim.prefixId\">\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Suffix:</mat-label>\r\n <mat-select formControlName=\"suffixId\" [(ngModel)]=\"editVictim.suffixId\">\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim Gender:</mat-label>\r\n <mat-select formControlName=\"genderCode\" [(ngModel)]=\"editVictim.genderCode\">\r\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Date of Birth:</mat-label>\r\n <input matInput \r\n [matDatepicker]=\"victimBirthRef\" \r\n formControlName=\"birthDate\"\r\n [(ngModel)]=\"editVictim.birthDate\"\r\n (click)=\"victimBirthRef.open()\"\r\n (dateChange)=\"handleDOBChange($event)\" \r\n >\r\n <mat-datepicker-toggle [for]=\"victimBirthRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #victimBirthRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Home Phone:</mat-label>\r\n <input \r\n matInput \r\n formControlName=\"homePhone\" \r\n [(ngModel)]=\"editVictim.homePhone\" \r\n appPhoneMask\r\n maxlength=\"14\"/>\r\n\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('homePhone').errors\r\n && (victimForm.get('homePhone').dirty || victimForm.get('homePhone').touched)\">\r\n <mat-error><strong>Home phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Victim Cell Phone:</mat-label>\r\n <input \r\n matInput \r\n formControlName=\"cellPhone\"\r\n appPhoneMask\r\n [(ngModel)]=\"editVictim.cellPhone\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('cellPhone').errors \r\n && (victimForm.get('cellPhone').dirty || victimForm.get('cellPhone').touched)\">\r\n <mat-error><strong>Cell phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n \r\n <mat-form-field >\r\n <mat-label>Victim Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"workPhone\" \r\n [(ngModel)]=\"editVictim.workPhone\"\r\n appPhoneMask\r\n >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('workPhone').errors \r\n && (victimForm.get('workPhone').dirty || victimForm.get('workPhone').touched)\">\r\n <mat-error><strong>Work phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Victim Email:</mat-label>\r\n <input matInput formControlName=\"email\" [(ngModel)]=\"editVictim.email\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('email').errors \r\n && (victimForm.get('email').dirty || victimForm.get('email').touched)\">\r\n <mat-error><strong>victim email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n \r\n <div></div>\r\n \r\n <!-- <app-smart-address \r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"addressId\"\r\n (addressIdChange)=\"onAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #addressComponent\r\n > -->\r\n\r\n\r\n <app-smart-address\r\n [modifiedBy]=\"staffId\"\r\n [id]=\"addressId\"\r\n [outline]=\"true\"\r\n [showPsa]=\"true\"\r\n [addressValidators]=\"addressValidators\"\r\n [readonly]=\"false\"\r\n (addressIdChange)=\"onAddressChange($event)\"\r\n #addressComponent\r\n >\r\n\r\n </app-smart-address>\r\n \r\n \r\n <!-- Docket: \r\n <div>\r\n <div *ngFor=\"let docket of docketlist; let i=index\">\r\n <mat-checkbox >{{docket.docketNumber}}</mat-checkbox>\r\n </div>\r\n </div> -->\r\n <div>\r\n <mat-checkbox color=\"primary\" formControlName=\"liveWithOffenderFlag\" name=\"liveWithOffenderFlag\" [(ngModel)]=\"editVictim.liveWithOffenderFlag\" (change)=\"showAddress($event)\" >victim live with offender</mat-checkbox>\r\n <br>\r\n <mat-checkbox color=\"primary\" formControlName=\"allowCsosaContactFlag\" name=\"allowCsosaContactFlag\" [(ngModel)]=\"editVictim.allowCsosaContactFlag\">victim wants to be contacted by CSOSA</mat-checkbox>\r\n </div>\r\n \r\n </div> \r\n\r\n <mat-card>\r\n <mat-form-field>\r\n <mat-label> Children in Common</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"commonChildrenFlag\" [(ngModel)]=\"editVictim.commonChildrenFlag\" (change)=\"radioCicChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n\r\n <div *ngIf=\"commonChildrenDivFlag\">\r\n \r\n <mat-form-field >\r\n <mat-label>\r\n Children number\r\n </mat-label>\r\n <input matInput formControlName=\"commonChildrenNumber\" [(ngModel)]=\"editVictim.commonChildrenNumber\" >\r\n </mat-form-field>\r\n \r\n </div>\r\n \r\n <mat-form-field>\r\n <mat-label>CPO: </mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"cpoExpirationFlag\" [(ngModel)]=\"editVictim.cpoExpirationFlag\" (change)=\"radioCpoChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"cpoExpirationDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Expiration Date: </mat-label>\r\n <input matInput \r\n [matDatepicker]=\"cpoDateRef\" \r\n formControlName=\"cpoExpirationDate\" \r\n (click)=\"cpoDateRef.open()\" \r\n [(ngModel)]=\"editVictim.cpoExpirationDate\" >\r\n <mat-datepicker-toggle [for]=\"cpoDateRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #cpoDateRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n </div>\r\n \r\n <br>\r\n <br>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim has a Support System in Place? </mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"supportInPlaceFlag\" [(ngModel)]=\"editVictim.supportInPlaceFlag\" (change)=\"radioSupportChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"supportInPlaceDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Support type? </mat-label>\r\n <mat-select #supportSel formControlName=\"victimSupports\" [(ngModel)]=\"editVictim.victimSupports\" multiple>\r\n <div (mouseleave)=\"supportSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of victimSupportTypes\" [value]=\"item.victimSupportTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n\r\n </div>\r\n \r\n <br>\r\n <br>\r\n\r\n <mat-form-field>\r\n <mat-label>Weapons Involved?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"weaponInvolvedFlag\" (change)=\"radioWeaponChange($event)\" [(ngModel)]=\"editVictim.weaponInvolvedFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n \r\n <div *ngIf=\"weaponInvolvedDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Weapon Type</mat-label>\r\n <mat-select #weaponSel formControlName=\"victimWeaponUses\" multiple [(ngModel)]=\"editVictim.victimWeaponUses\" (selectionChange)=\"checkOtherWeapon($event.value)\" >\r\n <div (mouseleave)=\"weaponSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of weaponTypes\" [value]=\"item.weaponTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"otherWeaponFlag\"> \r\n <mat-form-field>\r\n <mat-label>Other Weapon:* </mat-label>\r\n <input matInput formControlName=\"otherWeapon\" >\r\n </mat-form-field>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors \r\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\r\n <mat-error><strong>Other weapon is required.</strong></mat-error>\r\n </div>\r\n </div>\r\n\r\n \r\n <br>\r\n <br>\r\n \r\n <mat-form-field>\r\n <mat-label>Was Offender under the influence of alcohol at the time of the offense?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"alcoholUseFlag\" [(ngModel)]=\"editVictim.alcoholUseFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <br>\r\n <br>\r\n\r\n <mat-form-field>\r\n <mat-label>Was Offender under the influence of drugs at the time of the offense?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"drugUseFlag\" (change)=\"radioDrugChange($event)\" [(ngModel)]=\"editVictim.drugUseFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"drugUseDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Drug:</mat-label>\r\n <mat-select #drugSel formControlName=\"victimDrugUses\" multiple (selectionChange)=\"checkOtherDrug($event.value)\" >\r\n <div (mouseleave)=\"drugSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of drugs\" [value]=\"item.drugTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n \r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n </div>\r\n\r\n <div *ngIf=\"otherDrugFlag\"> \r\n <mat-form-field>\r\n <mat-label>Other Drug:* </mat-label>\r\n <input matInput formControlName=\"otherDrug\" >\r\n </mat-form-field>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors \r\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\r\n <mat-error><strong>Other drug is required.</strong></mat-error>\r\n </div>\r\n </div>\r\n <br>\r\n <br>\r\n\r\n <div>\r\n <div>\r\n <mat-label>\r\n Access Risk: 1 thru 10 (10 greatest risk): &nbsp;<b> {{editVictim.accessRisk}}</b>\r\n </mat-label>\r\n </div>\r\n <div>\r\n \r\n <mat-slider\r\n formControlName=\"accessRisk\"\r\n thumbLabel=\"true\"\r\n [displayWith]=\"formatLabel\"\r\n min=\"1\"\r\n max=\"10\"\r\n [(ngModel)]=\"editVictim.accessRisk\" \r\n ></mat-slider>\r\n \r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card> \r\n\r\n \r\n <br><br><br> \r\n </mat-tab>\r\n \r\n <mat-tab *ngIf=\"guardianTabFlag\" label=\"Legal Guardian\">\r\n <div class='container'>\r\n <mat-form-field>\r\n <mat-label>Guardian Last Name:</mat-label>\r\n <input matInput formControlName=\"guardianLastName\" [(ngModel)]=\"editVictim.guardianLastName\" > \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors \">\r\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian First Name:</mat-label>\r\n <input matInput formControlName=\"guardianFirstName\" [(ngModel)]=\"editVictim.guardianFirstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \">\r\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Guardian Prefix:</mat-label>\r\n <mat-select formControlName=\"guardianPrefixId\" [(ngModel)]=\"editVictim.guardianPrefixId\" >\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian Suffix:</mat-label>\r\n <mat-select formControlName=\"guardianSuffixId\" [(ngModel)]=\"editVictim.guardianSuffixId\" >\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n \r\n <!-- <mat-form-field>\r\n <mat-select placeholder=\"Choose\" formControlName=\"guardianGender\" [(ngModel)]=\"editVictim.guardianGender\">\r\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field> -->\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Date of Birth:</mat-label>\r\n <input matInput \r\n [matDatepicker]=\"guardianDateRef\" \r\n formControlName=\"guardianBirthDate\"\r\n [(ngModel)]=\"editVictim.guardianBirthDate\" \r\n (click)=\"guardianDateRef.open()\" \r\n >\r\n <mat-datepicker-toggle [for]=\"guardianDateRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #guardianDateRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n <mat-form-field >\r\n <mat-checkbox \r\n color = \"primary\" \r\n formControlName=\"guardianNoPhoneFlag\" \r\n \r\n >\r\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\r\n <input matInput placeholder=\"\" style=\"display: none;\">\r\n </mat-form-field>\r\n\r\n\r\n <div></div>\r\n <mat-card>\r\n <mat-form-field >\r\n <mat-label>Guardian Home Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianHomePhone\" \r\n [(ngModel)]=\"editVictim.guardianHomePhone\" \r\n appPhoneMask\r\n maxlength=\"14\" >\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianHomePhone').errors \r\n && (victimForm.get('guardianHomePhone').dirty || victimForm.get('guardianHomePhone').touched)\">\r\n <mat-error><strong>Guardian home phone number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Guardian Cell Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianCellPhone\" \r\n [(ngModel)]=\"editVictim.guardianCellPhone\" \r\n appPhoneMask\r\n maxlength=\"14\" \r\n >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianCellPhone').errors \r\n && (victimForm.get('guardianCellPhone').dirty || victimForm.get('guardianCellPhone').touched)\">\r\n <mat-error><strong>Guardian Cell phone number format is not correct.</strong></mat-error>\r\n </div>\r\n\r\n \r\n\r\n \r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Guardian Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianWorkPhone\" \r\n [(ngModel)]=\"editVictim.guardianWorkPhone\" \r\n appPhoneMask\r\n maxlength=\"14\" >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianWorkPhone').errors \r\n && (victimForm.get('guardianWorkPhone').dirty || victimForm.get('guardianWorkPhone').touched)\">\r\n <mat-error><strong>Guardian work phone number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n \r\n </mat-form-field>\r\n </mat-card>\r\n \r\n <div></div>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian Email:</mat-label>\r\n <input matInput formControlName=\"guardianEmail\" [(ngModel)]=\"editVictim.guardianEmail\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianEmail').errors \r\n && (victimForm.get('guardianEmail').dirty || victimForm.get('guardianEmail').touched)\">\r\n <mat-error><strong>Guardian email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n \r\n <div>\r\n <app-smart-address \r\n\r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"guardianAddressId\"\r\n (addressIdChange)=\"onGuardianAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #guardianAddressComponent\r\n >\r\n </app-smart-address>\r\n </div>\r\n </div>\r\n \r\n <br><br><br> \r\n </mat-tab>\r\n \r\n <!--advocate-->\r\n \r\n <mat-tab *ngIf=\"advocateTabFlag\" label=\"Advocate\" > \r\n <div class='container'>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Last Name:</mat-label>\r\n <input matInput formControlName=\"advocateLastName\" [(ngModel)]=\"editVictim.advocateLastName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors \">\r\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate First Name:</mat-label>\r\n <input matInput formControlName=\"advocateFirstName\" [(ngModel)]=\"editVictim.advocateFirstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors \">\r\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Prefix:</mat-label>\r\n <mat-select formControlName=\"advocatePrefixId\" [(ngModel)]=\"editVictim.advocatePrefixId\" >\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Suffix:</mat-label>\r\n <mat-select formControlName=\"advocateSuffixId\" [(ngModel)]=\"editVictim.advocateSuffixId\" >\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n \r\n <mat-form-field>\r\n <mat-checkbox \r\n color = \"primary\" \r\n formControlName=\"advocateNoPhoneFlag\" \r\n \r\n [(ngModel)]=\"editVictim.advocateNoPhoneFlag\" >\r\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\r\n <input matInput placeholder=\"\" style=\"display: none;\">\r\n </mat-form-field>\r\n\r\n <div></div> \r\n <mat-card> \r\n <mat-form-field >\r\n <mat-label>Advocate Home Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateHomePhone\" \r\n [(ngModel)]=\"editVictim.advocateHomePhone\"\r\n appPhoneMask\r\n maxlength=\"14\" >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateHomePhone').errors \r\n && (victimForm.get('advocateHomePhone').dirty || victimForm.get('advocateHomePhone').touched)\">\r\n <mat-error><strong>Advocate home number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Cell Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateCellPhone\" \r\n [(ngModel)]=\"editVictim.advocateCellPhone\" \r\n appPhoneMask\r\n maxlength=\"14\">\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateCellPhone').errors \r\n && (victimForm.get('advocateCellPhone').dirty || victimForm.get('advocateCellPhone').touched)\">\r\n <mat-error><strong>Advocate cell number format is not correct.</strong></mat-error>\r\n </div>\r\n\r\n \r\n </mat-form-field> \r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateWorkPhone\" \r\n [(ngModel)]=\"editVictim.advocateWorkPhone\" \r\n appPhoneMask\r\n maxlength=\"14\"\r\n >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateWorkPhone').errors \r\n && (victimForm.get('advocateWorkPhone').dirty || victimForm.get('advocateWorkPhone').touched)\">\r\n <mat-error><strong>Advocate work number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n </mat-form-field>\r\n </mat-card>\r\n\r\n <div></div>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Email:</mat-label>\r\n <input matInput formControlName=\"advocateEmail\" [(ngModel)]=\"editVictim.advocateEmail\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateEmail').errors \r\n && (victimForm.get('advocateEmail').dirty || victimForm.get('advocateEmail').touched)\">\r\n <mat-error><strong>Advocate email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n\r\n \r\n <div >\r\n <app-smart-address \r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"advocateAddressId\"\r\n (addressIdChange)=\"onAdvocateAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #advocateAddressComponent >\r\n </app-smart-address>\r\n </div>\r\n </div>\r\n <br><br><br> \r\n </mat-tab>\r\n \r\n \r\n <mat-tab label=\"Emergency Contact\">\r\n <div class='container'>\r\n \r\n <mat-form-field>\r\n <mat-label>Emergency Contact Name:</mat-label>\r\n <input matInput formControlName=\"emergencyContact\" [(ngModel)]=\"editVictim.emergencyContact\" >\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Emergency Phone Number:</mat-label>\r\n <input matInput \r\n formControlName=\"emergencyContactPhone\" \r\n [(ngModel)]=\"editVictim.emergencyContactPhone\" \r\n appPhoneMask\r\n >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('emergencyContactPhone').errors \r\n && (victimForm.get('emergencyContactPhone').dirty || victimForm.get('emergencyContactPhone').touched)\">\r\n <mat-error><strong>Emergency contact number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n </div>\r\n <br><br><br> \r\n </mat-tab> \r\n \r\n </mat-tab-group>\r\n <div class='outer'>\r\n <div>\r\n All buttons apply to all tabs. If save button is grey, please check each tab to make sure the required field is filled.<br><br>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors \r\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\r\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\r\n </div>\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors \r\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\r\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors \r\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\r\n <mat-error>Under supervision field is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors \r\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\r\n <mat-error>Relationship is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors \r\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\r\n <mat-error>Victim last name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors \r\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\r\n <mat-error>victim first name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \r\n && (victimForm.get('guardianFirstName').dirty || victimForm.get('guardianFirstName').touched)\">\r\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors\r\n && (victimForm.get('guardianLastName').dirty || victimForm.get('guardianLastName').touched)\" >\r\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors\r\n && (victimForm.get('advocateLastName').dirty || victimForm.get('advocateLastName').touched)\" >\r\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors\r\n && (victimForm.get('advocateFirstName').dirty || victimForm.get('advocateFirstName').touched)\">\r\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors \r\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\r\n <mat-error>Other weapon field is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors \r\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\r\n <mat-error>Other drug field is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n\r\n </div>\r\n \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"saveVictim()\" [disabled]=\"!victimForm.valid\" >Save </button> \r\n </div>\r\n &nbsp;&nbsp;\r\n <div *ngIf=\"showDelete\" class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"deleteVictim()\">Delete </button>\r\n </div>\r\n &nbsp;&nbsp; \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Clear </button>\r\n </div>\r\n &nbsp;&nbsp; \r\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\r\n\r\n </div>\r\n\r\n </div>\r\n <br>\r\n <br>\r\n\r\n <div align=\"right\">\r\n <button mat-raised-button color=\"primary\" (click)=\"addContact()\" >Add victim contact</button>\r\n </div>\r\n \r\n <div>\r\n\r\n <mat-table #table [dataSource]=\"contactDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"contactDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"victimContactMethod\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Method</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimContactMethod}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"nextContactDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Next Contact Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.nextContactDate | date}} </mat-cell>\r\n </ng-container>\r\n \r\n \r\n <ng-container matColumnDef=\"staff\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact By</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.staff}} </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"contactId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\r\n \r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n\r\n </div>\r\n \r\n </mat-card-content>\r\n</mat-card>\r\n", styles: ["mat-form-field{width:100%}.container{margin:16px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}@media only screen and (max-width: 1120px){.container{display:grid;grid-template-columns:1fr 1fr;grid-row-gap:15px}}@media only screen and (max-width: 675px){.container{display:flex;flex-direction:column}}#outer{width:100%;text-align:center}.inner{display:inline-block}.tp-radio-group{display:flex;justify-content:space-between}\n"], components: [{ type: i8.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i9.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i11.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i12.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i13.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i14.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i14.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i15.SmartAddressComponent, selector: "app-smart-address", inputs: ["showPsa", "housingTypeId", "modifiedBy", "rowHeight", "id", "outline", "readonly", "addressValidators"], outputs: ["isValid", "addressIdChange"] }, { type: i16.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i17.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "displayWith", "valueText", "vertical"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { type: i18.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i19.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i19.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i19.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i8.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i10.MatLabel, selector: "mat-label" }, { type: i11.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i20.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i14.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i10.MatSuffix, selector: "[matSuffix]" }, { type: i21.PhoneMaskDirective, selector: "[formControlName][appPhoneMask]" }, { type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i19.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i19.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i19.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i19.MatCellDef, selector: "[matCellDef]" }, { type: i19.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i19.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i19.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }], pipes: { "date": i1.DatePipe } });
1028
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SmartVictimDetailComponent, decorators: [{
1046
+ /** @nocollapse */ /** @nocollapse */ SmartVictimDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SmartVictimDetailComponent, deps: [{ token: i1.Location }, { token: i2.FormBuilder }, { token: i3.MatDialog }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i5.MatSnackBar }, { token: i6.CommonDialogService }, { token: i7.NgcSmartVictimService }], target: i0.ɵɵFactoryTarget.Component });
1047
+ /** @nocollapse */ /** @nocollapse */ SmartVictimDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SmartVictimDetailComponent, selector: "csmart-victim-detail", inputs: { victimDetail: "victimDetail", staffId: "staffId", offenderId: "offenderId", isIntake: "isIntake" }, outputs: { onSave: "onSave", onCancel: "onCancel" }, providers: [CommonDialogService], viewQueries: [{ propertyName: "addressComponent", first: true, predicate: ["addressComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card>\r\n <mat-card-content>\r\n\r\n <div [formGroup]=\"victimForm\">\r\n\r\n <mat-tab-group dynamicHeight mat-stretch-tabs>\r\n <mat-tab label=\"Victim Detail\" >\r\n <div class='container'>\r\n\r\n <mat-form-field>\r\n <mat-label>Is victim a minor?<font color=\"red\">* </font></mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"minorFlag\" (change)=\"radioMinorChange($event)\" [(ngModel)]=\"editVictim.minorFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors \r\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\r\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Does the Victim have a Victim Advocate or Social Worker with <br>whom CSOSA should maintain contact?<font color=\"red\">* </font></mat-label>\r\n <br>\r\n <br>\r\n <mat-radio-group class = \"tp-radio-group\" formControlName=\"victimAdvocateFlag\" (change)=\"radioAdvocateChange($event)\" [(ngModel)]=\"editVictim.victimAdvocateFlag\">\r\n <mat-radio-button color=\"primary\" *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\">{{item.name}} </mat-radio-button>&nbsp;\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors \r\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\r\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Victim Currently Under Supervision:</mat-label>\r\n <mat-select formControlName=\"underSupervisionFlag\" name=\"supervision\" [(ngModel)]=\"editVictim.underSupervisionFlag\" >\r\n <mat-option *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\" >\r\n {{item.name}}</mat-option>\r\n </mat-select>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors \r\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\r\n <mat-error>under supervision field is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Relationship to Offender:</mat-label>\r\n <mat-select formControlName=\"victimOffenderRelationshipTypeId\" [(ngModel)]=\"editVictim.victimOffenderRelationshipTypeId\" >\r\n <mat-option *ngFor=\"let item of relationshipTypes\" [value]=\"item.relationshipTypeId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors \r\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\r\n <mat-error>relationship is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Victim Last Name:</mat-label>\r\n <input matInput formControlName=\"lastName\" [(ngModel)]=\"editVictim.lastName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors \r\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\r\n <mat-error>victim last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim First Name: </mat-label>\r\n <input matInput formControlName=\"firstName\" [(ngModel)]=\"editVictim.firstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors \r\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\r\n <mat-error>victim first name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Middle Name:</mat-label>\r\n <input matInput formControlName=\"middleName\" [(ngModel)]=\"editVictim.middleName\">\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim Prefix:</mat-label>\r\n <mat-select formControlName=\"prefixId\" [(ngModel)]=\"editVictim.prefixId\">\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Suffix:</mat-label>\r\n <mat-select formControlName=\"suffixId\" [(ngModel)]=\"editVictim.suffixId\">\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim Gender:</mat-label>\r\n <mat-select formControlName=\"genderCode\" [(ngModel)]=\"editVictim.genderCode\">\r\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Date of Birth:</mat-label>\r\n <input matInput \r\n [matDatepicker]=\"victimBirthRef\" \r\n formControlName=\"birthDate\"\r\n [(ngModel)]=\"editVictim.birthDate\"\r\n (click)=\"victimBirthRef.open()\"\r\n (dateChange)=\"handleDOBChange($event)\" \r\n >\r\n <mat-datepicker-toggle [for]=\"victimBirthRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #victimBirthRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Home Phone:</mat-label>\r\n <input \r\n matInput \r\n formControlName=\"homePhone\" \r\n [(ngModel)]=\"editVictim.homePhone\" \r\n appPhoneMask\r\n maxlength=\"14\"/>\r\n\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('homePhone').errors\r\n && (victimForm.get('homePhone').dirty || victimForm.get('homePhone').touched)\">\r\n <mat-error><strong>Home phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Victim Cell Phone:</mat-label>\r\n <input \r\n matInput \r\n formControlName=\"cellPhone\"\r\n appPhoneMask\r\n [(ngModel)]=\"editVictim.cellPhone\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('cellPhone').errors \r\n && (victimForm.get('cellPhone').dirty || victimForm.get('cellPhone').touched)\">\r\n <mat-error><strong>Cell phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n \r\n <mat-form-field >\r\n <mat-label>Victim Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"workPhone\" \r\n [(ngModel)]=\"editVictim.workPhone\"\r\n appPhoneMask\r\n >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('workPhone').errors \r\n && (victimForm.get('workPhone').dirty || victimForm.get('workPhone').touched)\">\r\n <mat-error><strong>Work phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Victim Email:</mat-label>\r\n <input matInput formControlName=\"email\" [(ngModel)]=\"editVictim.email\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('email').errors \r\n && (victimForm.get('email').dirty || victimForm.get('email').touched)\">\r\n <mat-error><strong>victim email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n \r\n <div></div>\r\n \r\n <!-- <app-smart-address \r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"addressId\"\r\n (addressIdChange)=\"onAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #addressComponent\r\n > -->\r\n\r\n\r\n <app-smart-address\r\n [modifiedBy]=\"staffId\"\r\n [id]=\"addressId\"\r\n [outline]=\"true\"\r\n [showPsa]=\"true\"\r\n [addressValidators]=\"addressValidators\"\r\n [readonly]=\"false\"\r\n (addressIdChange)=\"onAddressChange($event)\"\r\n #addressComponent\r\n >\r\n\r\n </app-smart-address>\r\n \r\n \r\n <!-- Docket: \r\n <div>\r\n <div *ngFor=\"let docket of docketlist; let i=index\">\r\n <mat-checkbox >{{docket.docketNumber}}</mat-checkbox>\r\n </div>\r\n </div> -->\r\n <div>\r\n <mat-checkbox color=\"primary\" formControlName=\"liveWithOffenderFlag\" name=\"liveWithOffenderFlag\" [(ngModel)]=\"editVictim.liveWithOffenderFlag\" (change)=\"showAddress($event)\" >victim live with offender</mat-checkbox>\r\n <br>\r\n <mat-checkbox color=\"primary\" formControlName=\"allowCsosaContactFlag\" name=\"allowCsosaContactFlag\" [(ngModel)]=\"editVictim.allowCsosaContactFlag\">victim wants to be contacted by CSOSA</mat-checkbox>\r\n </div>\r\n \r\n </div> \r\n\r\n <mat-card>\r\n <mat-form-field>\r\n <mat-label> Children in Common</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"commonChildrenFlag\" [(ngModel)]=\"editVictim.commonChildrenFlag\" (change)=\"radioCicChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n\r\n <div *ngIf=\"commonChildrenDivFlag\">\r\n \r\n <mat-form-field >\r\n <mat-label>\r\n Children number\r\n </mat-label>\r\n <input matInput formControlName=\"commonChildrenNumber\" [(ngModel)]=\"editVictim.commonChildrenNumber\" >\r\n </mat-form-field>\r\n \r\n </div>\r\n \r\n <mat-form-field>\r\n <mat-label>CPO: </mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"cpoExpirationFlag\" [(ngModel)]=\"editVictim.cpoExpirationFlag\" (change)=\"radioCpoChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"cpoExpirationDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Expiration Date: </mat-label>\r\n <input matInput \r\n [matDatepicker]=\"cpoDateRef\" \r\n formControlName=\"cpoExpirationDate\" \r\n (click)=\"cpoDateRef.open()\" \r\n [(ngModel)]=\"editVictim.cpoExpirationDate\" >\r\n <mat-datepicker-toggle [for]=\"cpoDateRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #cpoDateRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n </div>\r\n \r\n <br>\r\n <br>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim has a Support System in Place? </mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"supportInPlaceFlag\" [(ngModel)]=\"editVictim.supportInPlaceFlag\" (change)=\"radioSupportChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"supportInPlaceDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Support type? </mat-label>\r\n <mat-select #supportSel formControlName=\"victimSupports\" [(ngModel)]=\"editVictim.victimSupports\" multiple>\r\n <div (mouseleave)=\"supportSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of victimSupportTypes\" [value]=\"item.victimSupportTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n\r\n </div>\r\n \r\n <br>\r\n <br>\r\n\r\n <mat-form-field>\r\n <mat-label>Weapons Involved?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"weaponInvolvedFlag\" (change)=\"radioWeaponChange($event)\" [(ngModel)]=\"editVictim.weaponInvolvedFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n \r\n <div *ngIf=\"weaponInvolvedDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Weapon Type</mat-label>\r\n <mat-select #weaponSel formControlName=\"victimWeaponUses\" multiple [(ngModel)]=\"editVictim.victimWeaponUses\" (selectionChange)=\"checkOtherWeapon($event.value)\" >\r\n <div (mouseleave)=\"weaponSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of weaponTypes\" [value]=\"item.weaponTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"otherWeaponFlag\"> \r\n <mat-form-field>\r\n <mat-label>Other Weapon:* </mat-label>\r\n <input matInput formControlName=\"otherWeapon\" >\r\n </mat-form-field>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors \r\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\r\n <mat-error><strong>Other weapon is required.</strong></mat-error>\r\n </div>\r\n </div>\r\n\r\n \r\n <br>\r\n <br>\r\n \r\n <mat-form-field>\r\n <mat-label>Was Offender under the influence of alcohol at the time of the offense?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"alcoholUseFlag\" [(ngModel)]=\"editVictim.alcoholUseFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <br>\r\n <br>\r\n\r\n <mat-form-field>\r\n <mat-label>Was Offender under the influence of drugs at the time of the offense?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"drugUseFlag\" (change)=\"radioDrugChange($event)\" [(ngModel)]=\"editVictim.drugUseFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"drugUseDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Drug:</mat-label>\r\n <mat-select #drugSel formControlName=\"victimDrugUses\" multiple (selectionChange)=\"checkOtherDrug($event.value)\" >\r\n <div (mouseleave)=\"drugSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of drugs\" [value]=\"item.drugTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n \r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n </div>\r\n\r\n <div *ngIf=\"otherDrugFlag\"> \r\n <mat-form-field>\r\n <mat-label>Other Drug:* </mat-label>\r\n <input matInput formControlName=\"otherDrug\" >\r\n </mat-form-field>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors \r\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\r\n <mat-error><strong>Other drug is required.</strong></mat-error>\r\n </div>\r\n </div>\r\n <br>\r\n <br>\r\n\r\n <div>\r\n <div>\r\n <mat-label>\r\n Access Risk: 1 thru 10 (10 greatest risk): &nbsp;<b> {{editVictim.accessRisk}}</b>\r\n </mat-label>\r\n </div>\r\n <div>\r\n \r\n <mat-slider\r\n formControlName=\"accessRisk\"\r\n thumbLabel=\"true\"\r\n [displayWith]=\"formatLabel\"\r\n min=\"1\"\r\n max=\"10\"\r\n [(ngModel)]=\"editVictim.accessRisk\" \r\n ></mat-slider>\r\n \r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card> \r\n\r\n \r\n <br><br><br> \r\n </mat-tab>\r\n \r\n <mat-tab *ngIf=\"guardianTabFlag\" label=\"Legal Guardian\">\r\n <div class='container'>\r\n <mat-form-field>\r\n <mat-label>Guardian Last Name:</mat-label>\r\n <input matInput formControlName=\"guardianLastName\" [(ngModel)]=\"editVictim.guardianLastName\" > \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors \">\r\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian First Name:</mat-label>\r\n <input matInput formControlName=\"guardianFirstName\" [(ngModel)]=\"editVictim.guardianFirstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \">\r\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Guardian Prefix:</mat-label>\r\n <mat-select formControlName=\"guardianPrefixId\" [(ngModel)]=\"editVictim.guardianPrefixId\" >\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian Suffix:</mat-label>\r\n <mat-select formControlName=\"guardianSuffixId\" [(ngModel)]=\"editVictim.guardianSuffixId\" >\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n \r\n <!-- <mat-form-field>\r\n <mat-select placeholder=\"Choose\" formControlName=\"guardianGender\" [(ngModel)]=\"editVictim.guardianGender\">\r\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field> -->\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Date of Birth:</mat-label>\r\n <input matInput \r\n [matDatepicker]=\"guardianDateRef\" \r\n formControlName=\"guardianBirthDate\"\r\n [(ngModel)]=\"editVictim.guardianBirthDate\" \r\n (click)=\"guardianDateRef.open()\" \r\n >\r\n <mat-datepicker-toggle [for]=\"guardianDateRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #guardianDateRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n <mat-form-field >\r\n <mat-checkbox \r\n color = \"primary\" \r\n formControlName=\"guardianNoPhoneFlag\" \r\n \r\n >\r\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\r\n <input matInput placeholder=\"\" style=\"display: none;\">\r\n </mat-form-field>\r\n\r\n\r\n <div></div>\r\n <mat-card>\r\n <mat-form-field >\r\n <mat-label>Guardian Home Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianHomePhone\" \r\n [(ngModel)]=\"editVictim.guardianHomePhone\" \r\n appPhoneMask\r\n maxlength=\"14\" >\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianHomePhone').errors \r\n && (victimForm.get('guardianHomePhone').dirty || victimForm.get('guardianHomePhone').touched)\">\r\n <mat-error><strong>Guardian home phone number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Guardian Cell Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianCellPhone\" \r\n [(ngModel)]=\"editVictim.guardianCellPhone\" \r\n appPhoneMask\r\n maxlength=\"14\" \r\n >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianCellPhone').errors \r\n && (victimForm.get('guardianCellPhone').dirty || victimForm.get('guardianCellPhone').touched)\">\r\n <mat-error><strong>Guardian Cell phone number format is not correct.</strong></mat-error>\r\n </div>\r\n\r\n \r\n\r\n \r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Guardian Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianWorkPhone\" \r\n [(ngModel)]=\"editVictim.guardianWorkPhone\" \r\n appPhoneMask\r\n maxlength=\"14\" >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianWorkPhone').errors \r\n && (victimForm.get('guardianWorkPhone').dirty || victimForm.get('guardianWorkPhone').touched)\">\r\n <mat-error><strong>Guardian work phone number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n \r\n </mat-form-field>\r\n </mat-card>\r\n \r\n <div></div>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian Email:</mat-label>\r\n <input matInput formControlName=\"guardianEmail\" [(ngModel)]=\"editVictim.guardianEmail\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianEmail').errors \r\n && (victimForm.get('guardianEmail').dirty || victimForm.get('guardianEmail').touched)\">\r\n <mat-error><strong>Guardian email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n \r\n <div>\r\n <app-smart-address \r\n\r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"guardianAddressId\"\r\n (addressIdChange)=\"onGuardianAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #guardianAddressComponent\r\n >\r\n </app-smart-address>\r\n </div>\r\n </div>\r\n \r\n <br><br><br> \r\n </mat-tab>\r\n \r\n <!--advocate-->\r\n \r\n <mat-tab *ngIf=\"advocateTabFlag\" label=\"Advocate\" > \r\n <div class='container'>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Last Name:</mat-label>\r\n <input matInput formControlName=\"advocateLastName\" [(ngModel)]=\"editVictim.advocateLastName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors \">\r\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate First Name:</mat-label>\r\n <input matInput formControlName=\"advocateFirstName\" [(ngModel)]=\"editVictim.advocateFirstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors \">\r\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Prefix:</mat-label>\r\n <mat-select formControlName=\"advocatePrefixId\" [(ngModel)]=\"editVictim.advocatePrefixId\" >\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Suffix:</mat-label>\r\n <mat-select formControlName=\"advocateSuffixId\" [(ngModel)]=\"editVictim.advocateSuffixId\" >\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n \r\n <mat-form-field>\r\n <mat-checkbox \r\n color = \"primary\" \r\n formControlName=\"advocateNoPhoneFlag\" \r\n \r\n [(ngModel)]=\"editVictim.advocateNoPhoneFlag\" >\r\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\r\n <input matInput placeholder=\"\" style=\"display: none;\">\r\n </mat-form-field>\r\n\r\n <div></div> \r\n <mat-card> \r\n <mat-form-field >\r\n <mat-label>Advocate Home Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateHomePhone\" \r\n [(ngModel)]=\"editVictim.advocateHomePhone\"\r\n appPhoneMask\r\n maxlength=\"14\" >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateHomePhone').errors \r\n && (victimForm.get('advocateHomePhone').dirty || victimForm.get('advocateHomePhone').touched)\">\r\n <mat-error><strong>Advocate home number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Cell Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateCellPhone\" \r\n [(ngModel)]=\"editVictim.advocateCellPhone\" \r\n appPhoneMask\r\n maxlength=\"14\">\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateCellPhone').errors \r\n && (victimForm.get('advocateCellPhone').dirty || victimForm.get('advocateCellPhone').touched)\">\r\n <mat-error><strong>Advocate cell number format is not correct.</strong></mat-error>\r\n </div>\r\n\r\n \r\n </mat-form-field> \r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateWorkPhone\" \r\n [(ngModel)]=\"editVictim.advocateWorkPhone\" \r\n appPhoneMask\r\n maxlength=\"14\"\r\n >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateWorkPhone').errors \r\n && (victimForm.get('advocateWorkPhone').dirty || victimForm.get('advocateWorkPhone').touched)\">\r\n <mat-error><strong>Advocate work number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n </mat-form-field>\r\n </mat-card>\r\n\r\n <div></div>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Email:</mat-label>\r\n <input matInput formControlName=\"advocateEmail\" [(ngModel)]=\"editVictim.advocateEmail\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateEmail').errors \r\n && (victimForm.get('advocateEmail').dirty || victimForm.get('advocateEmail').touched)\">\r\n <mat-error><strong>Advocate email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n\r\n \r\n <div >\r\n <app-smart-address \r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"advocateAddressId\"\r\n (addressIdChange)=\"onAdvocateAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #advocateAddressComponent >\r\n </app-smart-address>\r\n </div>\r\n </div>\r\n <br><br><br> \r\n </mat-tab>\r\n \r\n \r\n <mat-tab label=\"Emergency Contact\">\r\n <div class='container'>\r\n \r\n <mat-form-field>\r\n <mat-label>Emergency Contact Name:</mat-label>\r\n <input matInput formControlName=\"emergencyContact\" [(ngModel)]=\"editVictim.emergencyContact\" >\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Emergency Phone Number:</mat-label>\r\n <input matInput \r\n formControlName=\"emergencyContactPhone\" \r\n [(ngModel)]=\"editVictim.emergencyContactPhone\" \r\n appPhoneMask\r\n >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('emergencyContactPhone').errors \r\n && (victimForm.get('emergencyContactPhone').dirty || victimForm.get('emergencyContactPhone').touched)\">\r\n <mat-error><strong>Emergency contact number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n </div>\r\n <br><br><br> \r\n </mat-tab> \r\n \r\n </mat-tab-group>\r\n <div class='outer'>\r\n <div>\r\n All buttons apply to all tabs. If save button is grey, please check each tab to make sure the required field is filled.<br><br>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors \r\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\r\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\r\n </div>\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors \r\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\r\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors \r\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\r\n <mat-error>Under supervision field is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors \r\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\r\n <mat-error>Relationship is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors \r\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\r\n <mat-error>Victim last name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors \r\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\r\n <mat-error>victim first name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \r\n && (victimForm.get('guardianFirstName').dirty || victimForm.get('guardianFirstName').touched)\">\r\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors\r\n && (victimForm.get('guardianLastName').dirty || victimForm.get('guardianLastName').touched)\" >\r\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors\r\n && (victimForm.get('advocateLastName').dirty || victimForm.get('advocateLastName').touched)\" >\r\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors\r\n && (victimForm.get('advocateFirstName').dirty || victimForm.get('advocateFirstName').touched)\">\r\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors \r\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\r\n <mat-error>Other weapon field is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors \r\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\r\n <mat-error>Other drug field is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n\r\n </div>\r\n \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"saveVictim()\" [disabled]=\"!victimForm.valid\" >Save </button> \r\n </div>\r\n &nbsp;&nbsp;\r\n <div *ngIf=\"showDelete\" class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"deleteVictim()\">Delete </button>\r\n </div>\r\n &nbsp;&nbsp; \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Clear </button>\r\n </div>\r\n &nbsp;&nbsp; \r\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\r\n\r\n </div>\r\n\r\n </div>\r\n <br>\r\n <br>\r\n\r\n <div align=\"right\">\r\n <button mat-raised-button color=\"primary\" (click)=\"addContact()\" >Add victim contact</button>\r\n </div>\r\n \r\n <div>\r\n\r\n <mat-table #table [dataSource]=\"contactDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"contactDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"victimContactMethod\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Method</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimContactMethod}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"nextContactDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Next Contact Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.nextContactDate | date}} </mat-cell>\r\n </ng-container>\r\n \r\n \r\n <ng-container matColumnDef=\"staff\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact By</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.staff}} </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"contactId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\r\n \r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n\r\n </div>\r\n \r\n </mat-card-content>\r\n</mat-card>\r\n", styles: ["mat-form-field{width:100%}.container{margin:16px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}@media only screen and (max-width: 1120px){.container{display:grid;grid-template-columns:1fr 1fr;grid-row-gap:15px}}@media only screen and (max-width: 675px){.container{display:flex;flex-direction:column}}#outer{width:100%;text-align:center}.inner{display:inline-block}.tp-radio-group{display:flex;justify-content:space-between}\n"], components: [{ type: i8.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i9.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i11.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i12.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i13.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i14.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i14.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i15.SmartAddressComponent, selector: "app-smart-address", inputs: ["showPsa", "housingTypeId", "modifiedBy", "rowHeight", "id", "outline", "readonly", "addressValidators"], outputs: ["isValid", "addressIdChange"] }, { type: i16.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i17.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "displayWith", "valueText", "vertical"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { type: i18.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i19.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i19.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i19.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i8.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i10.MatLabel, selector: "mat-label" }, { type: i11.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i20.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i14.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i10.MatSuffix, selector: "[matSuffix]" }, { type: i21.PhoneMaskDirective, selector: "[formControlName][appPhoneMask]" }, { type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i19.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i19.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i19.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i19.MatCellDef, selector: "[matCellDef]" }, { type: i19.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i19.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i19.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }], pipes: { "date": i1.DatePipe } });
1048
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SmartVictimDetailComponent, decorators: [{
1029
1049
  type: Component,
1030
1050
  args: [{ selector: 'csmart-victim-detail', providers: [CommonDialogService], template: "<mat-card>\r\n <mat-card-content>\r\n\r\n <div [formGroup]=\"victimForm\">\r\n\r\n <mat-tab-group dynamicHeight mat-stretch-tabs>\r\n <mat-tab label=\"Victim Detail\" >\r\n <div class='container'>\r\n\r\n <mat-form-field>\r\n <mat-label>Is victim a minor?<font color=\"red\">* </font></mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"minorFlag\" (change)=\"radioMinorChange($event)\" [(ngModel)]=\"editVictim.minorFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors \r\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\r\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Does the Victim have a Victim Advocate or Social Worker with <br>whom CSOSA should maintain contact?<font color=\"red\">* </font></mat-label>\r\n <br>\r\n <br>\r\n <mat-radio-group class = \"tp-radio-group\" formControlName=\"victimAdvocateFlag\" (change)=\"radioAdvocateChange($event)\" [(ngModel)]=\"editVictim.victimAdvocateFlag\">\r\n <mat-radio-button color=\"primary\" *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\">{{item.name}} </mat-radio-button>&nbsp;\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors \r\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\r\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Victim Currently Under Supervision:</mat-label>\r\n <mat-select formControlName=\"underSupervisionFlag\" name=\"supervision\" [(ngModel)]=\"editVictim.underSupervisionFlag\" >\r\n <mat-option *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\" >\r\n {{item.name}}</mat-option>\r\n </mat-select>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors \r\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\r\n <mat-error>under supervision field is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Relationship to Offender:</mat-label>\r\n <mat-select formControlName=\"victimOffenderRelationshipTypeId\" [(ngModel)]=\"editVictim.victimOffenderRelationshipTypeId\" >\r\n <mat-option *ngFor=\"let item of relationshipTypes\" [value]=\"item.relationshipTypeId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors \r\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\r\n <mat-error>relationship is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Victim Last Name:</mat-label>\r\n <input matInput formControlName=\"lastName\" [(ngModel)]=\"editVictim.lastName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors \r\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\r\n <mat-error>victim last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim First Name: </mat-label>\r\n <input matInput formControlName=\"firstName\" [(ngModel)]=\"editVictim.firstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors \r\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\r\n <mat-error>victim first name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Middle Name:</mat-label>\r\n <input matInput formControlName=\"middleName\" [(ngModel)]=\"editVictim.middleName\">\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim Prefix:</mat-label>\r\n <mat-select formControlName=\"prefixId\" [(ngModel)]=\"editVictim.prefixId\">\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Suffix:</mat-label>\r\n <mat-select formControlName=\"suffixId\" [(ngModel)]=\"editVictim.suffixId\">\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim Gender:</mat-label>\r\n <mat-select formControlName=\"genderCode\" [(ngModel)]=\"editVictim.genderCode\">\r\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Date of Birth:</mat-label>\r\n <input matInput \r\n [matDatepicker]=\"victimBirthRef\" \r\n formControlName=\"birthDate\"\r\n [(ngModel)]=\"editVictim.birthDate\"\r\n (click)=\"victimBirthRef.open()\"\r\n (dateChange)=\"handleDOBChange($event)\" \r\n >\r\n <mat-datepicker-toggle [for]=\"victimBirthRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #victimBirthRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Home Phone:</mat-label>\r\n <input \r\n matInput \r\n formControlName=\"homePhone\" \r\n [(ngModel)]=\"editVictim.homePhone\" \r\n appPhoneMask\r\n maxlength=\"14\"/>\r\n\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('homePhone').errors\r\n && (victimForm.get('homePhone').dirty || victimForm.get('homePhone').touched)\">\r\n <mat-error><strong>Home phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Victim Cell Phone:</mat-label>\r\n <input \r\n matInput \r\n formControlName=\"cellPhone\"\r\n appPhoneMask\r\n [(ngModel)]=\"editVictim.cellPhone\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('cellPhone').errors \r\n && (victimForm.get('cellPhone').dirty || victimForm.get('cellPhone').touched)\">\r\n <mat-error><strong>Cell phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n \r\n <mat-form-field >\r\n <mat-label>Victim Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"workPhone\" \r\n [(ngModel)]=\"editVictim.workPhone\"\r\n appPhoneMask\r\n >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('workPhone').errors \r\n && (victimForm.get('workPhone').dirty || victimForm.get('workPhone').touched)\">\r\n <mat-error><strong>Work phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Victim Email:</mat-label>\r\n <input matInput formControlName=\"email\" [(ngModel)]=\"editVictim.email\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('email').errors \r\n && (victimForm.get('email').dirty || victimForm.get('email').touched)\">\r\n <mat-error><strong>victim email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n \r\n <div></div>\r\n \r\n <!-- <app-smart-address \r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"addressId\"\r\n (addressIdChange)=\"onAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #addressComponent\r\n > -->\r\n\r\n\r\n <app-smart-address\r\n [modifiedBy]=\"staffId\"\r\n [id]=\"addressId\"\r\n [outline]=\"true\"\r\n [showPsa]=\"true\"\r\n [addressValidators]=\"addressValidators\"\r\n [readonly]=\"false\"\r\n (addressIdChange)=\"onAddressChange($event)\"\r\n #addressComponent\r\n >\r\n\r\n </app-smart-address>\r\n \r\n \r\n <!-- Docket: \r\n <div>\r\n <div *ngFor=\"let docket of docketlist; let i=index\">\r\n <mat-checkbox >{{docket.docketNumber}}</mat-checkbox>\r\n </div>\r\n </div> -->\r\n <div>\r\n <mat-checkbox color=\"primary\" formControlName=\"liveWithOffenderFlag\" name=\"liveWithOffenderFlag\" [(ngModel)]=\"editVictim.liveWithOffenderFlag\" (change)=\"showAddress($event)\" >victim live with offender</mat-checkbox>\r\n <br>\r\n <mat-checkbox color=\"primary\" formControlName=\"allowCsosaContactFlag\" name=\"allowCsosaContactFlag\" [(ngModel)]=\"editVictim.allowCsosaContactFlag\">victim wants to be contacted by CSOSA</mat-checkbox>\r\n </div>\r\n \r\n </div> \r\n\r\n <mat-card>\r\n <mat-form-field>\r\n <mat-label> Children in Common</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"commonChildrenFlag\" [(ngModel)]=\"editVictim.commonChildrenFlag\" (change)=\"radioCicChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n\r\n <div *ngIf=\"commonChildrenDivFlag\">\r\n \r\n <mat-form-field >\r\n <mat-label>\r\n Children number\r\n </mat-label>\r\n <input matInput formControlName=\"commonChildrenNumber\" [(ngModel)]=\"editVictim.commonChildrenNumber\" >\r\n </mat-form-field>\r\n \r\n </div>\r\n \r\n <mat-form-field>\r\n <mat-label>CPO: </mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"cpoExpirationFlag\" [(ngModel)]=\"editVictim.cpoExpirationFlag\" (change)=\"radioCpoChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"cpoExpirationDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Expiration Date: </mat-label>\r\n <input matInput \r\n [matDatepicker]=\"cpoDateRef\" \r\n formControlName=\"cpoExpirationDate\" \r\n (click)=\"cpoDateRef.open()\" \r\n [(ngModel)]=\"editVictim.cpoExpirationDate\" >\r\n <mat-datepicker-toggle [for]=\"cpoDateRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #cpoDateRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n </div>\r\n \r\n <br>\r\n <br>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim has a Support System in Place? </mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"supportInPlaceFlag\" [(ngModel)]=\"editVictim.supportInPlaceFlag\" (change)=\"radioSupportChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"supportInPlaceDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Support type? </mat-label>\r\n <mat-select #supportSel formControlName=\"victimSupports\" [(ngModel)]=\"editVictim.victimSupports\" multiple>\r\n <div (mouseleave)=\"supportSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of victimSupportTypes\" [value]=\"item.victimSupportTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n\r\n </div>\r\n \r\n <br>\r\n <br>\r\n\r\n <mat-form-field>\r\n <mat-label>Weapons Involved?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"weaponInvolvedFlag\" (change)=\"radioWeaponChange($event)\" [(ngModel)]=\"editVictim.weaponInvolvedFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n \r\n <div *ngIf=\"weaponInvolvedDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Weapon Type</mat-label>\r\n <mat-select #weaponSel formControlName=\"victimWeaponUses\" multiple [(ngModel)]=\"editVictim.victimWeaponUses\" (selectionChange)=\"checkOtherWeapon($event.value)\" >\r\n <div (mouseleave)=\"weaponSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of weaponTypes\" [value]=\"item.weaponTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"otherWeaponFlag\"> \r\n <mat-form-field>\r\n <mat-label>Other Weapon:* </mat-label>\r\n <input matInput formControlName=\"otherWeapon\" >\r\n </mat-form-field>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors \r\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\r\n <mat-error><strong>Other weapon is required.</strong></mat-error>\r\n </div>\r\n </div>\r\n\r\n \r\n <br>\r\n <br>\r\n \r\n <mat-form-field>\r\n <mat-label>Was Offender under the influence of alcohol at the time of the offense?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"alcoholUseFlag\" [(ngModel)]=\"editVictim.alcoholUseFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <br>\r\n <br>\r\n\r\n <mat-form-field>\r\n <mat-label>Was Offender under the influence of drugs at the time of the offense?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"drugUseFlag\" (change)=\"radioDrugChange($event)\" [(ngModel)]=\"editVictim.drugUseFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"drugUseDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Drug:</mat-label>\r\n <mat-select #drugSel formControlName=\"victimDrugUses\" multiple (selectionChange)=\"checkOtherDrug($event.value)\" >\r\n <div (mouseleave)=\"drugSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of drugs\" [value]=\"item.drugTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n \r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n </div>\r\n\r\n <div *ngIf=\"otherDrugFlag\"> \r\n <mat-form-field>\r\n <mat-label>Other Drug:* </mat-label>\r\n <input matInput formControlName=\"otherDrug\" >\r\n </mat-form-field>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors \r\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\r\n <mat-error><strong>Other drug is required.</strong></mat-error>\r\n </div>\r\n </div>\r\n <br>\r\n <br>\r\n\r\n <div>\r\n <div>\r\n <mat-label>\r\n Access Risk: 1 thru 10 (10 greatest risk): &nbsp;<b> {{editVictim.accessRisk}}</b>\r\n </mat-label>\r\n </div>\r\n <div>\r\n \r\n <mat-slider\r\n formControlName=\"accessRisk\"\r\n thumbLabel=\"true\"\r\n [displayWith]=\"formatLabel\"\r\n min=\"1\"\r\n max=\"10\"\r\n [(ngModel)]=\"editVictim.accessRisk\" \r\n ></mat-slider>\r\n \r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card> \r\n\r\n \r\n <br><br><br> \r\n </mat-tab>\r\n \r\n <mat-tab *ngIf=\"guardianTabFlag\" label=\"Legal Guardian\">\r\n <div class='container'>\r\n <mat-form-field>\r\n <mat-label>Guardian Last Name:</mat-label>\r\n <input matInput formControlName=\"guardianLastName\" [(ngModel)]=\"editVictim.guardianLastName\" > \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors \">\r\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian First Name:</mat-label>\r\n <input matInput formControlName=\"guardianFirstName\" [(ngModel)]=\"editVictim.guardianFirstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \">\r\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Guardian Prefix:</mat-label>\r\n <mat-select formControlName=\"guardianPrefixId\" [(ngModel)]=\"editVictim.guardianPrefixId\" >\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian Suffix:</mat-label>\r\n <mat-select formControlName=\"guardianSuffixId\" [(ngModel)]=\"editVictim.guardianSuffixId\" >\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n \r\n <!-- <mat-form-field>\r\n <mat-select placeholder=\"Choose\" formControlName=\"guardianGender\" [(ngModel)]=\"editVictim.guardianGender\">\r\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field> -->\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Date of Birth:</mat-label>\r\n <input matInput \r\n [matDatepicker]=\"guardianDateRef\" \r\n formControlName=\"guardianBirthDate\"\r\n [(ngModel)]=\"editVictim.guardianBirthDate\" \r\n (click)=\"guardianDateRef.open()\" \r\n >\r\n <mat-datepicker-toggle [for]=\"guardianDateRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #guardianDateRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n <mat-form-field >\r\n <mat-checkbox \r\n color = \"primary\" \r\n formControlName=\"guardianNoPhoneFlag\" \r\n \r\n >\r\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\r\n <input matInput placeholder=\"\" style=\"display: none;\">\r\n </mat-form-field>\r\n\r\n\r\n <div></div>\r\n <mat-card>\r\n <mat-form-field >\r\n <mat-label>Guardian Home Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianHomePhone\" \r\n [(ngModel)]=\"editVictim.guardianHomePhone\" \r\n appPhoneMask\r\n maxlength=\"14\" >\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianHomePhone').errors \r\n && (victimForm.get('guardianHomePhone').dirty || victimForm.get('guardianHomePhone').touched)\">\r\n <mat-error><strong>Guardian home phone number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Guardian Cell Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianCellPhone\" \r\n [(ngModel)]=\"editVictim.guardianCellPhone\" \r\n appPhoneMask\r\n maxlength=\"14\" \r\n >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianCellPhone').errors \r\n && (victimForm.get('guardianCellPhone').dirty || victimForm.get('guardianCellPhone').touched)\">\r\n <mat-error><strong>Guardian Cell phone number format is not correct.</strong></mat-error>\r\n </div>\r\n\r\n \r\n\r\n \r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Guardian Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianWorkPhone\" \r\n [(ngModel)]=\"editVictim.guardianWorkPhone\" \r\n appPhoneMask\r\n maxlength=\"14\" >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianWorkPhone').errors \r\n && (victimForm.get('guardianWorkPhone').dirty || victimForm.get('guardianWorkPhone').touched)\">\r\n <mat-error><strong>Guardian work phone number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n \r\n </mat-form-field>\r\n </mat-card>\r\n \r\n <div></div>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian Email:</mat-label>\r\n <input matInput formControlName=\"guardianEmail\" [(ngModel)]=\"editVictim.guardianEmail\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianEmail').errors \r\n && (victimForm.get('guardianEmail').dirty || victimForm.get('guardianEmail').touched)\">\r\n <mat-error><strong>Guardian email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n \r\n <div>\r\n <app-smart-address \r\n\r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"guardianAddressId\"\r\n (addressIdChange)=\"onGuardianAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #guardianAddressComponent\r\n >\r\n </app-smart-address>\r\n </div>\r\n </div>\r\n \r\n <br><br><br> \r\n </mat-tab>\r\n \r\n <!--advocate-->\r\n \r\n <mat-tab *ngIf=\"advocateTabFlag\" label=\"Advocate\" > \r\n <div class='container'>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Last Name:</mat-label>\r\n <input matInput formControlName=\"advocateLastName\" [(ngModel)]=\"editVictim.advocateLastName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors \">\r\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate First Name:</mat-label>\r\n <input matInput formControlName=\"advocateFirstName\" [(ngModel)]=\"editVictim.advocateFirstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors \">\r\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Prefix:</mat-label>\r\n <mat-select formControlName=\"advocatePrefixId\" [(ngModel)]=\"editVictim.advocatePrefixId\" >\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Suffix:</mat-label>\r\n <mat-select formControlName=\"advocateSuffixId\" [(ngModel)]=\"editVictim.advocateSuffixId\" >\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n \r\n <mat-form-field>\r\n <mat-checkbox \r\n color = \"primary\" \r\n formControlName=\"advocateNoPhoneFlag\" \r\n \r\n [(ngModel)]=\"editVictim.advocateNoPhoneFlag\" >\r\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\r\n <input matInput placeholder=\"\" style=\"display: none;\">\r\n </mat-form-field>\r\n\r\n <div></div> \r\n <mat-card> \r\n <mat-form-field >\r\n <mat-label>Advocate Home Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateHomePhone\" \r\n [(ngModel)]=\"editVictim.advocateHomePhone\"\r\n appPhoneMask\r\n maxlength=\"14\" >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateHomePhone').errors \r\n && (victimForm.get('advocateHomePhone').dirty || victimForm.get('advocateHomePhone').touched)\">\r\n <mat-error><strong>Advocate home number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Cell Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateCellPhone\" \r\n [(ngModel)]=\"editVictim.advocateCellPhone\" \r\n appPhoneMask\r\n maxlength=\"14\">\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateCellPhone').errors \r\n && (victimForm.get('advocateCellPhone').dirty || victimForm.get('advocateCellPhone').touched)\">\r\n <mat-error><strong>Advocate cell number format is not correct.</strong></mat-error>\r\n </div>\r\n\r\n \r\n </mat-form-field> \r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateWorkPhone\" \r\n [(ngModel)]=\"editVictim.advocateWorkPhone\" \r\n appPhoneMask\r\n maxlength=\"14\"\r\n >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateWorkPhone').errors \r\n && (victimForm.get('advocateWorkPhone').dirty || victimForm.get('advocateWorkPhone').touched)\">\r\n <mat-error><strong>Advocate work number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n </mat-form-field>\r\n </mat-card>\r\n\r\n <div></div>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Email:</mat-label>\r\n <input matInput formControlName=\"advocateEmail\" [(ngModel)]=\"editVictim.advocateEmail\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateEmail').errors \r\n && (victimForm.get('advocateEmail').dirty || victimForm.get('advocateEmail').touched)\">\r\n <mat-error><strong>Advocate email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n\r\n \r\n <div >\r\n <app-smart-address \r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"advocateAddressId\"\r\n (addressIdChange)=\"onAdvocateAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #advocateAddressComponent >\r\n </app-smart-address>\r\n </div>\r\n </div>\r\n <br><br><br> \r\n </mat-tab>\r\n \r\n \r\n <mat-tab label=\"Emergency Contact\">\r\n <div class='container'>\r\n \r\n <mat-form-field>\r\n <mat-label>Emergency Contact Name:</mat-label>\r\n <input matInput formControlName=\"emergencyContact\" [(ngModel)]=\"editVictim.emergencyContact\" >\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Emergency Phone Number:</mat-label>\r\n <input matInput \r\n formControlName=\"emergencyContactPhone\" \r\n [(ngModel)]=\"editVictim.emergencyContactPhone\" \r\n appPhoneMask\r\n >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('emergencyContactPhone').errors \r\n && (victimForm.get('emergencyContactPhone').dirty || victimForm.get('emergencyContactPhone').touched)\">\r\n <mat-error><strong>Emergency contact number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n </div>\r\n <br><br><br> \r\n </mat-tab> \r\n \r\n </mat-tab-group>\r\n <div class='outer'>\r\n <div>\r\n All buttons apply to all tabs. If save button is grey, please check each tab to make sure the required field is filled.<br><br>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors \r\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\r\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\r\n </div>\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors \r\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\r\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors \r\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\r\n <mat-error>Under supervision field is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors \r\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\r\n <mat-error>Relationship is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors \r\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\r\n <mat-error>Victim last name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors \r\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\r\n <mat-error>victim first name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \r\n && (victimForm.get('guardianFirstName').dirty || victimForm.get('guardianFirstName').touched)\">\r\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors\r\n && (victimForm.get('guardianLastName').dirty || victimForm.get('guardianLastName').touched)\" >\r\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors\r\n && (victimForm.get('advocateLastName').dirty || victimForm.get('advocateLastName').touched)\" >\r\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors\r\n && (victimForm.get('advocateFirstName').dirty || victimForm.get('advocateFirstName').touched)\">\r\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors \r\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\r\n <mat-error>Other weapon field is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors \r\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\r\n <mat-error>Other drug field is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n\r\n </div>\r\n \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"saveVictim()\" [disabled]=\"!victimForm.valid\" >Save </button> \r\n </div>\r\n &nbsp;&nbsp;\r\n <div *ngIf=\"showDelete\" class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"deleteVictim()\">Delete </button>\r\n </div>\r\n &nbsp;&nbsp; \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Clear </button>\r\n </div>\r\n &nbsp;&nbsp; \r\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\r\n\r\n </div>\r\n\r\n </div>\r\n <br>\r\n <br>\r\n\r\n <div align=\"right\">\r\n <button mat-raised-button color=\"primary\" (click)=\"addContact()\" >Add victim contact</button>\r\n </div>\r\n \r\n <div>\r\n\r\n <mat-table #table [dataSource]=\"contactDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"contactDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"victimContactMethod\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Method</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimContactMethod}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"nextContactDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Next Contact Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.nextContactDate | date}} </mat-cell>\r\n </ng-container>\r\n \r\n \r\n <ng-container matColumnDef=\"staff\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact By</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.staff}} </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"contactId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\r\n \r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n\r\n </div>\r\n \r\n </mat-card-content>\r\n</mat-card>\r\n", styles: ["mat-form-field{width:100%}.container{margin:16px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}@media only screen and (max-width: 1120px){.container{display:grid;grid-template-columns:1fr 1fr;grid-row-gap:15px}}@media only screen and (max-width: 675px){.container{display:flex;flex-direction:column}}#outer{width:100%;text-align:center}.inner{display:inline-block}.tp-radio-group{display:flex;justify-content:space-between}\n"] }]
1031
1051
  }], ctorParameters: function () { return [{ type: i1.Location }, { type: i2.FormBuilder }, { type: i3.MatDialog }, { type: i4.ActivatedRoute }, { type: i4.Router }, { type: i5.MatSnackBar }, { type: i6.CommonDialogService }, { type: i7.NgcSmartVictimService }]; }, propDecorators: { victimDetail: [{
@@ -1044,4 +1064,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
1044
1064
  type: ViewChild,
1045
1065
  args: ["addressComponent"]
1046
1066
  }] } });
1047
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ2Mtc21hcnQtdmljdGltL3NyYy9saWIvc21hcnQtdmljdGltLWRldGFpbC9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zbWFydC12aWN0aW0tZGV0YWlsL3NtYXJ0LXZpY3RpbS1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxXQUFXLEVBQWEsV0FBVyxFQUFDLFVBQVUsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFBa0IsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFjLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBQyxNQUFJLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBcUIscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcs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YTtRQUN2QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzhKQS90Q00sMEJBQTBCO2tKQUExQiwwQkFBMEIsa05BRjFCLENBQUMsbUJBQW1CLENBQUMscUtDcEVsQyx1eThDQTAxQkE7NEZEcHhCYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0Usc0JBQXNCLGFBR3JCLENBQUMsbUJBQW1CLENBQUM7bVNBR3ZCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDd0IsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkNoYW5nZXMsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1Db250cm9sLFZhbGlkYXRvcnMsVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFJhZGlvQ2hhbmdlLCBNYXRSYWRpb0dyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xyXG5pbXBvcnQgeyBWaWN0aW0sVmljdGltRHJ1Z1VzZSwgQ29udGFjdCwgVmljdGltQWR2b2NhdGUsVmljdGltR3VhcmRpYW4sVmljdGltV2VhcG9uVXNlLFZpY3RpbVN1cHBvcnQgfSBmcm9tICcuLi9zbWFydC12aWN0aW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBOZ2NTbWFydFZpY3RpbVNlcnZpY2UgfSBmcm9tICcuLi9zbWFydC12aWN0aW0uc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb21tb25EaWFsb2dTZXJ2aWNlfSBmcm9tICcuLi8uL2NvbW1vbi1kaWFsb2cvY29tbW9uLWRpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUsIGZvcm1hdERhdGUsIExvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHl9ZnJvbSdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgQWRkcmVzc1ZhbGlkYXRvcnMsIFNtYXJ0QWRkcmVzc0NvbXBvbmVudCB9IGZyb20gJ0Bjc21hcnQvbmdjLXNtYXJ0LWFkZHJlc3MnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCb29sZWFuRm4ge1xyXG4gICgpOiBib29sZWFuO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nRm4ge1xyXG4gICgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25kaXRpb25hbFZhbGlkYXRvcihwcmVkaWNhdGU6IEJvb2xlYW5GbixcclxuICB2YWxpZGF0b3I6IFZhbGlkYXRvckZuLFxyXG4gIGVycm9yTmFtZXNwYWNlPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG5yZXR1cm4gKGZvcm1Db250cm9sID0+IHtcclxuaWYgKCFmb3JtQ29udHJvbC5wYXJlbnQpIHtcclxucmV0dXJuIG51bGw7XHJcbn1cclxubGV0IGVycm9yID0gbnVsbDtcclxuaWYgKHByZWRpY2F0ZSgpKSB7XHJcbmVycm9yID0gdmFsaWRhdG9yKGZvcm1Db250cm9sKTtcclxufVxyXG5pZiAoZXJyb3JOYW1lc3BhY2UgJiYgZXJyb3IpIHtcclxuY29uc3QgY3VzdG9tRXJyb3IgPSB7fTtcclxuY3VzdG9tRXJyb3JbZXJyb3JOYW1lc3BhY2VdID0gZXJyb3I7XHJcbmVycm9yID0gY3VzdG9tRXJyb3JcclxufVxyXG5yZXR1cm4gZXJyb3I7XHJcbn0pXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nQ29uZGl0aW9uYWxWYWxpZGF0b3IocHJlZGljYXRlOiBTdHJpbmdGbixcclxuICB2YWxpZGF0b3I6IFZhbGlkYXRvckZuLFxyXG4gIGVycm9yTmFtZXNwYWNlPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG5yZXR1cm4gKGZvcm1Db250cm9sID0+IHtcclxuaWYgKCFmb3JtQ29udHJvbC5wYXJlbnQpIHtcclxucmV0dXJuIG51bGw7XHJcbn1cclxubGV0IGVycm9yID0gbnVsbDtcclxuaWYgKHByZWRpY2F0ZSgpPT0nWVMnKSB7XHJcbmVycm9yID0gdmFsaWRhdG9yKGZvcm1Db250cm9sKTtcclxufVxyXG5pZiAoZXJyb3JOYW1lc3BhY2UgJiYgZXJyb3IpIHtcclxuY29uc3QgY3VzdG9tRXJyb3IgPSB7fTtcclxuY3VzdG9tRXJyb3JbZXJyb3JOYW1lc3BhY2VdID0gZXJyb3I7XHJcbmVycm9yID0gY3VzdG9tRXJyb3JcclxufVxyXG5yZXR1cm4gZXJyb3I7XHJcbn0pXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY3NtYXJ0LXZpY3RpbS1kZXRhaWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtDb21tb25EaWFsb2dTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRWaWN0aW1EZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgdmljdGltRGV0YWlsID0gPFZpY3RpbT57fTtcclxuICBASW5wdXQoKSBzdGFmZklkOiBudW1iZXI7XHJcbiAgQElucHV0KCkgb2ZmZW5kZXJJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGlzSW50YWtlOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAVmlld0NoaWxkKFwiYWRkcmVzc0NvbXBvbmVudFwiKSBhZGRyZXNzQ29tcG9uZW50OiBTbWFydEFkZHJlc3NDb21wb25lbnQ7XHJcbiAgXHJcblxyXG4gIHZpY3RpbUlkOiBudW1iZXI7XHJcbiAgdmljdGltRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBkcnVnczogYW55O1xyXG4gIHZpY3RpbVN1cHBvcnRUeXBlczogYW55O1xyXG4gIHByZWZpeGVzOiBhbnk7XHJcbiAgLy92aWN0aW06IFZpY3RpbSA9IDxWaWN0aW0+e307XHJcbiAgc3VmZml4ZXM6IGFueTtcclxuICByZWxhdGlvbnNoaXBUeXBlczogYW55O1xyXG4gIGdlbmRlcnM6IGFueTtcclxuICBkb2NrZXRsaXN0OiBhbnk7XHJcbiAgd2VhcG9uVHlwZXM6IGFueTtcclxuICBmbGFnT3B0aW9uOiBhbnk7XHJcbiAgc2VsZWN0ZWRXZWFwb25UeXBlczogYW55O1xyXG4gIHNlbGVjdGVkVmljdGltU3VwcG9ydFR5cGVzOiBhbnk7XHJcbiAgc2VsZWN0ZWREcnVnczogYW55O1xyXG4gIGlkOiBhbnk7XHJcbiAgaGlkZGVuOiBib29sZWFuPXRydWU7XHJcbiAgcHJpdmF0ZSBzdWI6IGFueTtcclxuICB2aWN0aW1BZHZvY2F0ZTogVmljdGltQWR2b2NhdGUgPSAgPFZpY3RpbUFkdm9jYXRlPnt9O1xyXG4gIHZpY3RpbUd1YXJkaWFuOiBWaWN0aW1HdWFyZGlhbiA9IDxWaWN0aW1HdWFyZGlhbj57fTsgXHJcbiAgdmljdGltV2VhcG9uVXNlOiBWaWN0aW1XZWFwb25Vc2U7XHJcbiAgdmljdGltU3VwcG9ydDogVmljdGltU3VwcG9ydDtcclxuICB2aWN0aW1EcnVnVXNlOiBWaWN0aW1EcnVnVXNlO1xyXG4gIHJlc3VsdDogYW55O1xyXG4gIGVkaXRNb2RlOiBhbnk7XHJcbiAgZ3VhcmRpYW5UYWJGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWR2b2NhdGVUYWJGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY29tbW9uQ2hpbGRyZW5EaXZGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY3BvRXhwaXJhdGlvbkRpdkZsYWcgOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3VwcG9ydEluUGxhY2VEaXZGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgd2VhcG9uSW52b2x2ZWREaXZGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZHJ1Z1VzZURpdkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93RGVsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWRkcmVzc0lkOiBudW1iZXIgPSAwO1xyXG4gIGFkdm9jYXRlQWRkcmVzc0lkOiBudW1iZXIgPSAwO1xyXG4gIGd1YXJkaWFuQWRkcmVzc0lkOiBudW1iZXIgPSAwO1xyXG4gIGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xyXG4gIGVtYWlsUGF0dGVybiA9IFwiXlthLXowLTkuXyUrLV0rQFthLXowLTkuLV0rXFwuW2Etel17Miw0fSRcIjtcclxuICBwaG9uZU51bWJlciA9IFwiXFxcXGR7MTB9XCI7XHJcbiAgZWRpdFZpY3RpbTogVmljdGltID0gPFZpY3RpbT57fTtcclxuICB2aWN0aW1BZ2U6IG51bWJlcjtcclxuICBvdGhlcldlYXBvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvdGhlckRydWdGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnRhY3REYXRhU291cmNlPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKCk7XHJcbiAgY29udGFjdExpc3Q6IENvbnRhY3RbXTtcclxuICBndWFyZGlhblBob25lRXhpc3RGbGFnOiBib29sZWFuID0gIGZhbHNlO1xyXG4gIGFkdm9jYXRlUGhvbmVFeGlzdEZsYWc6IGJvb2xlYW4gPSAgZmFsc2U7XHJcbiAgcGhvbmVWYWxpZGF0aW9uRmxhZzogYm9vbGVhbiA9ICBmYWxzZTtcclxuICBndWFyaWRhbk5vUGhvbmVDaGtGbGFnOiBib29sZWFuID0gdHJ1ZTtcclxuICBhZHZvY2F0ZU5vUGhvbmVDaGtGbGFnOiBib29sZWFuID0gIHRydWU7XHJcblxyXG4gIGFkZHJlc3NWYWxpZGF0b3JzOiBBZGRyZXNzVmFsaWRhdG9ycyA9IHtcclxuICAgIHN0cmVldDogW10sXHJcbiAgICBzdHJlZXQyOiBbXSxcclxuICAgIGNpdHk6IFtdLFxyXG4gICAgc3RhdGVDb2RlOiBbXSxcclxuICAgIHppcENvZGU6IFtdLFxyXG4gICAgcHNhQ29kZTogW10sXHJcbiAgfTtcclxuXHJcbiBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIGNvbW1vbkRpYWxvZ1NlcnZpY2U6IENvbW1vbkRpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHZpY3RpbVNlcnZpY2U6IE5nY1NtYXJ0VmljdGltU2VydmljZSkge1xyXG4gICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGluaXRGb3JtKCkge1xyXG4gICAgXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgdW5kZXJTdXBlcnZpc2lvbkZsYWc6ICBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXHJcbiAgICAgIHZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgbGFzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgZmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXHJcbiAgICAgIG1pZGRsZU5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgcHJlZml4SWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgc3VmZml4SWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZ2VuZGVyQ29kZTpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGJpcnRoRGF0ZTogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBob21lUGhvbmU6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgY2VsbFBob25lOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHdvcmtQaG9uZTogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWFpbDpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuZW1haWxQYXR0ZXJuKSBdKSksXHJcbiAgICAgIG1pbm9yRmxhZzpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXHJcbiAgICAgIHZpY3RpbUFkdm9jYXRlRmxhZzogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxyXG4gICAgICBndWFyZGlhbkxhc3ROYW1lOm5ldyBGb3JtQ29udHJvbCgnJywgIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKCgpID0+IHRoaXMudmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLnZhbHVlLCAgVmFsaWRhdG9ycy5yZXF1aXJlZCwgJ2lsbHVtaW5hdGlFcnJvcicpICksXHJcbiAgICAgIGd1YXJkaWFuRmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsICBzdHJpbmdDb25kaXRpb25hbFZhbGlkYXRvcigoKSA9PiB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS52YWx1ZSwgIFZhbGlkYXRvcnMucmVxdWlyZWQsICdpbGx1bWluYXRpRXJyb3InKSksXHJcbiAgICAgIGd1YXJkaWFuUHJlZml4SWQ6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBndWFyZGlhblN1ZmZpeElkOiBuZXcgRm9ybUNvbnRyb2woJycsICksICAgICAgICBcclxuICAgICAgLy9ndWFyZGlhbkdlbmRlcjpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGd1YXJkaWFuQmlydGhEYXRlOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGd1YXJkaWFuTm9QaG9uZUZsYWc6bmV3IEZvcm1Db250cm9sKHRydWUpLFxyXG5cclxuICAgICAgZ3VhcmRpYW5Ib21lUGhvbmU6bmV3IEZvcm1Db250cm9sKCcnLCksXHJcbiAgICAgIGd1YXJkaWFuQ2VsbFBob25lOm5ldyBGb3JtQ29udHJvbCgnJywpLFxyXG4gICAgICBndWFyZGlhbldvcmtQaG9uZTpuZXcgRm9ybUNvbnRyb2woJycsKSxcclxuICAgICBcclxuICAgICBcclxuICAgICAgZ3VhcmRpYW5FbWFpbDpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuZW1haWxQYXR0ZXJuKSBdKSksXHJcbiAgICAgIGFkdm9jYXRlTm9QaG9uZUZsYWc6IG5ldyBGb3JtQ29udHJvbCh0cnVlKSxcclxuICBcclxuXHJcbiAgICAgIGFkdm9jYXRlV29ya1Bob25lOm5ldyBGb3JtQ29udHJvbCgnJywpLFxyXG4gICAgICBhZHZvY2F0ZUhvbWVQaG9uZTpuZXcgRm9ybUNvbnRyb2woJycsKSxcclxuICAgICAgYWR2b2NhdGVDZWxsUGhvbmU6IG5ldyBGb3JtQ29udHJvbCgnJywpLFxyXG4gICAgIFxyXG5cclxuICAgICAgYWR2b2NhdGVTdWZmaXhJZDpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGFkdm9jYXRlUHJlZml4SWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYWR2b2NhdGVGaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgc3RyaW5nQ29uZGl0aW9uYWxWYWxpZGF0b3IoKCkgPT4gdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykudmFsdWUsICBWYWxpZGF0b3JzLnJlcXVpcmVkLCAnaWxsdW1pbmF0aUVycm9yJykpLFxyXG4gICAgICBhZHZvY2F0ZUxhc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKCgpID0+IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkLCdpbGx1bWluYXRpRXJyb3InKSksXHJcbiAgICAgIGFkdm9jYXRlRW1haWw6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5lbWFpbFBhdHRlcm4pIF0pKSxcclxuICAgICAgZW1lcmdlbmN5Q29udGFjdDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lDb250YWN0UGhvbmU6bmV3IEZvcm1Db250cm9sKCcnLCksXHJcbiAgICAgIGVtZXJnZW5jeUNoaWxkcmVuOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGVtZXJnZW5jeUNwbzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lEcnVnOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZW1lcmdlbmN5U3VwcG9ydDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lXZWFwb246IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZHJ1ZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICB3ZWFwb246IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgc3VwcG9ydDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBjb21tb25DaGlsZHJlbkZsYWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgY29tbW9uQ2hpbGRyZW5OdW1iZXI6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBjcG9FeHBpcmF0aW9uRmxhZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBjcG9FeHBpcmF0aW9uRGF0ZTogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBhY2Nlc3NSaXNrOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZHJ1Z1VzZUZsYWc6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBzdXBwb3J0SW5QbGFjZUZsYWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgd2VhcG9uSW52b2x2ZWRGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIG90aGVyV2VhcG9uOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIG90aGVyRHJ1ZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBhbGNvaG9sVXNlRmxhZzpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHZpY3RpbVN1cHBvcnRzOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgdmljdGltV2VhcG9uVXNlczpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHZpY3RpbURydWdVc2VzOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYWxsb3dDc29zYUNvbnRhY3RGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGxpdmVXaXRoT2ZmZW5kZXJGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICBcclxuIFxyXG59KTtcclxuXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuXHRcdHRoaXMudmljdGltRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgX2dldFZpY3RpbSgpIHtcclxuICAgIGlmICh0aGlzLnZpY3RpbUlkID09PSAwKSB7IFxyXG4gICAgICBcclxuICAgICAgcmV0dXJuOyBcclxuICAgIH07XHJcblx0XHRpZiAodGhpcy5lZGl0TW9kZSA9PSB0cnVlKSB7XHJcbiAgICBjb25zb2xlLmxvZygnZmluZCB2aWN0aW0gaWQgaW5zaWRlIGdldFZpY3RpbScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy52aWN0aW1JZCk7XHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5zdWIgPSB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgdGhpcy52aWN0aW1JZCA9IHBhcmFtc1sndmljdGltSWQnXTtcclxuICAgICAgY29uc29sZS5sb2coJ215IHRoaXMudmljdGltSWQnKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1JZCk7XHJcbiAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgICAgIHRoaXMudmljdGltU2VydmljZS5nZXRWaWN0aW0odGhpcy52aWN0aW1JZClcclxuICAgICAgLnN1YnNjcmliZSgodmljdGltOiBWaWN0aW0pID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygndmljdGltIGRhdGEgMScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHZpY3RpbSk7XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltID0gPFZpY3RpbT52aWN0aW07XHJcbiAgICAgXHJcbiAgICAgICAgdmFyIHN1cHBvcnRzRGF0YSA9W107XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltLnZpY3RpbVN1cHBvcnRzLmZvckVhY2goIHQ9PntzdXBwb3J0c0RhdGEucHVzaCh0LnZpY3RpbVN1cHBvcnRUeXBlSWQpOyB9ICApXHJcbiAgICAgICAgY29uc3QgdmljdGltU3VwcG9ydHNDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltU3VwcG9ydHMnKTtcclxuICAgICAgICB2aWN0aW1TdXBwb3J0c0NvbnRyb2wuc2V0VmFsdWUoc3VwcG9ydHNEYXRhKTtcclxuXHJcblxyXG4gICAgICAgIHZhciB3ZWFwb25Vc2VzRGF0YSA9W107XHJcbiAgICAgICAgdmFyIG90aGVyV2VhcG9uID0gXCJcIjtcclxuICAgICAgICB0aGlzLmVkaXRWaWN0aW0udmljdGltV2VhcG9uVXNlcy5mb3JFYWNoKCB0PT57XHJcbiAgICAgICAgICB3ZWFwb25Vc2VzRGF0YS5wdXNoKHQud2VhcG9uVHlwZUlkKTsgXHJcbiAgICAgICAgICBpZiAodC53ZWFwb25UeXBlSWQgPT0gXCJPVEhFUlwiKXtcclxuICAgICAgICAgICAgb3RoZXJXZWFwb24gPSB0Lm90aGVyV2VhcG9uO1xyXG4gICAgICAgICAgICB0aGlzLm90aGVyV2VhcG9uRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgfSAgKVxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgdmljdGltV2VhcG9uVXNlc0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1XZWFwb25Vc2VzJyk7XHJcbiAgICAgICAgdmljdGltV2VhcG9uVXNlc0NvbnRyb2wuc2V0VmFsdWUod2VhcG9uVXNlc0RhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBvdGhlcldlYXBvbkNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpO1xyXG4gICAgICAgIG90aGVyV2VhcG9uQ29udHJvbC5zZXRWYWx1ZShvdGhlcldlYXBvbik7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMud2VhcG9uVXNlc0RhdGEgPSB0aGlzLmVkaXRWaWN0aW0udmljdGltV2VhcG9uVXNlcztcclxuICAgICAgIFxyXG4gICAgICAgIHZhciBkcnVnVXNlRGF0YSA9W107XHJcbiAgICAgICAgdmFyIG90aGVyRHJ1ZyA9IFwiXCI7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdsb2FkIHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcycpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcyk7XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltLnZpY3RpbURydWdVc2VzLmZvckVhY2goIHQ9PntcclxuICBcclxuICAgICAgICAgIGlmICh0LmRydWdUeXBlSWQgPT09IG51bGwpe1xyXG4gICAgICAgICAgICBvdGhlckRydWcgPSB0Lm90aGVyRHJ1ZztcclxuICAgICAgICAgICAgdGhpcy5vdGhlckRydWdGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgdC5kcnVnVHlwZUlkID0nT1RIRVInO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRydWdVc2VEYXRhLnB1c2godC5kcnVnVHlwZUlkKTtcclxuICAgICAgICBcclxuICAgICAgICB9ICApXHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmVkaXRWaWN0aW0udmljdGltRHJ1Z1VzZXMgYWZ0ZXIgcHVzaCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGRydWdVc2VEYXRhKTtcclxuXHJcblxyXG4gICAgICAgIGlmIChkcnVnVXNlRGF0YSl7XHJcbiAgICAgICAgICBjb25zdCB2aWN0aW1EcnVnVXNlc0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1EcnVnVXNlcycpO1xyXG4gICAgICAgICAgdmljdGltRHJ1Z1VzZXNDb250cm9sLnNldFZhbHVlKGRydWdVc2VEYXRhKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgICBpZiAob3RoZXJEcnVnKXtcclxuICAgICAgICAgIGNvbnN0IG90aGVyRHJ1Z0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKTtcclxuICAgICAgICAgIG90aGVyRHJ1Z0NvbnRyb2wuc2V0VmFsdWUob3RoZXJEcnVnKTtcclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgICAvL2NvbnRhY3RcclxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0Q29udGFjdHModGhpcy52aWN0aW1JZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgY29udGFjdExpc3QgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY29udGFjdExpc3QnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coY29udGFjdExpc3QpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhY3RMaXN0ID0gY29udGFjdExpc3Q7IFxyXG4gICAgICAgICAgICB0aGlzLmNvbnRhY3REYXRhU291cmNlLmRhdGEgPSB0aGlzLmNvbnRhY3RMaXN0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vbm8gcGhvbmUgZmllbGRcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmVkaXRWaWN0aW0uZ3VhcmRpYW5Ob1Bob25lRmxhZyA9PT0gZmFsc2UgKXtcclxuICAgICAgICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHtndWFyZGlhbk5vUGhvbmVGbGFnOiBmYWxzZX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIHRoaXMuZWRpdFZpY3RpbS5hZHZvY2F0ZU5vUGhvbmVGbGFnID09PSBmYWxzZSApe1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2Fkdm9jYXRlTm9QaG9uZUZsYWc6IGZhbHNlfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcIkVycm9yIG9jY3VyZWQgd2hpbGUgcmV0cml2aW5nIFZpY3RpbSBJbmZvcm1hdGlvbi4gUGxlYXNlIHRyeSBhZ2Fpbi5cIik7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuO1xyXG5cdFx0fSBlbHNlIHtcclxuICAgICAgLy9uZXdcclxuXHJcbiAgIH1cclxuICB9XHJcbiAgXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgXHJcbiAgfVxyXG5cclxuICBvbkNsZWFyKCkge1xyXG4gICAgaWYgKHRoaXMuYWRkcmVzc0NvbXBvbmVudCkgdGhpcy5hZGRyZXNzQ29tcG9uZW50LnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBzaG93QWRkcmVzcyh2YWx1ZSl7XHJcblxyXG4gICAgaWYgKHZhbHVlLmNoZWNrZWQpe1xyXG5cclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRDdXJyZW50SG91c2luZyh0aGlzLm9mZmVuZGVySWQpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkcmVzc0lkID0gaXRlbS5ob3VzaW5nLmFkZHJlc3NJZDtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7YWRkcmVzc0lkOiB0aGlzLmFkZHJlc3NJZH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmFkZHJlc3NDb21wb25lbnQucmVzZXQoKTtcclxuICAgICAgdGhpcy5lZGl0VmljdGltLmFsbG93Q3Nvc2FDb250YWN0RmxhZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmFkZHJlc3NJZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgIFxyXG5cclxuICB9XHJcblxyXG4gIG9uQWRkcmVzc0NoYW5nZShhZGRyZXNzSWQpIHsgIFxyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2FkZHJlc3NJZDogYWRkcmVzc0lkfSlcclxuICAgIHRoaXMuYWRkcmVzc0lkID0gYWRkcmVzc0lkO1xyXG4gIH1cclxuICBvbkd1YXJkaWFuQWRkcmVzc0NoYW5nZShNeUd1YXJkaWFuQWRkcmVzc0lkKSB7ICAgIFxyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2d1YXJkaWFuQWRkcmVzc0lkOiBNeUd1YXJkaWFuQWRkcmVzc0lkfSlcclxuICAgIHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQgPSAgTXlHdWFyZGlhbkFkZHJlc3NJZDtcclxuICB9XHJcbiAgb25BZHZvY2F0ZUFkZHJlc3NDaGFuZ2UoTXlBZHZvY2F0ZUFkZHJlc3NJZCkgeyAgICBcclxuICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHthZHZvY2F0ZUFkZHJlc3NJZDogTXlBZHZvY2F0ZUFkZHJlc3NJZH0pXHJcbiAgICB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkID0gTXlBZHZvY2F0ZUFkZHJlc3NJZDtcclxuICB9XHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnJlc2V0KCk7XHJcbn1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ3Nob3cgb2ZmZW5kZXJJZCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5vZmZlbmRlcklkKTtcclxuICAgIGNvbnNvbGUubG9nKCdzaG93IHN0YWZmSWQnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuc3RhZmZJZCk7XHJcbiAgICBjb25zb2xlLmxvZygnc2hvdyBpc0ludGFrZScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5pc0ludGFrZSk7XHJcbiAgICAvL3RoaXMudmljdGltRGV0YWlsLmd1YXJkaWFuTm9QaG9uZUZsYWcgPSB0cnVlO1xyXG4gICAgLy90aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZyA9ICB0cnVlO1xyXG4gICAgLy90aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbk5vUGhvbmVGbGFnJykuc2V0VmFsdWUodHJ1ZSk7XHJcblxyXG4gICAgICAgLy9yZXF1aXJlZCBmaWVsZFxyXG4gICAgY29uc3QgcmVxdWlyZWRJbXBsZW1lbnRhdGlvbiA9IHtnZXQ6ZnVuY3Rpb24oKTpib29sZWFue2lmKHRoaXMuX3JlcXVpcmVkKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ7fVxyXG4gICAgaWYodGhpcy5uZ0NvbnRyb2wmJnRoaXMubmdDb250cm9sLmNvbnRyb2wmJnRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yXHJcbiAgICAgICl7Y29uc3QgZW1wdHlWYWx1ZUNvbnRyb2w9T2JqZWN0LmFzc2lnbih7fSxcclxuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sKTsoZW1wdHlWYWx1ZUNvbnRyb2wgYXMgYW55KS52YWx1ZT1udWxsO1xyXG4gICAgICAgIHJldHVybigncmVxdWlyZWQnaW4odGhpcy5uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IoZW1wdHlWYWx1ZUNvbnRyb2wpfHx7fSkpO31cclxuICAgICAgICByZXR1cm4gZmFsc2U7fSxzZXQ6ZnVuY3Rpb24odmFsdWU6Ym9vbGVhbil7dGhpcy5fcmVxdWlyZWQ9Y29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTt9LH07XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdElucHV0LnByb3RvdHlwZSwncmVxdWlyZWQnLHJlcXVpcmVkSW1wbGVtZW50YXRpb24sKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0U2VsZWN0LnByb3RvdHlwZSwncmVxdWlyZWQnLHJlcXVpcmVkSW1wbGVtZW50YXRpb24sKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0UmFkaW9Hcm91cC5wcm90b3R5cGUsJ3JlcXVpcmVkJyxyZXF1aXJlZEltcGxlbWVudGF0aW9uLCk7XHJcbiAgICAvL3JlcXVpcmVkIGZpZWxkIGVuZFxyXG5cclxuICAgIFxyXG5cclxuICAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwhPW51bGwpIHtcclxuICAgICAgIC8vIGVkaXQgcmVjb3JkXHJcbiAgICAgIHRoaXMuZWRpdE1vZGUgPSB0cnVlOyBcclxuICAgICAgdGhpcy5zaG93RGVsZXRlPSB0cnVlOyAgICAgXHJcbiAgICAgIHRoaXMudmljdGltSWQgPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuZ3VhcmRpYW5UYWJGbGFnID0gdGhpcy52aWN0aW1EZXRhaWwubWlub3JGbGFnO1xyXG5cclxuICAgICAgXHJcbiAgICAgIGlmICh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1BZHZvY2F0ZUZsYWc9PSdZUycpe1xyXG4gICAgICAgICAgICB0aGlzLmFkdm9jYXRlVGFiRmxhZyA9IHRydWU7XHJcbiAgICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5vdGhlcldlYXBvbkZsYWcgPT0gdHJ1ZSl7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJXZWFwb25Db250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKTtcclxuICAgICAgICBvdGhlcldlYXBvbkNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm90aGVyRHJ1Z0ZsYWcgPT0gdHJ1ZSl7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJEcnVnQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ290aGVyRHJ1ZycpO1xyXG4gICAgICAgIG90aGVyRHJ1Z0NvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgIH1cclxuICAgXHJcbiAgICAgIHRoaXMuY3BvRXhwaXJhdGlvbkRpdkZsYWcgID10aGlzLnZpY3RpbURldGFpbC5jcG9FeHBpcmF0aW9uRmxhZztcclxuICAgICAgdGhpcy5jb21tb25DaGlsZHJlbkRpdkZsYWcgPSB0aGlzLnZpY3RpbURldGFpbC5jb21tb25DaGlsZHJlbkZsYWc7XHJcbiAgICAgIHRoaXMuc3VwcG9ydEluUGxhY2VEaXZGbGFnPSAgdGhpcy52aWN0aW1EZXRhaWwuc3VwcG9ydEluUGxhY2VGbGFnO1xyXG4gICAgICB0aGlzLndlYXBvbkludm9sdmVkRGl2RmxhZz0gIHRoaXMudmljdGltRGV0YWlsLndlYXBvbkludm9sdmVkRmxhZztcclxuICAgICAgdGhpcy5kcnVnVXNlRGl2RmxhZz0gIHRoaXMudmljdGltRGV0YWlsLmRydWdVc2VGbGFnO1xyXG4gICAgICB0aGlzLmFkZHJlc3NJZCA9IHRoaXMudmljdGltRGV0YWlsLmFkZHJlc3NJZDtcclxuICAgICAgdGhpcy5ndWFyZGlhbkFkZHJlc3NJZCA9ICB0aGlzLnZpY3RpbURldGFpbC5ndWFyZGlhbkFkZHJlc3NJZDtcclxuICAgICAgdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA9ICB0aGlzLnZpY3RpbURldGFpbC5hZHZvY2F0ZUFkZHJlc3NJZDtcclxuICBcclxuICAgICAgdGhpcy5fZ2V0VmljdGltKCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9hZGQgbmV3IHJlY29yZFxyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7Z3VhcmRpYW5Ob1Bob25lRmxhZzogdHJ1ZX0pO1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7YWR2b2NhdGVOb1Bob25lRmxhZzogdHJ1ZX0pO1xyXG4gICBcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0RmxhZ09wdGlvblllc05vVW5rbm93bnMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5mbGFnT3B0aW9uID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0R2VuZGVycygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmdlbmRlcnMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRQcmVmaXhlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnByZWZpeGVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0U3VmZml4ZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdWZmaXhlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldFJlbGF0aW9uc2hpcFR5cGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVsYXRpb25zaGlwVHlwZXMgPSBpdGVtcy5maWx0ZXIoICh5KSA9PiAoeS5yZWxhdGlvbnNoaXBDYXRlZ29yeUlkID09PSAnU1QnIHx8IHkucmVsYXRpb25zaGlwQ2F0ZWdvcnlJZCA9PT0gJ0ZNJyApKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRTdXBwb3J0VHlwZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy52aWN0aW1TdXBwb3J0VHlwZXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRXZWFwb25UeXBlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLndlYXBvblR5cGVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0RHJ1Z3NUeXBlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZHJ1ZyBsb29rdXAgaXRlbXMnKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhpdGVtcyk7XHJcbiAgICAgICAgdGhpcy5kcnVncyA9IGl0ZW1zO1xyXG4gICAgICAgIHRoaXMuZHJ1Z3MucHVzaCh7ZHJ1Z1R5cGVJZDogJ09USEVSJywgbmFtZTogJ090aGVyJ30pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZHJ1Z3MpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgLy8gdGhpcy52aWN0aW1TZXJ2aWNlLmdldERvY2tldExpc3QodGhpcy5vZmZlbmRlcklkKS5zdWJzY3JpYmUoXHJcbiAgICAvLyAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy5kb2NrZXRsaXN0ID0gaXRlbXM7XHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyApO1xyXG5cclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLnZhbHVlQ2hhbmdlc1xyXG4gICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5GaXJzdE5hbWUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5MYXN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbldvcmtQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkhvbWVQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkNlbGxQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgIFxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnZhbHVlQ2hhbmdlc1xyXG4gICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVGaXJzdE5hbWUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZVdvcmtQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUhvbWVQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUNlbGxQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgIFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgYmFjaygpe1xyXG5cclxuICAgIC8vdGhpcy5vblNhdmUuZW1pdCh0aGlzLnZpY3RpbURldGFpbCk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3ZpY3RpbUxpc3QnXSk7XHJcbiAgICBcclxuICB9XHJcblxyXG4gIGRlbGV0ZVZpY3RpbSgpIHtcclxuICAgIHRoaXMuY29tbW9uRGlhbG9nU2VydmljZVxyXG4gICAgLmNvbmZpcm0oJycsICdEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBWaWN0aW0/JywgJ1llcycsICdObycpXHJcbiAgICAuc3Vic2NyaWJlKHJlcyA9PiB7dGhpcy5yZXN1bHQgPSAgcmVzO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZGVsZXRlVmljdGltcyh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZClcclxuICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0RlbGV0ZSBTdWNjZXNzZnVsbHkhJywgJycsIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLCB9KTt9XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW0nXSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy52aWN0aW1EZXRhaWwpO1xyXG4gICAgICAgIH1cclxuICAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICByYWRpb01pbm9yQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG4gICAvLyBjb25zdCBndWFyZGlhbkxhc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuTGFzdE5hbWUnKTtcclxuICAgIC8vY29uc3QgZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5GaXJzdE5hbWUnKTtcclxuXHJcbiAgXHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZ3VhcmRpYW5UYWJGbGFnID0gdHJ1ZTtcclxuICAgICAvLyBndWFyZGlhbkxhc3ROYW1lQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgIC8vIGd1YXJkaWFuRmlyc3ROYW1lQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAvL3RoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnID0gIHRydWU7XHJcbiAgIFxyXG4gICAgIFxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5ndWFyZGlhblRhYkZsYWcgPSBmYWxzZTtcclxuICAgICAvLyBndWFyZGlhbkxhc3ROYW1lQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAvLyBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgXHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cdFx0Ly9ndWFyZGlhbkxhc3ROYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgIC8vIGd1YXJkaWFuRmlyc3ROYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgIFxyXG4gIH1cclxuXHJcbiAgcmFkaW9BZHZvY2F0ZUNoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuXHJcbiAgICBjb25zdCBhZHZvY2F0ZUxhc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlTGFzdE5hbWUnKTtcclxuICAgIGNvbnN0IGFkdm9jYXRlRmlyc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlRmlyc3ROYW1lJyk7XHJcbiAgICAvLyBjb25zdCBhZHZvY2F0ZU5vUGhvbmVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVOb1Bob25lRmxhZycpO1xyXG4gICAgXHJcbiAgXHJcblxyXG4gICAgaWYgKCRldmVudC52YWx1ZSA9PT0gXCJZU1wiKSB7XHJcbiAgICAgIHRoaXMuYWR2b2NhdGVUYWJGbGFnID0gdHJ1ZTtcclxuICAgICAgYWR2b2NhdGVMYXN0TmFtZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgYWR2b2NhdGVGaXJzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIFxyXG4gICAgICBcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuYWR2b2NhdGVUYWJGbGFnID0gZmFsc2U7XHJcbiAgICBcclxuICAgICAgYWR2b2NhdGVMYXN0TmFtZUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgIGFkdm9jYXRlRmlyc3ROYW1lQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWR2b2NhdGVMYXN0TmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgYWR2b2NhdGVGaXJzdE5hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgcmFkaW9DaWNDaGFuZ2UoJGV2ZW50OiBNYXRSYWRpb0NoYW5nZSl7XHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY29tbW9uQ2hpbGRyZW5EaXZGbGFnID0gdHJ1ZTtcclxuICAgICAgLy8gcmVxdXJpZSBmaWVsZFxyXG4gICAgICB0aGlzLnNldFZhbGlkYXRvcnMoJ2NvbW1vbkNoaWxkcmVuJyk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmNvbW1vbkNoaWxkcmVuRGl2RmxhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VmFsaWRhdG9ycyh0eXBlKSB7XHJcbiAgICBpZih0eXBlID09ICdjb21tb25DaGlsZHJlbicpe1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnY29tbW9uQ2hpbGRyZW5OdW1iZXInKS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2NvbW1vbkNoaWxkcmVuTnVtYmVyJykuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgfVxyXG4gICBlbHNlIGlmICh0eXBlID09ICdjcG8nKXtcclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Nwb0V4cGlyYXRpb25EYXRlJykuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdjcG9FeHBpcmF0aW9uRGF0ZScpLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICB9XHJcbiAgfVxyXG4gIHJhZGlvU3VwcG9ydENoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5zdXBwb3J0SW5QbGFjZURpdkZsYWcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5zdXBwb3J0SW5QbGFjZURpdkZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmFkaW9XZWFwb25DaGFuZ2UoJGV2ZW50OiBNYXRSYWRpb0NoYW5nZSl7XHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMud2VhcG9uSW52b2x2ZWREaXZGbGFnID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMud2VhcG9uSW52b2x2ZWREaXZGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJhZGlvRHJ1Z0NoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5kcnVnVXNlRGl2RmxhZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmRydWdVc2VEaXZGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYWRpb0Nwb0NoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5jcG9FeHBpcmF0aW9uRGl2RmxhZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9ycygnY3BvJyk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmNwb0V4cGlyYXRpb25EaXZGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVET0JDaGFuZ2UoJGV2ZW50ICl7XHJcbiAgIHZhciBhZ2VEaWZNcyA9IERhdGUubm93KCkgLSAgJGV2ZW50LnZhbHVlO1xyXG4gICB2YXIgYWdlRGF0ZSA9IG5ldyBEYXRlKGFnZURpZk1zKTsgXHJcbiAgICBpZiggTWF0aC5hYnMoYWdlRGF0ZS5nZXRVVENGdWxsWWVhcigpIC0gMTk3MCkgPD0gMTgpe1xyXG4gICAgIFxyXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVmljdGltIGlzIGEgTWlub3IuIFRoaXMgaW5mb3JtYXRpb24gaXMgYSBzZW5zaXRpdmUgYW5kIHNob3VsZCBub3QgYmUgZGlzY2xvc2VkIHRvIGFueSB1bmF1dGhvcml6ZWQgcGFydGllcy4gQ29udGFjdCB0aGUgbGVnYWwgZ3VhcmRpYW4uJywgJycsIHtcclxuICAgICAgICBkdXJhdGlvbjogNjAwMCx9KTtcclxuICAgICAgICBjb25zdCBtaW5vckNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKTtcclxuICAgICAgICBtaW5vckNvbnRyb2wuc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICAgIC8vICBjb25zdCBndWFyZGlhbkxhc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuTGFzdE5hbWUnKTtcclxuICAgICAgIC8vIGNvbnN0IGd1YXJkaWFuRmlyc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuRmlyc3ROYW1lJyk7XHJcbiAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmd1YXJkaWFuVGFiRmxhZyA9IHRydWU7XHJcbiAgICAgICAvLyBndWFyZGlhbkxhc3ROYW1lQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAvLyAgZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgIFxyXG4gICBcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGNoZWNrT3RoZXJXZWFwb24oV2VhcG9uVXNlKXtcclxuXHJcbiAgICBjb25zdCBvdGhlcldlYXBvbkNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpO1xyXG4gICAgIGlmIChXZWFwb25Vc2UuaW5jbHVkZXMoXCJPVEhFUlwiKSl7XHJcbiAgICAgdGhpcy5vdGhlcldlYXBvbkZsYWcgPSB0cnVlO1xyXG4gICAgIG90aGVyV2VhcG9uQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcblxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMub3RoZXJXZWFwb25GbGFnID0gZmFsc2U7XHJcbiAgICAgIG90aGVyV2VhcG9uQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIH1cclxuICAgb3RoZXJXZWFwb25Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrT3RoZXJEcnVnKERydWdVc2Upe1xyXG5cclxuICAgIGNvbnN0IG90aGVyRHJ1Z0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKTtcclxuICAgICBpZiAoRHJ1Z1VzZS5pbmNsdWRlcyhcIk9USEVSXCIpKXtcclxuICAgICB0aGlzLm90aGVyRHJ1Z0ZsYWcgPSB0cnVlO1xyXG4gICAgIG90aGVyRHJ1Z0NvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gIFxyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLm90aGVyRHJ1Z0ZsYWcgPSBmYWxzZTtcclxuICAgICAgb3RoZXJEcnVnQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIFxyXG5cclxuICAgIH1cclxuICAgb3RoZXJEcnVnQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG4gXHJcbiAgLy8jcmVnaW9uIFwic2F2ZSB2aWN0aW1cIlxyXG4gIHNhdmVWaWN0aW0oKSB7XHJcbiBcclxuXHJcbiAgLy9ndWFyZGlhbiBwaG9uZSBsb2dpY1xyXG4gIGlmICghdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcpXHJcbiAgIHtcclxuICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lKXtcclxuICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUgIT09IG51bGwpe1xyXG4gICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lICE9PSBcIlwiKXtcclxuICAgICAgICAgICAgIHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICAgICAgfVxyXG4gICAgIH1cclxuICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUpe1xyXG4gICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQ2VsbFBob25lICE9PSBudWxsKXtcclxuICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQ2VsbGhvbmUgIT09IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgXHJcbiAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnKTtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyk7XHJcbiBcclxuXHJcbiAgICBpZiAodGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnID09PSBmYWxzZSAmJiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZyA9PT0gZmFsc2UpXHJcbiAgICB7XHJcbiAgICAgXHJcbiAgICAgICAgICB0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25EaWFsb2dTZXJ2aWNlXHJcbiAgICAgICAgICAud2FybmluZygnJywgJ1BsZWFzZSBjaGVjayB0aGUgZ3VhcmRpYW4gcGhvbmUgZmllbGQuIFlvdSBoYXZlIHRvIGZpbGwgb25lIG9mIHRoZSB0aHJlZSBwaG9uZSBmaWxlZHMuJywgJ09rJylcclxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHt0aGlzLnJlc3VsdCA9ICByZXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyk7XHJcblxyXG4gICAgLy9hZHZvY2F0ZSBwaG9uZSBsb2dpY1xyXG4gICAgaWYgKCF0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZylcclxuICAgIHtcclxuICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSl7XHJcbiAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlSG9tZVBob25lICE9PSBcIlwiKXtcclxuICAgICAgICAgICAgICB0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lICE9PSB1bmRlZmluZWQpe1xyXG4gICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lICE9PSBudWxsKXtcclxuICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lICE9PSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnID0gIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSl7XHJcbiAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUgIT09IG51bGwpe1xyXG4gICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZycpO1xyXG4gY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWcpO1xyXG4gY29uc29sZS5sb2coJ3RoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZycpO1xyXG4gY29uc29sZS5sb2codGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnKTtcclxuXHJcbiBpZih0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcgPT09IGZhbHNlICYmIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnID09PSBmYWxzZSlcclxuIHtcclxuICBcclxuICAgICAgIHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyA9IHRydWU7XHJcbiAgICAgICB0aGlzLmNvbW1vbkRpYWxvZ1NlcnZpY2VcclxuICAgICAgIC53YXJuaW5nKCcnLCAnUGxlYXNlIGNoZWNrIHRoZSBhZHZvY2F0ZSBwaG9uZSBmaWVsZC4gWW91IGhhdmUgdG8gZmlsbCBvbmUgb2YgdGhlIHRocmVlIHBob25lIGZpbGVkcy4nLCAnT2snKVxyXG4gICAgICAgLnN1YnNjcmliZShyZXMgPT4ge3RoaXMucmVzdWx0ID0gIHJlcztcclxuICAgICAgICAgXHJcbiAgICAgICB9KTtcclxuIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmUpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuaG9tZVBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmhvbWVQaG9uZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJyk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuaG9tZVBob25lID0gIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS53b3JrUGhvbmUpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndvcmtQaG9uZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJykgO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndvcmtQaG9uZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNlbGxQaG9uZSl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5jZWxsUGhvbmUgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNlbGxQaG9uZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJyk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY2VsbFBob25lPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdFBob25lKXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmUucmVwbGFjZSgvWygpXFxzLV0vZywgJycpO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RQaG9uZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlSG9tZVBob25lLnJlcGxhY2UoL1soKVxccy1dL2csICcnKVxyXG4gICAgIH1cclxuICAgICBlbHNle1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUgPSBudWxsO1xyXG4gICAgIH1cclxuXHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVXb3JrUGhvbmUucmVwbGFjZSgvWygpXFxzLV0vZywgJycpXHJcbiAgICAgfVxyXG4gICAgIGVsc2V7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSA9bnVsbDtcclxuICAgICB9XHJcblxyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUucmVwbGFjZSgvWygpXFxzLV0vZywgJycpXHJcbiAgICAgfWVsc2V7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSA9ICBudWxsO1xyXG4gICAgIH1cclxuXHJcblxyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lLnJlcGxhY2UoL1soKVxccy1dL2csICcnKVxyXG4gICAgIH1cclxuICAgICBlbHNle1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUgPSBudWxsO1xyXG4gICAgIH1cclxuXHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Xb3JrUGhvbmUucmVwbGFjZSgvWygpXFxzLV0vZywgJycpXHJcbiAgICAgfVxyXG4gICAgIGVsc2V7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSA9bnVsbDtcclxuICAgICB9XHJcblxyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUucmVwbGFjZSgvWygpXFxzLV0vZywgJycpXHJcbiAgICAgfWVsc2V7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSA9ICBudWxsO1xyXG4gICAgIH1cclxuLy9kYXRhIHByb2Nlc3MgXHJcblxyXG4gIGNvbnNvbGUubG9nKCd0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgMScpO1xyXG4gIGNvbnNvbGUubG9nKHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyk7XHJcbiBpZiAoIHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyA9PT0gZmFsc2Upe1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwgPT09IG51bGwpe1xyXG4gICAgICAvL2luc2VydCBuZXcgdmljdGltXHJcbiBcclxuICAgICB2YXIgbXlWaWN0aW1TdXBwb3J0cyA9IFtdO1xyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltU3VwcG9ydHMpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltU3VwcG9ydHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgY29uc3QgdmljdGltU3VwcG9ydD0gPFZpY3RpbVN1cHBvcnQ+e307XHJcbiAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltSWQ9IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1JZDtcclxuICAgICAgICAgICAgdmljdGltU3VwcG9ydC52aWN0aW1TdXBwb3J0VHlwZUlkPSBlbGVtZW50O1xyXG4gICAgICAgICAgICB2aWN0aW1TdXBwb3J0Lm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgICAgICAgbXlWaWN0aW1TdXBwb3J0cy5wdXNoKHZpY3RpbVN1cHBvcnQpO1xyXG4gICAgICAgICB9KTtcclxuICAgICB9XHJcblxyXG4gICAgdmFyIG15VmljdGltRHJ1Z1VzZXMgPSBbXTtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMgZHVyaW5nIHNhdmUnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyk7XHJcbiAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzKXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgY29uc3QgdmljdGltRHJ1Z1VzZSA9IDxWaWN0aW1EcnVnVXNlPnt9O1xyXG4gICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcblxyXG4gICAgIGlmIChlbGVtZW50ID09PVwiT1RIRVJcIiB8fCBlbGVtZW50ID09PSBcIlwiIHx8IGVsZW1lbnQgPT09IG51bGwpe1xyXG4gICAgICB2aWN0aW1EcnVnVXNlLmRydWdUeXBlSWQgPSBudWxsO1xyXG4gICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlckRydWc7XHJcbiAgICAgfVxyXG4gICAgIGVsc2V7XHJcbiAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcbiAgICAgIHZpY3RpbURydWdVc2Uub3RoZXJEcnVnID0gbnVsbDsgXHJcbiAgICAgfVxyXG4gICAgIFxyXG4gICAgIHZpY3RpbURydWdVc2UubW9kaWZpZWRCeSA9IHRoaXMuc3RhZmZJZDtcclxuICAgICB2aWN0aW1EcnVnVXNlLnZpY3RpbUlkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUlkO1xyXG4gICAgIG15VmljdGltRHJ1Z1VzZXMucHVzaCh2aWN0aW1EcnVnVXNlKTtcclxuICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGR1cmluZyBzYXZlIDEnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyk7XHJcblxyXG5cclxuXHJcbiAgdmFyIG15VmljdGltV2VhcG9uVXNlcyA9IFtdO1xyXG5cclxuICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVdlYXBvblVzZXMpe1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVdlYXBvblVzZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgIGNvbnN0IHZpY3RpbVdlYXBvblVzZSA9IDxWaWN0aW1XZWFwb25Vc2U+e307XHJcbiAgICAgICB2aWN0aW1XZWFwb25Vc2UudmljdGltSWQ9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltSWQ7XHJcbiAgICAgICB2aWN0aW1XZWFwb25Vc2Uud2VhcG9uVHlwZUlkPSBlbGVtZW50O1xyXG5cclxuICAgICAgIGlmIChlbGVtZW50ID09XCJPVEhFUlwiKXtcclxuICAgICAgICB2aWN0aW1XZWFwb25Vc2Uub3RoZXJXZWFwb24gPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUub3RoZXJXZWFwb247XHJcbiAgICAgICB9XHJcbiAgICAgICBlbHNle1xyXG4gICAgICAgIHZpY3RpbVdlYXBvblVzZS5vdGhlcldlYXBvbiA9IG51bGw7IFxyXG4gICAgICAgfVxyXG5cclxuICAgICAgIHZpY3RpbVdlYXBvblVzZS5tb2RpZmllZEJ5PSB0aGlzLnN0YWZmSWQ7XHJcbiAgICAgICBteVZpY3RpbVdlYXBvblVzZXMucHVzaCh2aWN0aW1XZWFwb25Vc2UpO1xyXG4gICB9KTtcclxuIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gY29uc3QgbmV3VmljdGltID0ge1xyXG4gICAgICAgICB2aWN0aW1JZDogMCxcclxuICAgICAgICAgb2ZmZW5kZXJJZDogdGhpcy5vZmZlbmRlcklkLFxyXG4gICAgICAgICB2aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZDp0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQsXHJcbiAgICAgICAgIGxhc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUubGFzdE5hbWUsXHJcbiAgICAgICAgIGZpcnN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmZpcnN0TmFtZSxcclxuICAgICAgICAgbWlkZGxlTmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pZGRsZU5hbWUgID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pZGRsZU5hbWUgOiBudWxsLFxyXG4gICAgICAgICBwcmVmaXhJZDp0aGlzLnZpY3RpbUZvcm0udmFsdWUucHJlZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUucHJlZml4SWQgOiBudWxsICxcclxuICAgICAgICAgc3VmZml4SWQ6dGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1ZmZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1ZmZpeElkOiBudWxsLFxyXG4gICAgICAgICBiaXJ0aERhdGU6dGhpcy52aWN0aW1Gb3JtLnZhbHVlLmJpcnRoRGF0ZT8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmJpcnRoRGF0ZSA6IG51bGwsXHJcbiAgICAgICAgIGdlbmRlckNvZGU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5nZW5kZXJDb2RlPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ2VuZGVyQ29kZTogbnVsbCxcclxuICAgICAgICAgdW5kZXJTdXBlcnZpc2lvbkZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS51bmRlclN1cGVydmlzaW9uRmxhZyxcclxuICAgICAgICAgbWlub3JGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUubWlub3JGbGFnLFxyXG4gICAgICAgICB2aWN0aW1BZHZvY2F0ZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1BZHZvY2F0ZUZsYWcsXHJcblxyXG4gICAgICAgICBob21lUGhvbmU6ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuaG9tZVBob25lLFxyXG4gICAgICAgICB3b3JrUGhvbmU6ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lLFxyXG4gICAgICAgICBjZWxsUGhvbmU6ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY2VsbFBob25lLFxyXG4gICAgICAgICBlbWFpbDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsOiBudWxsLFxyXG4gICAgICAgICBhZGRyZXNzSWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZGRyZXNzSWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWRkcmVzc0lkOiAxLFxyXG4gICAgICAgICBlbWVyZ2VuY3lDb250YWN0OiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdCAgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdCA6IG51bGwsXHJcbiAgICAgICAgIGVtZXJnZW5jeUNvbnRhY3RQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RQaG9uZSAsXHJcbiAgICAgICAgIGNvbW1vbkNoaWxkcmVuRmxhZzogIHRoaXMudmljdGltRm9ybS52YWx1ZS5jb21tb25DaGlsZHJlbkZsYWcsXHJcbiAgICAgICAgIGNvbW1vbkNoaWxkcmVuTnVtYmVyOiAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNvbW1vbkNoaWxkcmVuTnVtYmVyLFxyXG4gICAgICAgICBjcG9FeHBpcmF0aW9uRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNwb0V4cGlyYXRpb25GbGFnLFxyXG4gICAgICAgICBjcG9FeHBpcmF0aW9uRGF0ZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNwb0V4cGlyYXRpb25EYXRlID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN0YXJ0RGF0ZSwgJ3Nob3J0JykgOiBudWxsLFxyXG4gICAgICAgICBzdXBwb3J0SW5QbGFjZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5zdXBwb3J0SW5QbGFjZUZsYWcsXHJcbiAgICAgICAgIHdlYXBvbkludm9sdmVkRmxhZzogIHRoaXMudmljdGltRm9ybS52YWx1ZS53ZWFwb25JbnZvbHZlZEZsYWcsXHJcbiAgICAgICAgIGRydWdVc2VGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZHJ1Z1VzZUZsYWcsXHJcbiAgICAgICAgIGFsY29ob2xVc2VGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxjb2hvbFVzZUZsYWcsXHJcbiAgICAgICAgIGFjY2Vzc1Jpc2s6dGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFjY2Vzc1Jpc2ssXHJcbiAgICAgICAgIG1vZGlmaWVkQnk6dGhpcy5zdGFmZklkLFxyXG4gICAgICAgICB2VmljdGltQWR2b2NhdGU6IG51bGwsXHJcbiAgICAgICAgIHZWaWN0aW1HdWFyZGlhbjogbnVsbCxcclxuICAgICAgICAgdmljdGltRHJ1Z1VzZXM6IG15VmljdGltRHJ1Z1VzZXMsXHJcbiAgICAgICAgIHZpY3RpbVN1cHBvcnRzOiBteVZpY3RpbVN1cHBvcnRzLFxyXG4gICAgICAgICB2aWN0aW1XZWFwb25Vc2VzOiBteVZpY3RpbVdlYXBvblVzZXMsXHJcblxyXG4gICAgICAgICBhZHZvY2F0ZUZpcnN0TmFtZTogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVMYXN0TmFtZTogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVFbWFpbDogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVQcmVmaXhJZDogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVTdWZmaXhJZDogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVOb1Bob25lRmxhZzogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVIb21lUGhvbmU6IG51bGwsXHJcbiAgICAgICAgIGFkdm9jYXRlV29ya1Bob25lOiBudWxsLFxyXG4gICAgICAgICBhZHZvY2F0ZUNlbGxQaG9uZTogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVBZGRyZXNzSWQ6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuRmlyc3ROYW1lOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkxhc3ROYW1lOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkVtYWlsOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhblByZWZpeElkOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhblN1ZmZpeElkOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbk5vUGhvbmVGbGFnOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkhvbWVQaG9uZTogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5Xb3JrUGhvbmU6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuQ2VsbFBob25lOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkFkZHJlc3NJZDogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5CaXJ0aERhdGU6IG51bGwsXHJcbiAgICAgICAgIHJlbGF0aW9uc2hpcDogbnVsbCxcclxuICAgICAgICAgLy9yZWxhdGlvbnNoaXA6IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZD8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkIDogbnVsbCxcclxuICAgICAgICAgYWxsb3dDc29zYUNvbnRhY3RGbGFnOnRoaXMudmljdGltRm9ybS52YWx1ZS5hbGxvd0Nzb3NhQ29udGFjdEZsYWc/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hbGxvd0Nzb3NhQ29udGFjdEZsYWcgOiBudWxsLFxyXG4gICAgICAgICBsaXZlV2l0aE9mZmVuZGVyRmxhZzp0aGlzLnZpY3RpbUZvcm0udmFsdWUubGl2ZVdpdGhPZmZlbmRlckZsYWc/IHRoaXMudmljdGltRm9ybS52YWx1ZS5saXZlV2l0aE9mZmVuZGVyRmxhZyA6IG51bGwsXHJcbiAgICAgICAgIFxyXG5cclxuICAgICAgICAgfVxyXG5cclxuICAgICBpZiAodGhpcy5hZGRyZXNzSWQgPT0gMCl7XHJcbiAgICAgIG5ld1ZpY3RpbS5hZGRyZXNzSWQgPSBudWxsO1xyXG4gICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1ZpY3RpbS5hZGRyZXNzSWQgPSAgdGhpcy5hZGRyZXNzSWQ7XHJcbiAgICAgfVxyXG4gICAgIFxyXG4gICAgIG5ld1ZpY3RpbS5hZHZvY2F0ZUFkZHJlc3NJZCA9ICB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkO1xyXG4gICAgIG5ld1ZpY3RpbS5ndWFyZGlhbkFkZHJlc3NJZCA9ICB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkO1xyXG5cclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKCduZXdWaWN0aW0nKTtcclxuICAgICAgY29uc29sZS5sb2cobmV3VmljdGltKTtcclxuICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1zKG5ld1ZpY3RpbSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgIFxyXG4gICAgICAgICBjb25zdCBpZCA9IGl0ZW1zID8gaXRlbXMudmljdGltSWQgOiAnJztcclxuXHJcbiAgICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltQWR2b2NhdGVGbGFnID09IFwiWVNcIil7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2FkZCBhZHZvY2F0ZScpO1xyXG4gICAgICAgICAgY29uc3QgdmljdGltQWR2b2NhdGU6IFZpY3RpbUFkdm9jYXRlID0ge1xyXG4gICAgICAgICAgdmljdGltQWR2b2NhdGVJZDogaWQsXHJcbiAgICAgICAgICBsYXN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTGFzdE5hbWUsXHJcbiAgICAgICAgICBmaXJzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUZpcnN0TmFtZSxcclxuICAgICAgICAgIHByZWZpeElkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVQcmVmaXhJZCxcclxuICAgICAgICAgIHN1ZmZpeElkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVTdWZmaXhJZCxcclxuICAgICAgICAgIGFkZHJlc3NJZDogdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA/IHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQ6IG51bGwsXHJcbiAgICAgICAgICBub1Bob25lRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWcgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZzogbnVsbCxcclxuICAgICAgICAgIGhvbWVQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlSG9tZVBob25lLFxyXG4gICAgICAgICAgd29ya1Bob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVXb3JrUGhvbmUsXHJcbiAgICAgICAgICBjZWxsUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSxcclxuICAgICAgICAgIGVtYWlsOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVFbWFpbCxcclxuICAgICAgICAgIG1vZGlmaWVkQnk6IHRoaXMuc3RhZmZJZFxyXG4gICAgICAgICAgXHJcbiAgICBcclxuICAgICAgfTtcclxuICAgICAgIFxyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZS5wb3N0VmljdGltQWR2b2NhdGUoaWQsIHZpY3RpbUFkdm9jYXRlKS5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gXHJcbiAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5taW5vckZsYWcgPT0gdHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgY29uc3QgdmljdGltR3VhcmRpYW46IFZpY3RpbUd1YXJkaWFuID0ge1xyXG4gICAgICAgICAgdmljdGltR3VhcmRpYW5JZDogaWQsXHJcbiAgICAgICAgICBsYXN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTGFzdE5hbWUsXHJcbiAgICAgICAgICBmaXJzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkZpcnN0TmFtZSxcclxuICAgICAgICAgIHByZWZpeElkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5QcmVmaXhJZCwgXHJcbiAgICAgICAgICBzdWZmaXhJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuU3VmZml4SWQsXHJcbiAgICAgICAgICBiaXJ0aERhdGU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkJpcnRoRGF0ZSxcclxuICAgICAgICAgIGFkZHJlc3NJZDogdGhpcy5ndWFyZGlhbkFkZHJlc3NJZD8gdGhpcy5ndWFyZGlhbkFkZHJlc3NJZDogbnVsbCxcclxuICAgICAgICAgIG5vUGhvbmVGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZz8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWc6IG51bGwsXHJcbiAgICAgICAgICBob21lUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSxcclxuICAgICAgICAgIHdvcmtQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lLFxyXG4gICAgICAgICAgY2VsbFBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUsXHJcbiAgICAgICAgICBlbWFpbDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRW1haWwsXHJcbiAgICAgICAgICBtb2RpZmllZEJ5OiB0aGlzLnN0YWZmSWRcclxuICAgICAgICAgIFxyXG4gICAgICAgXHJcbiAgICAgICB9O1xyXG4gICAgICAgXHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1HdWFyZGlhbihpZCwgdmljdGltR3VhcmRpYW4pLnN1YnNjcmliZSgpO1xyXG4gICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdBZGQgVmljdGltIFN1Y2Nlc3NmdWxseSEnLCAnJywge1xyXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvL2luc2VydCBuZXdcclxuICAgICAgICBpZiAodGhpcy5pc0ludGFrZT09PXRydWUpe1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1Ib21lJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1MaXN0J10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL3RoaXMub25TYXZlLmVtaXQodGhpcy52aWN0aW1EZXRhaWwpO1xyXG4gICAgICBcclxuICAgICAgfVxyXG4gICAgICk7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vdXBkYXRlIHZpY3RpbVxyXG5cclxuICAgICAgXHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnVuZGVyU3VwZXJ2aXNpb25GbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnVuZGVyU3VwZXJ2aXNpb25GbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZCA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQ7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmxhc3ROYW1lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmxhc3ROYW1lO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5maXJzdE5hbWUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZmlyc3ROYW1lO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5taWRkbGVOYW1lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pZGRsZU5hbWU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnByZWZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnByZWZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnByZWZpeElkIDogbnVsbDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuc3VmZml4SWQgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VmZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VmZml4SWQgOiBudWxsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5iaXJ0aERhdGUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYmlydGhEYXRlO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5nZW5kZXJDb2RlID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmdlbmRlckNvZGU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLm1pbm9yRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5taW5vckZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmhvbWVQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLndvcmtQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS53b3JrUGhvbmU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNlbGxQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jZWxsUGhvbmU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmVtYWlsID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1BZHZvY2F0ZUZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltQWR2b2NhdGVGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5lbWVyZ2VuY3lDb250YWN0ID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3Q7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmVtZXJnZW5jeUNvbnRhY3RQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNvbW1vbkNoaWxkcmVuRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jb21tb25DaGlsZHJlbkZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNvbW1vbkNoaWxkcmVuTnVtYmVyID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNvbW1vbkNoaWxkcmVuTnVtYmVyO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5jcG9FeHBpcmF0aW9uRGF0ZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jcG9FeHBpcmF0aW9uRGF0ZTtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuY3BvRXhwaXJhdGlvbkZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY3BvRXhwaXJhdGlvbkZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnN1cHBvcnRJblBsYWNlRmxhZyA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VwcG9ydEluUGxhY2VGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC53ZWFwb25JbnZvbHZlZEZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndlYXBvbkludm9sdmVkRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuZHJ1Z1VzZUZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmRydWdVc2VGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5hbGNvaG9sVXNlRmxhZyA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxjb2hvbFVzZUZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFjY2Vzc1Jpc2sgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFjY2Vzc1Jpc2s7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFkZHJlc3NJZCA9IHRoaXMuYWRkcmVzc0lkO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5hbGxvd0Nzb3NhQ29udGFjdEZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxsb3dDc29zYUNvbnRhY3RGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5saXZlV2l0aE9mZmVuZGVyRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5saXZlV2l0aE9mZmVuZGVyRmxhZztcclxuICAgICBcclxuICAgIFxyXG4gICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltU3VwcG9ydHMgPSBbXTtcclxuICAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1TdXBwb3J0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZpY3RpbVN1cHBvcnQ9IDxWaWN0aW1TdXBwb3J0Pnt9O1xyXG4gICAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltSWQ9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xyXG4gICAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltU3VwcG9ydFR5cGVJZD0gZWxlbWVudDtcclxuICAgICAgICAgICAgICB2aWN0aW1TdXBwb3J0Lm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgICAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1TdXBwb3J0cy5wdXNoKHZpY3RpbVN1cHBvcnQpO1xyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltRHJ1Z1VzZXMgPSBbXTtcclxuXHJcbiAgICAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGNhbGN1bGF0ZScpXHJcbiAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpXHJcblxyXG4gICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgdmljdGltRHJ1Z1VzZSA9IDxWaWN0aW1EcnVnVXNlPnt9O1xyXG4gICAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcbiAgICAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGJlZm9yZScpXHJcbiAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpXHJcbiAgICAgICBcclxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gXCJPVEhFUlwiIHx8IGVsZW1lbnQgPT09IFwiXCIgICl7XHJcbiAgICAgICAgICB2aWN0aW1EcnVnVXNlLmRydWdUeXBlSWQgPSBudWxsO1xyXG4gICAgICAgICAgdmljdGltRHJ1Z1VzZS5vdGhlckRydWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUub3RoZXJEcnVnO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICB2aWN0aW1EcnVnVXNlLmRydWdUeXBlSWQgPSBlbGVtZW50O1xyXG4gICAgICAgICAgdmljdGltRHJ1Z1VzZS5vdGhlckRydWcgPSBudWxsO1xyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgIHZpY3RpbURydWdVc2UubW9kaWZpZWRCeSA9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgICB2aWN0aW1EcnVnVXNlLnZpY3RpbUlkID0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltRHJ1Z1VzZXMucHVzaCh2aWN0aW1EcnVnVXNlKTtcclxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGFmdGVyJylcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpXHJcbiAgICAgICAgXHJcbiAgICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMuZmlsdGVyKHdvcmQgPT4gKCAhKHdvcmQuZHJ1Z1R5cGVJZCA9PT0gbnVsbCAgJiYgd29yZC5vdGhlckRydWcgPT09IG51bGwpICAgICkpO1xyXG5cclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKCdhZGp1c3QgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzICcpXHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcylcclxuIFxyXG4gICAgIHRoaXMudmljdGltRGV0YWlsLnZpY3RpbVdlYXBvblVzZXMgPSBbXTtcclxuICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltV2VhcG9uVXNlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdmljdGltV2VhcG9uVXNlID0gPFZpY3RpbVdlYXBvblVzZT57fTtcclxuICAgICAgICAgIHZpY3RpbVdlYXBvblVzZS52aWN0aW1JZD0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICAgICAgICB2aWN0aW1XZWFwb25Vc2Uud2VhcG9uVHlwZUlkPSBlbGVtZW50OyAgIFxyXG5cclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd3ZWFwb24gZWxlbWVudCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZWxlbWVudCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUub3RoZXJXZWFwb24pO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVdlYXBvblVzZXMpO1xyXG5cclxuICAgICAgICAgaWYgKGVsZW1lbnQgPT1cIk9USEVSXCIpe1xyXG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLm90aGVyV2VhcG9uPXRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlcldlYXBvbjtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBlbHNle1xyXG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLm90aGVyV2VhcG9uID0gbnVsbDtcclxuICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHZpY3RpbVdlYXBvblVzZS5tb2RpZmllZEJ5PSB0aGlzLnN0YWZmSWQ7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1XZWFwb25Vc2VzLnB1c2godmljdGltV2VhcG9uVXNlKTtcclxuICAgICAgICAgIFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICBcclxuICAgICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRGV0YWlsIGJlZm9yZSBlbWl0Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRGV0YWlsKTtcclxuICAgIFxyXG5cclxuICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnB1dFZpY3RpbXModGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQsdGhpcy52aWN0aW1EZXRhaWwpLnN1YnNjcmliZShcclxuICAgICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdVcGRhdGUgU3VjY2Vzc2Z1bGx5IScsICcnLCB7XHJcbiAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAvL0Fkdm9jYXRlIHNlY3Rpb25cclxuXHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLnZpY3RpbUFkdm9jYXRlSWQgPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUubGFzdE5hbWU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUxhc3ROYW1lO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5maXJzdE5hbWU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUZpcnN0TmFtZTtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUucHJlZml4SWQ9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVByZWZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlUHJlZml4SWQgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5zdWZmaXhJZD0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlU3VmZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVTdWZmaXhJZCA6IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLmFkZHJlc3NJZD0gdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA/IHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5ub1Bob25lRmxhZz0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWc/IHRydWU6IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5ob21lUGhvbmU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZTtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUud29ya1Bob25lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVXb3JrUGhvbmU7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLmNlbGxQaG9uZT0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlQ2VsbFBob25lO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5lbWFpbD0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlRW1haWwgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVFbWFpbCA6IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICBcclxuICAgICAgIGNvbnNvbGUubG9nKCd3b3JrIG9uIGFkdm9jYXRlIHBhcnQnKTtcclxuICAgICAgaWYgKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUFkdm9jYXRlRmxhZz09J1lTJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnd29yayBvbiBhZHZvY2F0ZSBmbGFnIGlzIFlTICcpO1xyXG4gICAgICAgICAgaWYodGhpcy52aWN0aW1EZXRhaWwuYWR2b2NhdGVGaXJzdE5hbWUgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjaGVjayBhZHZvY2F0ZSBmaXNydCBuYW1lICcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbURldGFpbC5hZHZvY2F0ZUZpcnN0TmFtZSk7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucHV0VmljdGltQWR2b2NhdGUodGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQsdGhpcy52aWN0aW1BZHZvY2F0ZSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgcmVzcD0+e30gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2FkZCBhZHZvY2F0ZScpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUFkdm9jYXRlKTtcclxuICAgICAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1BZHZvY2F0ZSh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCwgdGhpcy52aWN0aW1BZHZvY2F0ZSkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB9XHJcbiAgICAgXHJcbiAgICBcclxuICAgIC8vIGd1YXJkaWFuIHNlY3Rpb25cclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4udmljdGltR3VhcmRpYW5JZCA9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5sYXN0TmFtZSA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5MYXN0TmFtZTtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4uZmlyc3ROYW1lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRmlyc3ROYW1lO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5wcmVmaXhJZCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhblByZWZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuUHJlZml4SWQgOiBudWxsO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5zdWZmaXhJZCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhblN1ZmZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuU3VmZml4SWQgOiBudWxsO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5hZGRyZXNzSWQgPSB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkID8gdGhpcy5ndWFyZGlhbkFkZHJlc3NJZCA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLm5vUGhvbmVGbGFnID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnPyB0cnVlOiBmYWxzZTtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4uaG9tZVBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi53b3JrUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Xb3JrUGhvbmU7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmNlbGxQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZTtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4uZW1haWwgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5FbWFpbCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkVtYWlsIDogbnVsbDtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4ubW9kaWZpZWRCeSA9IHRoaXMuc3RhZmZJZDtcclxuICBcclxuICAgIGlmICh0aGlzLnZpY3RpbURldGFpbC5taW5vckZsYWcgPT0gdHJ1ZSlcclxuICAgIHtcclxuICAgICAgIGlmKHRoaXMudmljdGltRGV0YWlsLmd1YXJkaWFuRmlyc3ROYW1lICE9IG51bGwgKVxyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZS5wdXRWaWN0aW1HdWFyZGlhbih0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCx0aGlzLnZpY3RpbUd1YXJkaWFuKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcmVzcD0+e1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnYWRkIGd1cmRpYW4nKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltR3VhcmRpYW4pO1xyXG4gICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucG9zdFZpY3RpbUd1YXJkaWFuKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkLCB0aGlzLnZpY3RpbUd1YXJkaWFuKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgIH1cclxuICAgXHJcbiAgICBcclxuICAgIH1cclxuICAgIFxyXG4gICAgKTtcclxuICAgIFxyXG4gICAgfVxyXG4gIH0vL2VuZCBvZiB0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgPSBmYWxzZVxyXG4gICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRGV0YWlsJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbURldGFpbCk7XHJcbiAgICB0aGlzLm9uU2F2ZS5lbWl0KHRoaXMudmljdGltRGV0YWlsKTtcclxuIFxyXG4gICAgICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvbiBcInNhdmUgdmljdGltXCJcclxuICAgICAgYWRkQ29udGFjdCgpe1xyXG5cclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsndmljdGltQ29udGFjdCcsdGhpcy52aWN0aW1JZF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm1hdExhYmVsKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgXHJcbn1cclxuIiwiPG1hdC1jYXJkPlxyXG4gIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgICA8ZGl2ICBbZm9ybUdyb3VwXT1cInZpY3RpbUZvcm1cIj5cclxuXHJcbiAgICAgICAgICA8bWF0LXRhYi1ncm91cCBkeW5hbWljSGVpZ2h0ICBtYXQtc3RyZXRjaC10YWJzPlxyXG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlZpY3RpbSBEZXRhaWxcIiA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyJz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5JcyB2aWN0aW0gYSBtaW5vcj88Zm9udCBjb2xvcj1cInJlZFwiPiogPC9mb250PjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCAgZm9ybUNvbnRyb2xOYW1lPVwibWlub3JGbGFnXCIgIChjaGFuZ2UpPVwicmFkaW9NaW5vckNoYW5nZSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLm1pbm9yRmxhZ1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW3ZhbHVlXT1cImZhbHNlXCI+Tm88L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnbWlub3JGbGFnJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPklmIHZpY3RpbSBhIG1pbm9yIGZpZWxkIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Eb2VzIHRoZSBWaWN0aW0gaGF2ZSBhIFZpY3RpbSBBZHZvY2F0ZSBvciBTb2NpYWwgV29ya2VyIHdpdGggPGJyPndob20gQ1NPU0Egc2hvdWxkIG1haW50YWluIGNvbnRhY3Q/PGZvbnQgY29sb3I9XCJyZWRcIj4qIDwvZm9udD48L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgY2xhc3MgPSBcInRwLXJhZGlvLWdyb3VwXCIgIGZvcm1Db250cm9sTmFtZT1cInZpY3RpbUFkdm9jYXRlRmxhZ1wiICAoY2hhbmdlKT1cInJhZGlvQWR2b2NhdGVDaGFuZ2UoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS52aWN0aW1BZHZvY2F0ZUZsYWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmbGFnT3B0aW9uXCIgW3ZhbHVlXT1cIml0ZW0uZmxhZ09wdGlvblllc05vVW5rbm93bklkXCI+e3tpdGVtLm5hbWV9fSA8L21hdC1yYWRpby1idXR0b24+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPklmIHZpY3RpbSBoYXMgYWR2b2NhdGUgZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICBcclxuIFxyXG4gICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIEN1cnJlbnRseSBVbmRlciBTdXBlcnZpc2lvbjo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwidW5kZXJTdXBlcnZpc2lvbkZsYWdcIiBuYW1lPVwic3VwZXJ2aXNpb25cIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0udW5kZXJTdXBlcnZpc2lvbkZsYWdcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmbGFnT3B0aW9uXCIgW3ZhbHVlXT1cIml0ZW0uZmxhZ09wdGlvblllc05vVW5rbm93bklkXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ3VuZGVyU3VwZXJ2aXNpb25GbGFnJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgndW5kZXJTdXBlcnZpc2lvbkZsYWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndW5kZXJTdXBlcnZpc2lvbkZsYWcnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+dW5kZXIgc3VwZXJ2aXNpb24gZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5SZWxhdGlvbnNoaXAgdG8gT2ZmZW5kZXI6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWRcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0udmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWRcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmVsYXRpb25zaGlwVHlwZXNcIiBbdmFsdWVdPVwiaXRlbS5yZWxhdGlvbnNoaXBUeXBlSWRcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ3ZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+cmVsYXRpb25zaGlwIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIExhc3QgTmFtZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImxhc3ROYW1lXCIgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5sYXN0TmFtZVwiID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+dmljdGltIGxhc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBGaXJzdCBOYW1lOiA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZmlyc3ROYW1lXCIgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdmaXJzdE5hbWUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZmlyc3ROYW1lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2ZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+dmljdGltIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBNaWRkbGUgTmFtZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIGZvcm1Db250cm9sTmFtZT1cIm1pZGRsZU5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0ubWlkZGxlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gUHJlZml4OjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBmb3JtQ29udHJvbE5hbWU9XCJwcmVmaXhJZFwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5wcmVmaXhJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJlZml4ZXNcIiBbdmFsdWVdPVwiaXRlbS5wcmVmaXhJZFwiPnt7aXRlbS5uYW1lfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIFN1ZmZpeDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwic3VmZml4SWRcIiAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLnN1ZmZpeElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWZmaXhlc1wiIFt2YWx1ZV09XCJpdGVtLnN1ZmZpeElkXCI+e3tpdGVtLm5hbWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBHZW5kZXI6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBmb3JtQ29udHJvbE5hbWU9XCJnZW5kZXJDb2RlXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmdlbmRlckNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZW5kZXJzXCIgW3ZhbHVlXT1cIml0ZW0uZ2VuZGVyQ29kZVwiPnt7aXRlbS5uYW1lfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RGF0ZSBvZiBCaXJ0aDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBcclxuICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInZpY3RpbUJpcnRoUmVmXCIgXHJcbiAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJiaXJ0aERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYmlydGhEYXRlXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpY3RpbUJpcnRoUmVmLm9wZW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImhhbmRsZURPQkNoYW5nZSgkZXZlbnQpXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBbZm9yXT1cInZpY3RpbUJpcnRoUmVmXCIgbWF0U3VmZml4PjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3ZpY3RpbUJpcnRoUmVmPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gSG9tZSBQaG9uZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaG9tZVBob25lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmhvbWVQaG9uZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGFwcFBob25lTWFza1xyXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjE0XCIvPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnaG9tZVBob25lJykuZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnaG9tZVBob25lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2hvbWVQaG9uZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5Ib21lIHBob25lIG51bWJlciBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBDZWxsIFBob25lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0ICBcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2VsbFBob25lXCJcclxuICAgICAgICAgICAgICAgICAgYXBwUGhvbmVNYXNrXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5jZWxsUGhvbmVcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2NlbGxQaG9uZScpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdjZWxsUGhvbmUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnY2VsbFBob25lJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5DZWxsIHBob25lIG51bWJlciBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBXb3JrIFBob25lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3b3JrUGhvbmVcIiAgXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS53b3JrUGhvbmVcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQaG9uZU1hc2tcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ3dvcmtQaG9uZScpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd3b3JrUGhvbmUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnd29ya1Bob25lJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPldvcmsgcGhvbmUgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIEVtYWlsOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5lbWFpbFwiID5cclxuICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZW1haWwnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZW1haWwnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnZW1haWwnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+dmljdGltIGVtYWlsIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPCEtLSA8YXBwLXNtYXJ0LWFkZHJlc3MgXHJcbiAgICAgICAgICAgICAgICBbc2hvd1BzYV09XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICBbbW9kaWZpZWRCeV09XCJzdGFmZklkXCIgXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiYWRkcmVzc0lkXCJcclxuICAgICAgICAgICAgICAgIChhZGRyZXNzSWRDaGFuZ2UpPVwib25BZGRyZXNzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW291dGxpbmVdPVwidHJ1ZVwiIFxyXG4gICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBbcm93SGVpZ2h0XT1cIjgwXCIgXHJcbiAgICAgICAgICAgICAgICAoaXNWYWxpZCk9XCJmYWxzZVwiIFxyXG4gICAgICAgICAgICAgICAgW2FkZHJlc3NWYWxpZGF0b3JzXT1cImFkZHJlc3NWYWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAgICNhZGRyZXNzQ29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICA+IC0tPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8YXBwLXNtYXJ0LWFkZHJlc3NcclxuICAgICAgICAgICAgICAgIFttb2RpZmllZEJ5XT1cInN0YWZmSWRcIlxyXG4gICAgICAgICAgICAgICAgW2lkXT1cImFkZHJlc3NJZFwiXHJcbiAgICAgICAgICAgICAgICBbb3V0bGluZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzaG93UHNhXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2FkZHJlc3NWYWxpZGF0b3JzXT1cImFkZHJlc3NWYWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAoYWRkcmVzc0lkQ2hhbmdlKT1cIm9uQWRkcmVzc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICNhZGRyZXNzQ29tcG9uZW50XHJcbiAgICAgICAgICAgICAgPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXNtYXJ0LWFkZHJlc3M+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gRG9ja2V0OiBcclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICAqbmdGb3I9XCJsZXQgZG9ja2V0IG9mIGRvY2tldGxpc3Q7IGxldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94ID57e2RvY2tldC5kb2NrZXROdW1iZXJ9fTwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggIGNvbG9yPVwicHJpbWFyeVwiIGZvcm1Db250cm9sTmFtZT1cImxpdmVXaXRoT2ZmZW5kZXJGbGFnXCIgbmFtZT1cImxpdmVXaXRoT2ZmZW5kZXJGbGFnXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmxpdmVXaXRoT2ZmZW5kZXJGbGFnXCIgICAoY2hhbmdlKT1cInNob3dBZGRyZXNzKCRldmVudClcIiAgPnZpY3RpbSBsaXZlIHdpdGggb2ZmZW5kZXI8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94ICBjb2xvcj1cInByaW1hcnlcIiBmb3JtQ29udHJvbE5hbWU9XCJhbGxvd0Nzb3NhQ29udGFjdEZsYWdcIiBuYW1lPVwiYWxsb3dDc29zYUNvbnRhY3RGbGFnXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFsbG93Q3Nvc2FDb250YWN0RmxhZ1wiPnZpY3RpbSB3YW50cyB0byBiZSBjb250YWN0ZWQgYnkgQ1NPU0E8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBDaGlsZHJlbiBpbiBDb21tb248L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGZvcm1Db250cm9sTmFtZT1cImNvbW1vbkNoaWxkcmVuRmxhZ1wiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5jb21tb25DaGlsZHJlbkZsYWdcIiAgKGNoYW5nZSk9XCJyYWRpb0NpY0NoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LXJhZGlvLWJ1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICAqbmdJZj1cImNvbW1vbkNoaWxkcmVuRGl2RmxhZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaWxkcmVuIG51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIGZvcm1Db250cm9sTmFtZT1cImNvbW1vbkNoaWxkcmVuTnVtYmVyXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmNvbW1vbkNoaWxkcmVuTnVtYmVyXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q1BPOiA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwiY3BvRXhwaXJhdGlvbkZsYWdcIiAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmNwb0V4cGlyYXRpb25GbGFnXCIgKGNoYW5nZSk9XCJyYWRpb0Nwb0NoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwb0V4cGlyYXRpb25EaXZGbGFnXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RXhwaXJhdGlvbiBEYXRlOiA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImNwb0RhdGVSZWZcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNwb0V4cGlyYXRpb25EYXRlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjcG9EYXRlUmVmLm9wZW4oKVwiICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmNwb0V4cGlyYXRpb25EYXRlXCIgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBbZm9yXT1cImNwb0RhdGVSZWZcIiBtYXRTdWZmaXg+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjY3BvRGF0ZVJlZj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIGhhcyBhIFN1cHBvcnQgU3lzdGVtIGluIFBsYWNlPyA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGZvcm1Db250cm9sTmFtZT1cInN1cHBvcnRJblBsYWNlRmxhZ1wiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5zdXBwb3J0SW5QbGFjZUZsYWdcIiAgKGNoYW5nZSk9XCJyYWRpb1N1cHBvcnRDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN1cHBvcnRJblBsYWNlRGl2RmxhZ1wiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5TdXBwb3J0IHR5cGU/IDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICNzdXBwb3J0U2VsIGZvcm1Db250cm9sTmFtZT1cInZpY3RpbVN1cHBvcnRzXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLnZpY3RpbVN1cHBvcnRzXCIgbXVsdGlwbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChtb3VzZWxlYXZlKT1cInN1cHBvcnRTZWwuY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB2aWN0aW1TdXBwb3J0VHlwZXNcIiBbdmFsdWVdPVwiaXRlbS52aWN0aW1TdXBwb3J0VHlwZUlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPldlYXBvbnMgSW52b2x2ZWQ/PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJ3ZWFwb25JbnZvbHZlZEZsYWdcIiAoY2hhbmdlKT1cInJhZGlvV2VhcG9uQ2hhbmdlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0ud2VhcG9uSW52b2x2ZWRGbGFnXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW3ZhbHVlXT1cInRydWVcIj5ZZXM8L21hdC1yYWRpby1idXR0b24+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2VhcG9uSW52b2x2ZWREaXZGbGFnXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5XZWFwb24gVHlwZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgICN3ZWFwb25TZWwgZm9ybUNvbnRyb2xOYW1lPVwidmljdGltV2VhcG9uVXNlc1wiIG11bHRpcGxlIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS52aWN0aW1XZWFwb25Vc2VzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGVja090aGVyV2VhcG9uKCRldmVudC52YWx1ZSlcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKG1vdXNlbGVhdmUpPVwid2VhcG9uU2VsLmNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB3ZWFwb25UeXBlc1wiIFt2YWx1ZV09XCJpdGVtLndlYXBvblR5cGVJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3RoZXJXZWFwb25GbGFnXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5PdGhlciBXZWFwb246KiA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBmb3JtQ29udHJvbE5hbWU9XCJvdGhlcldlYXBvblwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5PdGhlciB3ZWFwb24gaXMgcmVxdWlyZWQuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cclxuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5XYXMgT2ZmZW5kZXIgdW5kZXIgdGhlIGluZmx1ZW5jZSBvZiBhbGNvaG9sIGF0IHRoZSB0aW1lIG9mIHRoZSBvZmZlbnNlPzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGZvcm1Db250cm9sTmFtZT1cImFsY29ob2xVc2VGbGFnXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFsY29ob2xVc2VGbGFnXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LXJhZGlvLWJ1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW3ZhbHVlXT1cImZhbHNlXCI+Tm88L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPldhcyBPZmZlbmRlciB1bmRlciB0aGUgaW5mbHVlbmNlIG9mIGRydWdzIGF0IHRoZSB0aW1lIG9mIHRoZSBvZmZlbnNlPzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJkcnVnVXNlRmxhZ1wiIChjaGFuZ2UpPVwicmFkaW9EcnVnQ2hhbmdlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZHJ1Z1VzZUZsYWdcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcnVnVXNlRGl2RmxhZ1wiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5EcnVnOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICAjZHJ1Z1NlbCBmb3JtQ29udHJvbE5hbWU9XCJ2aWN0aW1EcnVnVXNlc1wiIG11bHRpcGxlICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGVja090aGVyRHJ1ZygkZXZlbnQudmFsdWUpXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAobW91c2VsZWF2ZSk9XCJkcnVnU2VsLmNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkcnVnc1wiIFt2YWx1ZV09XCJpdGVtLmRydWdUeXBlSWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ubmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvdGhlckRydWdGbGFnXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5PdGhlciBEcnVnOiogPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwib3RoZXJEcnVnXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ290aGVyRHJ1ZycpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPk90aGVyIGRydWcgaXMgcmVxdWlyZWQuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzIFJpc2s6IDEgdGhydSAxMCAoMTAgZ3JlYXRlc3Qgcmlzayk6ICZuYnNwOzxiPiB7e2VkaXRWaWN0aW0uYWNjZXNzUmlza319PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWNjZXNzUmlza1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRodW1iTGFiZWw9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImZvcm1hdExhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFjY2Vzc1Jpc2tcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbWF0LXNsaWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkPiAgXHJcblxyXG4gXHJcbiAgICAgICAgICAgICAgPGJyPjxicj48YnI+ICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICA8bWF0LXRhYiAgKm5nSWY9XCJndWFyZGlhblRhYkZsYWdcIiBsYWJlbD1cIkxlZ2FsIEd1YXJkaWFuXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbnRhaW5lcic+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIExhc3QgTmFtZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImd1YXJkaWFuTGFzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5MYXN0TmFtZVwiID4gXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5MYXN0TmFtZScpLmVycm9ycyBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkd1YXJkaWFuIGxhc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIEZpcnN0IE5hbWU6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5GaXJzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5GaXJzdE5hbWVcIiA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5GaXJzdE5hbWUnKS5lcnJvcnMgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5HdWFyZGlhbiBmaXJzdCBuYW1lIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIFByZWZpeDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgIGZvcm1Db250cm9sTmFtZT1cImd1YXJkaWFuUHJlZml4SWRcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5QcmVmaXhJZFwiID5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBwcmVmaXhlc1wiIFt2YWx1ZV09XCJpdGVtLnByZWZpeElkXCI+e3tpdGVtLm5hbWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R3VhcmRpYW4gU3VmZml4OjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5TdWZmaXhJZFwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5ndWFyZGlhblN1ZmZpeElkXCIgID5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWZmaXhlc1wiIFt2YWx1ZV09XCJpdGVtLnN1ZmZpeElkXCI+e3tpdGVtLm5hbWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIkNob29zZVwiIGZvcm1Db250cm9sTmFtZT1cImd1YXJkaWFuR2VuZGVyXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmd1YXJkaWFuR2VuZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZW5kZXJzXCIgW3ZhbHVlXT1cIml0ZW0uZ2VuZGVyQ29kZVwiPnt7aXRlbS5uYW1lfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAtLT5cclxuICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RGF0ZSBvZiBCaXJ0aDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJndWFyZGlhbkRhdGVSZWZcIiBcclxuICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5CaXJ0aERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5CaXJ0aERhdGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImd1YXJkaWFuRGF0ZVJlZi5vcGVuKClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBbZm9yXT1cImd1YXJkaWFuRGF0ZVJlZlwiIG1hdFN1ZmZpeD48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2d1YXJkaWFuRGF0ZVJlZj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFxyXG4gICAgICAgICAgICAgICAgICBjb2xvciA9IFwicHJpbWFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJndWFyZGlhbk5vUGhvbmVGbGFnXCIgXHJcbiAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgTm8gUGhvbmUgKElmIHRoZXJlIGlzIG5vIHBob25lLCB0aGUgcGhvbmUgZmllbGRzIGFyZSBubyBsb25nZXIgcmVxdWlyZWQpPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIEhvbWUgUGhvbmU6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5Ib21lUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5Ib21lUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBhcHBQaG9uZU1hc2tcclxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiID5cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Ib21lUGhvbmUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkhvbWVQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkhvbWVQaG9uZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkd1YXJkaWFuIGhvbWUgcGhvbmUgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5HdWFyZGlhbiBDZWxsIFBob25lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5DZWxsUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5DZWxsUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBhcHBQaG9uZU1hc2tcclxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiIFxyXG4gICAgICAgICAgICAgICAgICAgPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuQ2VsbFBob25lJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuQ2VsbFBob25lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuQ2VsbFBob25lJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+R3VhcmRpYW4gQ2VsbCBwaG9uZSBudW1iZXIgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R3VhcmRpYW4gV29yayBQaG9uZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImd1YXJkaWFuV29ya1Bob25lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmd1YXJkaWFuV29ya1Bob25lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgYXBwUGhvbmVNYXNrXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTRcIiA+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Xb3JrUGhvbmUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbldvcmtQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbldvcmtQaG9uZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkd1YXJkaWFuIHdvcmsgcGhvbmUgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIEVtYWlsOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJndWFyZGlhbkVtYWlsXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmd1YXJkaWFuRW1haWxcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5FbWFpbCcpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuRW1haWwnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5FbWFpbCcpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+R3VhcmRpYW4gZW1haWwgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxhcHAtc21hcnQtYWRkcmVzcyBcclxuXHJcbiAgICAgICAgICAgICAgICBbc2hvd1BzYV09XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICBbbW9kaWZpZWRCeV09XCJzdGFmZklkXCIgXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZ3VhcmRpYW5BZGRyZXNzSWRcIlxyXG4gICAgICAgICAgICAgICAgKGFkZHJlc3NJZENoYW5nZSk9XCJvbkd1YXJkaWFuQWRkcmVzc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtvdXRsaW5lXT1cInRydWVcIiBcclxuICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW3Jvd0hlaWdodF09XCI4MFwiIFxyXG4gICAgICAgICAgICAgICAgKGlzVmFsaWQpPVwiZmFsc2VcIiBcclxuICAgICAgICAgICAgICAgIFthZGRyZXNzVmFsaWRhdG9yc109XCJhZGRyZXNzVmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgICAjZ3VhcmRpYW5BZGRyZXNzQ29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1zbWFydC1hZGRyZXNzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGJyPjxicj48YnI+IFxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8IS0tYWR2b2NhdGUtLT5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPG1hdC10YWIgICpuZ0lmPVwiYWR2b2NhdGVUYWJGbGFnXCIgbGFiZWw9XCJBZHZvY2F0ZVwiID4gXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb250YWluZXInPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+QWR2b2NhdGUgTGFzdCBOYW1lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVMYXN0TmFtZVwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5hZHZvY2F0ZUxhc3ROYW1lXCIgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlTGFzdE5hbWUnKS5lcnJvcnMgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkFkdm9jYXRlIGxhc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5BZHZvY2F0ZSBGaXJzdCBOYW1lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVGaXJzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVGaXJzdE5hbWVcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVGaXJzdE5hbWUnKS5lcnJvcnMgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkFkdm9jYXRlIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIFByZWZpeDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVQcmVmaXhJZFwiICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVQcmVmaXhJZFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHByZWZpeGVzXCIgW3ZhbHVlXT1cIml0ZW0ucHJlZml4SWRcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIFN1ZmZpeDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVTdWZmaXhJZFwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5hZHZvY2F0ZVN1ZmZpeElkXCIgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1ZmZpeGVzXCIgW3ZhbHVlXT1cIml0ZW0uc3VmZml4SWRcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAgXHJcbiAgICAgICAgICAgICAgICAgIGNvbG9yID0gXCJwcmltYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkdm9jYXRlTm9QaG9uZUZsYWdcIiBcclxuICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFkdm9jYXRlTm9QaG9uZUZsYWdcIiA+XHJcbiAgICAgICAgICAgICAgICAgIE5vIFBob25lIChJZiB0aGVyZSBpcyBubyBwaG9uZSwgdGhlIHBob25lIGZpZWxkcyBhcmUgbm8gbG9uZ2VyIHJlcXVpcmVkKTwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkPiBcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+QWR2b2NhdGUgSG9tZSBQaG9uZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgICBcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZHZvY2F0ZUhvbWVQaG9uZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5hZHZvY2F0ZUhvbWVQaG9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXBwUGhvbmVNYXNrXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTRcIiA+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVIb21lUGhvbmUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUhvbWVQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUhvbWVQaG9uZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkFkdm9jYXRlIGhvbWUgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5BZHZvY2F0ZSBDZWxsIFBob25lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVDZWxsUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVDZWxsUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBhcHBQaG9uZU1hc2tcclxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlQ2VsbFBob25lJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVDZWxsUGhvbmUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVDZWxsUGhvbmUnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5BZHZvY2F0ZSBjZWxsIG51bWJlciBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gXHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIFdvcmsgUGhvbmU6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBcclxuICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVXb3JrUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFkdm9jYXRlV29ya1Bob25lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgIGFwcFBob25lTWFza1xyXG4gICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgID5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZVdvcmtQaG9uZScpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlV29ya1Bob25lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlV29ya1Bob25lJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+QWR2b2NhdGUgd29yayBudW1iZXIgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIEVtYWlsOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhZHZvY2F0ZUVtYWlsXCIgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5hZHZvY2F0ZUVtYWlsXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVFbWFpbCcpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlRW1haWwnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVFbWFpbCcpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkFkdm9jYXRlIGVtYWlsIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGRpdiA+XHJcbiAgICAgICAgICAgICAgPGFwcC1zbWFydC1hZGRyZXNzIFxyXG4gICAgICAgICAgICAgIFtzaG93UHNhXT1cInRydWVcIiBcclxuICAgICAgICAgICAgICBbbW9kaWZpZWRCeV09XCJzdGFmZklkXCIgXHJcbiAgICAgICAgICAgICAgW2lkXT1cImFkdm9jYXRlQWRkcmVzc0lkXCJcclxuICAgICAgICAgICAgICAoYWRkcmVzc0lkQ2hhbmdlKT1cIm9uQWR2b2NhdGVBZGRyZXNzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFtvdXRsaW5lXT1cInRydWVcIiBcclxuICAgICAgICAgICAgICByZWFkb25seT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICBbcm93SGVpZ2h0XT1cIjgwXCIgXHJcbiAgICAgICAgICAgICAgKGlzVmFsaWQpPVwiZmFsc2VcIiBcclxuICAgICAgICAgICAgICBbYWRkcmVzc1ZhbGlkYXRvcnNdPVwiYWRkcmVzc1ZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgICNhZHZvY2F0ZUFkZHJlc3NDb21wb25lbnQgPlxyXG4gICAgICAgICAgICAgIDwvYXBwLXNtYXJ0LWFkZHJlc3M+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGJyPjxicj48YnI+IFxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgPG1hdC10YWIgIGxhYmVsPVwiRW1lcmdlbmN5IENvbnRhY3RcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbnRhaW5lcic+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5FbWVyZ2VuY3kgQ29udGFjdCBOYW1lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBmb3JtQ29udHJvbE5hbWU9XCJlbWVyZ2VuY3lDb250YWN0XCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmVtZXJnZW5jeUNvbnRhY3RcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RW1lcmdlbmN5IFBob25lIE51bWJlcjo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtZXJnZW5jeUNvbnRhY3RQaG9uZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmVtZXJnZW5jeUNvbnRhY3RQaG9uZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwUGhvbmVNYXNrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZW1lcmdlbmN5Q29udGFjdFBob25lJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2VtZXJnZW5jeUNvbnRhY3RQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdlbWVyZ2VuY3lDb250YWN0UGhvbmUnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+RW1lcmdlbmN5IGNvbnRhY3QgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxicj48YnI+PGJyPiAgICBcclxuICAgICAgICAgICAgPC9tYXQtdGFiPiBcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz0nb3V0ZXInPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICBBbGwgYnV0dG9ucyBhcHBseSB0byBhbGwgdGFicy4gSWYgc2F2ZSBidXR0b24gaXMgZ3JleSwgcGxlYXNlIGNoZWNrIGVhY2ggdGFiIHRvIG1ha2Ugc3VyZSB0aGUgcmVxdWlyZWQgZmllbGQgaXMgZmlsbGVkLjxicj48YnI+XHJcblxyXG4gICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+SWYgdmljdGltIGEgbWlub3IgZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5JZiB2aWN0aW0gaGFzIGFkdm9jYXRlIGZpZWxkIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgndW5kZXJTdXBlcnZpc2lvbkZsYWcnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd1bmRlclN1cGVydmlzaW9uRmxhZycpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCd1bmRlclN1cGVydmlzaW9uRmxhZycpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5VbmRlciBzdXBlcnZpc2lvbiBmaWVsZCBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgPC9kaXY+IFxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ3ZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+UmVsYXRpb25zaGlwIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnbGFzdE5hbWUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5WaWN0aW0gbGFzdCBuYW1lIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZmlyc3ROYW1lJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZmlyc3ROYW1lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2ZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj52aWN0aW0gZmlyc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5GaXJzdE5hbWUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkd1YXJkaWFuIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuTGFzdE5hbWUnKS5lcnJvcnNcclxuICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5MYXN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkxhc3ROYW1lJykudG91Y2hlZClcIiA+XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5HdWFyZGlhbiBsYXN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgIDwvZGl2PiBcclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUxhc3ROYW1lJykuZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlTGFzdE5hbWUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpLnRvdWNoZWQpXCIgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkFkdm9jYXRlIGxhc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLmVycm9yc1xyXG4gICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+QWR2b2NhdGUgZmlyc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ290aGVyV2VhcG9uJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+T3RoZXIgd2VhcG9uIGZpZWxkIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWVycm9yPk90aGVyIGRydWcgZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2F2ZVZpY3RpbSgpXCIgW2Rpc2FibGVkXT1cIiF2aWN0aW1Gb3JtLnZhbGlkXCIgID5TYXZlIDwvYnV0dG9uPiBcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIGNsYXNzPVwiaW5uZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImRlbGV0ZVZpY3RpbSgpXCI+RGVsZXRlIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsgXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5DbGVhciA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsgXHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJiYWNrKClcIj5CYWNrPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJyPlxyXG4gICAgICAgIDxicj5cclxuXHJcbiAgICAgICAgPGRpdiBhbGlnbj1cInJpZ2h0XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICAoY2xpY2spPVwiYWRkQ29udGFjdCgpXCIgID5BZGQgdmljdGltIGNvbnRhY3Q8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2PlxyXG5cclxuICAgICAgICAgIDxtYXQtdGFibGUgI3RhYmxlIFtkYXRhU291cmNlXT1cImNvbnRhY3REYXRhU291cmNlXCIgY2xhc3M9XCJleGFtcGxlLXRhYmxlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29udGFjdERhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+Q29udGFjdCBEYXRlPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cuY29udGFjdERhdGUgfCBkYXRlfX0gPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ2aWN0aW1Db250YWN0TWV0aG9kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLWNlbGxcIj5Db250YWN0IE1ldGhvZDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy52aWN0aW1Db250YWN0TWV0aG9kfX0gPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm5leHRDb250YWN0RGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+TmV4dCBDb250YWN0IERhdGU8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cubmV4dENvbnRhY3REYXRlIHwgZGF0ZX19IDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdGFmZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+Q29udGFjdCBCeTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy5zdGFmZn19IDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNvbW1lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+Q29tbWVudDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+IHt7cm93LmNvbW1lbnR9fSA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjb250YWN0SWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPjwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIlsnY29udGFjdERhdGUnLCAndmljdGltQ29udGFjdE1ldGhvZCcsJ25leHRDb250YWN0RGF0ZScsICdzdGFmZicsICdjb21tZW50JywgJ2NvbnRhY3RJZCddXCIgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1yb3dcIj48L21hdC1oZWFkZXItcm93PlxyXG4gICAgICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczpbJ2NvbnRhY3REYXRlJywgJ3ZpY3RpbUNvbnRhY3RNZXRob2QnLCduZXh0Q29udGFjdERhdGUnLCAnc3RhZmYnLCAnY29tbWVudCcsICdjb250YWN0SWQnXTtcIiBjbGFzcz1cImV4YW1wbGUtcm93XCI+PC9tYXQtcm93PlxyXG4gICAgICAgICAgICA8L21hdC10YWJsZT5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gIDwvbWF0LWNhcmQtY29udGVudD5cclxuPC9tYXQtY2FyZD5cclxuIl19
1067
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ2Mtc21hcnQtdmljdGltL3NyYy9saWIvc21hcnQtdmljdGltLWRldGFpbC9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zbWFydC12aWN0aW0tZGV0YWlsL3NtYXJ0LXZpY3RpbS1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxXQUFXLEVBQWEsV0FBVyxFQUFDLFVBQVUsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFBa0IsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFjLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBQyxNQUFJLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBcUIscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcs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QUFDLENBQUMsSUFBSTtvQkFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVE7d0JBQ2hDLENBQUMsQ0FBQyxJQUFJO29CQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTO3dCQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUzt3QkFDakMsQ0FBQyxDQUFDLElBQUk7b0JBQ1IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVU7d0JBQzFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUNsQyxDQUFDLENBQUMsSUFBSTtvQkFDUixvQkFBb0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxvQkFBb0I7b0JBQ2hFLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTO29CQUMxQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7b0JBRTVELFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTO29CQUMxQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUztvQkFDMUMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVM7b0JBQzFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDdkUsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVM7d0JBQ3hDLENBQUMsQ0FBQyxJ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Q0FBQztJQUMxRCxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQWE7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs2SkFsdkNNLDBCQUEwQjtpSkFBMUIsMEJBQTBCLGtOQUYxQixDQUFDLG1CQUFtQixDQUFDLHFLQ3BFbEMsdXk4Q0EwMUJBOzJGRHB4QmEsMEJBQTBCO2tCQU50QyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQixDQUFDLG1CQUFtQixDQUFDO21TQUd2QixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ3dCLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25DaGFuZ2VzLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCxWYWxpZGF0b3JzLFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRSYWRpb0NoYW5nZSwgTWF0UmFkaW9Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcclxuaW1wb3J0IHsgVmljdGltLFZpY3RpbURydWdVc2UsIENvbnRhY3QsIFZpY3RpbUFkdm9jYXRlLFZpY3RpbUd1YXJkaWFuLFZpY3RpbVdlYXBvblVzZSxWaWN0aW1TdXBwb3J0IH0gZnJvbSAnLi4vc21hcnQtdmljdGltLm1vZGVsJztcclxuaW1wb3J0IHsgTmdjU21hcnRWaWN0aW1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdmljdGltLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29tbW9uRGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi9jb21tb24tZGlhbG9nL2NvbW1vbi1kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGVQaXBlLCBmb3JtYXREYXRlLCBMb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5fWZyb20nQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEFkZHJlc3NWYWxpZGF0b3JzLCBTbWFydEFkZHJlc3NDb21wb25lbnQgfSBmcm9tICdAY3NtYXJ0L25nYy1zbWFydC1hZGRyZXNzJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQm9vbGVhbkZuIHtcclxuICAoKTogYm9vbGVhbjtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0ZuIHtcclxuICAoKTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29uZGl0aW9uYWxWYWxpZGF0b3IocHJlZGljYXRlOiBCb29sZWFuRm4sXHJcbiAgdmFsaWRhdG9yOiBWYWxpZGF0b3JGbixcclxuICBlcnJvck5hbWVzcGFjZT86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxucmV0dXJuIChmb3JtQ29udHJvbCA9PiB7XHJcbmlmICghZm9ybUNvbnRyb2wucGFyZW50KSB7XHJcbnJldHVybiBudWxsO1xyXG59XHJcbmxldCBlcnJvciA9IG51bGw7XHJcbmlmIChwcmVkaWNhdGUoKSkge1xyXG5lcnJvciA9IHZhbGlkYXRvcihmb3JtQ29udHJvbCk7XHJcbn1cclxuaWYgKGVycm9yTmFtZXNwYWNlICYmIGVycm9yKSB7XHJcbmNvbnN0IGN1c3RvbUVycm9yID0ge307XHJcbmN1c3RvbUVycm9yW2Vycm9yTmFtZXNwYWNlXSA9IGVycm9yO1xyXG5lcnJvciA9IGN1c3RvbUVycm9yXHJcbn1cclxucmV0dXJuIGVycm9yO1xyXG59KVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKHByZWRpY2F0ZTogU3RyaW5nRm4sXHJcbiAgdmFsaWRhdG9yOiBWYWxpZGF0b3JGbixcclxuICBlcnJvck5hbWVzcGFjZT86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxucmV0dXJuIChmb3JtQ29udHJvbCA9PiB7XHJcbmlmICghZm9ybUNvbnRyb2wucGFyZW50KSB7XHJcbnJldHVybiBudWxsO1xyXG59XHJcbmxldCBlcnJvciA9IG51bGw7XHJcbmlmIChwcmVkaWNhdGUoKT09J1lTJykge1xyXG5lcnJvciA9IHZhbGlkYXRvcihmb3JtQ29udHJvbCk7XHJcbn1cclxuaWYgKGVycm9yTmFtZXNwYWNlICYmIGVycm9yKSB7XHJcbmNvbnN0IGN1c3RvbUVycm9yID0ge307XHJcbmN1c3RvbUVycm9yW2Vycm9yTmFtZXNwYWNlXSA9IGVycm9yO1xyXG5lcnJvciA9IGN1c3RvbUVycm9yXHJcbn1cclxucmV0dXJuIGVycm9yO1xyXG59KVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NzbWFydC12aWN0aW0tZGV0YWlsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbQ29tbW9uRGlhbG9nU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0VmljdGltRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHZpY3RpbURldGFpbCA9IDxWaWN0aW0+e307XHJcbiAgQElucHV0KCkgc3RhZmZJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG9mZmVuZGVySWQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBpc0ludGFrZTogYm9vbGVhbjtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZChcImFkZHJlc3NDb21wb25lbnRcIikgYWRkcmVzc0NvbXBvbmVudDogU21hcnRBZGRyZXNzQ29tcG9uZW50O1xyXG5cclxuXHJcbiAgdmljdGltSWQ6IG51bWJlcjtcclxuICB2aWN0aW1Gb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIGRydWdzOiBhbnk7XHJcbiAgdmljdGltU3VwcG9ydFR5cGVzOiBhbnk7XHJcbiAgcHJlZml4ZXM6IGFueTtcclxuICAvL3ZpY3RpbTogVmljdGltID0gPFZpY3RpbT57fTtcclxuICBzdWZmaXhlczogYW55O1xyXG4gIHJlbGF0aW9uc2hpcFR5cGVzOiBhbnk7XHJcbiAgZ2VuZGVyczogYW55O1xyXG4gIGRvY2tldGxpc3Q6IGFueTtcclxuICB3ZWFwb25UeXBlczogYW55O1xyXG4gIGZsYWdPcHRpb246IGFueTtcclxuICBzZWxlY3RlZFdlYXBvblR5cGVzOiBhbnk7XHJcbiAgc2VsZWN0ZWRWaWN0aW1TdXBwb3J0VHlwZXM6IGFueTtcclxuICBzZWxlY3RlZERydWdzOiBhbnk7XHJcbiAgaWQ6IGFueTtcclxuICBoaWRkZW46IGJvb2xlYW49dHJ1ZTtcclxuICBwcml2YXRlIHN1YjogYW55O1xyXG4gIHZpY3RpbUFkdm9jYXRlOiBWaWN0aW1BZHZvY2F0ZSA9ICA8VmljdGltQWR2b2NhdGU+e307XHJcbiAgdmljdGltR3VhcmRpYW46IFZpY3RpbUd1YXJkaWFuID0gPFZpY3RpbUd1YXJkaWFuPnt9O1xyXG4gIHZpY3RpbVdlYXBvblVzZTogVmljdGltV2VhcG9uVXNlO1xyXG4gIHZpY3RpbVN1cHBvcnQ6IFZpY3RpbVN1cHBvcnQ7XHJcbiAgdmljdGltRHJ1Z1VzZTogVmljdGltRHJ1Z1VzZTtcclxuICByZXN1bHQ6IGFueTtcclxuICBlZGl0TW9kZTogYW55O1xyXG4gIGd1YXJkaWFuVGFiRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFkdm9jYXRlVGFiRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbW1vbkNoaWxkcmVuRGl2RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNwb0V4cGlyYXRpb25EaXZGbGFnIDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN1cHBvcnRJblBsYWNlRGl2RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHdlYXBvbkludm9sdmVkRGl2RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRydWdVc2VEaXZGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0RlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFkZHJlc3NJZDogbnVtYmVyID0gMDtcclxuICBhZHZvY2F0ZUFkZHJlc3NJZDogbnVtYmVyID0gMDtcclxuICBndWFyZGlhbkFkZHJlc3NJZDogbnVtYmVyID0gMDtcclxuICBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICBlbWFpbFBhdHRlcm4gPSBcIl5bYS16MC05Ll8lKy1dK0BbYS16MC05Li1dK1xcLlthLXpdezIsNH0kXCI7XHJcbiAgcGhvbmVOdW1iZXIgPSBcIlxcXFxkezEwfVwiO1xyXG4gIGVkaXRWaWN0aW06IFZpY3RpbSA9IDxWaWN0aW0+e307XHJcbiAgdmljdGltQWdlOiBudW1iZXI7XHJcbiAgb3RoZXJXZWFwb25GbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb3RoZXJEcnVnRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb250YWN0RGF0YVNvdXJjZT0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xyXG4gIGNvbnRhY3RMaXN0OiBDb250YWN0W107XHJcbiAgZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZzogYm9vbGVhbiA9ICBmYWxzZTtcclxuICBhZHZvY2F0ZVBob25lRXhpc3RGbGFnOiBib29sZWFuID0gIGZhbHNlO1xyXG4gIHBob25lVmFsaWRhdGlvbkZsYWc6IGJvb2xlYW4gPSAgZmFsc2U7XHJcbiAgZ3VhcmlkYW5Ob1Bob25lQ2hrRmxhZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgYWR2b2NhdGVOb1Bob25lQ2hrRmxhZzogYm9vbGVhbiA9ICB0cnVlO1xyXG5cclxuICBhZGRyZXNzVmFsaWRhdG9yczogQWRkcmVzc1ZhbGlkYXRvcnMgPSB7XHJcbiAgICBzdHJlZXQ6IFtdLFxyXG4gICAgc3RyZWV0MjogW10sXHJcbiAgICBjaXR5OiBbXSxcclxuICAgIHN0YXRlQ29kZTogW10sXHJcbiAgICB6aXBDb2RlOiBbXSxcclxuICAgIHBzYUNvZGU6IFtdLFxyXG4gIH07XHJcblxyXG4gY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIGNvbW1vbkRpYWxvZ1NlcnZpY2U6IENvbW1vbkRpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHZpY3RpbVNlcnZpY2U6IE5nY1NtYXJ0VmljdGltU2VydmljZSkge1xyXG4gICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGluaXRGb3JtKCkge1xyXG5cclxuICAgIHRoaXMudmljdGltRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICB1bmRlclN1cGVydmlzaW9uRmxhZzogIG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgdmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQ6bmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxyXG4gICAgICBsYXN0TmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxyXG4gICAgICBmaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgbWlkZGxlTmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBwcmVmaXhJZDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBzdWZmaXhJZDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBnZW5kZXJDb2RlOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYmlydGhEYXRlOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGhvbWVQaG9uZTogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBjZWxsUGhvbmU6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgd29ya1Bob25lOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGVtYWlsOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5lbWFpbFBhdHRlcm4pIF0pKSxcclxuICAgICAgbWlub3JGbGFnOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgdmljdGltQWR2b2NhdGVGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXHJcbiAgICAgIGd1YXJkaWFuTGFzdE5hbWU6bmV3IEZvcm1Db250cm9sKCcnLCAgc3RyaW5nQ29uZGl0aW9uYWxWYWxpZGF0b3IoKCkgPT4gdGhpcy52aWN0aW1Gb3JtLmdldCgnbWlub3JGbGFnJykudmFsdWUsICBWYWxpZGF0b3JzLnJlcXVpcmVkLCAnaWxsdW1pbmF0aUVycm9yJykgKSxcclxuICAgICAgZ3VhcmRpYW5GaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKCgpID0+IHRoaXMudmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLnZhbHVlLCAgVmFsaWRhdG9ycy5yZXF1aXJlZCwgJ2lsbHVtaW5hdGlFcnJvcicpKSxcclxuICAgICAgZ3VhcmRpYW5QcmVmaXhJZDpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGd1YXJkaWFuU3VmZml4SWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgLy9ndWFyZGlhbkdlbmRlcjpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGd1YXJkaWFuQmlydGhEYXRlOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGd1YXJkaWFuTm9QaG9uZUZsYWc6bmV3IEZvcm1Db250cm9sKHRydWUpLFxyXG5cclxuICAgICAgZ3VhcmRpYW5Ib21lUGhvbmU6bmV3IEZvcm1Db250cm9sKCcnLCksXHJcbiAgICAgIGd1YXJkaWFuQ2VsbFBob25lOm5ldyBGb3JtQ29udHJvbCgnJywpLFxyXG4gICAgICBndWFyZGlhbldvcmtQaG9uZTpuZXcgRm9ybUNvbnRyb2woJycsKSxcclxuXHJcblxyXG4gICAgICBndWFyZGlhbkVtYWlsOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5lbWFpbFBhdHRlcm4pIF0pKSxcclxuICAgICAgYWR2b2NhdGVOb1Bob25lRmxhZzogbmV3IEZvcm1Db250cm9sKHRydWUpLFxyXG5cclxuXHJcbiAgICAgIGFkdm9jYXRlV29ya1Bob25lOm5ldyBGb3JtQ29udHJvbCgnJywpLFxyXG4gICAgICBhZHZvY2F0ZUhvbWVQaG9uZTpuZXcgRm9ybUNvbnRyb2woJycsKSxcclxuICAgICAgYWR2b2NhdGVDZWxsUGhvbmU6IG5ldyBGb3JtQ29udHJvbCgnJywpLFxyXG5cclxuXHJcbiAgICAgIGFkdm9jYXRlU3VmZml4SWQ6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBhZHZvY2F0ZVByZWZpeElkOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGFkdm9jYXRlRmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKCgpID0+IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnZhbHVlLCAgVmFsaWRhdG9ycy5yZXF1aXJlZCwgJ2lsbHVtaW5hdGlFcnJvcicpKSxcclxuICAgICAgYWR2b2NhdGVMYXN0TmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBzdHJpbmdDb25kaXRpb25hbFZhbGlkYXRvcigoKSA9PiB0aGlzLnZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS52YWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCwnaWxsdW1pbmF0aUVycm9yJykpLFxyXG4gICAgICBhZHZvY2F0ZUVtYWlsOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuZW1haWxQYXR0ZXJuKSBdKSksXHJcbiAgICAgIGVtZXJnZW5jeUNvbnRhY3Q6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZW1lcmdlbmN5Q29udGFjdFBob25lOm5ldyBGb3JtQ29udHJvbCgnJywpLFxyXG4gICAgICBlbWVyZ2VuY3lDaGlsZHJlbjogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lDcG86IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZW1lcmdlbmN5RHJ1ZzpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGVtZXJnZW5jeVN1cHBvcnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZW1lcmdlbmN5V2VhcG9uOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGRydWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgd2VhcG9uOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHN1cHBvcnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgY29tbW9uQ2hpbGRyZW5GbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGNvbW1vbkNoaWxkcmVuTnVtYmVyOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgY3BvRXhwaXJhdGlvbkZsYWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgY3BvRXhwaXJhdGlvbkRhdGU6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYWNjZXNzUmlzazpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGRydWdVc2VGbGFnOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgc3VwcG9ydEluUGxhY2VGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHdlYXBvbkludm9sdmVkRmxhZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBvdGhlcldlYXBvbjogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBvdGhlckRydWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYWxjb2hvbFVzZUZsYWc6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICB2aWN0aW1TdXBwb3J0czpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHZpY3RpbVdlYXBvblVzZXM6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICB2aWN0aW1EcnVnVXNlczpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGFsbG93Q3Nvc2FDb250YWN0RmxhZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBsaXZlV2l0aE9mZmVuZGVyRmxhZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG5cclxuXHJcbn0pO1xyXG5cclxuICAgIHRoaXMudmljdGltRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0dGhpcy52aWN0aW1Gb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xyXG5cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBfZ2V0VmljdGltKCkge1xyXG4gICAgaWYgKHRoaXMudmljdGltSWQgPT09IDApIHtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH07XHJcblx0XHRpZiAodGhpcy5lZGl0TW9kZSA9PSB0cnVlKSB7XHJcbiAgICBjb25zb2xlLmxvZygnZmluZCB2aWN0aW0gaWQgaW5zaWRlIGdldFZpY3RpbScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy52aWN0aW1JZCk7XHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5zdWIgPSB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgdGhpcy52aWN0aW1JZCA9IHBhcmFtc1sndmljdGltSWQnXTtcclxuICAgICAgY29uc29sZS5sb2coJ215IHRoaXMudmljdGltSWQnKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1JZCk7XHJcbiAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgICAgIHRoaXMudmljdGltU2VydmljZS5nZXRWaWN0aW0odGhpcy52aWN0aW1JZClcclxuICAgICAgLnN1YnNjcmliZSgodmljdGltOiBWaWN0aW0pID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygndmljdGltIGRhdGEgMScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHZpY3RpbSk7XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltID0gPFZpY3RpbT52aWN0aW07XHJcblxyXG4gICAgICAgIHZhciBzdXBwb3J0c0RhdGEgPVtdO1xyXG4gICAgICAgIHRoaXMuZWRpdFZpY3RpbS52aWN0aW1TdXBwb3J0cy5mb3JFYWNoKCB0PT57c3VwcG9ydHNEYXRhLnB1c2godC52aWN0aW1TdXBwb3J0VHlwZUlkKTsgfSAgKVxyXG4gICAgICAgIGNvbnN0IHZpY3RpbVN1cHBvcnRzQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbVN1cHBvcnRzJyk7XHJcbiAgICAgICAgdmljdGltU3VwcG9ydHNDb250cm9sLnNldFZhbHVlKHN1cHBvcnRzRGF0YSk7XHJcblxyXG5cclxuICAgICAgICB2YXIgd2VhcG9uVXNlc0RhdGEgPVtdO1xyXG4gICAgICAgIHZhciBvdGhlcldlYXBvbiA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltLnZpY3RpbVdlYXBvblVzZXMuZm9yRWFjaCggdD0+e1xyXG4gICAgICAgICAgd2VhcG9uVXNlc0RhdGEucHVzaCh0LndlYXBvblR5cGVJZCk7XHJcbiAgICAgICAgICBpZiAodC53ZWFwb25UeXBlSWQgPT0gXCJPVEhFUlwiKXtcclxuICAgICAgICAgICAgb3RoZXJXZWFwb24gPSB0Lm90aGVyV2VhcG9uO1xyXG4gICAgICAgICAgICB0aGlzLm90aGVyV2VhcG9uRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gIClcclxuXHJcblxyXG4gICAgICAgIGNvbnN0IHZpY3RpbVdlYXBvblVzZXNDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltV2VhcG9uVXNlcycpO1xyXG4gICAgICAgIHZpY3RpbVdlYXBvblVzZXNDb250cm9sLnNldFZhbHVlKHdlYXBvblVzZXNEYXRhKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb3RoZXJXZWFwb25Db250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKTtcclxuICAgICAgICBvdGhlcldlYXBvbkNvbnRyb2wuc2V0VmFsdWUob3RoZXJXZWFwb24pO1xyXG5cclxuXHJcbiAgICAgICAgLy90aGlzLndlYXBvblVzZXNEYXRhID0gdGhpcy5lZGl0VmljdGltLnZpY3RpbVdlYXBvblVzZXM7XHJcblxyXG4gICAgICAgIHZhciBkcnVnVXNlRGF0YSA9W107XHJcbiAgICAgICAgdmFyIG90aGVyRHJ1ZyA9IFwiXCI7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdsb2FkIHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcycpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcyk7XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltLnZpY3RpbURydWdVc2VzLmZvckVhY2goIHQ9PntcclxuXHJcbiAgICAgICAgICBpZiAodC5kcnVnVHlwZUlkID09PSBudWxsKXtcclxuICAgICAgICAgICAgb3RoZXJEcnVnID0gdC5vdGhlckRydWc7XHJcbiAgICAgICAgICAgIHRoaXMub3RoZXJEcnVnRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHQuZHJ1Z1R5cGVJZCA9J09USEVSJztcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkcnVnVXNlRGF0YS5wdXNoKHQuZHJ1Z1R5cGVJZCk7XHJcblxyXG4gICAgICAgIH0gIClcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcyBhZnRlciBwdXNoJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZHJ1Z1VzZURhdGEpO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKGRydWdVc2VEYXRhKXtcclxuICAgICAgICAgIGNvbnN0IHZpY3RpbURydWdVc2VzQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbURydWdVc2VzJyk7XHJcbiAgICAgICAgICB2aWN0aW1EcnVnVXNlc0NvbnRyb2wuc2V0VmFsdWUoZHJ1Z1VzZURhdGEpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdGhlckRydWcpe1xyXG4gICAgICAgICAgY29uc3Qgb3RoZXJEcnVnQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ290aGVyRHJ1ZycpO1xyXG4gICAgICAgICAgb3RoZXJEcnVnQ29udHJvbC5zZXRWYWx1ZShvdGhlckRydWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9jb250YWN0XHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldENvbnRhY3RzKHRoaXMudmljdGltSWQpLnN1YnNjcmliZShcclxuICAgICAgICAgIGNvbnRhY3RMaXN0ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvbnRhY3RMaXN0Jyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbnRhY3RMaXN0KTtcclxuICAgICAgICAgICAgdGhpcy5jb250YWN0TGlzdCA9IGNvbnRhY3RMaXN0O1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhY3REYXRhU291cmNlLmRhdGEgPSB0aGlzLmNvbnRhY3RMaXN0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vbm8gcGhvbmUgZmllbGRcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmVkaXRWaWN0aW0uZ3VhcmRpYW5Ob1Bob25lRmxhZyA9PT0gZmFsc2UgKXtcclxuICAgICAgICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHtndWFyZGlhbk5vUGhvbmVGbGFnOiBmYWxzZX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIHRoaXMuZWRpdFZpY3RpbS5hZHZvY2F0ZU5vUGhvbmVGbGFnID09PSBmYWxzZSApe1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2Fkdm9jYXRlTm9QaG9uZUZsYWc6IGZhbHNlfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcIkVycm9yIG9jY3VyZWQgd2hpbGUgcmV0cml2aW5nIFZpY3RpbSBJbmZvcm1hdGlvbi4gUGxlYXNlIHRyeSBhZ2Fpbi5cIik7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuO1xyXG5cdFx0fSBlbHNlIHtcclxuICAgICAgLy9uZXdcclxuXHJcbiAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG5cclxuICB9XHJcblxyXG4gIG9uQ2xlYXIoKSB7XHJcbiAgICBpZiAodGhpcy5hZGRyZXNzQ29tcG9uZW50KSB0aGlzLmFkZHJlc3NDb21wb25lbnQucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIHNob3dBZGRyZXNzKHZhbHVlKXtcclxuXHJcbiAgICBpZiAodmFsdWUuY2hlY2tlZCl7XHJcblxyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldEN1cnJlbnRIb3VzaW5nKHRoaXMub2ZmZW5kZXJJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hZGRyZXNzSWQgPSBpdGVtLmhvdXNpbmcuYWRkcmVzc0lkO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHthZGRyZXNzSWQ6IHRoaXMuYWRkcmVzc0lkfSlcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuYWRkcmVzc0NvbXBvbmVudC5yZXNldCgpO1xyXG4gICAgICB0aGlzLmVkaXRWaWN0aW0uYWxsb3dDc29zYUNvbnRhY3RGbGFnID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuYWRkcmVzc0lkID0gbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgb25BZGRyZXNzQ2hhbmdlKGFkZHJlc3NJZCkge1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2FkZHJlc3NJZDogYWRkcmVzc0lkfSlcclxuICAgIHRoaXMuYWRkcmVzc0lkID0gYWRkcmVzc0lkO1xyXG4gIH1cclxuICBvbkd1YXJkaWFuQWRkcmVzc0NoYW5nZShNeUd1YXJkaWFuQWRkcmVzc0lkKSB7XHJcbiAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7Z3VhcmRpYW5BZGRyZXNzSWQ6IE15R3VhcmRpYW5BZGRyZXNzSWR9KVxyXG4gICAgdGhpcy5ndWFyZGlhbkFkZHJlc3NJZCA9ICBNeUd1YXJkaWFuQWRkcmVzc0lkO1xyXG4gIH1cclxuICBvbkFkdm9jYXRlQWRkcmVzc0NoYW5nZShNeUFkdm9jYXRlQWRkcmVzc0lkKSB7XHJcbiAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7YWR2b2NhdGVBZGRyZXNzSWQ6IE15QWR2b2NhdGVBZGRyZXNzSWR9KVxyXG4gICAgdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA9IE15QWR2b2NhdGVBZGRyZXNzSWQ7XHJcbiAgfVxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMudmljdGltRm9ybS5yZXNldCgpO1xyXG59XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdzaG93IG9mZmVuZGVySWQnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMub2ZmZW5kZXJJZCk7XHJcbiAgICBjb25zb2xlLmxvZygnc2hvdyBzdGFmZklkJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YWZmSWQpO1xyXG4gICAgY29uc29sZS5sb2coJ3Nob3cgaXNJbnRha2UnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuaXNJbnRha2UpO1xyXG4gICAgLy90aGlzLnZpY3RpbURldGFpbC5ndWFyZGlhbk5vUGhvbmVGbGFnID0gdHJ1ZTtcclxuICAgIC8vdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcgPSAgdHJ1ZTtcclxuICAgIC8vdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Ob1Bob25lRmxhZycpLnNldFZhbHVlKHRydWUpO1xyXG5cclxuICAgICAgIC8vcmVxdWlyZWQgZmllbGRcclxuICAgIGNvbnN0IHJlcXVpcmVkSW1wbGVtZW50YXRpb24gPSB7Z2V0OmZ1bmN0aW9uKCk6Ym9vbGVhbntpZih0aGlzLl9yZXF1aXJlZCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkO31cclxuICAgIGlmKHRoaXMubmdDb250cm9sJiZ0aGlzLm5nQ29udHJvbC5jb250cm9sJiZ0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvclxyXG4gICAgICApe2NvbnN0IGVtcHR5VmFsdWVDb250cm9sPU9iamVjdC5hc3NpZ24oe30sXHJcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbCk7KGVtcHR5VmFsdWVDb250cm9sIGFzIGFueSkudmFsdWU9bnVsbDtcclxuICAgICAgICByZXR1cm4oJ3JlcXVpcmVkJ2luKHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKGVtcHR5VmFsdWVDb250cm9sKXx8e30pKTt9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO30sc2V0OmZ1bmN0aW9uKHZhbHVlOmJvb2xlYW4pe3RoaXMuX3JlcXVpcmVkPWNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7fSx9O1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRJbnB1dC5wcm90b3R5cGUsJ3JlcXVpcmVkJyxyZXF1aXJlZEltcGxlbWVudGF0aW9uLCk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdFNlbGVjdC5wcm90b3R5cGUsJ3JlcXVpcmVkJyxyZXF1aXJlZEltcGxlbWVudGF0aW9uLCk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdFJhZGlvR3JvdXAucHJvdG90eXBlLCdyZXF1aXJlZCcscmVxdWlyZWRJbXBsZW1lbnRhdGlvbiwpO1xyXG4gICAgLy9yZXF1aXJlZCBmaWVsZCBlbmRcclxuXHJcblxyXG5cclxuICAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwhPW51bGwpIHtcclxuICAgICAgIC8vIGVkaXQgcmVjb3JkXHJcbiAgICAgIHRoaXMuZWRpdE1vZGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3dEZWxldGU9IHRydWU7XHJcbiAgICAgIHRoaXMudmljdGltSWQgPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcclxuXHJcbiAgICAgIHRoaXMuZ3VhcmRpYW5UYWJGbGFnID0gdGhpcy52aWN0aW1EZXRhaWwubWlub3JGbGFnO1xyXG5cclxuXHJcbiAgICAgIGlmICh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1BZHZvY2F0ZUZsYWc9PSdZUycpe1xyXG4gICAgICAgICAgICB0aGlzLmFkdm9jYXRlVGFiRmxhZyA9IHRydWU7XHJcbiAgICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5vdGhlcldlYXBvbkZsYWcgPT0gdHJ1ZSl7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJXZWFwb25Db250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKTtcclxuICAgICAgICBvdGhlcldlYXBvbkNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm90aGVyRHJ1Z0ZsYWcgPT0gdHJ1ZSl7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJEcnVnQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ290aGVyRHJ1ZycpO1xyXG4gICAgICAgIG90aGVyRHJ1Z0NvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY3BvRXhwaXJhdGlvbkRpdkZsYWcgID10aGlzLnZpY3RpbURldGFpbC5jcG9FeHBpcmF0aW9uRmxhZztcclxuICAgICAgdGhpcy5jb21tb25DaGlsZHJlbkRpdkZsYWcgPSB0aGlzLnZpY3RpbURldGFpbC5jb21tb25DaGlsZHJlbkZsYWc7XHJcbiAgICAgIHRoaXMuc3VwcG9ydEluUGxhY2VEaXZGbGFnPSAgdGhpcy52aWN0aW1EZXRhaWwuc3VwcG9ydEluUGxhY2VGbGFnO1xyXG4gICAgICB0aGlzLndlYXBvbkludm9sdmVkRGl2RmxhZz0gIHRoaXMudmljdGltRGV0YWlsLndlYXBvbkludm9sdmVkRmxhZztcclxuICAgICAgdGhpcy5kcnVnVXNlRGl2RmxhZz0gIHRoaXMudmljdGltRGV0YWlsLmRydWdVc2VGbGFnO1xyXG4gICAgICB0aGlzLmFkZHJlc3NJZCA9IHRoaXMudmljdGltRGV0YWlsLmFkZHJlc3NJZDtcclxuICAgICAgdGhpcy5ndWFyZGlhbkFkZHJlc3NJZCA9ICB0aGlzLnZpY3RpbURldGFpbC5ndWFyZGlhbkFkZHJlc3NJZDtcclxuICAgICAgdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA9ICB0aGlzLnZpY3RpbURldGFpbC5hZHZvY2F0ZUFkZHJlc3NJZDtcclxuXHJcbiAgICAgIHRoaXMuX2dldFZpY3RpbSgpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vYWRkIG5ldyByZWNvcmRcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2d1YXJkaWFuTm9QaG9uZUZsYWc6IHRydWV9KTtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2Fkdm9jYXRlTm9QaG9uZUZsYWc6IHRydWV9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldEZsYWdPcHRpb25ZZXNOb1Vua25vd25zKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmxhZ09wdGlvbiA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldEdlbmRlcnMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5nZW5kZXJzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0UHJlZml4ZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcmVmaXhlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldFN1ZmZpeGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3VmZml4ZXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRSZWxhdGlvbnNoaXBUeXBlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJlbGF0aW9uc2hpcFR5cGVzID0gaXRlbXMuZmlsdGVyKCAoeSkgPT4gKHkucmVsYXRpb25zaGlwQ2F0ZWdvcnlJZCA9PT0gJ1NUJyB8fCB5LnJlbGF0aW9uc2hpcENhdGVnb3J5SWQgPT09ICdGTScgKSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0U3VwcG9ydFR5cGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudmljdGltU3VwcG9ydFR5cGVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0V2VhcG9uVHlwZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy53ZWFwb25UeXBlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldERydWdzVHlwZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RydWcgbG9va3VwIGl0ZW1zJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaXRlbXMpO1xyXG4gICAgICAgIHRoaXMuZHJ1Z3MgPSBpdGVtcztcclxuICAgICAgICB0aGlzLmRydWdzLnB1c2goe2RydWdUeXBlSWQ6ICdPVEhFUicsIG5hbWU6ICdPdGhlcid9KTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRydWdzKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIC8vIHRoaXMudmljdGltU2VydmljZS5nZXREb2NrZXRMaXN0KHRoaXMub2ZmZW5kZXJJZCkuc3Vic2NyaWJlKFxyXG4gICAgLy8gICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuZG9ja2V0bGlzdCA9IGl0ZW1zO1xyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gKTtcclxuXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS52YWx1ZUNoYW5nZXNcclxuICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuRmlyc3ROYW1lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuTGFzdE5hbWUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Xb3JrUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Ib21lUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5DZWxsUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnZhbHVlQ2hhbmdlc1xyXG4gICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVGaXJzdE5hbWUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZVdvcmtQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUhvbWVQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUNlbGxQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBiYWNrKCl7XHJcblxyXG4gICAgLy90aGlzLm9uU2F2ZS5lbWl0KHRoaXMudmljdGltRGV0YWlsKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsndmljdGltTGlzdCddKTtcclxuXHJcbiAgfVxyXG5cclxuICBkZWxldGVWaWN0aW0oKSB7XHJcbiAgICB0aGlzLmNvbW1vbkRpYWxvZ1NlcnZpY2VcclxuICAgIC5jb25maXJtKCcnLCAnRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgVmljdGltPycsICdZZXMnLCAnTm8nKVxyXG4gICAgLnN1YnNjcmliZShyZXMgPT4ge3RoaXMucmVzdWx0ID0gIHJlcztcclxuICAgICAgICBpZiAodGhpcy5yZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLmRlbGV0ZVZpY3RpbXModGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQpXHJcbiAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdEZWxldGUgU3VjY2Vzc2Z1bGx5IScsICcnLCB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCwgfSk7fVxyXG5cclxuICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsndmljdGltJ10pO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KHRoaXMudmljdGltRGV0YWlsKTtcclxuICAgICAgICB9XHJcbiAgICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcmFkaW9NaW5vckNoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgLy8gY29uc3QgZ3VhcmRpYW5MYXN0TmFtZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkxhc3ROYW1lJyk7XHJcbiAgICAvL2NvbnN0IGd1YXJkaWFuRmlyc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuRmlyc3ROYW1lJyk7XHJcblxyXG5cclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5ndWFyZGlhblRhYkZsYWcgPSB0cnVlO1xyXG4gICAgIC8vIGd1YXJkaWFuTGFzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgLy8gZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIC8vdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcgPSAgdHJ1ZTtcclxuXHJcblxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5ndWFyZGlhblRhYkZsYWcgPSBmYWxzZTtcclxuICAgICAvLyBndWFyZGlhbkxhc3ROYW1lQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAvLyBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcblxyXG5cclxuICAgIH1cclxuXHJcblx0XHQvL2d1YXJkaWFuTGFzdE5hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgLy8gZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgfVxyXG5cclxuICByYWRpb0Fkdm9jYXRlQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG5cclxuICAgIGNvbnN0IGFkdm9jYXRlTGFzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpO1xyXG4gICAgY29uc3QgYWR2b2NhdGVGaXJzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVGaXJzdE5hbWUnKTtcclxuICAgIC8vIGNvbnN0IGFkdm9jYXRlTm9QaG9uZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZU5vUGhvbmVGbGFnJyk7XHJcblxyXG5cclxuXHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSBcIllTXCIpIHtcclxuICAgICAgdGhpcy5hZHZvY2F0ZVRhYkZsYWcgPSB0cnVlO1xyXG4gICAgICBhZHZvY2F0ZUxhc3ROYW1lQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICBhZHZvY2F0ZUZpcnN0TmFtZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcblxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5hZHZvY2F0ZVRhYkZsYWcgPSBmYWxzZTtcclxuXHJcbiAgICAgIGFkdm9jYXRlTGFzdE5hbWVDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICBhZHZvY2F0ZUZpcnN0TmFtZUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkdm9jYXRlTGFzdE5hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIGFkdm9jYXRlRmlyc3ROYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcmFkaW9DaWNDaGFuZ2UoJGV2ZW50OiBNYXRSYWRpb0NoYW5nZSl7XHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY29tbW9uQ2hpbGRyZW5EaXZGbGFnID0gdHJ1ZTtcclxuICAgICAgLy8gcmVxdXJpZSBmaWVsZFxyXG4gICAgICB0aGlzLnNldFZhbGlkYXRvcnMoJ2NvbW1vbkNoaWxkcmVuJyk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmNvbW1vbkNoaWxkcmVuRGl2RmxhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VmFsaWRhdG9ycyh0eXBlKSB7XHJcbiAgICBpZih0eXBlID09ICdjb21tb25DaGlsZHJlbicpe1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnY29tbW9uQ2hpbGRyZW5OdW1iZXInKS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2NvbW1vbkNoaWxkcmVuTnVtYmVyJykuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgfVxyXG4gICBlbHNlIGlmICh0eXBlID09ICdjcG8nKXtcclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Nwb0V4cGlyYXRpb25EYXRlJykuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdjcG9FeHBpcmF0aW9uRGF0ZScpLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICB9XHJcbiAgfVxyXG4gIHJhZGlvU3VwcG9ydENoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5zdXBwb3J0SW5QbGFjZURpdkZsYWcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5zdXBwb3J0SW5QbGFjZURpdkZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmFkaW9XZWFwb25DaGFuZ2UoJGV2ZW50OiBNYXRSYWRpb0NoYW5nZSl7XHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMud2VhcG9uSW52b2x2ZWREaXZGbGFnID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMud2VhcG9uSW52b2x2ZWREaXZGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJhZGlvRHJ1Z0NoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5kcnVnVXNlRGl2RmxhZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmRydWdVc2VEaXZGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYWRpb0Nwb0NoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5jcG9FeHBpcmF0aW9uRGl2RmxhZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9ycygnY3BvJyk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmNwb0V4cGlyYXRpb25EaXZGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVET0JDaGFuZ2UoJGV2ZW50ICl7XHJcbiAgIHZhciBhZ2VEaWZNcyA9IERhdGUubm93KCkgLSAgJGV2ZW50LnZhbHVlO1xyXG4gICB2YXIgYWdlRGF0ZSA9IG5ldyBEYXRlKGFnZURpZk1zKTtcclxuICAgIGlmKCBNYXRoLmFicyhhZ2VEYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTcwKSA8PSAxOCl7XHJcblxyXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVmljdGltIGlzIGEgTWlub3IuIFRoaXMgaW5mb3JtYXRpb24gaXMgYSBzZW5zaXRpdmUgYW5kIHNob3VsZCBub3QgYmUgZGlzY2xvc2VkIHRvIGFueSB1bmF1dGhvcml6ZWQgcGFydGllcy4gQ29udGFjdCB0aGUgbGVnYWwgZ3VhcmRpYW4uJywgJycsIHtcclxuICAgICAgICBkdXJhdGlvbjogNjAwMCx9KTtcclxuICAgICAgICBjb25zdCBtaW5vckNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKTtcclxuICAgICAgICBtaW5vckNvbnRyb2wuc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICAgIC8vICBjb25zdCBndWFyZGlhbkxhc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuTGFzdE5hbWUnKTtcclxuICAgICAgIC8vIGNvbnN0IGd1YXJkaWFuRmlyc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuRmlyc3ROYW1lJyk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmd1YXJkaWFuVGFiRmxhZyA9IHRydWU7XHJcbiAgICAgICAvLyBndWFyZGlhbkxhc3ROYW1lQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAvLyAgZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBjaGVja090aGVyV2VhcG9uKFdlYXBvblVzZSl7XHJcblxyXG4gICAgY29uc3Qgb3RoZXJXZWFwb25Db250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKTtcclxuICAgICBpZiAoV2VhcG9uVXNlLmluY2x1ZGVzKFwiT1RIRVJcIikpe1xyXG4gICAgIHRoaXMub3RoZXJXZWFwb25GbGFnID0gdHJ1ZTtcclxuICAgICBvdGhlcldlYXBvbkNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLm90aGVyV2VhcG9uRmxhZyA9IGZhbHNlO1xyXG4gICAgICBvdGhlcldlYXBvbkNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB9XHJcbiAgIG90aGVyV2VhcG9uQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBjaGVja090aGVyRHJ1ZyhEcnVnVXNlKXtcclxuXHJcbiAgICBjb25zdCBvdGhlckRydWdDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJyk7XHJcbiAgICAgaWYgKERydWdVc2UuaW5jbHVkZXMoXCJPVEhFUlwiKSl7XHJcbiAgICAgdGhpcy5vdGhlckRydWdGbGFnID0gdHJ1ZTtcclxuICAgICBvdGhlckRydWdDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuXHJcblxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMub3RoZXJEcnVnRmxhZyA9IGZhbHNlO1xyXG4gICAgICBvdGhlckRydWdDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG5cclxuXHJcbiAgICB9XHJcbiAgIG90aGVyRHJ1Z0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFwic2F2ZSB2aWN0aW1cIlxyXG4gIHNhdmVWaWN0aW0oKSB7XHJcblxyXG5cclxuICAvL2d1YXJkaWFuIHBob25lIGxvZ2ljXHJcbiAgaWYgKCF0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZylcclxuICAge1xyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUpe1xyXG4gICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUgIT09IFwiXCIpe1xyXG4gICAgICAgICAgICAgdGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnID0gIHRydWU7XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICAgIH1cclxuXHJcblxyXG5cclxuICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lICE9PSB1bmRlZmluZWQpe1xyXG4gICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lICE9PSBudWxsKXtcclxuICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lICE9PSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnID0gIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSl7XHJcbiAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUgIT09IG51bGwpe1xyXG4gICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnKTtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyk7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcgPT09IGZhbHNlICYmIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnID09PSBmYWxzZSlcclxuICAgIHtcclxuXHJcbiAgICAgICAgICB0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25EaWFsb2dTZXJ2aWNlXHJcbiAgICAgICAgICAud2FybmluZygnJywgJ1BsZWFzZSBjaGVjayB0aGUgZ3VhcmRpYW4gcGhvbmUgZmllbGQuIFlvdSBoYXZlIHRvIGZpbGwgb25lIG9mIHRoZSB0aHJlZSBwaG9uZSBmaWxlZHMuJywgJ09rJylcclxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHt0aGlzLnJlc3VsdCA9ICByZXM7XHJcblxyXG4gICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5waG9uZVZhbGlkYXRpb25GbGFnJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcpO1xyXG5cclxuICAgIC8vYWR2b2NhdGUgcGhvbmUgbG9naWNcclxuICAgIGlmICghdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWcpXHJcbiAgICB7XHJcbiAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUpe1xyXG4gICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUgIT09IG51bGwpe1xyXG4gICAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgICAgICAgdGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnID0gIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUpe1xyXG4gICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlQ2VsbFBob25lICE9PSBudWxsKXtcclxuICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlQ2VsbGhvbmUgIT09IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWcnKTtcclxuIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnKTtcclxuIGNvbnNvbGUubG9nKCd0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcnKTtcclxuIGNvbnNvbGUubG9nKHRoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZyk7XHJcblxyXG4gaWYodGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnID09PSBmYWxzZSAmJiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZyA9PT0gZmFsc2UpXHJcbiB7XHJcblxyXG4gICAgICAgdGhpcy5waG9uZVZhbGlkYXRpb25GbGFnID0gdHJ1ZTtcclxuICAgICAgIHRoaXMuY29tbW9uRGlhbG9nU2VydmljZVxyXG4gICAgICAgLndhcm5pbmcoJycsICdQbGVhc2UgY2hlY2sgdGhlIGFkdm9jYXRlIHBob25lIGZpZWxkLiBZb3UgaGF2ZSB0byBmaWxsIG9uZSBvZiB0aGUgdGhyZWUgcGhvbmUgZmlsZWRzLicsICdPaycpXHJcbiAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7dGhpcy5yZXN1bHQgPSAgcmVzO1xyXG5cclxuICAgICAgIH0pO1xyXG4gfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmhvbWVQaG9uZSl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuaG9tZVBob25lLnJlcGxhY2UoL1soKVxccy1dL2csICcnKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmUgPSAgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLndvcmtQaG9uZSl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS53b3JrUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lLnJlcGxhY2UoL1soKVxccy1dL2csICcnKSA7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuY2VsbFBob25lKXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNlbGxQaG9uZSA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY2VsbFBob25lLnJlcGxhY2UoL1soKVxccy1dL2csICcnKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5jZWxsUGhvbmU9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmUpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdFBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RQaG9uZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJyk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdFBob25lID0gbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUucmVwbGFjZSgvWygpXFxzLV0vZywgJycpXHJcbiAgICAgfVxyXG4gICAgIGVsc2V7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSA9IG51bGw7XHJcbiAgICAgfVxyXG5cclxuICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lKXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJylcclxuICAgICB9XHJcbiAgICAgZWxzZXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lID1udWxsO1xyXG4gICAgIH1cclxuXHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJylcclxuICAgICB9ZWxzZXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlQ2VsbFBob25lID0gIG51bGw7XHJcbiAgICAgfVxyXG5cclxuXHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUucmVwbGFjZSgvWygpXFxzLV0vZywgJycpXHJcbiAgICAgfVxyXG4gICAgIGVsc2V7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSA9IG51bGw7XHJcbiAgICAgfVxyXG5cclxuICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lKXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJylcclxuICAgICB9XHJcbiAgICAgZWxzZXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lID1udWxsO1xyXG4gICAgIH1cclxuXHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJylcclxuICAgICB9ZWxzZXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQ2VsbFBob25lID0gIG51bGw7XHJcbiAgICAgfVxyXG4vL2RhdGEgcHJvY2Vzc1xyXG5cclxuICBjb25zb2xlLmxvZygndGhpcy5waG9uZVZhbGlkYXRpb25GbGFnIDEnKTtcclxuICBjb25zb2xlLmxvZyh0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcpO1xyXG4gaWYgKCB0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgPT09IGZhbHNlKXtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltRGV0YWlsID09PSBudWxsKXtcclxuICAgICAgLy9pbnNlcnQgbmV3IHZpY3RpbVxyXG5cclxuICAgICB2YXIgbXlWaWN0aW1TdXBwb3J0cyA9IFtdO1xyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltU3VwcG9ydHMpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltU3VwcG9ydHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgY29uc3QgdmljdGltU3VwcG9ydD0gPFZpY3RpbVN1cHBvcnQ+e307XHJcbiAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltSWQ9IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1JZDtcclxuICAgICAgICAgICAgdmljdGltU3VwcG9ydC52aWN0aW1TdXBwb3J0VHlwZUlkPSBlbGVtZW50O1xyXG4gICAgICAgICAgICB2aWN0aW1TdXBwb3J0Lm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgICAgICAgbXlWaWN0aW1TdXBwb3J0cy5wdXNoKHZpY3RpbVN1cHBvcnQpO1xyXG4gICAgICAgICB9KTtcclxuICAgICB9XHJcblxyXG4gICAgdmFyIG15VmljdGltRHJ1Z1VzZXMgPSBbXTtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMgZHVyaW5nIHNhdmUnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyk7XHJcbiAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzKXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgY29uc3QgdmljdGltRHJ1Z1VzZSA9IDxWaWN0aW1EcnVnVXNlPnt9O1xyXG4gICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcblxyXG4gICAgIGlmIChlbGVtZW50ID09PVwiT1RIRVJcIiB8fCBlbGVtZW50ID09PSBcIlwiIHx8IGVsZW1lbnQgPT09IG51bGwpe1xyXG4gICAgICB2aWN0aW1EcnVnVXNlLmRydWdUeXBlSWQgPSBudWxsO1xyXG4gICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlckRydWc7XHJcbiAgICAgfVxyXG4gICAgIGVsc2V7XHJcbiAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcbiAgICAgIHZpY3RpbURydWdVc2Uub3RoZXJEcnVnID0gbnVsbDtcclxuICAgICB9XHJcblxyXG4gICAgIHZpY3RpbURydWdVc2UubW9kaWZpZWRCeSA9IHRoaXMuc3RhZmZJZDtcclxuICAgICB2aWN0aW1EcnVnVXNlLnZpY3RpbUlkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUlkO1xyXG4gICAgIG15VmljdGltRHJ1Z1VzZXMucHVzaCh2aWN0aW1EcnVnVXNlKTtcclxuICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGR1cmluZyBzYXZlIDEnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyk7XHJcblxyXG5cclxuXHJcbiAgdmFyIG15VmljdGltV2VhcG9uVXNlcyA9IFtdO1xyXG5cclxuICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVdlYXBvblVzZXMpe1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVdlYXBvblVzZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgIGNvbnN0IHZpY3RpbVdlYXBvblVzZSA9IDxWaWN0aW1XZWFwb25Vc2U+e307XHJcbiAgICAgICB2aWN0aW1XZWFwb25Vc2UudmljdGltSWQ9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltSWQ7XHJcbiAgICAgICB2aWN0aW1XZWFwb25Vc2Uud2VhcG9uVHlwZUlkPSBlbGVtZW50O1xyXG5cclxuICAgICAgIGlmIChlbGVtZW50ID09XCJPVEhFUlwiKXtcclxuICAgICAgICB2aWN0aW1XZWFwb25Vc2Uub3RoZXJXZWFwb24gPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUub3RoZXJXZWFwb247XHJcbiAgICAgICB9XHJcbiAgICAgICBlbHNle1xyXG4gICAgICAgIHZpY3RpbVdlYXBvblVzZS5vdGhlcldlYXBvbiA9IG51bGw7XHJcbiAgICAgICB9XHJcblxyXG4gICAgICAgdmljdGltV2VhcG9uVXNlLm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgIG15VmljdGltV2VhcG9uVXNlcy5wdXNoKHZpY3RpbVdlYXBvblVzZSk7XHJcbiAgIH0pO1xyXG4gfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiBjb25zdCBuZXdWaWN0aW0gPSB7XHJcbiAgIHZpY3RpbUlkOiAwLFxyXG4gICBvZmZlbmRlcklkOiB0aGlzLm9mZmVuZGVySWQsXHJcbiAgIHZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkOlxyXG4gICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZCxcclxuICAgbGFzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5sYXN0TmFtZSxcclxuICAgZmlyc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZmlyc3ROYW1lLFxyXG4gICBtaWRkbGVOYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUubWlkZGxlTmFtZVxyXG4gICAgID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pZGRsZU5hbWVcclxuICAgICA6IG51bGwsXHJcbiAgIHByZWZpeElkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUucHJlZml4SWRcclxuICAgICA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5wcmVmaXhJZFxyXG4gICAgIDogbnVsbCxcclxuICAgc3VmZml4SWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5zdWZmaXhJZFxyXG4gICAgID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1ZmZpeElkXHJcbiAgICAgOiBudWxsLFxyXG4gICBiaXJ0aERhdGU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5iaXJ0aERhdGVcclxuICAgICA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5iaXJ0aERhdGVcclxuICAgICA6IG51bGwsXHJcbiAgIGdlbmRlckNvZGU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5nZW5kZXJDb2RlXHJcbiAgICAgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ2VuZGVyQ29kZVxyXG4gICAgIDogbnVsbCxcclxuICAgdW5kZXJTdXBlcnZpc2lvbkZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS51bmRlclN1cGVydmlzaW9uRmxhZyxcclxuICAgbWlub3JGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUubWlub3JGbGFnLFxyXG4gICB2aWN0aW1BZHZvY2F0ZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1BZHZvY2F0ZUZsYWcsXHJcblxyXG4gICBob21lUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmUsXHJcbiAgIHdvcmtQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndvcmtQaG9uZSxcclxuICAgY2VsbFBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY2VsbFBob25lLFxyXG4gICBlbWFpbDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsIDogbnVsbCxcclxuICAgYWRkcmVzc0lkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWRkcmVzc0lkXHJcbiAgICAgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWRkcmVzc0lkXHJcbiAgICAgOiAxLFxyXG4gICBlbWVyZ2VuY3lDb250YWN0OiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdFxyXG4gICAgID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RcclxuICAgICA6IG51bGwsXHJcbiAgIGVtZXJnZW5jeUNvbnRhY3RQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RQaG9uZSxcclxuICAgY29tbW9uQ2hpbGRyZW5GbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY29tbW9uQ2hpbGRyZW5GbGFnLFxyXG4gICBjb21tb25DaGlsZHJlbk51bWJlcjogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNvbW1vbkNoaWxkcmVuTnVtYmVyLFxyXG4gICBjcG9FeHBpcmF0aW9uRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNwb0V4cGlyYXRpb25GbGFnLFxyXG4gICBjcG9FeHBpcmF0aW9uRGF0ZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNwb0V4cGlyYXRpb25EYXRlXHJcbiAgICAgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLnZpY3RpbUZvcm0udmFsdWUuY3BvRXhwaXJhdGlvbkRhdGUsIFwic2hvcnRcIilcclxuICAgICA6IG51bGwsXHJcbiAgIHN1cHBvcnRJblBsYWNlRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1cHBvcnRJblBsYWNlRmxhZyxcclxuICAgd2VhcG9uSW52b2x2ZWRGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUud2VhcG9uSW52b2x2ZWRGbGFnLFxyXG4gICBkcnVnVXNlRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmRydWdVc2VGbGFnLFxyXG4gICBhbGNvaG9sVXNlRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFsY29ob2xVc2VGbGFnLFxyXG4gICBhY2Nlc3NSaXNrOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWNjZXNzUmlzayxcclxuICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkLFxyXG4gICB2VmljdGltQWR2b2NhdGU6IG51bGwsXHJcbiAgIHZWaWN0aW1HdWFyZGlhbjogbnVsbCxcclxuICAgdmljdGltRHJ1Z1VzZXM6IG15VmljdGltRHJ1Z1VzZXMsXHJcbiAgIHZpY3RpbVN1cHBvcnRzOiBteVZpY3RpbVN1cHBvcnRzLFxyXG4gICB2aWN0aW1XZWFwb25Vc2VzOiBteVZpY3RpbVdlYXBvblVzZXMsXHJcblxyXG4gICBhZHZvY2F0ZUZpcnN0TmFtZTogbnVsbCxcclxuICAgYWR2b2NhdGVMYXN0TmFtZTogbnVsbCxcclxuICAgYWR2b2NhdGVFbWFpbDogbnVsbCxcclxuICAgYWR2b2NhdGVQcmVmaXhJZDogbnVsbCxcclxuICAgYWR2b2NhdGVTdWZmaXhJZDogbnVsbCxcclxuICAgYWR2b2NhdGVOb1Bob25lRmxhZzogbnVsbCxcclxuICAgYWR2b2NhdGVIb21lUGhvbmU6IG51bGwsXHJcbiAgIGFkdm9jYXRlV29ya1Bob25lOiBudWxsLFxyXG4gICBhZHZvY2F0ZUNlbGxQaG9uZTogbnVsbCxcclxuICAgYWR2b2NhdGVBZGRyZXNzSWQ6IG51bGwsXHJcbiAgIGd1YXJkaWFuRmlyc3ROYW1lOiBudWxsLFxyXG4gICBndWFyZGlhbkxhc3ROYW1lOiBudWxsLFxyXG4gICBndWFyZGlhbkVtYWlsOiBudWxsLFxyXG4gICBndWFyZGlhblByZWZpeElkOiBudWxsLFxyXG4gICBndWFyZGlhblN1ZmZpeElkOiBudWxsLFxyXG4gICBndWFyZGlhbk5vUGhvbmVGbGFnOiBudWxsLFxyXG4gICBndWFyZGlhbkhvbWVQaG9uZTogbnVsbCxcclxuICAgZ3VhcmRpYW5Xb3JrUGhvbmU6IG51bGwsXHJcbiAgIGd1YXJkaWFuQ2VsbFBob25lOiBudWxsLFxyXG4gICBndWFyZGlhbkFkZHJlc3NJZDogbnVsbCxcclxuICAgZ3VhcmRpYW5CaXJ0aERhdGU6IG51bGwsXHJcbiAgIHJlbGF0aW9uc2hpcDogbnVsbCxcclxuICAgLy9yZWxhdGlvbnNoaXA6IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZD8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkIDogbnVsbCxcclxuICAgYWxsb3dDc29zYUNvbnRhY3RGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxsb3dDc29zYUNvbnRhY3RGbGFnXHJcbiAgICAgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxsb3dDc29zYUNvbnRhY3RGbGFnXHJcbiAgICAgOiBudWxsLFxyXG4gICBsaXZlV2l0aE9mZmVuZGVyRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmxpdmVXaXRoT2ZmZW5kZXJGbGFnXHJcbiAgICAgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUubGl2ZVdpdGhPZmZlbmRlckZsYWdcclxuICAgICA6IG51bGwsXHJcbiB9O1xyXG5cclxuICAgICBpZiAodGhpcy5hZGRyZXNzSWQgPT0gMCl7XHJcbiAgICAgIG5ld1ZpY3RpbS5hZGRyZXNzSWQgPSBudWxsO1xyXG4gICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1ZpY3RpbS5hZGRyZXNzSWQgPSAgdGhpcy5hZGRyZXNzSWQ7XHJcbiAgICAgfVxyXG5cclxuICAgICBuZXdWaWN0aW0uYWR2b2NhdGVBZGRyZXNzSWQgPSAgdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZDtcclxuICAgICBuZXdWaWN0aW0uZ3VhcmRpYW5BZGRyZXNzSWQgPSAgdGhpcy5ndWFyZGlhbkFkZHJlc3NJZDtcclxuXHJcblxyXG4gICAgICBjb25zb2xlLmxvZygnbmV3VmljdGltJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKG5ld1ZpY3RpbSk7XHJcbiAgICAgIHRoaXMudmljdGltU2VydmljZS5wb3N0VmljdGltcyhuZXdWaWN0aW0pLnN1YnNjcmliZShcclxuICAgICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgY29uc3QgaWQgPSBpdGVtcyA/IGl0ZW1zLnZpY3RpbUlkIDogJyc7XHJcblxyXG4gICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUFkdm9jYXRlRmxhZyA9PSBcIllTXCIpe1xyXG5cclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdhZGQgYWR2b2NhdGUnKTtcclxuICAgICAgICAgIGNvbnN0IHZpY3RpbUFkdm9jYXRlOiBWaWN0aW1BZHZvY2F0ZSA9IHtcclxuICAgICAgICAgIHZpY3RpbUFkdm9jYXRlSWQ6IGlkLFxyXG4gICAgICAgICAgbGFzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUxhc3ROYW1lLFxyXG4gICAgICAgICAgZmlyc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVGaXJzdE5hbWUsXHJcbiAgICAgICAgICBwcmVmaXhJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlUHJlZml4SWQsXHJcbiAgICAgICAgICBzdWZmaXhJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlU3VmZml4SWQsXHJcbiAgICAgICAgICBhZGRyZXNzSWQ6IHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQgPyB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkOiBudWxsLFxyXG4gICAgICAgICAgbm9QaG9uZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWc6IG51bGwsXHJcbiAgICAgICAgICBob21lUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSxcclxuICAgICAgICAgIHdvcmtQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lLFxyXG4gICAgICAgICAgY2VsbFBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUsXHJcbiAgICAgICAgICBlbWFpbDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlRW1haWwsXHJcbiAgICAgICAgICBtb2RpZmllZEJ5OiB0aGlzLnN0YWZmSWRcclxuXHJcblxyXG4gICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucG9zdFZpY3RpbUFkdm9jYXRlKGlkLCB2aWN0aW1BZHZvY2F0ZSkuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5taW5vckZsYWcgPT0gdHJ1ZSl7XHJcblxyXG5cclxuICAgICAgICBjb25zdCB2aWN0aW1HdWFyZGlhbjogVmljdGltR3VhcmRpYW4gPSB7XHJcbiAgICAgICAgICB2aWN0aW1HdWFyZGlhbklkOiBpZCxcclxuICAgICAgICAgIGxhc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5MYXN0TmFtZSxcclxuICAgICAgICAgIGZpcnN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRmlyc3ROYW1lLFxyXG4gICAgICAgICAgcHJlZml4SWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhblByZWZpeElkLFxyXG4gICAgICAgICAgc3VmZml4SWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhblN1ZmZpeElkLFxyXG4gICAgICAgICAgYmlydGhEYXRlOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5CaXJ0aERhdGUsXHJcbiAgICAgICAgICBhZGRyZXNzSWQ6IHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQ/IHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQ6IG51bGwsXHJcbiAgICAgICAgICBub1Bob25lRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWc/IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnOiBudWxsLFxyXG4gICAgICAgICAgaG9tZVBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUsXHJcbiAgICAgICAgICB3b3JrUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSxcclxuICAgICAgICAgIGNlbGxQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQ2VsbFBob25lLFxyXG4gICAgICAgICAgZW1haWw6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkVtYWlsLFxyXG4gICAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkXHJcblxyXG5cclxuICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZS5wb3N0VmljdGltR3VhcmRpYW4oaWQsIHZpY3RpbUd1YXJkaWFuKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdBZGQgVmljdGltIFN1Y2Nlc3NmdWxseSEnLCAnJywge1xyXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvL2luc2VydCBuZXdcclxuICAgICAgICBpZiAodGhpcy5pc0ludGFrZT09PXRydWUpe1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1Ib21lJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1MaXN0J10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL3RoaXMub25TYXZlLmVtaXQodGhpcy52aWN0aW1EZXRhaWwpO1xyXG5cclxuICAgICAgfVxyXG4gICAgICk7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vdXBkYXRlIHZpY3RpbVxyXG5cclxuXHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnVuZGVyU3VwZXJ2aXNpb25GbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnVuZGVyU3VwZXJ2aXNpb25GbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZCA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQ7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmxhc3ROYW1lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmxhc3ROYW1lO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5maXJzdE5hbWUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZmlyc3ROYW1lO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5taWRkbGVOYW1lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pZGRsZU5hbWU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnByZWZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnByZWZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnByZWZpeElkIDogbnVsbDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuc3VmZml4SWQgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VmZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VmZml4SWQgOiBudWxsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5iaXJ0aERhdGUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYmlydGhEYXRlO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5nZW5kZXJDb2RlID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmdlbmRlckNvZGU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLm1pbm9yRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5taW5vckZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmhvbWVQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLndvcmtQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS53b3JrUGhvbmU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNlbGxQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jZWxsUGhvbmU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmVtYWlsID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1BZHZvY2F0ZUZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltQWR2b2NhdGVGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5lbWVyZ2VuY3lDb250YWN0ID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3Q7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmVtZXJnZW5jeUNvbnRhY3RQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNvbW1vbkNoaWxkcmVuRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jb21tb25DaGlsZHJlbkZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNvbW1vbkNoaWxkcmVuTnVtYmVyID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNvbW1vbkNoaWxkcmVuTnVtYmVyO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5jcG9FeHBpcmF0aW9uRGF0ZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jcG9FeHBpcmF0aW9uRGF0ZTtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuY3BvRXhwaXJhdGlvbkZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY3BvRXhwaXJhdGlvbkZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnN1cHBvcnRJblBsYWNlRmxhZyA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VwcG9ydEluUGxhY2VGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC53ZWFwb25JbnZvbHZlZEZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndlYXBvbkludm9sdmVkRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuZHJ1Z1VzZUZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmRydWdVc2VGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5hbGNvaG9sVXNlRmxhZyA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxjb2hvbFVzZUZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFjY2Vzc1Jpc2sgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFjY2Vzc1Jpc2s7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFkZHJlc3NJZCA9IHRoaXMuYWRkcmVzc0lkO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5hbGxvd0Nzb3NhQ29udGFjdEZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxsb3dDc29zYUNvbnRhY3RGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5saXZlV2l0aE9mZmVuZGVyRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5saXZlV2l0aE9mZmVuZGVyRmxhZztcclxuXHJcblxyXG4gICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltU3VwcG9ydHMgPSBbXTtcclxuICAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1TdXBwb3J0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZpY3RpbVN1cHBvcnQ9IDxWaWN0aW1TdXBwb3J0Pnt9O1xyXG4gICAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltSWQ9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xyXG4gICAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltU3VwcG9ydFR5cGVJZD0gZWxlbWVudDtcclxuICAgICAgICAgICAgICB2aWN0aW1TdXBwb3J0Lm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgICAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1TdXBwb3J0cy5wdXNoKHZpY3RpbVN1cHBvcnQpO1xyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltRHJ1Z1VzZXMgPSBbXTtcclxuXHJcbiAgICAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGNhbGN1bGF0ZScpXHJcbiAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpXHJcblxyXG4gICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgdmljdGltRHJ1Z1VzZSA9IDxWaWN0aW1EcnVnVXNlPnt9O1xyXG4gICAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcbiAgICAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGJlZm9yZScpXHJcbiAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpXHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBcIk9USEVSXCIgfHwgZWxlbWVudCA9PT0gXCJcIiAgKXtcclxuICAgICAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IG51bGw7XHJcbiAgICAgICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlckRydWc7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgZWxzZXtcclxuICAgICAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IG51bGw7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgdmljdGltRHJ1Z1VzZS5tb2RpZmllZEJ5ID0gdGhpcy5zdGFmZklkO1xyXG4gICAgICAgIHZpY3RpbURydWdVc2UudmljdGltSWQgPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcclxuICAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1EcnVnVXNlcy5wdXNoKHZpY3RpbURydWdVc2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMgYWZ0ZXInKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcylcclxuXHJcbiAgICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMuZmlsdGVyKHdvcmQgPT4gKCAhKHdvcmQuZHJ1Z1R5cGVJZCA9PT0gbnVsbCAgJiYgd29yZC5vdGhlckRydWcgPT09IG51bGwpICAgICkpO1xyXG5cclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKCdhZGp1c3QgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzICcpXHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcylcclxuXHJcbiAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltV2VhcG9uVXNlcyA9IFtdO1xyXG4gICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1XZWFwb25Vc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB2aWN0aW1XZWFwb25Vc2UgPSA8VmljdGltV2VhcG9uVXNlPnt9O1xyXG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLnZpY3RpbUlkPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcclxuICAgICAgICAgIHZpY3RpbVdlYXBvblVzZS53ZWFwb25UeXBlSWQ9IGVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3dlYXBvbiBlbGVtZW50Jyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlbGVtZW50KTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlcldlYXBvbik7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltV2VhcG9uVXNlcyk7XHJcblxyXG4gICAgICAgICBpZiAoZWxlbWVudCA9PVwiT1RIRVJcIil7XHJcbiAgICAgICAgICB2aWN0aW1XZWFwb25Vc2Uub3RoZXJXZWFwb249dGhpcy52aWN0aW1Gb3JtLnZhbHVlLm90aGVyV2VhcG9uO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICB2aWN0aW1XZWFwb25Vc2Uub3RoZXJXZWFwb24gPSBudWxsO1xyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgICAgIHRoaXMudmljdGltRGV0YWlsLnZpY3RpbVdlYXBvblVzZXMucHVzaCh2aWN0aW1XZWFwb25Vc2UpO1xyXG5cclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRGV0YWlsIGJlZm9yZSBlbWl0Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRGV0YWlsKTtcclxuXHJcblxyXG4gICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucHV0VmljdGltcyh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCx0aGlzLnZpY3RpbURldGFpbCkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1VwZGF0ZSBTdWNjZXNzZnVsbHkhJywgJycsIHtcclxuICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgLy9BZHZvY2F0ZSBzZWN0aW9uXHJcblxyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS52aWN0aW1BZHZvY2F0ZUlkID0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLmxhc3ROYW1lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVMYXN0TmFtZTtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuZmlyc3ROYW1lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVGaXJzdE5hbWU7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLnByZWZpeElkPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVQcmVmaXhJZCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVByZWZpeElkIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuc3VmZml4SWQ9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVN1ZmZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlU3VmZml4SWQgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5hZGRyZXNzSWQ9IHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQgPyB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUubm9QaG9uZUZsYWc9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnPyB0cnVlOiBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuaG9tZVBob25lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmU7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLndvcmtQaG9uZT0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5jZWxsUGhvbmU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZTtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuZW1haWw9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUVtYWlsID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlRW1haWwgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5tb2RpZmllZEJ5PSB0aGlzLnN0YWZmSWQ7XHJcblxyXG4gICAgICAgY29uc29sZS5sb2coJ3dvcmsgb24gYWR2b2NhdGUgcGFydCcpO1xyXG4gICAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwudmljdGltQWR2b2NhdGVGbGFnPT0nWVMnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd3b3JrIG9uIGFkdm9jYXRlIGZsYWcgaXMgWVMgJyk7XHJcbiAgICAgICAgICBpZih0aGlzLnZpY3RpbURldGFpbC5hZHZvY2F0ZUZpcnN0TmFtZSAhPSBudWxsKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NoZWNrIGFkdm9jYXRlIGZpc3J0IG5hbWUgJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRGV0YWlsLmFkdm9jYXRlRmlyc3ROYW1lKTtcclxuICAgICAgICAgIHRoaXMudmljdGltU2VydmljZS5wdXRWaWN0aW1BZHZvY2F0ZSh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCx0aGlzLnZpY3RpbUFkdm9jYXRlKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICByZXNwPT57fSApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnYWRkIGFkdm9jYXRlJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltQWR2b2NhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucG9zdFZpY3RpbUFkdm9jYXRlKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkLCB0aGlzLnZpY3RpbUFkdm9jYXRlKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgLy8gZ3VhcmRpYW4gc2VjdGlvblxyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi52aWN0aW1HdWFyZGlhbklkID0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmxhc3ROYW1lID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkxhc3ROYW1lO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5maXJzdE5hbWUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5GaXJzdE5hbWU7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLnByZWZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuUHJlZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5QcmVmaXhJZCA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLnN1ZmZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuU3VmZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5TdWZmaXhJZCA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmFkZHJlc3NJZCA9IHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQgPyB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkIDogbnVsbDtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4ubm9QaG9uZUZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWc/IHRydWU6IGZhbHNlO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5ob21lUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmU7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLndvcmtQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZTtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4uY2VsbFBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQ2VsbFBob25lO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5lbWFpbCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkVtYWlsID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRW1haWwgOiBudWxsO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5tb2RpZmllZEJ5ID0gdGhpcy5zdGFmZklkO1xyXG5cclxuICAgIGlmICh0aGlzLnZpY3RpbURldGFpbC5taW5vckZsYWcgPT0gdHJ1ZSlcclxuICAgIHtcclxuICAgICAgIGlmKHRoaXMudmljdGltRGV0YWlsLmd1YXJkaWFuRmlyc3ROYW1lICE9IG51bGwgKVxyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZS5wdXRWaWN0aW1HdWFyZGlhbih0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCx0aGlzLnZpY3RpbUd1YXJkaWFuKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcmVzcD0+e1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnYWRkIGd1cmRpYW4nKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltR3VhcmRpYW4pO1xyXG4gICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucG9zdFZpY3RpbUd1YXJkaWFuKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkLCB0aGlzLnZpY3RpbUd1YXJkaWFuKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgICk7XHJcblxyXG4gICAgfVxyXG4gIH0vL2VuZCBvZiB0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgPSBmYWxzZVxyXG4gICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRGV0YWlsJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbURldGFpbCk7XHJcbiAgICB0aGlzLm9uU2F2ZS5lbWl0KHRoaXMudmljdGltRGV0YWlsKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uIFwic2F2ZSB2aWN0aW1cIlxyXG4gICAgICBhZGRDb250YWN0KCl7XHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1Db250YWN0Jyx0aGlzLnZpY3RpbUlkXSk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybWF0TGFiZWwodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfVxyXG5cclxuXHJcbn1cclxuIiwiPG1hdC1jYXJkPlxyXG4gIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgICA8ZGl2ICBbZm9ybUdyb3VwXT1cInZpY3RpbUZvcm1cIj5cclxuXHJcbiAgICAgICAgICA8bWF0LXRhYi1ncm91cCBkeW5hbWljSGVpZ2h0ICBtYXQtc3RyZXRjaC10YWJzPlxyXG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlZpY3RpbSBEZXRhaWxcIiA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyJz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5JcyB2aWN0aW0gYSBtaW5vcj88Zm9udCBjb2xvcj1cInJlZFwiPiogPC9mb250PjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCAgZm9ybUNvbnRyb2xOYW1lPVwibWlub3JGbGFnXCIgIChjaGFuZ2UpPVwicmFkaW9NaW5vckNoYW5nZSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLm1pbm9yRmxhZ1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW3ZhbHVlXT1cImZhbHNlXCI+Tm88L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnbWlub3JGbGFnJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPklmIHZpY3RpbSBhIG1pbm9yIGZpZWxkIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Eb2VzIHRoZSBWaWN0aW0gaGF2ZSBhIFZpY3RpbSBBZHZvY2F0ZSBvciBTb2NpYWwgV29ya2VyIHdpdGggPGJyPndob20gQ1NPU0Egc2hvdWxkIG1haW50YWluIGNvbnRhY3Q/PGZvbnQgY29sb3I9XCJyZWRcIj4qIDwvZm9udD48L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgY2xhc3MgPSBcInRwLXJhZGlvLWdyb3VwXCIgIGZvcm1Db250cm9sTmFtZT1cInZpY3RpbUFkdm9jYXRlRmxhZ1wiICAoY2hhbmdlKT1cInJhZGlvQWR2b2NhdGVDaGFuZ2UoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS52aWN0aW1BZHZvY2F0ZUZsYWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmbGFnT3B0aW9uXCIgW3ZhbHVlXT1cIml0ZW0uZmxhZ09wdGlvblllc05vVW5rbm93bklkXCI+e3tpdGVtLm5hbWV9fSA8L21hdC1yYWRpby1idXR0b24+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPklmIHZpY3RpbSBoYXMgYWR2b2NhdGUgZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICBcclxuIFxyXG4gICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIEN1cnJlbnRseSBVbmRlciBTdXBlcnZpc2lvbjo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwidW5kZXJTdXBlcnZpc2lvbkZsYWdcIiBuYW1lPVwic3VwZXJ2aXNpb25cIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0udW5kZXJTdXBlcnZpc2lvbkZsYWdcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmbGFnT3B0aW9uXCIgW3ZhbHVlXT1cIml0ZW0uZmxhZ09wdGlvblllc05vVW5rbm93bklkXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ3VuZGVyU3VwZXJ2aXNpb25GbGFnJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgndW5kZXJTdXBlcnZpc2lvbkZsYWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndW5kZXJTdXBlcnZpc2lvbkZsYWcnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+dW5kZXIgc3VwZXJ2aXNpb24gZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5SZWxhdGlvbnNoaXAgdG8gT2ZmZW5kZXI6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWRcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0udmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWRcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmVsYXRpb25zaGlwVHlwZXNcIiBbdmFsdWVdPVwiaXRlbS5yZWxhdGlvbnNoaXBUeXBlSWRcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ3ZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+cmVsYXRpb25zaGlwIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIExhc3QgTmFtZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImxhc3ROYW1lXCIgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5sYXN0TmFtZVwiID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+dmljdGltIGxhc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBGaXJzdCBOYW1lOiA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZmlyc3ROYW1lXCIgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdmaXJzdE5hbWUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZmlyc3ROYW1lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2ZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+dmljdGltIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBNaWRkbGUgTmFtZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIGZvcm1Db250cm9sTmFtZT1cIm1pZGRsZU5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0ubWlkZGxlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gUHJlZml4OjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBmb3JtQ29udHJvbE5hbWU9XCJwcmVmaXhJZFwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5wcmVmaXhJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJlZml4ZXNcIiBbdmFsdWVdPVwiaXRlbS5wcmVmaXhJZFwiPnt7aXRlbS5uYW1lfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIFN1ZmZpeDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwic3VmZml4SWRcIiAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLnN1ZmZpeElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWZmaXhlc1wiIFt2YWx1ZV09XCJpdGVtLnN1ZmZpeElkXCI+e3tpdGVtLm5hbWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBHZW5kZXI6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBmb3JtQ29udHJvbE5hbWU9XCJnZW5kZXJDb2RlXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmdlbmRlckNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZW5kZXJzXCIgW3ZhbHVlXT1cIml0ZW0uZ2VuZGVyQ29kZVwiPnt7aXRlbS5uYW1lfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RGF0ZSBvZiBCaXJ0aDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBcclxuICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInZpY3RpbUJpcnRoUmVmXCIgXHJcbiAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJiaXJ0aERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYmlydGhEYXRlXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpY3RpbUJpcnRoUmVmLm9wZW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImhhbmRsZURPQkNoYW5nZSgkZXZlbnQpXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBbZm9yXT1cInZpY3RpbUJpcnRoUmVmXCIgbWF0U3VmZml4PjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3ZpY3RpbUJpcnRoUmVmPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gSG9tZSBQaG9uZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaG9tZVBob25lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmhvbWVQaG9uZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGFwcFBob25lTWFza1xyXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjE0XCIvPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnaG9tZVBob25lJykuZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnaG9tZVBob25lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2hvbWVQaG9uZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5Ib21lIHBob25lIG51bWJlciBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBDZWxsIFBob25lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0ICBcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2VsbFBob25lXCJcclxuICAgICAgICAgICAgICAgICAgYXBwUGhvbmVNYXNrXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5jZWxsUGhvbmVcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2NlbGxQaG9uZScpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdjZWxsUGhvbmUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnY2VsbFBob25lJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5DZWxsIHBob25lIG51bWJlciBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBXb3JrIFBob25lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3b3JrUGhvbmVcIiAgXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS53b3JrUGhvbmVcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQaG9uZU1hc2tcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ3dvcmtQaG9uZScpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd3b3JrUGhvbmUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnd29ya1Bob25lJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPldvcmsgcGhvbmUgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIEVtYWlsOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5lbWFpbFwiID5cclxuICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZW1haWwnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZW1haWwnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnZW1haWwnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+dmljdGltIGVtYWlsIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPCEtLSA8YXBwLXNtYXJ0LWFkZHJlc3MgXHJcbiAgICAgICAgICAgICAgICBbc2hvd1BzYV09XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICBbbW9kaWZpZWRCeV09XCJzdGFmZklkXCIgXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiYWRkcmVzc0lkXCJcclxuICAgICAgICAgICAgICAgIChhZGRyZXNzSWRDaGFuZ2UpPVwib25BZGRyZXNzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW291dGxpbmVdPVwidHJ1ZVwiIFxyXG4gICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBbcm93SGVpZ2h0XT1cIjgwXCIgXHJcbiAgICAgICAgICAgICAgICAoaXNWYWxpZCk9XCJmYWxzZVwiIFxyXG4gICAgICAgICAgICAgICAgW2FkZHJlc3NWYWxpZGF0b3JzXT1cImFkZHJlc3NWYWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAgICNhZGRyZXNzQ29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICA+IC0tPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8YXBwLXNtYXJ0LWFkZHJlc3NcclxuICAgICAgICAgICAgICAgIFttb2RpZmllZEJ5XT1cInN0YWZmSWRcIlxyXG4gICAgICAgICAgICAgICAgW2lkXT1cImFkZHJlc3NJZFwiXHJcbiAgICAgICAgICAgICAgICBbb3V0bGluZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzaG93UHNhXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2FkZHJlc3NWYWxpZGF0b3JzXT1cImFkZHJlc3NWYWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAoYWRkcmVzc0lkQ2hhbmdlKT1cIm9uQWRkcmVzc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICNhZGRyZXNzQ29tcG9uZW50XHJcbiAgICAgICAgICAgICAgPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXNtYXJ0LWFkZHJlc3M+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gRG9ja2V0OiBcclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICAqbmdGb3I9XCJsZXQgZG9ja2V0IG9mIGRvY2tldGxpc3Q7IGxldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94ID57e2RvY2tldC5kb2NrZXROdW1iZXJ9fTwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggIGNvbG9yPVwicHJpbWFyeVwiIGZvcm1Db250cm9sTmFtZT1cImxpdmVXaXRoT2ZmZW5kZXJGbGFnXCIgbmFtZT1cImxpdmVXaXRoT2ZmZW5kZXJGbGFnXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmxpdmVXaXRoT2ZmZW5kZXJGbGFnXCIgICAoY2hhbmdlKT1cInNob3dBZGRyZXNzKCRldmVudClcIiAgPnZpY3RpbSBsaXZlIHdpdGggb2ZmZW5kZXI8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94ICBjb2xvcj1cInByaW1hcnlcIiBmb3JtQ29udHJvbE5hbWU9XCJhbGxvd0Nzb3NhQ29udGFjdEZsYWdcIiBuYW1lPVwiYWxsb3dDc29zYUNvbnRhY3RGbGFnXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFsbG93Q3Nvc2FDb250YWN0RmxhZ1wiPnZpY3RpbSB3YW50cyB0byBiZSBjb250YWN0ZWQgYnkgQ1NPU0E8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBDaGlsZHJlbiBpbiBDb21tb248L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGZvcm1Db250cm9sTmFtZT1cImNvbW1vbkNoaWxkcmVuRmxhZ1wiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5jb21tb25DaGlsZHJlbkZsYWdcIiAgKGNoYW5nZSk9XCJyYWRpb0NpY0NoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LXJhZGlvLWJ1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICAqbmdJZj1cImNvbW1vbkNoaWxkcmVuRGl2RmxhZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaWxkcmVuIG51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIGZvcm1Db250cm9sTmFtZT1cImNvbW1vbkNoaWxkcmVuTnVtYmVyXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmNvbW1vbkNoaWxkcmVuTnVtYmVyXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q1BPOiA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwiY3BvRXhwaXJhdGlvbkZsYWdcIiAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmNwb0V4cGlyYXRpb25GbGFnXCIgKGNoYW5nZSk9XCJyYWRpb0Nwb0NoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwb0V4cGlyYXRpb25EaXZGbGFnXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RXhwaXJhdGlvbiBEYXRlOiA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImNwb0RhdGVSZWZcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNwb0V4cGlyYXRpb25EYXRlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjcG9EYXRlUmVmLm9wZW4oKVwiICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmNwb0V4cGlyYXRpb25EYXRlXCIgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBbZm9yXT1cImNwb0RhdGVSZWZcIiBtYXRTdWZmaXg+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjY3BvRGF0ZVJlZj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIGhhcyBhIFN1cHBvcnQgU3lzdGVtIGluIFBsYWNlPyA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGZvcm1Db250cm9sTmFtZT1cInN1cHBvcnRJblBsYWNlRmxhZ1wiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5zdXBwb3J0SW5QbGFjZUZsYWdcIiAgKGNoYW5nZSk9XCJyYWRpb1N1cHBvcnRDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN1cHBvcnRJblBsYWNlRGl2RmxhZ1wiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5TdXBwb3J0IHR5cGU/IDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICNzdXBwb3J0U2VsIGZvcm1Db250cm9sTmFtZT1cInZpY3RpbVN1cHBvcnRzXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLnZpY3RpbVN1cHBvcnRzXCIgbXVsdGlwbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChtb3VzZWxlYXZlKT1cInN1cHBvcnRTZWwuY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB2aWN0aW1TdXBwb3J0VHlwZXNcIiBbdmFsdWVdPVwiaXRlbS52aWN0aW1TdXBwb3J0VHlwZUlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPldlYXBvbnMgSW52b2x2ZWQ/PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJ3ZWFwb25JbnZvbHZlZEZsYWdcIiAoY2hhbmdlKT1cInJhZGlvV2VhcG9uQ2hhbmdlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0ud2VhcG9uSW52b2x2ZWRGbGFnXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW3ZhbHVlXT1cInRydWVcIj5ZZXM8L21hdC1yYWRpby1idXR0b24+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2VhcG9uSW52b2x2ZWREaXZGbGFnXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5XZWFwb24gVHlwZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgICN3ZWFwb25TZWwgZm9ybUNvbnRyb2xOYW1lPVwidmljdGltV2VhcG9uVXNlc1wiIG11bHRpcGxlIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS52aWN0aW1XZWFwb25Vc2VzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGVja090aGVyV2VhcG9uKCRldmVudC52YWx1ZSlcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKG1vdXNlbGVhdmUpPVwid2VhcG9uU2VsLmNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB3ZWFwb25UeXBlc1wiIFt2YWx1ZV09XCJpdGVtLndlYXBvblR5cGVJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3RoZXJXZWFwb25GbGFnXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5PdGhlciBXZWFwb246KiA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBmb3JtQ29udHJvbE5hbWU9XCJvdGhlcldlYXBvblwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5PdGhlciB3ZWFwb24gaXMgcmVxdWlyZWQuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cclxuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5XYXMgT2ZmZW5kZXIgdW5kZXIgdGhlIGluZmx1ZW5jZSBvZiBhbGNvaG9sIGF0IHRoZSB0aW1lIG9mIHRoZSBvZmZlbnNlPzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGZvcm1Db250cm9sTmFtZT1cImFsY29ob2xVc2VGbGFnXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFsY29ob2xVc2VGbGFnXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LXJhZGlvLWJ1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW3ZhbHVlXT1cImZhbHNlXCI+Tm88L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPldhcyBPZmZlbmRlciB1bmRlciB0aGUgaW5mbHVlbmNlIG9mIGRydWdzIGF0IHRoZSB0aW1lIG9mIHRoZSBvZmZlbnNlPzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJkcnVnVXNlRmxhZ1wiIChjaGFuZ2UpPVwicmFkaW9EcnVnQ2hhbmdlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZHJ1Z1VzZUZsYWdcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcnVnVXNlRGl2RmxhZ1wiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5EcnVnOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICAjZHJ1Z1NlbCBmb3JtQ29udHJvbE5hbWU9XCJ2aWN0aW1EcnVnVXNlc1wiIG11bHRpcGxlICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGVja090aGVyRHJ1ZygkZXZlbnQudmFsdWUpXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAobW91c2VsZWF2ZSk9XCJkcnVnU2VsLmNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkcnVnc1wiIFt2YWx1ZV09XCJpdGVtLmRydWdUeXBlSWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ubmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvdGhlckRydWdGbGFnXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5PdGhlciBEcnVnOiogPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwib3RoZXJEcnVnXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ290aGVyRHJ1ZycpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPk90aGVyIGRydWcgaXMgcmVxdWlyZWQuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzIFJpc2s6IDEgdGhydSAxMCAoMTAgZ3JlYXRlc3Qgcmlzayk6ICZuYnNwOzxiPiB7e2VkaXRWaWN0aW0uYWNjZXNzUmlza319PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWNjZXNzUmlza1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRodW1iTGFiZWw9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImZvcm1hdExhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFjY2Vzc1Jpc2tcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbWF0LXNsaWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkPiAgXHJcblxyXG4gXHJcbiAgICAgICAgICAgICAgPGJyPjxicj48YnI+ICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICA8bWF0LXRhYiAgKm5nSWY9XCJndWFyZGlhblRhYkZsYWdcIiBsYWJlbD1cIkxlZ2FsIEd1YXJkaWFuXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbnRhaW5lcic+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIExhc3QgTmFtZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImd1YXJkaWFuTGFzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5MYXN0TmFtZVwiID4gXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5MYXN0TmFtZScpLmVycm9ycyBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkd1YXJkaWFuIGxhc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIEZpcnN0IE5hbWU6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5GaXJzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5GaXJzdE5hbWVcIiA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5GaXJzdE5hbWUnKS5lcnJvcnMgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5HdWFyZGlhbiBmaXJzdCBuYW1lIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIFByZWZpeDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgIGZvcm1Db250cm9sTmFtZT1cImd1YXJkaWFuUHJlZml4SWRcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5QcmVmaXhJZFwiID5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBwcmVmaXhlc1wiIFt2YWx1ZV09XCJpdGVtLnByZWZpeElkXCI+e3tpdGVtLm5hbWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R3VhcmRpYW4gU3VmZml4OjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5TdWZmaXhJZFwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5ndWFyZGlhblN1ZmZpeElkXCIgID5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWZmaXhlc1wiIFt2YWx1ZV09XCJpdGVtLnN1ZmZpeElkXCI+e3tpdGVtLm5hbWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIkNob29zZVwiIGZvcm1Db250cm9sTmFtZT1cImd1YXJkaWFuR2VuZGVyXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmd1YXJkaWFuR2VuZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZW5kZXJzXCIgW3ZhbHVlXT1cIml0ZW0uZ2VuZGVyQ29kZVwiPnt7aXRlbS5uYW1lfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAtLT5cclxuICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RGF0ZSBvZiBCaXJ0aDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJndWFyZGlhbkRhdGVSZWZcIiBcclxuICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5CaXJ0aERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5CaXJ0aERhdGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImd1YXJkaWFuRGF0ZVJlZi5vcGVuKClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBbZm9yXT1cImd1YXJkaWFuRGF0ZVJlZlwiIG1hdFN1ZmZpeD48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2d1YXJkaWFuRGF0ZVJlZj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFxyXG4gICAgICAgICAgICAgICAgICBjb2xvciA9IFwicHJpbWFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJndWFyZGlhbk5vUGhvbmVGbGFnXCIgXHJcbiAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgTm8gUGhvbmUgKElmIHRoZXJlIGlzIG5vIHBob25lLCB0aGUgcGhvbmUgZmllbGRzIGFyZSBubyBsb25nZXIgcmVxdWlyZWQpPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIEhvbWUgUGhvbmU6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5Ib21lUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5Ib21lUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBhcHBQaG9uZU1hc2tcclxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiID5cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Ib21lUGhvbmUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkhvbWVQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkhvbWVQaG9uZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkd1YXJkaWFuIGhvbWUgcGhvbmUgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5HdWFyZGlhbiBDZWxsIFBob25lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5DZWxsUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5DZWxsUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBhcHBQaG9uZU1hc2tcclxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiIFxyXG4gICAgICAgICAgICAgICAgICAgPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuQ2VsbFBob25lJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuQ2VsbFBob25lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuQ2VsbFBob25lJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+R3VhcmRpYW4gQ2VsbCBwaG9uZSBudW1iZXIgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R3VhcmRpYW4gV29yayBQaG9uZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImd1YXJkaWFuV29ya1Bob25lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmd1YXJkaWFuV29ya1Bob25lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgYXBwUGhvbmVNYXNrXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTRcIiA+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Xb3JrUGhvbmUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbldvcmtQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbldvcmtQaG9uZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkd1YXJkaWFuIHdvcmsgcGhvbmUgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIEVtYWlsOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJndWFyZGlhbkVtYWlsXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmd1YXJkaWFuRW1haWxcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5FbWFpbCcpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuRW1haWwnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5FbWFpbCcpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+R3VhcmRpYW4gZW1haWwgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxhcHAtc21hcnQtYWRkcmVzcyBcclxuXHJcbiAgICAgICAgICAgICAgICBbc2hvd1BzYV09XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICBbbW9kaWZpZWRCeV09XCJzdGFmZklkXCIgXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZ3VhcmRpYW5BZGRyZXNzSWRcIlxyXG4gICAgICAgICAgICAgICAgKGFkZHJlc3NJZENoYW5nZSk9XCJvbkd1YXJkaWFuQWRkcmVzc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtvdXRsaW5lXT1cInRydWVcIiBcclxuICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW3Jvd0hlaWdodF09XCI4MFwiIFxyXG4gICAgICAgICAgICAgICAgKGlzVmFsaWQpPVwiZmFsc2VcIiBcclxuICAgICAgICAgICAgICAgIFthZGRyZXNzVmFsaWRhdG9yc109XCJhZGRyZXNzVmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgICAjZ3VhcmRpYW5BZGRyZXNzQ29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1zbWFydC1hZGRyZXNzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGJyPjxicj48YnI+IFxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8IS0tYWR2b2NhdGUtLT5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPG1hdC10YWIgICpuZ0lmPVwiYWR2b2NhdGVUYWJGbGFnXCIgbGFiZWw9XCJBZHZvY2F0ZVwiID4gXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb250YWluZXInPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+QWR2b2NhdGUgTGFzdCBOYW1lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVMYXN0TmFtZVwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5hZHZvY2F0ZUxhc3ROYW1lXCIgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlTGFzdE5hbWUnKS5lcnJvcnMgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkFkdm9jYXRlIGxhc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5BZHZvY2F0ZSBGaXJzdCBOYW1lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVGaXJzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVGaXJzdE5hbWVcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVGaXJzdE5hbWUnKS5lcnJvcnMgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkFkdm9jYXRlIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIFByZWZpeDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVQcmVmaXhJZFwiICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVQcmVmaXhJZFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHByZWZpeGVzXCIgW3ZhbHVlXT1cIml0ZW0ucHJlZml4SWRcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIFN1ZmZpeDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVTdWZmaXhJZFwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5hZHZvY2F0ZVN1ZmZpeElkXCIgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1ZmZpeGVzXCIgW3ZhbHVlXT1cIml0ZW0uc3VmZml4SWRcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAgXHJcbiAgICAgICAgICAgICAgICAgIGNvbG9yID0gXCJwcmltYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkdm9jYXRlTm9QaG9uZUZsYWdcIiBcclxuICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFkdm9jYXRlTm9QaG9uZUZsYWdcIiA+XHJcbiAgICAgICAgICAgICAgICAgIE5vIFBob25lIChJZiB0aGVyZSBpcyBubyBwaG9uZSwgdGhlIHBob25lIGZpZWxkcyBhcmUgbm8gbG9uZ2VyIHJlcXVpcmVkKTwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkPiBcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+QWR2b2NhdGUgSG9tZSBQaG9uZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgICBcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZHZvY2F0ZUhvbWVQaG9uZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5hZHZvY2F0ZUhvbWVQaG9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXBwUGhvbmVNYXNrXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTRcIiA+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVIb21lUGhvbmUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUhvbWVQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUhvbWVQaG9uZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkFkdm9jYXRlIGhvbWUgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5BZHZvY2F0ZSBDZWxsIFBob25lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVDZWxsUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVDZWxsUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICBhcHBQaG9uZU1hc2tcclxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlQ2VsbFBob25lJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVDZWxsUGhvbmUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVDZWxsUGhvbmUnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5BZHZvY2F0ZSBjZWxsIG51bWJlciBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gXHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIFdvcmsgUGhvbmU6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBcclxuICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVXb3JrUGhvbmVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFkdm9jYXRlV29ya1Bob25lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgIGFwcFBob25lTWFza1xyXG4gICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgID5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZVdvcmtQaG9uZScpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlV29ya1Bob25lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlV29ya1Bob25lJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+QWR2b2NhdGUgd29yayBudW1iZXIgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIEVtYWlsOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhZHZvY2F0ZUVtYWlsXCIgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5hZHZvY2F0ZUVtYWlsXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVFbWFpbCcpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlRW1haWwnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVFbWFpbCcpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkFkdm9jYXRlIGVtYWlsIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGRpdiA+XHJcbiAgICAgICAgICAgICAgPGFwcC1zbWFydC1hZGRyZXNzIFxyXG4gICAgICAgICAgICAgIFtzaG93UHNhXT1cInRydWVcIiBcclxuICAgICAgICAgICAgICBbbW9kaWZpZWRCeV09XCJzdGFmZklkXCIgXHJcbiAgICAgICAgICAgICAgW2lkXT1cImFkdm9jYXRlQWRkcmVzc0lkXCJcclxuICAgICAgICAgICAgICAoYWRkcmVzc0lkQ2hhbmdlKT1cIm9uQWR2b2NhdGVBZGRyZXNzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFtvdXRsaW5lXT1cInRydWVcIiBcclxuICAgICAgICAgICAgICByZWFkb25seT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICBbcm93SGVpZ2h0XT1cIjgwXCIgXHJcbiAgICAgICAgICAgICAgKGlzVmFsaWQpPVwiZmFsc2VcIiBcclxuICAgICAgICAgICAgICBbYWRkcmVzc1ZhbGlkYXRvcnNdPVwiYWRkcmVzc1ZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgICNhZHZvY2F0ZUFkZHJlc3NDb21wb25lbnQgPlxyXG4gICAgICAgICAgICAgIDwvYXBwLXNtYXJ0LWFkZHJlc3M+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGJyPjxicj48YnI+IFxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgPG1hdC10YWIgIGxhYmVsPVwiRW1lcmdlbmN5IENvbnRhY3RcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbnRhaW5lcic+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5FbWVyZ2VuY3kgQ29udGFjdCBOYW1lOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBmb3JtQ29udHJvbE5hbWU9XCJlbWVyZ2VuY3lDb250YWN0XCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmVtZXJnZW5jeUNvbnRhY3RcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RW1lcmdlbmN5IFBob25lIE51bWJlcjo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtZXJnZW5jeUNvbnRhY3RQaG9uZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmVtZXJnZW5jeUNvbnRhY3RQaG9uZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwUGhvbmVNYXNrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZW1lcmdlbmN5Q29udGFjdFBob25lJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2VtZXJnZW5jeUNvbnRhY3RQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdlbWVyZ2VuY3lDb250YWN0UGhvbmUnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+RW1lcmdlbmN5IGNvbnRhY3QgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxicj48YnI+PGJyPiAgICBcclxuICAgICAgICAgICAgPC9tYXQtdGFiPiBcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz0nb3V0ZXInPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICBBbGwgYnV0dG9ucyBhcHBseSB0byBhbGwgdGFicy4gSWYgc2F2ZSBidXR0b24gaXMgZ3JleSwgcGxlYXNlIGNoZWNrIGVhY2ggdGFiIHRvIG1ha2Ugc3VyZSB0aGUgcmVxdWlyZWQgZmllbGQgaXMgZmlsbGVkLjxicj48YnI+XHJcblxyXG4gICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+SWYgdmljdGltIGEgbWlub3IgZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5JZiB2aWN0aW0gaGFzIGFkdm9jYXRlIGZpZWxkIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgndW5kZXJTdXBlcnZpc2lvbkZsYWcnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd1bmRlclN1cGVydmlzaW9uRmxhZycpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCd1bmRlclN1cGVydmlzaW9uRmxhZycpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5VbmRlciBzdXBlcnZpc2lvbiBmaWVsZCBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgPC9kaXY+IFxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ3ZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+UmVsYXRpb25zaGlwIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnbGFzdE5hbWUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5WaWN0aW0gbGFzdCBuYW1lIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZmlyc3ROYW1lJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZmlyc3ROYW1lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2ZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj52aWN0aW0gZmlyc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5GaXJzdE5hbWUnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkd1YXJkaWFuIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuTGFzdE5hbWUnKS5lcnJvcnNcclxuICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5MYXN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkxhc3ROYW1lJykudG91Y2hlZClcIiA+XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5HdWFyZGlhbiBsYXN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgIDwvZGl2PiBcclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUxhc3ROYW1lJykuZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlTGFzdE5hbWUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpLnRvdWNoZWQpXCIgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkFkdm9jYXRlIGxhc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLmVycm9yc1xyXG4gICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+QWR2b2NhdGUgZmlyc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ290aGVyV2VhcG9uJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+T3RoZXIgd2VhcG9uIGZpZWxkIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKS5lcnJvcnMgXHJcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWVycm9yPk90aGVyIGRydWcgZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2F2ZVZpY3RpbSgpXCIgW2Rpc2FibGVkXT1cIiF2aWN0aW1Gb3JtLnZhbGlkXCIgID5TYXZlIDwvYnV0dG9uPiBcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIGNsYXNzPVwiaW5uZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImRlbGV0ZVZpY3RpbSgpXCI+RGVsZXRlIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsgXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5DbGVhciA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsgXHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJiYWNrKClcIj5CYWNrPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJyPlxyXG4gICAgICAgIDxicj5cclxuXHJcbiAgICAgICAgPGRpdiBhbGlnbj1cInJpZ2h0XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICAoY2xpY2spPVwiYWRkQ29udGFjdCgpXCIgID5BZGQgdmljdGltIGNvbnRhY3Q8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2PlxyXG5cclxuICAgICAgICAgIDxtYXQtdGFibGUgI3RhYmxlIFtkYXRhU291cmNlXT1cImNvbnRhY3REYXRhU291cmNlXCIgY2xhc3M9XCJleGFtcGxlLXRhYmxlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29udGFjdERhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+Q29udGFjdCBEYXRlPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cuY29udGFjdERhdGUgfCBkYXRlfX0gPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ2aWN0aW1Db250YWN0TWV0aG9kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLWNlbGxcIj5Db250YWN0IE1ldGhvZDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy52aWN0aW1Db250YWN0TWV0aG9kfX0gPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm5leHRDb250YWN0RGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+TmV4dCBDb250YWN0IERhdGU8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cubmV4dENvbnRhY3REYXRlIHwgZGF0ZX19IDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdGFmZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+Q29udGFjdCBCeTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy5zdGFmZn19IDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNvbW1lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+Q29tbWVudDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+IHt7cm93LmNvbW1lbnR9fSA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjb250YWN0SWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPjwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIlsnY29udGFjdERhdGUnLCAndmljdGltQ29udGFjdE1ldGhvZCcsJ25leHRDb250YWN0RGF0ZScsICdzdGFmZicsICdjb21tZW50JywgJ2NvbnRhY3RJZCddXCIgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1yb3dcIj48L21hdC1oZWFkZXItcm93PlxyXG4gICAgICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczpbJ2NvbnRhY3REYXRlJywgJ3ZpY3RpbUNvbnRhY3RNZXRob2QnLCduZXh0Q29udGFjdERhdGUnLCAnc3RhZmYnLCAnY29tbWVudCcsICdjb250YWN0SWQnXTtcIiBjbGFzcz1cImV4YW1wbGUtcm93XCI+PC9tYXQtcm93PlxyXG4gICAgICAgICAgICA8L21hdC10YWJsZT5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gIDwvbWF0LWNhcmQtY29udGVudD5cclxuPC9tYXQtY2FyZD5cclxuIl19