@sunbird-cb/cbp-ai 0.1.119 → 0.1.120

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,8 +3,8 @@ import { MatTableDataSource } from '@angular/material/table';
3
3
  import { Validators } from '@angular/forms';
4
4
  import html2pdf from 'html2pdf.js';
5
5
  import { DeleteRoleMappingPopupComponent } from '../delete-role-mapping-popup/delete-role-mapping-popup.component';
6
- import { interval, of, concat, Subject } from 'rxjs';
7
- import { switchMap, takeWhile, tap } from 'rxjs/operators';
6
+ import { interval, of, concat, forkJoin, Subject } from 'rxjs';
7
+ import { catchError, switchMap, takeWhile, tap } from 'rxjs/operators';
8
8
  import { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "../../modules/shared/services/event.service";
@@ -117,6 +117,7 @@ export class RoleMappingGenerationComponent {
117
117
  this.workAllocationOrderDocumentMissing = false;
118
118
  this.showWorkAllocationOrderDocumentMissing = false;
119
119
  this.destroy$ = new Subject();
120
+ this.immediateFailureHandled = false;
120
121
  this.onDepartmentScroll = (event) => {
121
122
  const panel = event.target;
122
123
  if (panel.scrollTop + panel.clientHeight >= panel.scrollHeight - 60) {
@@ -643,6 +644,7 @@ export class RoleMappingGenerationComponent {
643
644
  }
644
645
  generateFinalRoleMapping() {
645
646
  this.apiLoading = true;
647
+ this.immediateFailureHandled = false;
646
648
  if (!this.roleMappingForm.valid) {
647
649
  this.roleMappingForm.markAllAsTouched();
648
650
  return;
@@ -707,6 +709,7 @@ export class RoleMappingGenerationComponent {
707
709
  if (data && data?.status === 'FAILED') {
708
710
  this.apiLoading = false;
709
711
  this.loading = false;
712
+ this.immediateFailureHandled = true; // takeWhile still forwards this same value to subscribe(); tell it to skip
710
713
  this.destroy$.next(); // 🛑 stop polling
711
714
  this.regenerateRoleMappingAfterFailedAndDelete();
712
715
  return;
@@ -719,6 +722,10 @@ export class RoleMappingGenerationComponent {
719
722
  data?.status !== 'FAILED', true // emit the final COMPLETED/FAILED response
720
723
  ))
721
724
  .subscribe(data => {
725
+ if (this.immediateFailureHandled) {
726
+ this.immediateFailureHandled = false; // already handled in tap() above; avoid double-handling this same emission
727
+ return;
728
+ }
722
729
  console.log('role mapping data--', data);
723
730
  if (this.firstApiResponse?.is_existing) {
724
731
  this.showWorkAllocationOrderDocumentMissing = false;
@@ -806,7 +813,10 @@ export class RoleMappingGenerationComponent {
806
813
  this.loading = false;
807
814
  this.apiLoading = false;
808
815
  this.destroy$.next(); // 🛑 stop polling
809
- this.showRoleMappingFailedPopup();
816
+ this.snackBar.open('Generation failed please try again later', 'X', {
817
+ duration: 3000,
818
+ panelClass: ['snackbar-error']
819
+ });
810
820
  return;
811
821
  }
812
822
  });
@@ -1063,45 +1073,41 @@ export class RoleMappingGenerationComponent {
1063
1073
  goToUploadDocument() {
1064
1074
  this.router.navigate(['/ai/upload-documents']);
1065
1075
  }
1066
- showRoleMappingFailedPopup() {
1067
- console.log('role mapping failed, try to regenerate role mapping?');
1068
- // alert('role mapping failed, try to regenerate role mapping?')
1069
- const dialogRef = this.dialog.open(DeleteRoleMappingPopupComponent, {
1070
- width: '400px',
1071
- data: { documents: this.documents, from: 'roleMappingFailed', },
1072
- panelClass: 'view-cbp-plan-popup',
1073
- minHeight: '300px',
1074
- maxHeight: '80vh',
1075
- disableClose: true // Optional: prevent closing with outside click
1076
- });
1077
- dialogRef.afterClosed().subscribe(result => {
1078
- if (result === 'saved') {
1079
- console.log('Changes saved!');
1080
- this.regenerateRoleMappingAfterFailedAndDelete();
1081
- this.loading = true;
1082
- }
1083
- else {
1084
- this.loading = false;
1085
- }
1086
- });
1087
- }
1088
1076
  regenerateRoleMappingAfterFailedAndDelete() {
1089
- this.sharedService.deleteRoleMappingByStateAndDepartment(this.roleMappingForm.value.ministry, this.roleMappingForm.value.departments).subscribe({
1090
- next: (res) => {
1091
- // Success handling
1092
- console.log('Success:', res);
1093
- this.loading = false;
1094
- this.firstApiResponse = [];
1095
- this.generateFinalRoleMapping();
1077
+ const stateCenterId = this.roleMappingForm.value.ministry;
1078
+ const departmentId = this.roleMappingForm.value.departments;
1079
+ this.sharedService.getRoleMappingByStateCenterAndDepartment(stateCenterId, departmentId).subscribe({
1080
+ next: (existingRoleMappings) => {
1081
+ const roleMappingIds = (Array.isArray(existingRoleMappings) ? existingRoleMappings : [])
1082
+ .map((roleMapping) => roleMapping?.id)
1083
+ .filter(Boolean);
1084
+ if (!roleMappingIds.length) {
1085
+ this.loading = false;
1086
+ this.firstApiResponse = null;
1087
+ this.generateFinalRoleMapping();
1088
+ return;
1089
+ }
1090
+ forkJoin(roleMappingIds.map((id) => this.sharedService.deleteCourseRecommendations(id).pipe(catchError((error) => {
1091
+ // A 404 just means this designation had no course recommendations yet.
1092
+ // Either way, one designation's delete failing shouldn't block the
1093
+ // regenerate retry for the rest.
1094
+ if (error?.status !== 404) {
1095
+ console.error(`Failed to delete course recommendations for role mapping ${id}`, error);
1096
+ }
1097
+ return of(null);
1098
+ })))).subscribe(() => {
1099
+ this.loading = false;
1100
+ this.firstApiResponse = null;
1101
+ this.generateFinalRoleMapping();
1102
+ });
1096
1103
  },
1097
1104
  error: (error) => {
1098
1105
  this.snackBar.open(error?.error?.detail, 'X', {
1099
1106
  duration: 3000,
1100
1107
  panelClass: ['snackbar-error']
1101
1108
  });
1102
- this.firstApiResponse = [];
1103
1109
  this.loading = false;
1104
- // this.generateFinalRoleMapping()
1110
+ this.firstApiResponse = null;
1105
1111
  }
1106
1112
  });
1107
1113
  }
@@ -1126,4 +1132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1126
1132
  type: ViewChild,
1127
1133
  args: ['departmentSelect', { static: false }]
1128
1134
  }] } });
1129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBdUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBaUIsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVcvRSxNQUFNLE9BQU8sOEJBQThCO0lBK0Z6QyxZQUNVLFFBQXNCLEVBQ3ZCLGFBQTRCLEVBQzNCLEVBQWUsRUFD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QWtDO1lBQ3BDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDZixDQUFDOytHQWx1Q1UsOEJBQThCO21HQUE5Qiw4QkFBOEIsMGVDcEIzQyxtbllBK05NOzs0RkQzTU8sOEJBQThCO2tCQUwxQyxTQUFTOytCQUNFLDZCQUE2QjtpUUFLSyxVQUFVO3NCQUFyRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRWpDLGVBQWU7c0JBQXZCLEtBQUs7Z0JBK0RJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRywyQkFBMkI7c0JBQXBDLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFTMkMsZ0JBQWdCO3NCQUFqRSxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IGh0bWwycGRmIGZyb20gJ2h0bWwycGRmLmpzJztcbmltcG9ydCB7IERlbGV0ZVJvbGVNYXBwaW5nUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwL2RlbGV0ZS1yb2xlLW1hcHBpbmctcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgb2YsIGNvbmNhdCwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlV2hpbGUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvbGVNYXBwaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3JvbGUtbWFwcGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJvbGUtbWFwcGluZy1nZW5lcmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvbGUtbWFwcGluZy1nZW5lcmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSb2xlTWFwcGluZ0dlbmVyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgncGRmQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwZGZDb250ZW50ITogRWxlbWVudFJlZjtcbiAgXG4gIEBJbnB1dCgpIGxvZ2luU3RhdHVzRmxhZyA9IGZhbHNlXG4gIHRpdGxlID0gJ3N1bmJpcmQtY2Itc3RhdGljd2ViJztcbiAgaXNNYWludGVuYW5jZVBhZ2U6IGFueVxuICBzZWxlY3RlZFZhbHVlID0gJydcbiAgc2VhcmNoVGV4dCA9ICcnXG4gIGRhdGFTb3VyY2U6IGFueVxuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFsnUmVxdWVzdElkJywgJ3RpdGxlJywgJ3JlcXVlc3RvcicsICdyZXF1ZXN0VHlwZScsXG4gICAgJ3JlcXVlc3RTdGF0dXMnLCAnYXNzaWduZWUnLCAncmVxdWVzdGVkT24nLCAnaW50ZXJlc3RzJywgJ2FjdGlvbiddXG4gIHNlbGVjdGVkTWluaXN0cnlUeXBlOiBzdHJpbmcgPSAnbWluaXN0cnknO1xuICBtaW5pc3RyeURhdGE6IGFueSA9IFtdXG4gIG1pbmlzdHJ5RnVsbERhdGE6IGFueSA9IFtdXG4gIHJvbGVNYXBwaW5nRm9ybSE6IEZvcm1Hcm91cDtcbiAgZGlzYWJsZUJ0biA9IHRydWVcbiAgc2VjdG9yRGF0YSA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogJ1dvbWVuIGFuZCBjaGlsZCBkZXZlbG9wbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnUnVyYWwgZGV2ZWxvcG1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ1VyYmFuIGRldmVsb3BtZW50J1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdIZWFsdGhjYXJlJ1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdBZ3JpY3VsdHVyZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnT3RoZXJzJ1xuICAgIH1cblxuICBdXG4gIGRlcGFydG1lbnREYXRhOiBhbnlbXSA9IFtdXG4gIGxvYWRpbmcgPSBmYWxzZVxuICBtYXhGaWxlU2l6ZU1CID0gMjU7XG4gIGFsbG93ZWRUeXBlcyA9IFtcbiAgICAnYXBwbGljYXRpb24vcGRmJyxcbiAgICAnYXBwbGljYXRpb24vbXN3b3JkJyxcbiAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuICAgICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG4gICAgJ3RleHQvcGxhaW4nXG4gIF07XG4gIHVwbG9hZEVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgdXBsb2FkZWRGaWxlOiBGaWxlW10gfCBudWxsID0gbnVsbDtcbiAgbG9naW4gPSBmYWxzZVxuICBjYnBGaW5hbE9iajogYW55ID0ge31cbiAgc2VsZWN0ZWRNaW5pc3RyeUlkID0gJydcbiAgb3JpZ2luYWxGb3JtVmFsdWVzOiBhbnlcbiAgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBmdWxsSnNvbjogc3RyaW5nID0gJyc7XG4gIHBhcnNlZERhdGE6IGFueTtcbiAgY3VycmVudFByb2Nlc3NpbmdTdGFnZTogc3RyaW5nID0gJyc7XG4gIHByb2Nlc3NpbmdTdGFnZXMgPSBbXG4gICAgJ0luaXRpYWxpemluZyBDQlAgUGxhbiBnZW5lcmF0aW9uLi4uJyxcbiAgICAnQW5hbHl6aW5nIGRlcGFydG1lbnRhbCBjb21wZXRlbmN5IHJlcXVpcmVtZW50cy4uLicsXG4gICAgJ1Byb2Nlc3Npbmcgd29yayBvcmRlciBzcGVjaWZpY2F0aW9ucyBhbmQgcm9sZSBkZWZpbml0aW9ucy4uLicsXG4gICAgJ0dlbmVyYXRpbmcgZGV0YWlsZWQgcm9sZXMgJiByZXNwb3NpYmlsaXRpZXMuLi4nLFxuICAgICdHZW5lcmF0aW5nIGRldGFpbGVkIGNvbXBldGVuY2llcy4uLicsXG4gICAgJ1ZhbGlkYXRpbmcgcm9sZSBtYXBwaW5nICBhbmQgZmluYWxpemluZyB0aGUgQ0JQIFBsYW4nXG4gIF07XG4gIEBPdXRwdXQoKSBzdWNjZXNzUm9sZU1hcHBpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIGxvZ2luU3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIHNlbGVjdGVkTWluaXN0cnlPYmo6IGFueSA9ICcnXG4gIGxvZ2luVXNlck9yZ0lkcyA9IFtdXG4gIHBhbmVsT3BlbiA9IGZhbHNlO1xuICBkZXBhcnRtZW50UGFuZWxPcGVuID0gZmFsc2VcbiAgZmlsdGVyZWRMaXN0ID0gW107XG4gIGZpbHRlcmVkRGVwYXJ0bWVudExpc3Q6IGFueVtdID0gW107XG4gIHNlbGVjdGVkRGVwYXJ0bWVudE9iajogYW55ID0gbnVsbFxuICBwaW5uZWREZXBhcnRtZW50T3B0aW9uczogYW55W10gPSBbXVxuICBAVmlld0NoaWxkKCdkZXBhcnRtZW50U2VsZWN0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGRlcGFydG1lbnRTZWxlY3QhOiBNYXRTZWxlY3Q7XG4gIGRlcGFydG1lbnRQYWdlU2l6ZSA9IDUwXG4gIGRlcGFydG1lbnRPZmZzZXQgPSAwXG4gIGRlcGFydG1lbnRIYXNNb3JlID0gdHJ1ZVxuICBkZXBhcnRtZW50TG9hZGluZyA9IGZhbHNlXG4gIGRlcGFydG1lbnRTZWFyY2hRdWVyeSA9ICcnXG4gIGRlcGFydG1lbnRNaW5pc3RyeUlkID0gJydcbiAgcHJpdmF0ZSBkZXBhcnRtZW50U2VhcmNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKVxuICBwcml2YXRlIGRlcGFydG1lbnRSZXF1ZXN0SWQgPSAwXG4gIG9yaWdpbmFsTWluaXN0cnlEYXRhID0gW11cbiAgYXBpTG9hZGluZyA9IGZhbHNlXG4gIGZpcnN0QXBpUmVzcG9uc2U6IGFueSA9IG51bGxcbiAgZG9jdW1lbnRzID0gW11cbiAgZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICBkaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgd29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gIHNob3dXb3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gZmFsc2VcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgICBwdWJsaWMgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHVibGljIHJvbGVNYXBwaW5nU2VydmljZTogUm9sZU1hcHBpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7XG4gICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oW10pXG4gICAgdGhpcy5pc01haW50ZW5hbmNlUGFnZSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvbWFpbnRlbmFuY2UnKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICB0aGlzLmRlcGFydG1lbnRTZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICApLnN1YnNjcmliZSgocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5kZXBhcnRtZW50U2VhcmNoUXVlcnkgPSBxdWVyeVxuICAgICAgdGhpcy5sb2FkRGVwYXJ0bWVudHModHJ1ZSlcbiAgICB9KVxuXG4gICAgdGhpcy5sb2dpbiA9IHRoaXMuc2hhcmVkU2VydmljZS5jaGVja0lmTG9naW4oKVxuXG4gICAgdGhpcy5jYnBGaW5hbE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDQlBQbGFuTG9jYWxTdG9yYWdlKClcbiAgICBpZiAodGhpcy5jYnBGaW5hbE9iaiAmJiB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeSAmJiB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlKSB7XG5cblxuICAgICAgdGhpcy5lZGl0TWluaXN0cnlGb3JtKClcbiAgICAgIC8vIHRoaXMuZ2V0TWluaXN0cnlEYXRhKClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMubG9naW4pIHtcbiAgICAgICAgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgICAgfVxuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgbWluaXN0cnlUeXBlOiBbJ21pbmlzdHJ5JywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIG1pbmlzdHJ5OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHNlY3RvcnM6IFtbXV0sXG4gICAgICAgIGRlcGFydG1lbnRzOiBbJyddLCAvLyBzaG93biBvbmx5IGlmIG1pbmlzdHJ5VHlwZSA9PSAnc3RhdGUnXG4gICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzOiBbJyddLFxuICAgICAgICBhZGRpdGlvbmFsX2RvY3VtZW50OiBbXVxuICAgICAgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh0eXBlID0+IHtcbiAgICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoe1xuICAgICAgICAgIG1pbmlzdHJ5VHlwZTogdHlwZSwgLy8gS2VlcCB0aGUgY2hhbmdlZCB2YWx1ZVxuICAgICAgICAgIG1pbmlzdHJ5OiBudWxsLFxuICAgICAgICAgIHNlY3RvcnM6IFtdLFxuICAgICAgICAgIGRlcGFydG1lbnRzOiBbXSxcbiAgICAgICAgICBhZGRpdGlvbmFsRGV0YWlsczogJycsXG4gICAgICAgICAgYWRkaXRpb25hbF9kb2N1bWVudDogW11cbiAgICAgICAgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pOyAvLyBhdm9pZCByZS1lbWl0dGluZyBtaW5pc3RyeVR5cGUncyBvd24gdmFsdWVDaGFuZ2VzIGFuZCByZWN1cnNpbmcgaW5maW5pdGVseVxuICAgIGlmICh0eXBlID09PSAnc3RhdGUnKSB7XG4gIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xufSBlbHNlIHtcbiAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWx1ZShbXSk7XG4gIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xufVxuICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHN0YXR1czogYW55KSA9PiB7XG4gICAgICAgIGxldCBoYXNVcGxvYWREb2N1bWVudHMgPSBmYWxzZVxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBoYXNVcGxvYWREb2N1bWVudHMgPVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcvdXBsb2FkLWRvY3VtZW50cycpO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc1VwbG9hZERvY3VtZW50cykge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jaGVja1JvbGVNYXBwaW5nRm9ybVZhbGlkYXRpb24ubmV4dChzdGF0dXMpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfVxuXG5cblxuXG5cblxuICB9XG5cbiAgZ2V0VXBsb2FkZWREb2N1bWVudHMoKSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZTtcbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlXG4gICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICBzdGF0ZV9jZW50ZXJfaWQ6IGZvcm1EYXRhLm1pbmlzdHJ5LFxuICAgICAgaW5jbHVkZV9zdW1tYXJ5OiB0cnVlLFxuICAgICAgc2tpcDogMCxcbiAgICAgIGxpbWl0OiAyMDBcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBmb3JtRGF0YT8uZGVwYXJ0bWVudHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXFCb2R5WydkZXBhcnRtZW50X2lkJ10gPSBmb3JtRGF0YT8uZGVwYXJ0bWVudHNcbiAgICB9XG4gICAgdGhpcy5hcGlMb2FkaW5nID0gdHJ1ZVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFVwbG9hZGVkRG9jdW1lbnRzKHJlcUJvZHkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcz8uaXRlbXMgJiYgcmVzPy5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIGxldCB3QU9Db3VudCA9IDBcbiAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kb2N1bWVudHMgPSByZXM/Lml0ZW1zXG5cbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZG9jdW1lbnRzJywgdGhpcy5kb2N1bWVudHMpXG4gICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZG9jdW1lbnRzLmZvckVhY2goKGl0ZW0pPT57XG4gICAgICAgICAgaWYoaXRlbT8uZG9jdW1lbnRfdHlwZSA9PT0gJ1dvcmsgQWxsb2NhdGlvbiBPcmRlcicpIHtcbiAgICAgICAgICAgIHdBT0NvdW50ID13QU9Db3VudCsxXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmKHdBT0NvdW50IDwgMSkge1xuICAgICAgICAgIHRoaXMud29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5kb2N1bWVudHMtLScsIHRoaXMuZG9jdW1lbnRzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudHMgPSBbXVxuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBlZGl0TWluaXN0cnlGb3JtKCkge1xuICAgIGlmICh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeS5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeScpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeS5zYk9yZ1R5cGVcbiAgICAgIGF3YWl0IHRoaXMuZ2V0TWluaXN0cnlEYXRhKClcbiAgICAgIGlmICh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlKSB7XG4gICAgICAgIHRoaXMuZGVwYXJ0bWVudE1pbmlzdHJ5SWQgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllclxuICAgICAgICB0aGlzLmxvYWREZXBhcnRtZW50cyh0cnVlKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBtaW5pc3RyeVR5cGU6IFt0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgbWluaXN0cnk6IFt0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHNlY3RvcnM6IFtbXV0sXG4gICAgICAgIGRlcGFydG1lbnRzOiBbdGhpcy5jYnBGaW5hbE9iaj8uZGVwYXJ0bWVudHNdLCAvLyBzaG93biBvbmx5IGlmIG1pbmlzdHJ5VHlwZSA9PSAnc3RhdGUnXG4gICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzOiBbJyddXG4gICAgICB9KTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChzdGF0dXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgaGFzVXBsb2FkRG9jdW1lbnRzID0gZmFsc2VcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaGFzVXBsb2FkRG9jdW1lbnRzID1cbiAgICAgICAgICAgIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnL3VwbG9hZC1kb2N1bWVudHMnKTtcblxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoYXNVcGxvYWREb2N1bWVudHMpIHtcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2hlY2tSb2xlTWFwcGluZ0Zvcm1WYWxpZGF0aW9uLm5leHQoc3RhdHVzKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ1ZBTElEJykge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IHRydWVcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgLy8gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh0eXBlID0+IHtcbiAgICAgIC8vICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoe1xuICAgICAgLy8gICAgIG1pbmlzdHJ5VHlwZTogdHlwZSwgLy8gS2VlcCB0aGUgY2hhbmdlZCB2YWx1ZVxuICAgICAgLy8gICAgIG1pbmlzdHJ5OiBudWxsLFxuICAgICAgLy8gICAgIHNlY3RvcnM6IFtdLFxuICAgICAgLy8gICAgIGRlcGFydG1lbnRzOiBbXSxcbiAgICAgIC8vICAgICBhZGRpdGlvbmFsRGV0YWlsczogJydcbiAgICAgIC8vICAgfSk7XG4gICAgICAvLyAgIGlmICh0eXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIC8vIH0pO1xuXG4gICAgICBpZiAodGhpcy5taW5pc3RyeURhdGEgJiYgdGhpcy5taW5pc3RyeURhdGEubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeUlkID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXJcbiAgICAgIH1cblxuICAgICAgLy90aGlzLm9uR2VuZXJhdGVSb2xlTWFwcGluZygpXG4gICAgfSBlbHNlIGlmICh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZVxuICAgICAgYXdhaXQgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgICAgdGhpcy5kZXBhcnRtZW50TWluaXN0cnlJZCA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyXG4gICAgICB0aGlzLmxvYWREZXBhcnRtZW50cyh0cnVlKVxuICAgICAgaWYgKHRoaXMubWluaXN0cnlEYXRhICYmIHRoaXMubWluaXN0cnlEYXRhLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlJZCA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyXG4gICAgICB9XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBtaW5pc3RyeVR5cGU6IFt0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgbWluaXN0cnk6IFt0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHNlY3RvcnM6IFtbXV0sXG4gICAgICAgIGRlcGFydG1lbnRzOiBbdGhpcy5jYnBGaW5hbE9iaj8uZGVwYXJ0bWVudHNdLCAvLyBzaG93biBvbmx5IGlmIG1pbmlzdHJ5VHlwZSA9PSAnc3RhdGUnXG4gICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzOiBbdGhpcy5jYnBGaW5hbE9iaj8uYWRkaXRpb25hbERldGFpbHNdXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHN0YXR1czogYW55KSA9PiB7XG4gICAgICAgIGxldCBoYXNVcGxvYWREb2N1bWVudHMgPSBmYWxzZVxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBoYXNVcGxvYWREb2N1bWVudHMgPVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcvdXBsb2FkLWRvY3VtZW50cycpO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc1VwbG9hZERvY3VtZW50cykge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jaGVja1JvbGVNYXBwaW5nRm9ybVZhbGlkYXRpb24ubmV4dChzdGF0dXMpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgfSk7XG5cbiAgICAgIC8vIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICAvLyB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgLy8gICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCh7XG4gICAgICAvLyAgICAgbWluaXN0cnlUeXBlOiB0eXBlLCAvLyBLZWVwIHRoZSBjaGFuZ2VkIHZhbHVlXG4gICAgICAvLyAgICAgbWluaXN0cnk6IG51bGwsXG4gICAgICAvLyAgICAgc2VjdG9yczogW10sXG4gICAgICAvLyAgICAgZGVwYXJ0bWVudHM6IFtdLFxuICAgICAgLy8gICAgIGFkZGl0aW9uYWxEZXRhaWxzOiAnJ1xuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgaWYgKHR5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgLy8gfSk7XG4gICAgICBjb25zb2xlLmxvZygndGhpcy5taW5pc3RyeURhdGEnLCB0aGlzLm1pbmlzdHJ5RGF0YSlcbiAgICAgIGlmICh0aGlzLm1pbmlzdHJ5RGF0YSAmJiB0aGlzLm1pbmlzdHJ5RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5SWQgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9yaWdpbmFsRm9ybVZhbHVlcyA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgdGhpcy5nZXRVcGxvYWRlZERvY3VtZW50cygpXG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmxvZ2luID0gdGhpcy5sb2dpblN0YXR1c0ZsYWdcblxuICB9XG5cbiAgZ2V0Q2hhbmdlZEZpZWxkcyhvcmlnaW5hbDogYW55LCBjdXJyZW50OiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2hhbmdlZEtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcmlnaW5hbCkge1xuICAgICAgaWYgKCFvcmlnaW5hbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsW2tleV07XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjdXJyZW50W2tleV07XG5cbiAgICAgIC8vIEZvciBhcnJheXMgYW5kIG9iamVjdHMsIHVzZSBKU09OLnN0cmluZ2lmeSAob3IgbG9kYXNoIGlzRXF1YWwgZm9yIGRlZXAgY29tcGFyaXNvbilcbiAgICAgIGNvbnN0IGlzRXF1YWwgPVxuICAgICAgICB0eXBlb2Ygb3JpZ2luYWxWYWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsVmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgOiBvcmlnaW5hbFZhbHVlID09PSBjdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmICghaXNFcXVhbCkge1xuICAgICAgICBjaGFuZ2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZWRLZXlzO1xuICB9XG5cbiAgb25HZW5lcmF0ZVJvbGVNYXBwaW5nKCk6IGFueSB7XG5cbiAgICBjb25zdCBjdXJyZW50Rm9ybVZhbHVlcyA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgY29uc3QgZm9ybURhdGE6IGFueSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdtaW5pc3RyeVR5cGUnLCBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeVR5cGUpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnbWluaXN0cnknLCBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdzZWN0b3JzJywgSlNPTi5zdHJpbmdpZnkoY3VycmVudEZvcm1WYWx1ZXMuc2VjdG9ycykpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVwYXJ0bWVudHMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cykpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnYWRkaXRpb25hbERldGFpbHMnLCBjdXJyZW50Rm9ybVZhbHVlcy5hZGRpdGlvbmFsRGV0YWlscyB8fCAnJyk7XG4gICAgY29uc3QgZmlsZTogRmlsZSA9IHRoaXMudXBsb2FkZWRGaWxlIHx8IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpPy52YWx1ZTtcbiAgICBjb25zb2xlLmxvZygnZmlsZScsIGZpbGUpXG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGUpO1xuICAgIH1cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gY3VycmVudEZvcm1WYWx1ZXM/LmRlcGFydG1lbnRzXG4gICAgY29uc3QgZGVwYXJ0bWVudE5hbWUgPSB0aGlzLmRlcGFydG1lbnREYXRhLmZpbmQodSA9PiB1LmlkZW50aWZpZXIgPT09IGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzKTtcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50X25hbWUnXSA9IGRlcGFydG1lbnROYW1lPy5vcmdOYW1lXG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5pc3RyeSA9IHRoaXMubWluaXN0cnlEYXRhLmZpbmQoaXRlbSA9PlxuICAgICAgaXRlbS5pZGVudGlmaWVyID09PSBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeVxuICAgICk7XG5cbiAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlPYmogPSBzZWxlY3RlZE1pbmlzdHJ5O1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5J10gPSBzZWxlY3RlZE1pbmlzdHJ5XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnJvbGVNYXBwaW5nRm9ybScsIHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgIGNvbnNvbGUubG9nKCdmb3JtRGF0YS0tJywgZm9ybURhdGEpXG4gICAgZm9yIChjb25zdCBwYWlyIG9mIGZvcm1EYXRhLmVudHJpZXMoKSkge1xuICAgICAgY29uc29sZS5sb2coYCR7cGFpclswXX06YCwgcGFpclsxXSk7XG4gICAgfVxuXG5cbiAgICBjb25zdCBjaGFuZ2VkRmllbGRzID0gdGhpcy5nZXRDaGFuZ2VkRmllbGRzKHRoaXMub3JpZ2luYWxGb3JtVmFsdWVzLCBjdXJyZW50Rm9ybVZhbHVlcyk7XG5cbiAgICBpZiAoY2hhbmdlZEZpZWxkcy5sZW5ndGggPiAwIHx8IChmaWxlICYmIGZpbGUuc2l6ZSA+IDApKSB7XG4gICAgICBjb25zb2xlLmxvZygnY2hhbmdlZEZpZWxkcycsIGNoYW5nZWRGaWVsZHMpXG4gICAgICBjb25zb2xlLmxvZygnQ2hhbmdlZCBmaWVsZHM6JywgY2hhbmdlZEZpZWxkcyk7XG4gICAgICBpZiAoY2hhbmdlZEZpZWxkcy5pbmNsdWRlcygnYWRkaXRpb25hbERldGFpbHMnKSAmJiB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5hZGRpdGlvbmFsRGV0YWlscz8udHJpbSgpIHx8IChmaWxlICYmIGZpbGUuc2l6ZSA+IDApKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgICAgIGRhdGE6IHtkb2N1bWVudHM6IHRoaXMuZG9jdW1lbnRzfSxcbiAgICAgICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICAgICAgbWluSGVpZ2h0OiAnMzAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgICAgICBtYXhIZWlnaHQ6ICc4MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZGVsZXRlUm9sZU1hcHBpbmdCeVN0YXRlQW5kRGVwYXJ0bWVudCh0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5taW5pc3RyeSwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWUuZGVwYXJ0bWVudHMpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IFtdXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICBjb25zb2xlLmxvZygnTm8gY2hhbmdlcyBkZXRlY3RlZC4nKTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgZ2V0TWluaXN0cnlEYXRhKCkge1xuICAgIHRoaXMuYXBpTG9hZGluZyA9IHRydWVcbiAgICBjb25zdCByZXF1ZXN0ZWRUeXBlID0gdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldE1pbmlzdHJ5RGF0YShyZXF1ZXN0ZWRUeXBlKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZGF0YS0tJywgZGF0YSlcbiAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy8gSWdub3JlIHN0YWxlIHJlc3BvbnNlcyBmcm9tIGEgdHlwZSB0aGF0IHdhcyBjaGFuZ2VkIGFnYWluIGJlZm9yZSB0aGlzIG9uZSByZXR1cm5lZFxuICAgICAgICBpZiAocmVxdWVzdGVkVHlwZSAhPT0gdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSkge1xuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWluaXN0cnlGdWxsRGF0YSA9IGRhdGFcbiAgICAgICAgdGhpcy5taW5pc3RyeURhdGEgPSBbXVxuICAgICAgICBpZiAocmVxdWVzdGVkVHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgICAgICAgICB0aGlzLm1pbmlzdHJ5RGF0YS5wdXNoKGl0ZW0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0ZWRUeXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAgICAgZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uc2JPcmdUeXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAgICAgICAgIHRoaXMubWluaXN0cnlEYXRhLnB1c2goaXRlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nZXRVc2VyUHJvZmlsZURhdGEocmVxdWVzdGVkVHlwZSwgcmVzb2x2ZSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIG9uTWluaXN0cnlUeXBlQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQpXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydtaW5pc3RyeVR5cGUnXSA9IGV2ZW50LnZhbHVlXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsncm9sZV9tYXBwaW5nX2dlbmVyYXRpb24nXSA9IFtdXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJvbGVNYXBwaW5nR2VuZXJhdGlvbkRhdGEgPSBbXVxuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPSBldmVudC52YWx1ZVxuICAgIHRoaXMubWluaXN0cnlEYXRhID0gW11cblxuICAgIGlmICh0aGlzLmxvZ2luKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldE1pbmlzdHJ5RGF0YSgpXG4gICAgfVxuXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgIGlmIChldmVudD8udmFsdWUgPT09ICdzdGF0ZScpIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnknKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWx1ZShbXSk7XG4gICAgfSBlbHNlIGlmIChldmVudD8udmFsdWUgPT09ICdtaW5pc3RyeScpIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnknKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWx1ZShbXSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnknXSA9ICcnXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSAnJ1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSAnJ1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKSlcbiAgICAvLyB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCgpXG4gICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeSkge1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIC8vICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IHRydWVcbiAgICAgICAgLy8gICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gdHJ1ZVxuICAgICAgfSwgNTAwMClcbiAgICB9XG4gIH1cblxuICBvbk1pbmlzdHJ5Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5SWQgPSBldmVudC52YWx1ZTtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgTWluaXN0cnkgSUQ6Jywgc2VsZWN0ZWRNaW5pc3RyeUlkKTtcbiAgICB0aGlzLmRlcGFydG1lbnREYXRhID0gW11cbiAgICAvLyBZb3UgY2FuIGFjY2VzcyB0aGUgc2VsZWN0ZWQgb2JqZWN0IGlmIG5lZWRlZFxuICAgIGNvbnN0IHNlbGVjdGVkTWluaXN0cnkgPSB0aGlzLm1pbmlzdHJ5RGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZGVudGlmaWVyID09PSBzZWxlY3RlZE1pbmlzdHJ5SWQpO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeU9iaiA9IHNlbGVjdGVkTWluaXN0cnlcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgTWluaXN0cnk6Jywgc2VsZWN0ZWRNaW5pc3RyeSk7IGBgXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnknXSA9IHNlbGVjdGVkTWluaXN0cnlcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID0gW11cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2Uucm9sZU1hcHBpbmdHZW5lcmF0aW9uRGF0YSA9IFtdXG4gICAgLy8gU2VsZWN0aW5nIGEgZGlmZmVyZW50IG1pbmlzdHJ5L3N0YXRlIGludmFsaWRhdGVzIGFueSBwcmV2aW91c2x5IHNlbGVjdGVkIGRlcGFydG1lbnRcbiAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWREZXBhcnRtZW50T2JqID0gbnVsbFxuICAgIHRoaXMucGlubmVkRGVwYXJ0bWVudE9wdGlvbnMgPSBbXVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gJydcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gJydcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgaWYgKHNlbGVjdGVkTWluaXN0cnlJZCAmJiAodGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJyB8fCB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknKSkge1xuICAgICAgdGhpcy5kZXBhcnRtZW50TWluaXN0cnlJZCA9IHNlbGVjdGVkTWluaXN0cnlJZFxuICAgICAgdGhpcy5kZXBhcnRtZW50U2VhcmNoUXVlcnkgPSAnJ1xuICAgICAgdGhpcy5maWx0ZXJlZERlcGFydG1lbnRMaXN0ID0gW11cbiAgICAgIHRoaXMubG9hZERlcGFydG1lbnRzKHRydWUpXG4gICAgfVxuXG4gICAgdGhpcy5nZXRVcGxvYWRlZERvY3VtZW50cygpXG4gICAgY29uc29sZS5sb2coJ0dlbmVyYXRlIENCUCB2YWxpZGF0aW9uOicsIHtcbiAgZm9ybVZhbGlkOiB0aGlzLnJvbGVNYXBwaW5nRm9ybT8udmFsaWQsXG4gIGZvcm1JbnZhbGlkOiB0aGlzLnJvbGVNYXBwaW5nRm9ybT8uaW52YWxpZCxcbiAgbG9hZGluZzogdGhpcy5sb2FkaW5nLFxuICBkb2N1bWVudHM6IHRoaXMuZG9jdW1lbnRzLFxuICBkb2N1bWVudHNMZW5ndGg6IHRoaXMuZG9jdW1lbnRzPy5sZW5ndGgsXG4gIGRpc2FibGVkOlxuICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtPy5pbnZhbGlkIHx8XG4gICAgdGhpcy5sb2FkaW5nIHx8XG4gICAgdGhpcy5kb2N1bWVudHM/Lmxlbmd0aCA8IDFcbn0pO1xuICB9XG5cbiAgc2VhcmNoRGF0YSgpIHtcblxuICB9XG5cbiAgYXBwbHlGaWx0ZXIoKSB7XG5cbiAgfVxuXG4gIGRvd25sb2FkUERGKCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBtYXJnaW46IDAuNSxcbiAgICAgIGZpbGVuYW1lOiAnQ0JQX1BsYW4ucGRmJyxcbiAgICAgIGltYWdlOiB7IHR5cGU6ICdqcGVnJywgcXVhbGl0eTogMC45OCB9LFxuICAgICAgaHRtbDJjYW52YXM6IHtcbiAgICAgICAgc2NhbGU6IDIsXG4gICAgICAgIHVzZUNPUlM6IHRydWUsICAvLyBJbXBvcnRhbnQgZm9yIGV4dGVybmFsIGltYWdlcy9pY29uc1xuICAgICAgfSxcbiAgICAgIGpzUERGOiB7XG4gICAgICAgIHVuaXQ6ICdpbicsXG4gICAgICAgIGZvcm1hdDogJ2E0JyxcbiAgICAgICAgb3JpZW50YXRpb246ICdwb3J0cmFpdCdcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaHRtbDJwZGYoKS5mcm9tKGVsZW1lbnQpLnNldChvcHRpb25zKS5zYXZlKCk7XG5cbiAgfVxuXG4gIG9uRmlsZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgZmlsZXM6IEZpbGVMaXN0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgIGNvbnN0IG1heEZpbGVzID0gMztcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk7XG5cbiAgICAvLyBBbHdheXMgY2xlYXIgY29udHJvbCBmaXJzdCAocHJldmVudHMgb2xkIHZhbGlkIHZhbHVlKVxuICAgIGNvbnRyb2w/LnJlc2V0KCk7XG4gICAgY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgIHRoaXMudXBsb2FkZWRGaWxlID0gW107XG4gICAgdGhpcy51cGxvYWRFcnJvciA9IG51bGw7XG5cbiAgICBpZiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gTGltaXQgY2hlY2tcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gbWF4RmlsZXMpIHtcbiAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSBgWW91IGNhbiB1cGxvYWQgYSBtYXhpbXVtIG9mICR7bWF4RmlsZXN9IGZpbGVzYDtcbiAgICAgIGNvbnRyb2w/LnNldEVycm9ycyh7IG1heEZpbGVzOiB0cnVlIH0pO1xuICAgICAgY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgICAgIGNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIGNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZEZpbGVzOiBGaWxlW10gPSBbXTtcbiAgICBjb25zdCBpbnZhbGlkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSB0aGlzLm1heEZpbGVTaXplTUIgKiAxMDI0ICogMTAyNDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcblxuICAgICAgLy8gU2l6ZSBjaGVja1xuICAgICAgaWYgKGZpbGUuc2l6ZSA+IG1heEJ5dGVzKSB7XG4gICAgICAgIGludmFsaWRGaWxlcy5wdXNoKGAke2ZpbGUubmFtZX0gKGV4Y2VlZHMgJHt0aGlzLm1heEZpbGVTaXplTUJ9TUIpYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUeXBlIGNoZWNrXG4gICAgICBpZiAoIXRoaXMuYWxsb3dlZFR5cGVzLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcbiAgICAgICAgaW52YWxpZEZpbGVzLnB1c2goYCR7ZmlsZS5uYW1lfSAoaW52YWxpZCB0eXBlKWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFsaWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgIH1cblxuICAgIC8vIOKdjCBOTyB2YWxpZCBmaWxlcyDihpIgZm9ybSBNVVNUIEJFIGludmFsaWRcbiAgICBpZiAodmFsaWRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSBgSW52YWxpZCBmaWxlKHMpOiAke2ludmFsaWRGaWxlcy5qb2luKCcsICcpfWA7XG5cbiAgICAgIGNvbnRyb2w/LnNldFZhbHVlKG51bGwpO1xuICAgICAgY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZEZpbGVzOiB0cnVlIH0pO1xuICAgICAgY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgICAgIGNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIGNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9LCA1MDAwKVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g4pyUIEF0IGxlYXN0IE9ORSB2YWxpZCBmaWxlIOKGkiBmb3JtIHNob3VsZCBiZSBWQUxJRFxuICAgIHRoaXMudXBsb2FkZWRGaWxlID0gdmFsaWRGaWxlcztcblxuICAgIGlmIChpbnZhbGlkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBTb21lIGZpbGVzIHdlcmUgc2tpcHBlZDogJHtpbnZhbGlkRmlsZXMuam9pbignLCAnKX1gO1xuICAgIH1cblxuICAgIGNvbnRyb2w/LnNldFZhbHVlKHZhbGlkRmlsZXMpO1xuICAgIGNvbnRyb2w/LnNldEVycm9ycyhudWxsKTtcbiAgICBjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICAgIGNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICBjb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgfVxuXG5cblxuXG5cblxuICBsb2dpblN0YXR1cyhldmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5sb2dpbiA9IHRydWVcbiAgICAgIHRoaXMubG9naW5TdWNjZXNzLmVtaXQodHJ1ZSlcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPSAnbWluaXN0cnknXG5cbiAgICAgIHRoaXMuZ2V0TWluaXN0cnlEYXRhKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dpbiA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKCkge1xuICAgIHRoaXMuYXBpTG9hZGluZyA9IHRydWU7XG5cbiAgICBpZiAoIXRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEZvcm1WYWx1ZXMgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgIGxldCBmb3JtVXBsb2FkRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgLy8gTWluaXN0cnkgc2VsZWN0aW9uXG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5pc3RyeSA9IHRoaXMubWluaXN0cnlEYXRhLmZpbmQoaXRlbSA9PlxuICAgICAgaXRlbS5pZGVudGlmaWVyID09PSBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeVxuICAgICk7XG5cbiAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlPYmogPSBzZWxlY3RlZE1pbmlzdHJ5O1xuXG4gICAgLy8gQXBwZW5kIGJhc2UgZmllbGRzXG4gICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdzdGF0ZV9jZW50ZXJfaWQnLCBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeSB8fCAnJyk7XG4gICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdzdGF0ZV9jZW50ZXJfbmFtZScsIHNlbGVjdGVkTWluaXN0cnk/Lm9yZ05hbWUgfHwgJycpO1xuXG4gICAgaWYgKGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzKSB7XG4gICAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ2RlcGFydG1lbnRfaWQnLCBjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cyk7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ2luc3RydWN0aW9uJywgY3VycmVudEZvcm1WYWx1ZXMuYWRkaXRpb25hbERldGFpbHMpO1xuICAgIH1cblxuICAgIC8vIEdldCB1cGxvYWRlZCBmaWxlKHMpXG4gICAgY29uc3QgZmlsZXM6IEZpbGUgfCBGaWxlW10gPVxuICAgICAgdGhpcy51cGxvYWRlZEZpbGUgfHwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnZhbHVlO1xuXG4gICAgY29uc29sZS5sb2coJ0ZpbGVzIHNlbGVjdGVkOicsIGZpbGVzKTtcblxuICAgIC8vIEFwcGVuZCBzaW5nbGUgb3IgbXVsdGlwbGUgZmlsZXNcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbGVzKSkge1xuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XG4gICAgICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZSwgZmlsZS5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnLCBmaWxlcywgZmlsZXMubmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVidWc6IHByaW50IEZvcm1EYXRhXG4gICAgY29uc29sZS5sb2coXCJGb3JtRGF0YSBEZWJ1ZzpcIik7XG4gICAgZm9ybVVwbG9hZERhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtrZXl9OiBGSUxFIC0+ICR7dmFsdWUubmFtZX0gKCR7dmFsdWUuc2l6ZX0gYnl0ZXMpYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtrZXl9OiAke3ZhbHVlfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG5cbiAgICAvLyBCdWlsZCByZXF1ZXN0IGJvZHkgZm9yIHBvbGxpbmcgQVBJXG4gICAgbGV0IHJlcTogYW55ID0ge1xuICAgICAgc3RhdGVfY2VudGVyX2lkOiBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeSxcbiAgICAgIGluc3RydWN0aW9uOiBjdXJyZW50Rm9ybVZhbHVlcy5hZGRpdGlvbmFsRGV0YWlscyxcbiAgICAgIHN0YXRlX2NlbnRlcl9uYW1lOiBzZWxlY3RlZE1pbmlzdHJ5Py5vcmdOYW1lXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnc3RhdGUnIHx8IGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzKSB7XG4gICAgICBjb25zdCBkZXBhcnRtZW50TmFtZSA9IHRoaXMuZGVwYXJ0bWVudERhdGEuZmluZChcbiAgICAgICAgZCA9PiBkLmlkZW50aWZpZXIgPT09IGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzXG4gICAgICApO1xuXG4gICAgICByZXEuZGVwYXJ0bWVudF9pZCA9IGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzIHx8ICcnO1xuICAgICAgcmVxLmRlcGFydG1lbnRfbmFtZSA9IGRlcGFydG1lbnROYW1lPy5vcmdOYW1lIHx8ICcnO1xuICAgIH1cblxuXG5cbiAgICAvLyBQb2xsaW5nIEFQSVxuICAgIGNvbmNhdChcbiAgICAgIG9mKG51bGwpLCAgICAgICAgICAgICAgLy8g8J+UpSBpbW1lZGlhdGUgZmlyc3QgZW1pc3Npb25cbiAgICAgIGludGVydmFsKDUwMDApICAgICAgICAgLy8g4o+xIHN1YnNlcXVlbnQgcG9sbGluZyBldmVyeSA1c1xuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnNoYXJlZFNlcnZpY2UuZ2VuZXJhdGVSb2xlTWFwcGluZyhyZXEsIGZpbGVzKSksXG4gICAgICAgIHRhcChkYXRhID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuZmlyc3RBcGlSZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gZGF0YTsgLy8g8J+RiCBzdG9yZSBmaXJzdCByZXNwb25zZVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZpcnN0IEFQSSByZXNwb25zZTonLCB0aGlzLmZpcnN0QXBpUmVzcG9uc2UpO1xuICAgICAgICAgICAgaWYoZGF0YSAmJiBkYXRhPy5zdGF0dXMgPT09ICdGQUlMRUQnKSB7XG4gICAgICAgICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7ICAgLy8g8J+bkSBzdG9wIHBvbGxpbmdcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2VuZXJhdGVSb2xlTWFwcGluZ0FmdGVyRmFpbGVkQW5kRGVsZXRlKClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlV2hpbGUoXG4gIChkYXRhOiBhbnkpID0+XG4gICAgZGF0YT8uc3RhdHVzICE9PSAnQ09NUExFVEVEJyAmJlxuICAgIGRhdGE/LnN0YXR1cyAhPT0gJ0ZBSUxFRCcsXG4gIHRydWUgLy8gZW1pdCB0aGUgZmluYWwgQ09NUExFVEVEL0ZBSUxFRCByZXNwb25zZVxuKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ3JvbGUgbWFwcGluZyBkYXRhLS0nLCBkYXRhKVxuICAgICAgICBpZiAodGhpcy5maXJzdEFwaVJlc3BvbnNlPy5pc19leGlzdGluZykge1xuICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHRoaXMuc2hvd1dvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpOyAgIC8vIPCfm5Egc3RvcCBwb2xsaW5nXG4gICAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgICAgICBkYXRhOiB7ZG9jdW1lbnRzOiB0aGlzLmRvY3VtZW50c30sXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICczMDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAnODB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcblxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5kZWxldGVSb2xlTWFwcGluZ0J5U3RhdGVBbmREZXBhcnRtZW50KHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLm1pbmlzdHJ5LCB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5kZXBhcnRtZW50cykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IFtdXG4gICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IFtdXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSB0aGlzLnJvdXRlci51cmw7XG5cbiAgICAgICAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCk7XG4gICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID1cbiAgICAgICAgICAgICAgICBkYXRhPy5yb2xlX21hcHBpbmdzO1xuICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uucm9sZU1hcHBpbmdHZW5lcmF0aW9uRGF0YSA9IGRhdGE/LnJvbGVfbWFwcGluZ3M7XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgICAgICdjYnBQbGFuRmluYWxPYmonLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSk7XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FpL2xpc3QnXSwge1xuICAgICAgICAgICAgICAgIG9uU2FtZVVybE5hdmlnYXRpb246ICdyZWxvYWQnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgIFxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMud29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZykge1xuICAgICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnNob3dXb3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gdHJ1ZVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhPy5zdGF0dXMgPT09ICdDT01QTEVURUQnKSB7XG4gICAgICAgICAgdGhpcy5zaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID1cbiAgICAgICAgICAgIGRhdGE/LnJvbGVfbWFwcGluZ3M7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJvbGVNYXBwaW5nR2VuZXJhdGlvbkRhdGEgPSBkYXRhPy5yb2xlX21hcHBpbmdzO1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgJ2NicFBsYW5GaW5hbE9iaicsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKTtcblxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ0JQIFBsYW4gZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSEnLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FpL2xpc3QnXSk7XG4gICAgICAgIH0gZWxzZSBpZihkYXRhICYmIGRhdGE/LnN0YXR1cyA9PT0gJ0ZBSUxFRCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpOyAgIC8vIPCfm5Egc3RvcCBwb2xsaW5nXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Um9sZU1hcHBpbmdGYWlsZWRQb3B1cCgpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVQcm9jZXNzaW5nU3RhZ2UoKSB7XG4gICAgY29uc3QgY2h1bmtDb3VudCA9IHRoaXMuY2h1bmtzLmxlbmd0aDtcbiAgICBsZXQgc3RhZ2VJbmRleCA9IDA7XG5cbiAgICAvLyBNdWNoIHNsb3dlciBzdGFnZSBwcm9ncmVzc2lvbiAtIHN0YWdlcyBzdGF5IG11Y2ggbG9uZ2VyXG4gICAgaWYgKGNodW5rQ291bnQgPD0gOCkge1xuICAgICAgc3RhZ2VJbmRleCA9IDA7IC8vIEluaXRpYWxpemluZyAtIHN0YXlzIGZvciBmaXJzdCA4IGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSAyMCkge1xuICAgICAgc3RhZ2VJbmRleCA9IDE7IC8vIEFuYWx5emluZyBjb21wZXRlbmN5IHJlcXVpcmVtZW50cyAtIDEyIGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSAzNSkge1xuICAgICAgc3RhZ2VJbmRleCA9IDI7IC8vIFByb2Nlc3Npbmcgd29yayBvcmRlciAtIDE1IGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSA1NSkge1xuICAgICAgc3RhZ2VJbmRleCA9IDM7IC8vIEdlbmVyYXRpbmcgcm9sZSBtYXBwaW5ncyAtIDIwIGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSA3NSkge1xuICAgICAgc3RhZ2VJbmRleCA9IDQ7IC8vIENvbXB1dGluZyBmaW5hbCByZWNvbW1lbmRhdGlvbnMgLSAyMCBjaHVua3NcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhZ2VJbmRleCA9IDU7IC8vIEZpbmFsaXppbmcgQ0JQIFBsYW4gLSA3NSsgY2h1bmtzXG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzW3N0YWdlSW5kZXhdO1xuICB9XG5cbiAgZ2V0UHJvZ3Jlc3NQZXJjZW50YWdlKCk6IG51bWJlciB7XG4gICAgY29uc3QgY2h1bmtDb3VudCA9IHRoaXMuY2h1bmtzLmxlbmd0aDtcbiAgICBpZiAoY2h1bmtDb3VudCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgICAvLyBNdWNoIHNsb3dlciBhbmQgc21vb3RoZXIgcHJvZ3Jlc3MgY2FsY3VsYXRpb25cbiAgICBsZXQgcGVyY2VudGFnZSA9IDA7XG5cbiAgICBpZiAoY2h1bmtDb3VudCA8PSAxNSkge1xuICAgICAgLy8gRmlyc3QgMTUgY2h1bmtzID0gMC0yNSUgKHZlcnkgc2xvdyBzdGFydClcbiAgICAgIHBlcmNlbnRhZ2UgPSAoY2h1bmtDb3VudCAvIDE1KSAqIDI1O1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSAzNSkge1xuICAgICAgLy8gTmV4dCAyMCBjaHVua3MgPSAyNS01MCUgKHNsb3cgZWFybHkgcHJvZ3Jlc3MpXG4gICAgICBwZXJjZW50YWdlID0gMjUgKyAoKGNodW5rQ291bnQgLSAxNSkgLyAyMCkgKiAyNTtcbiAgICB9IGVsc2UgaWYgKGNodW5rQ291bnQgPD0gNjApIHtcbiAgICAgIC8vIE5leHQgMjUgY2h1bmtzID0gNTAtNzUlIChzdGVhZHkgbWlkZGxlIHByb2dyZXNzKVxuICAgICAgcGVyY2VudGFnZSA9IDUwICsgKChjaHVua0NvdW50IC0gMzUpIC8gMjUpICogMjU7XG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDEwMCkge1xuICAgICAgLy8gTmV4dCA0MCBjaHVua3MgPSA3NS05MCUgKHNsb3dlciBmaW5hbCBhcHByb2FjaClcbiAgICAgIHBlcmNlbnRhZ2UgPSA3NSArICgoY2h1bmtDb3VudCAtIDYwKSAvIDQwKSAqIDE1O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCZXlvbmQgMTAwIGNodW5rcyA9IDkwLTk1JSAodmVyeSBzbG93IGZpbmFsIHByb2dyZXNzaW9uKVxuICAgICAgcGVyY2VudGFnZSA9IDkwICsgTWF0aC5taW4oKChjaHVua0NvdW50IC0gMTAwKSAvIDUwKSAqIDUsIDUpO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLnJvdW5kKHBlcmNlbnRhZ2UpO1xuICB9XG5cbiAgb25TdHJlYW1FbmQoKSB7XG4gICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0NvbXBsZXRpbmcgQ0JQIFBsYW4gZ2VuZXJhdGlvbi4uLic7XG5cbiAgICAvLyBTaG93IDEwMCUgY29tcGxldGlvbiBicmllZmx5IGJlZm9yZSBmaW5pc2hpbmdcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZnVsbEpzb24gPSB0aGlzLmNodW5rcy5qb2luKCcnKTtcbiAgICAgIGNvbnN0IGNsZWFuZWQgPSB0aGlzLmZ1bGxKc29uLnJlcGxhY2UoL15gYGBqc29uXFxuLywgJycpLnJlcGxhY2UoL2BgYCQvLCAnJyk7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnBhcnNlZERhdGEgPSBKU09OLnBhcnNlKGNsZWFuZWQpO1xuICAgICAgICBjb25zb2xlLmxvZygnUGFyc2VkIGRhdGE6JywgdGhpcy5wYXJzZWREYXRhKTtcblxuICAgICAgICAvLyBIYW5kbGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID0gdGhpcy5wYXJzZWREYXRhO1xuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uucm9sZU1hcHBpbmdHZW5lcmF0aW9uRGF0YSA9IHRoaXMucGFyc2VkRGF0YTtcblxuICAgICAgICB0aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKTtcblxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NCUCBQbGFuIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0pTT04gcGFyc2UgZXJyb3I6JywgZSk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBnZW5lcmF0ZSBDQlAgUGxhbi4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHByb2dyZXNzIHBlcmNlbnRhZ2UgaW5jbHVkaW5nIGNvbXBsZXRpb24gc3RhdGVcbiAgZ2V0RGlzcGxheVByb2dyZXNzUGVyY2VudGFnZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPT09ICdDb21wbGV0aW5nIENCUCBQbGFuIGdlbmVyYXRpb24uLi4nKSB7XG4gICAgICByZXR1cm4gMTAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRQcm9ncmVzc1BlcmNlbnRhZ2UoKTtcbiAgfVxuXG4gXG4gIHJlbW92ZUZpbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy51cGxvYWRlZEZpbGUgfHwgdGhpcy51cGxvYWRlZEZpbGUubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAvLyBSZW1vdmUgb25lIGZpbGUgYXQgdGhlIGdpdmVuIGluZGV4XG4gICAgdGhpcy51cGxvYWRlZEZpbGUuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIC8vIFVwZGF0ZSBmb3JtIGNvbnRyb2wgdmFsdWVcbiAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnKT8uc2V0VmFsdWUodGhpcy51cGxvYWRlZEZpbGUpO1xuICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cbiAgICAvLyBDbGVhciBlcnJvcnMgaWYgbm8gZmlsZXMgbGVmdFxuICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSAnJztcbiAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZERvYycpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoaW5wdXQpIGlucHV0LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG5cblxuICBnZXRVc2VyUHJvZmlsZURhdGEocmVxdWVzdGVkVHlwZT86IHN0cmluZywgZG9uZT86ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0VXNlclByb2ZpbGUoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdkYXRhLS0nLCBkYXRhKVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VzZXJQcm9maWxlJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gICAgICB0aGlzLmxvZ2luVXNlck9yZ0lkcyA9IGRhdGE/Lm9yZ2FuaXphdGlvbl9pZHNcbiAgICAgIC8vIElnbm9yZSBzdGFsZSByZXNwb25zZXMgZnJvbSBhIHR5cGUgdGhhdCB3YXMgY2hhbmdlZCBhZ2FpbiBiZWZvcmUgdGhpcyBvbmUgcmV0dXJuZWRcbiAgICAgIGlmIChyZXF1ZXN0ZWRUeXBlICYmIHJlcXVlc3RlZFR5cGUgIT09IHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUpIHtcbiAgICAgICAgZG9uZT8uKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBsZXQgZmlsdGVyZWRNaW5pc3RyeURhdGEgPSBbXVxuICAgICAgdGhpcy5taW5pc3RyeUZ1bGxEYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5sb2dpblVzZXJPcmdJZHMuaW5kZXhPZihpdGVtPy5pZGVudGlmaWVyKSA+IC0xICYmIGl0ZW0/LnNiT3JnVHlwZSA9PT0gKHJlcXVlc3RlZFR5cGUgfHwgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSkpIHtcbiAgICAgICAgICBmaWx0ZXJlZE1pbmlzdHJ5RGF0YS5wdXNoKGl0ZW0pXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHRoaXMubWluaXN0cnlEYXRhID0gZmlsdGVyZWRNaW5pc3RyeURhdGFcbiAgICAgIHRoaXMub3JpZ2luYWxNaW5pc3RyeURhdGEgPSBmaWx0ZXJlZE1pbmlzdHJ5RGF0YVxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSBmaWx0ZXJlZE1pbmlzdHJ5RGF0YTtcbiAgICAgIGRvbmU/LigpXG4gICAgfSlcbiAgfVxuXG4gIG9uT3BlbmVkKG9wZW5lZDogYm9vbGVhbikge1xuICAgIHRoaXMucGFuZWxPcGVuID0gb3BlbmVkO1xuICB9XG5cbiAgb25PcGVuZWREZXBhcnRtZW50KG9wZW5lZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGVwYXJ0bWVudFBhbmVsT3BlbiA9IG9wZW5lZFxuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kZXBhcnRtZW50U2VsZWN0ICYmIHRoaXMuZGVwYXJ0bWVudFNlbGVjdC5wYW5lbCAmJiB0aGlzLmRlcGFydG1lbnRTZWxlY3QucGFuZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudFNlbGVjdC5wYW5lbC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25EZXBhcnRtZW50U2Nyb2xsKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodGhpcy5kZXBhcnRtZW50U2VhcmNoUXVlcnkpIHtcbiAgICAgIC8vIHBhbmVsIGNsb3NlZCB3aXRoIGFuIGFjdGl2ZSBzZWFyY2g6IHJlc2V0IHNvIHRoZSBsaXN0IG1hdGNoZXMgdGhlIGNsZWFyZWQgc2VhcmNoIGJveCBvbiByZW9wZW5cbiAgICAgIHRoaXMuZGVwYXJ0bWVudFNlYXJjaFN1YmplY3QubmV4dCgnJylcbiAgICB9XG4gIH1cblxuICBvbkRlcGFydG1lbnRTY3JvbGwgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBhbmVsID0gZXZlbnQudGFyZ2V0XG4gICAgaWYgKHBhbmVsLnNjcm9sbFRvcCArIHBhbmVsLmNsaWVudEhlaWdodCA+PSBwYW5lbC5zY3JvbGxIZWlnaHQgLSA2MCkge1xuICAgICAgdGhpcy5sb2FkRGVwYXJ0bWVudHMoKVxuICAgIH1cbiAgfVxuXG4gIGxvYWREZXBhcnRtZW50cyhyZXNldCA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLmRlcGFydG1lbnRNaW5pc3RyeUlkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFyZXNldCAmJiAodGhpcy5kZXBhcnRtZW50TG9hZGluZyB8fCAhdGhpcy5kZXBhcnRtZW50SGFzTW9yZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmVzZXQpIHtcbiAgICAgIHRoaXMuZGVwYXJ0bWVudE9mZnNldCA9IDBcbiAgICAgIHRoaXMuZGVwYXJ0bWVudEhhc01vcmUgPSB0cnVlXG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RJZCA9ICsrdGhpcy5kZXBhcnRtZW50UmVxdWVzdElkXG4gICAgdGhpcy5kZXBhcnRtZW50TG9hZGluZyA9IHRydWVcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgbGltaXQ6IHRoaXMuZGVwYXJ0bWVudFBhZ2VTaXplLFxuICAgICAgb2Zmc2V0OiB0aGlzLmRlcGFydG1lbnRPZmZzZXQsXG4gICAgICBxdWVyeTogdGhpcy5kZXBhcnRtZW50U2VhcmNoUXVlcnlcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdtaW5pc3RyeSdcbiAgICAgID8gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENlbnRlckJhc2VkRGVwYXJ0bWVudCh0aGlzLmRlcGFydG1lbnRNaW5pc3RyeUlkLCBvcHRpb25zKVxuICAgICAgOiB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0RGVwYXJ0bWVudExpc3QodGhpcy5kZXBhcnRtZW50TWluaXN0cnlJZCwgb3B0aW9ucylcbiAgICByZXF1ZXN0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0SWQgIT09IHRoaXMuZGVwYXJ0bWVudFJlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVwYXJ0bWVudExvYWRpbmcgPSBmYWxzZVxuICAgICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmlzQXJyYXkocmVzKSA/IHJlcyA6IChyZXM/Lml0ZW1zIHx8IHJlcz8uZGF0YSB8fCBbXSlcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50SGFzTW9yZSA9IGl0ZW1zLmxlbmd0aCA9PT0gdGhpcy5kZXBhcnRtZW50UGFnZVNpemVcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50T2Zmc2V0ICs9IGl0ZW1zLmxlbmd0aFxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLmRlcGFydG1lbnREYXRhLnNvbWUoZCA9PiBkPy5pZGVudGlmaWVyID09PSBpdGVtPy5pZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgdGhpcy5kZXBhcnRtZW50RGF0YS5wdXNoKGl0ZW0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSByZXNldCA/IGl0ZW1zIDogWy4uLnRoaXMuZmlsdGVyZWREZXBhcnRtZW50TGlzdCwgLi4uaXRlbXNdXG4gICAgICAgIHRoaXMuZW5zdXJlU2VsZWN0ZWREZXBhcnRtZW50T3B0aW9uKClcbiAgICAgICAgaWYgKHJlc2V0ICYmICFpdGVtcy5sZW5ndGggJiYgIXRoaXMuZGVwYXJ0bWVudFNlYXJjaFF1ZXJ5ICYmIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdtaW5pc3RyeScpIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ05vIERlcGFydG1lbnQgRm91bmQgZm9yIFNlbGVjdGVkIE1pbmlzdHJ5JywgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gJydcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gJydcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdElkICE9PSB0aGlzLmRlcGFydG1lbnRSZXF1ZXN0SWQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlcGFydG1lbnRMb2FkaW5nID0gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gbWF0LXNlbGVjdCBvbmx5IGRpc3BsYXlzIGEgc2VsZWN0aW9uIHdoaWxlIGEgbWF0LW9wdGlvbiB3aXRoIHRoYXQgdmFsdWUgaXNcbiAgLy8gcmVuZGVyZWQ7IHdoZW4gdGhlIGN1cnJlbnQgc2VhcmNoL3BhZ2UgZnJvbSB0aGUgc2VydmVyIGRvZXMgbm90IGluY2x1ZGUgdGhlXG4gIC8vIHNlbGVjdGVkIGRlcGFydG1lbnQsIGl0IGlzIHJlbmRlcmVkIGFzIGEgaGlkZGVuIG9wdGlvbiBpbnN0ZWFkIG9mIGluIHRoZSBsaXN0XG4gIGVuc3VyZVNlbGVjdGVkRGVwYXJ0bWVudE9wdGlvbigpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0/LmdldCgnZGVwYXJ0bWVudHMnKT8udmFsdWVcbiAgICBpZiAoIXNlbGVjdGVkSWQgfHwgQXJyYXkuaXNBcnJheShzZWxlY3RlZElkKVxuICAgICAgfHwgdGhpcy5maWx0ZXJlZERlcGFydG1lbnRMaXN0LnNvbWUoZCA9PiBkPy5pZGVudGlmaWVyID09PSBzZWxlY3RlZElkKSkge1xuICAgICAgdGhpcy5waW5uZWREZXBhcnRtZW50T3B0aW9ucyA9IFtdXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmRlcGFydG1lbnREYXRhLmZpbmQoZCA9PiBkPy5pZGVudGlmaWVyID09PSBzZWxlY3RlZElkKVxuICAgICAgfHwgKHRoaXMuc2VsZWN0ZWREZXBhcnRtZW50T2JqPy5pZGVudGlmaWVyID09PSBzZWxlY3RlZElkID8gdGhpcy5zZWxlY3RlZERlcGFydG1lbnRPYmogOiBudWxsKVxuICAgICAgfHwgKHRoaXMuY2JwRmluYWxPYmo/LmRlcGFydG1lbnRfbmFtZSA/IHsgaWRlbnRpZmllcjogc2VsZWN0ZWRJZCwgb3JnTmFtZTogdGhpcy5jYnBGaW5hbE9iai5kZXBhcnRtZW50X25hbWUgfSA6IG51bGwpXG4gICAgdGhpcy5waW5uZWREZXBhcnRtZW50T3B0aW9ucyA9IHNlbGVjdGVkID8gW3NlbGVjdGVkXSA6IFtdXG4gIH1cblxuICBmaWx0ZXJEYXRhKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHMgPSBldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSB0aGlzLm1pbmlzdHJ5RGF0YS5maWx0ZXIoeCA9PlxuICAgICAgICB4Lm9yZ05hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSB0aGlzLm1pbmlzdHJ5RGF0YVxuICAgIH1cblxuICB9XG5cbiAgZmlsdGVyRGVwYXJ0bWVudERhdGEoZXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50ICYmIGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQudmFsdWUgPyBldmVudC50YXJnZXQudmFsdWUgOiAnJ1xuICAgIHRoaXMuZGVwYXJ0bWVudFNlYXJjaFN1YmplY3QubmV4dCh2YWx1ZS50cmltKCkpXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlJZCA9ICcnXG4gICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoKVxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpXG4gIH1cblxuICBvbkRlcGFydG1lbnRDaGFuZ2UoKSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZTtcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSBmb3JtRGF0YS5kZXBhcnRtZW50cyA/IGZvcm1EYXRhLmRlcGFydG1lbnRzIDogJydcbiAgICB0aGlzLmNicEZpbmFsT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKVxuICAgIGlmICh0aGlzLmNicEZpbmFsT2JqICYmIHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5ICYmIHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUpIHtcbiAgICAgIHRoaXMuY2JwRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSBmb3JtRGF0YS5kZXBhcnRtZW50cyA/IGZvcm1EYXRhLmRlcGFydG1lbnRzIDogJydcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5ID0gdGhpcy5taW5pc3RyeURhdGEuZmluZChpdGVtID0+IGl0ZW0uaWRlbnRpZmllciA9PT0gZm9ybURhdGEubWluaXN0cnkpO1xuXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydtaW5pc3RyeSddID0gc2VsZWN0ZWRNaW5pc3RyeVxuXG4gICAgY29uc3QgZGVwYXJ0bWVudE5hbWUgPSB0aGlzLmRlcGFydG1lbnREYXRhLmZpbmQodSA9PiB1LmlkZW50aWZpZXIgPT09IGZvcm1EYXRhLmRlcGFydG1lbnRzKTtcbiAgICBpZiAoZGVwYXJ0bWVudE5hbWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREZXBhcnRtZW50T2JqID0gZGVwYXJ0bWVudE5hbWVcbiAgICB9XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSBkZXBhcnRtZW50TmFtZT8ub3JnTmFtZVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKSlcbiAgICB0aGlzLmdldFVwbG9hZGVkRG9jdW1lbnRzKClcbiAgfVxuXG4gICBnb1RvVXBsb2FkRG9jdW1lbnQoKSB7XG4gICBcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9haS91cGxvYWQtZG9jdW1lbnRzJ10pO1xuICAgIFxuICB9XG5cbiAgc2hvd1JvbGVNYXBwaW5nRmFpbGVkUG9wdXAoKSB7XG4gICAgY29uc29sZS5sb2coJ3JvbGUgbWFwcGluZyBmYWlsZWQsIHRyeSB0byByZWdlbmVyYXRlIHJvbGUgbWFwcGluZz8nKVxuICAgLy8gYWxlcnQoJ3JvbGUgbWFwcGluZyBmYWlsZWQsIHRyeSB0byByZWdlbmVyYXRlIHJvbGUgbWFwcGluZz8nKVxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgICAgIGRhdGE6IHtkb2N1bWVudHM6IHRoaXMuZG9jdW1lbnRzLCBmcm9tOiAncm9sZU1hcHBpbmdGYWlsZWQnLH0sXG4gICAgICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLCAgICAgICAgICBcbiAgICAgICAgICBtaW5IZWlnaHQ6ICczMDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgICAgIG1heEhlaWdodDogJzgwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgICAgICB9KTtcbiAgICBcbiAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgICAgICAgIHRoaXMucmVnZW5lcmF0ZVJvbGVNYXBwaW5nQWZ0ZXJGYWlsZWRBbmREZWxldGUoKVxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gIH1cblxuICByZWdlbmVyYXRlUm9sZU1hcHBpbmdBZnRlckZhaWxlZEFuZERlbGV0ZSgpIHtcbiAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmRlbGV0ZVJvbGVNYXBwaW5nQnlTdGF0ZUFuZERlcGFydG1lbnQodGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWUubWluaXN0cnksIHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLmRlcGFydG1lbnRzKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgfVxuXG5cblxufVxuXG5cblxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgIDwhLS0gPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkRvd25sb2FkIGFzIFBERlwiIChjbGljayk9XCJkb3dubG9hZFBERigpXCIgLz4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCIgKm5nSWY9XCJsb2dpblwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvbi1tZWRpdW1cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxoMiBjbGFzcz1cImhpZ2hsaWdodC1haVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPmlHT1QgQUkgRHJpdmVuIENCUDwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgPHA+QnVpbGQgWW91ciBDYXBhY2l0eSBXaXRoIEN1c3RvbWl6ZWQgUm9sZSBNYXBwaW5nPC9wPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1jYXJkICpuZ0lmPVwibG9naW4gJiYgcm9sZU1hcHBpbmdGb3JtXCIgY2xhc3M9XCJtdC0yXCIgW2Zvcm1Hcm91cF09XCJyb2xlTWFwcGluZ0Zvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlcGF0bWVudC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj4tLT5cbiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+LS0+XG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8cD5DaG9vc2UgWW91ciBEZXBhcnRtZW50PC9wPi0tPlxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cbiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICA8L2Rpdj4tLT5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWdyb3VwIG10LTRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGNsYXNzPVwicmFkaW8tYnRuLWdyb3VwXCIgZm9ybUNvbnRyb2xOYW1lPVwibWluaXN0cnlUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZVwiIChjaGFuZ2UpPVwib25NaW5pc3RyeVR5cGVDaGFuZ2UoJGV2ZW50KVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTGVmdCByYWRpbyBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwibWluaXN0cnlcIiBjbGFzcz1cInJhZGlvLWJ0biBsZWZ0LXJhZGlvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJhZGlvLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJyYWRpby1pY29uXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdjZW50ZXInPyAnY2hlY2tlZC1sYWJlbCc6JydcIj5kb21haW48L21hdC1pY29uPiAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdtaW5pc3RyeSc/ICdjaGVja2VkLWxhYmVsJzonJ1wiPkNlbnRyZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gUmlnaHQgcmFkaW8gYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiB2YWx1ZT1cInN0YXRlXCIgY2xhc3M9XCJyYWRpby1idG4gcmlnaHQtcmFkaW9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmFkaW8tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cInJhZGlvLWljb25cIiBbbmdDbGFzc109XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJz8gJ2NoZWNrZWQtbGFiZWwnOicnXCI+bG9jYXRpb25fb248L21hdC1pY29uPiAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdzdGF0ZSc/ICdjaGVja2VkLWxhYmVsJzonJ1wiPlN0YXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cblxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdtaW5pc3RyeSdcIj5NaW5pc3RyeTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJ1wiPlN0YXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VhcmNoLWJveC13aXRoLXNlbGVjdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiAyNXB4OyBwYWRkaW5nOiAwIDEycHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7d2lkdGg6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwYW5lbENsYXNzPVwic2VsZWN0LXdpdGgtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdtaW5pc3RyeScgPyAnU2VsZWN0IE1pbmlzdHJ5LyBEZXBhcnRtZW50JzonU2VsZWN0IFN0YXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk1pbmlzdHJ5Q2hhbmdlKCRldmVudClcIiBmb3JtQ29udHJvbE5hbWU9XCJtaW5pc3RyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAyNXB4OyBiYWNrZ3JvdW5kOiB3aGl0ZTsgd2lkdGg6MTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW5lZENoYW5nZSk9XCJvbk9wZW5lZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgKm5nSWY9XCJwYW5lbE9wZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiAoaW5wdXQpPVwiZmlsdGVyRGF0YSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gW3NlbGVjdGVkXT1cInNlbGVjdGVkTWluaXN0cnlJZCA9PT0gaXRlbT8uaWRlbnRpZmllclwiIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtPy5pZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRMaXN0XCI+e3tpdGVtPy5vcmdOYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCIgKm5nSWY9XCJkZXBhcnRtZW50RGF0YT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIj5EZXBhcnRtZW50PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogMjVweDsgcGFkZGluZzogMCAxMnB4O2JvcmRlcjogMXB4IHNvbGlkICNjY2M7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAjZGVwYXJ0bWVudFNlbGVjdCBwYW5lbENsYXNzPVwic2VsZWN0LXdpdGgtc2VhcmNoXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgRGVwYXJ0bWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVwYXJ0bWVudHNcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJhY2tncm91bmQ6IHdoaXRlO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkRlcGFydG1lbnRDaGFuZ2UoKVwiIChvcGVuZWRDaGFuZ2UpPVwib25PcGVuZWREZXBhcnRtZW50KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIiAqbmdJZj1cImRlcGFydG1lbnRQYW5lbE9wZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiAoaW5wdXQpPVwiZmlsdGVyRGVwYXJ0bWVudERhdGEoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbT8uaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkRGVwYXJ0bWVudExpc3RcIj57e2l0ZW0/Lm9yZ05hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHNlbGVjdGVkIGRlcGFydG1lbnQgbm90IHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgc2VhcmNoL3BhZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXB0IHJlbmRlcmVkIChoaWRkZW4pIHNvIG1hdC1zZWxlY3QgZG9lcyBub3QgY2xlYXIgdGhlIHNlbGVjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbT8uaWRlbnRpZmllclwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBpbm5lZERlcGFydG1lbnRPcHRpb25zXCI+e3tpdGVtPy5vcmdOYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gZGlzYWJsZWQgKm5nSWY9XCJkZXBhcnRtZW50TG9hZGluZ1wiPkxvYWRpbmcuLi48L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGVwYXJ0bWVudExvYWRpbmcgJiYgIWZpbHRlcmVkRGVwYXJ0bWVudExpc3Q/Lmxlbmd0aFwiPk5vIGRlcGFydG1lbnQgZm91bmQ8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPlNlY3RvcjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIHN0eWxlPVwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDI1cHg7IHBhZGRpbmc6IDAgMTJweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU2VjdG9yXCIgbXVsdGlwbGUgZm9ybUNvbnRyb2xOYW1lPVwic2VjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJhY2tncm91bmQ6IHdoaXRlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW0/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWN0b3JEYXRhXCI+e3tpdGVtPy52YWx1ZX19PC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPCEtLSAqbmdJZj1cInJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJ1wiIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCI1XCIgcGxhY2Vob2xkZXI9XCJBZGRpdGlvbmFsIGRldGFpbHNcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRpdGlvbmFsRGV0YWlsc1wiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cImRpc2FibGVVcGxvYWREb2N1bWVudCA/ICdidG4tYWN0aXZlLXByaW1hcnktZGlzYWJsZSc6J2J0bi1hY3RpdmUtcHJpbWFyeSdcIiBjbGFzcz1cIlwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlVXBsb2FkRG9jdW1lbnRcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZ29Ub1VwbG9hZERvY3VtZW50KClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnVwbG9hZDwvbWF0LWljb24+IE1hbmFnZSBEb2N1bWVudHNcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSAqbmdJZj1cInJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJ1wiIC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtNCBzZWN0aW9uXCIgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5VcGxvYWQgRG9jdW1lbnQgKFBERik8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtdXBsb2FkLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInVwbG9hZERvY1wiIGNsYXNzPVwiZmlsZS11cGxvYWQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS11cGxvYWQtaWNvblwiPvCfk448L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF1cGxvYWRlZEZpbGUgfHwgdXBsb2FkZWRGaWxlLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgdXAgdG8gMyBmaWxlcyAoUERGL1RYVClcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGxvYWRlZEZpbGU/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImZpbGUtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHVwbG9hZGVkRmlsZTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiZmlsZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZW1vdmUtZmlsZS1pY29uXCIgKGNsaWNrKT1cInJlbW92ZUZpbGUoaSk7JGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInVwbG9hZERvY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICAgICAgICAgICAgICAvPiAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmaWxlLXVwbG9hZC1oaW50XCI+TWF4IGZpbGUgc2l6ZToge3ttYXhGaWxlU2l6ZU1CfX1NQjwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwidXBsb2FkRG9jXCIgbXVsdGlwbGUgdHlwZT1cImZpbGVcIiAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmRvYywuZG9jeCwueGxzLC54bHN4LC50eHRcIiBjbGFzcz1cImZpbGUtdXBsb2FkLWlucHV0XCIgLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkRXJyb3JcIiBjbGFzcz1cImVycm9yXCI+e3sgdXBsb2FkRXJyb3IgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwhLS0gKm5nSWY9XCJyb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWUgPT09ICdzdGF0ZSdcIiAtLT5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXNjbGFpbWVyLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+RGlzY2xhaW1lcjogUGxlYXNlIGRvIG5vdCB1cGxvYWQgYW55IGNvbmZpZGVudGlhbCBkb2N1bWVudHMuIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJkb2N1bWVudHM/Lmxlbmd0aCA8IDEgJiYgIShyb2xlTWFwcGluZ0Zvcm0/LmludmFsaWQpICB8fCBzaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZ1wiPlxuICAgICAgICAgICAgICAgIDxwPjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAuODc1cmVtO2ZvbnQtd2VpZ2h0OiBib2xkO1wiPk5vdGU6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiPlBsZWFzZSB1cGxvYWQgdGhlIFdvcmsgQWxsb2NhdGlvbiBPcmRlciBkb2N1bWVudCB0byBnZW5lcmF0ZSB0aGUgQ2FwYWNpdHkgQnVpbGRpbmcgUGxhbiAoQ0JQKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJkb2N1bWVudHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIndvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmdcIj48c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogLjg3NXJlbTtmb250LXdlaWdodDogYm9sZDtcIj5Ob3RlOlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIj5QbGVhc2UgdXBsb2FkIHRoZSBXb3JrIEFsbG9jYXRpb24gT3JkZXIgZG9jdW1lbnQgdG8gZ2VuZXJhdGUgdGhlIENhcGFjaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBQbGFuIChDQlApPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgPGlucHV0XG4gICAgW2Rpc2FibGVkXT1cInJvbGVNYXBwaW5nRm9ybT8uaW52YWxpZCB8fCBsb2FkaW5nIHx8IGRvY3VtZW50cz8ubGVuZ3RoIDwgMVwiXG4gICAgW25nQ2xhc3NdPVwiXG4gICAgICByb2xlTWFwcGluZ0Zvcm0/LmludmFsaWQgfHwgbG9hZGluZyB8fCBkb2N1bWVudHM/Lmxlbmd0aCA8IDFcbiAgICAgICAgPyAnYnRuLWRpc2FibGUnXG4gICAgICAgIDogJ2J0bi1hY3RpdmUnXG4gICAgXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBbdmFsdWVdPVwibG9hZGluZyA/ICdHZW5lcmF0aW5nIENCUC4uLicgOiAnR2VuZXJhdGUgQ0JQJ1wiXG4gICAgKGNsaWNrKT1cIm9uR2VuZXJhdGVSb2xlTWFwcGluZygpXCJcbiAgLz5cbjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L21hdC1jYXJkPlxuXG48L2Rpdj5cbjwhLS0gPGRpdiAqbmdJZj1cIiFsb2dpblwiPlxuICAgICAgICA8YXBwLWxvZ2luIChzdWNjZXNzKT1cImxvZ2luU3RhdHVzKCRldmVudClcIj48L2FwcC1sb2dpbj5cbiAgICA8L2Rpdj4gLS0+XG5cbjxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwiYXBpTG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250ZW50XCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctdGV4dCBtdC0zXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1haW4tbWVzc2FnZVwiPnt7IGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgfHwgJ1ByZXBhcmluZyBDQlAgUGxhbiBnZW5lcmF0aW9uLi4uJyB9fTwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWluZGljYXRvclwiICpuZ0lmPVwiY2h1bmtzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIiBbc3R5bGUud2lkdGguJV09XCJnZXREaXNwbGF5UHJvZ3Jlc3NQZXJjZW50YWdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicHJvZ3Jlc3MtdGV4dFwiPnt7IGdldERpc3BsYXlQcm9ncmVzc1BlcmNlbnRhZ2UoKSB9fSUgQ29tcGxldGU8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRpbWUtZXN0aW1hdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgUmVhbC10aW1lIHN0cmVhbWluZyBpbiBwcm9ncmVzcy4gVGhpcyBtYXkgdGFrZSAyLTMgbWludXRlcy5cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
1135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBdUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWlCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVy9FLE1BQU0sT0FBTyw4QkFBOEI7SUFnR3pDLFlBQ1UsUUFBc0IsRUFDdkIsYUFBNEIsRUFDM0IsRUFBZSxFQUNmLFFBQXFCLEVBQ3RCLE1BQWlCLEVBQ2pCLGtCQUFzQyxFQUNyQyxNQUFjO1FBTmQsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXBHZixvQkFBZSxHQUFHLEtBQUssQ0FBQTtRQUNoQyxVQUFLLEdBQUcsc0JBQXNCLENBQUM7UUFFL0Isa0JBQWEsR0FBRyxFQUFFLENBQUE7UUFDbEIsZUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUVmLHFCQUFnQixHQUFhLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYTtZQUM1RSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDcEUseUJBQW9CLEdBQVcsVUFBVSxDQUFDO1FBQzFDLGlCQUFZLEdBQVEsRUFBRSxDQUFBO1FBQ3RCLHFCQUFnQixHQUFRLEVBQUUsQ0FBQTtRQUUxQixlQUFVLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLGVBQVUsR0FBRztZQUNYO2dCQUNFLEtBQUssRUFBRSw2QkFBNkI7YUFDckM7WUFDRDtnQkFDRSxLQUFLLEVBQUUsbUJBQW1CO2FBQzNCO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLG1CQUFtQjthQUMzQjtZQUNEO2dCQUNFLEtBQUssRUFBRSxZQUFZO2FBQ3BCO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLGFBQWE7YUFDckI7WUFDRDtnQkFDRSxLQUFLLEVBQUUsUUFBUTthQUNoQjtTQUVGLENBQUE7UUFDRCxtQkFBYyxHQUFVLEVBQUUsQ0FBQTtRQUMxQixZQUFPLEdBQUcsS0FBSyxDQUFBO1FBQ2Ysa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsaUJBQVksR0FBRztZQUNiLGlCQUFpQjtZQUNqQixvQkFBb0I7WUFDcEIseUVBQXlFO1lBQ3pFLDBCQUEwQjtZQUMxQixtRUFBbUU7WUFDbkUsWUFBWTtTQUNiLENBQUM7UUFDRixnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFDbEMsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLFVBQUssR0FBRyxLQUFLLENBQUE7UUFDYixnQkFBVyxHQUFRLEVBQUUsQ0FBQTtRQUNyQix1QkFBa0IsR0FBRyxFQUFFLENBQUE7UUFFdkIsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUN0QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBRXRCLDJCQUFzQixHQUFXLEVBQUUsQ0FBQztRQUNwQyxxQkFBZ0IsR0FBRztZQUNqQixxQ0FBcUM7WUFDckMsbURBQW1EO1lBQ25ELDhEQUE4RDtZQUM5RCxnREFBZ0Q7WUFDaEQscUNBQXFDO1lBQ3JDLHNEQUFzRDtTQUN2RCxDQUFDO1FBQ1EsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUM1QyxnQ0FBMkIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFBO1FBQ3JELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUNoRCx3QkFBbUIsR0FBUSxFQUFFLENBQUE7UUFDN0Isb0JBQWUsR0FBRyxFQUFFLENBQUE7UUFDcEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQix3QkFBbUIsR0FBRyxLQUFLLENBQUE7UUFDM0IsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsMkJBQXNCLEdBQVUsRUFBRSxDQUFDO1FBQ25DLDBCQUFxQixHQUFRLElBQUksQ0FBQTtRQUNqQyw0QkFBdUIsR0FBVSxFQUFFLENBQUE7UUFFbkMsdUJBQWtCLEdBQUcsRUFBRSxDQUFBO1FBQ3ZCLHFCQUFnQixHQUFHLENBQUMsQ0FBQTtRQUNwQixzQkFBaUIsR0FBRyxJQUFJLENBQUE7UUFDeEIsc0JBQWlCLEdBQUcsS0FBSyxDQUFBO1FBQ3pCLDBCQUFxQixHQUFHLEVBQUUsQ0FBQTtRQUMxQix5QkFBb0IsR0FBRyxFQUFFLENBQUE7UUFDakIsNEJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQTtRQUMvQyx3QkFBbUIsR0FBRyxDQUFDLENBQUE7UUFDL0IseUJBQW9CLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFDbEIscUJBQWdCLEdBQVEsSUFBSSxDQUFBO1FBQzVCLGNBQVMsR0FBRyxFQUFFLENBQUE7UUFDZCwwQkFBcUIsR0FBRyxJQUFJLENBQUE7UUFDNUIsa0NBQTZCLEdBQUcsSUFBSSxDQUFBO1FBQ3BDLHVDQUFrQyxHQUFHLEtBQUssQ0FBQTtRQUMxQywyQ0FBc0MsR0FBRyxLQUFLLENBQUE7UUFDdEMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBODlCeEMsdUJBQWtCLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNsQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBO1lBQzFCLElBQUksS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxZQUFZLEdBQUcsRUFBRSxFQUFFO2dCQUNuRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7YUFDdkI7UUFDSCxDQUFDLENBQUE7UUF6OUJDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxrQkFBa0IsQ0FBTSxFQUFFLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFFRCxRQUFRO1FBRU4sSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FDL0IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QixDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUE7WUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUU5QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtRQUM5RCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO1lBRzNGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBQ3ZCLHlCQUF5QjtTQUMxQjthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTthQUN2QjtZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLFlBQVksRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUMvQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDckMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNiLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDakIsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLG1CQUFtQixFQUFFLEVBQUU7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO29CQUN6QixZQUFZLEVBQUUsSUFBSTtvQkFDbEIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsV0FBVyxFQUFFLEVBQUU7b0JBQ2YsaUJBQWlCLEVBQUUsRUFBRTtvQkFDckIsbUJBQW1CLEVBQUUsRUFBRTtpQkFDeEIsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkVBQTZFO2dCQUMzRyxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDO29CQUMzRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO2lCQUNuRTtxQkFBTTtvQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO2lCQUNuRTtnQkFDTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzNELElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFBO2dCQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNoQyxrQkFBa0I7d0JBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUVsRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsa0JBQWtCLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUVoRTtnQkFFRCxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUE7b0JBQ2xDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUE7aUJBQzNDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUE7b0JBQ2pDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUE7aUJBQzFDO1lBRUgsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQU9ILENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFDdEIsSUFBSSxPQUFPLEdBQUc7WUFDWixlQUFlLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDbEMsZUFBZSxFQUFFLElBQUk7WUFDckIsSUFBSSxFQUFFLENBQUM7WUFDUCxLQUFLLEVBQUUsR0FBRztTQUNYLENBQUE7UUFDRCxJQUFJLE9BQU8sUUFBUSxFQUFFLFdBQVcsS0FBSyxRQUFRLEVBQUU7WUFDN0MsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxXQUFXLENBQUE7U0FDakQ7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtRQUV0QixJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pFLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7Z0JBQzNDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQTtnQkFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLEtBQUssQ0FBQTtnQkFFM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUE7Z0JBQ2xDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUE7Z0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFDLEVBQUU7b0JBQzdCLElBQUcsSUFBSSxFQUFFLGFBQWEsS0FBSyx1QkFBdUIsRUFBRTt3QkFDbEQsUUFBUSxHQUFFLFFBQVEsR0FBQyxDQUFDLENBQUE7cUJBQ3JCO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUVGLElBQUcsUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFDZixJQUFJLENBQUMsa0NBQWtDLEdBQUcsSUFBSSxDQUFBO2lCQUMvQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsa0NBQWtDLEdBQUcsS0FBSyxDQUFBO2lCQUNoRDtnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTthQUNoRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtnQkFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7Z0JBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUE7Z0JBQ2xDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUE7YUFDM0M7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUN2RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFBO1lBQ2hFLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1lBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFBO2dCQUNsRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQzNCO1lBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDbkMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzlELFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUN2RSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2IsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7Z0JBQzVDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ3hCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDaEMsa0JBQWtCO3dCQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFFbEQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFFaEU7Z0JBRUQsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO29CQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFBO29CQUNsQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFBO2lCQUMzQztxQkFBTTtvQkFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFBO29CQUNqQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFBO2lCQUMxQztZQUVILENBQUMsQ0FBQyxDQUFDO1lBRUgscURBQXFEO1lBQ3JELDZFQUE2RTtZQUM3RSxpQ0FBaUM7WUFDakMsb0RBQW9EO1lBQ3BELHNCQUFzQjtZQUN0QixtQkFBbUI7WUFDbkIsdUJBQXVCO1lBQ3ZCLDRCQUE0QjtZQUM1QixRQUFRO1lBQ1IsNEJBQTRCO1lBQzVCLHFGQUFxRjtZQUNyRixhQUFhO1lBQ2Isa0VBQWtFO1lBQ2xFLDZEQUE2RDtZQUM3RCxNQUFNO1lBQ04sdUVBQXVFO1lBQ3ZFLE1BQU07WUFFTixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUE7YUFDakU7WUFFRCw4QkFBOEI7U0FDL0I7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsS0FBSyxPQUFPLEVBQUU7WUFDNUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQTtZQUNqRSxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtZQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFBO1lBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO2dCQUNqRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFBO2FBQ2pFO1lBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDbkMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzlELFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUN2RSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2IsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7Z0JBQzVDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQzthQUN6RCxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDM0QsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUE7Z0JBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2hDLGtCQUFrQjt3QkFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBRWxELENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxrQkFBa0IsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBRWhFO2dCQUVELElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtvQkFDdEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQTtvQkFDbEMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQTtpQkFDM0M7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQTtvQkFDakMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQTtpQkFDMUM7WUFFSCxDQUFDLENBQUMsQ0FBQztZQUVILHFEQUFxRDtZQUNyRCw2RUFBNkU7WUFDN0UsaUNBQWlDO1lBQ2pDLG9EQUFvRDtZQUNwRCxzQkFBc0I7WUFDdEIsbUJBQW1CO1lBQ25CLHVCQUF1QjtZQUN2Qiw0QkFBNEI7WUFDNUIsUUFBUTtZQUNSLDRCQUE0QjtZQUM1QixxRkFBcUY7WUFDckYsYUFBYTtZQUNiLGtFQUFrRTtZQUNsRSw2REFBNkQ7WUFDN0QsTUFBTTtZQUNOLHVFQUF1RTtZQUN2RSxNQUFNO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDbkQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO2dCQUNqRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFBO2FBQ2pFO1NBQ0Y7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtJQUM3QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQTtJQUVuQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsUUFBYSxFQUFFLE9BQVk7UUFDMUMsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO1FBRWpDLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFO1lBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztnQkFBRSxTQUFTO1lBRTVDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbEMscUZBQXFGO1lBQ3JGLE1BQU0sT0FBTyxHQUNYLE9BQU8sYUFBYSxLQUFLLFFBQVE7Z0JBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO2dCQUNoRSxDQUFDLENBQUMsYUFBYSxLQUFLLFlBQVksQ0FBQztZQUVyQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNaLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkI7U0FDRjtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxxQkFBcUI7UUFFbkIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdELE1BQU0sUUFBUSxHQUFRLElBQUksUUFBUSxFQUFFLENBQUM7UUFFckMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM5RSxRQUFRLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sSUFBSSxHQUFTLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDL0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDekIsSUFBSSxJQUFJLEVBQUU7WUFDUixRQUFRLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsaUJBQWlCLEVBQUUsV0FBVyxDQUFBO1FBQ2xGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGNBQWMsRUFBRSxPQUFPLENBQUE7UUFDL0UsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNyRCxJQUFJLENBQUMsVUFBVSxLQUFLLGlCQUFpQixDQUFDLFFBQVEsQ0FDL0MsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQTtRQUNqRSxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO1FBQzNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ3pELE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ25DLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQztRQUdELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUV4RixJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUE7WUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUM5QyxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNsSSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRTtvQkFDbEUsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUM7b0JBQ2pDLFVBQVUsRUFBRSxxQkFBcUI7b0JBQ2pDLFNBQVMsRUFBRSxPQUFPO29CQUNsQixTQUFTLEVBQUUsTUFBTTtvQkFDakIsWUFBWSxFQUFFLElBQUksQ0FBQywrQ0FBK0M7aUJBQ25FLENBQUMsQ0FBQztnQkFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN6QyxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7d0JBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7d0JBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMscUNBQXFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQzs0QkFDOUksSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0NBQ1osbUJBQW1CO2dDQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztnQ0FDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0NBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7Z0NBQzFCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBOzRCQUNqQyxDQUFDOzRCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dDQUNmLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7Z0NBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtvQ0FDNUMsUUFBUSxFQUFFLElBQUk7b0NBQ2QsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUNBQy9CLENBQUMsQ0FBQztnQ0FDSCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtnQ0FDcEIsa0NBQWtDOzRCQUNwQyxDQUFDO3lCQUNGLENBQUMsQ0FBQztxQkFDSjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtxQkFDaEM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTthQUNoQztTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtZQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDckM7SUFFSCxDQUFDO0lBR0QsZUFBZTtRQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1FBQ3RCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQTtRQUMvQyxPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ3hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtnQkFDdkIscUZBQXFGO2dCQUNyRixJQUFJLGFBQWEsS0FBSyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7b0JBQy9DLE9BQU8sRUFBRSxDQUFBO29CQUNULE9BQU07aUJBQ1A7Z0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQTtnQkFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUE7Z0JBQ3RCLElBQUksYUFBYSxLQUFLLFVBQVUsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNwQixJQUFJLElBQUksRUFBRSxTQUFTLEtBQUssVUFBVSxFQUFFOzRCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTt5QkFDN0I7b0JBQ0gsQ0FBQyxDQUFDLENBQUE7aUJBQ0g7cUJBQU0sSUFBSSxhQUFhLEtBQUssT0FBTyxFQUFFO29CQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7d0JBQ3BCLElBQUksSUFBSSxFQUFFLFNBQVMsS0FBSyxPQUFPLEVBQUU7NEJBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO3lCQUM3QjtvQkFDSCxDQUFDLENBQUMsQ0FBQTtpQkFDSDtnQkFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ2pELENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEtBQUs7UUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFFM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQTtRQUNoRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQTtRQUNqRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQTtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQTtRQUV0QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtTQUM3QjtRQUVELFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7UUFDM0YsSUFBSSxLQUFLLEVBQUUsS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2RDthQUFNLElBQUksS0FBSyxFQUFFLEtBQUssS0FBSyxVQUFVLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdkQ7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3RELFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7UUFDM0YsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUU7WUFDakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsRCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDOUMscUNBQXFDO2dCQUNyQyw4Q0FBOEM7WUFDaEQsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBVTtRQUN6QixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFBO1FBQ3hCLCtDQUErQztRQUMvQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQTtRQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFBQyxFQUFFLENBQUE7UUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsZ0JBQWdCLENBQUE7UUFDakUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMseUJBQXlCLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxFQUFFLENBQUE7UUFDakQsc0ZBQXNGO1FBQ3RGLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFBO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUE7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3RELFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7UUFDM0YsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLFVBQVUsQ0FBQyxFQUFFO1lBQzdHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQTtZQUM5QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFBO1lBQy9CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUE7WUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUMzQjtRQUVELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1FBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUU7WUFDMUMsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSztZQUN0QyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPO1lBQzFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTTtZQUN2QyxRQUFRLEVBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPO2dCQUM3QixJQUFJLENBQUMsT0FBTztnQkFDWixJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxDQUFDO1NBQzdCLENBQUMsQ0FBQztJQUNELENBQUM7SUFFRCxVQUFVO0lBRVYsQ0FBQztJQUVELFdBQVc7SUFFWCxDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBRTlDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsTUFBTSxFQUFFLEdBQUc7WUFDWCxRQUFRLEVBQUUsY0FBYztZQUN4QixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDdEMsV0FBVyxFQUFFO2dCQUNYLEtBQUssRUFBRSxDQUFDO2dCQUNSLE9BQU8sRUFBRSxJQUFJLEVBQUcsc0NBQXNDO2FBQ3ZEO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFdBQVcsRUFBRSxVQUFVO2FBQ3hCO1NBQ0YsQ0FBQztRQUVGLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFL0MsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLE1BQU0sS0FBSyxHQUFhLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRWhFLHdEQUF3RDtRQUN4RCxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakIsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFekMsY0FBYztRQUNkLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRywrQkFBK0IsUUFBUSxRQUFRLENBQUM7WUFDbkUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFDbEMsT0FBTztTQUNSO1FBRUQsTUFBTSxVQUFVLEdBQVcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFFbEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRCLGFBQWE7WUFDYixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxFQUFFO2dCQUN4QixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksYUFBYSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQztnQkFDcEUsU0FBUzthQUNWO1lBRUQsYUFBYTtZQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNqRCxTQUFTO2FBQ1Y7WUFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsMENBQTBDO1FBQzFDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxvQkFBb0IsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBRWpFLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTyxFQUFFLHNCQUFzQixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNoRCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFFUixPQUFPO1NBQ1I7UUFFRCxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7UUFFL0IsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLDRCQUE0QixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDMUU7UUFFRCxPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQztRQUN6QixPQUFPLEVBQUUsc0JBQXNCLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFPRCxXQUFXLENBQUMsS0FBSztRQUNmLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDNUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQTtZQUV0QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7U0FDdkI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1NBQ25CO0lBQ0gsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFBO1FBRXBDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEMsT0FBTztTQUNSO1FBRUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdELElBQUksY0FBYyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFFcEMscUJBQXFCO1FBQ3JCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDckQsSUFBSSxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxRQUFRLENBQy9DLENBQUM7UUFFRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUM7UUFFNUMscUJBQXFCO1FBQ3JCLGNBQWMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVFLElBQUksaUJBQWlCLENBQUMsV0FBVyxFQUFFO1lBQ2pDLGNBQWMsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRTtZQUN2QyxjQUFjLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQzNFO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sS0FBSyxHQUNULElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxLQUFLLENBQUM7UUFFOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV0QyxrQ0FBa0M7UUFDbEMsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRTtvQkFDM0IsY0FBYyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRSxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLGNBQWMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqRTtTQUNGO1FBRUQsd0JBQXdCO1FBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvQixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3BDLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtnQkFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsYUFBYSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO2FBQ3BFO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBR0gscUNBQXFDO1FBQ3JDLElBQUksR0FBRyxHQUFRO1lBQ2IsZUFBZSxFQUFFLGlCQUFpQixDQUFDLFFBQVE7WUFDM0MsV0FBVyxFQUFFLGlCQUFpQixDQUFDLGlCQUFpQjtZQUNoRCxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPO1NBQzdDLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxPQUFPLElBQUksaUJBQWlCLENBQUMsV0FBVyxFQUFFO1lBQzFFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM3QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssaUJBQWlCLENBQUMsV0FBVyxDQUNwRCxDQUFDO1lBRUYsR0FBRyxDQUFDLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ3hELEdBQUcsQ0FBQyxlQUFlLEdBQUcsY0FBYyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7U0FDckQ7UUFJRCxjQUFjO1FBQ2QsTUFBTSxDQUNKLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBZSw4QkFBOEI7UUFDckQsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFTLGdDQUFnQztTQUN4RDthQUNFLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFDbkUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLDBCQUEwQjtnQkFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDMUQsSUFBRyxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sS0FBSyxRQUFRLEVBQUU7b0JBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO29CQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtvQkFDbkIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQSxDQUFDLDJFQUEyRTtvQkFDL0csSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFHLGtCQUFrQjtvQkFDMUMsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLENBQUE7b0JBQ2hELE9BQU87aUJBQ1Y7YUFDRjtpQkFBTTtnQkFFTCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTthQUNwQjtRQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FDZixDQUFDLElBQVMsRUFBRSxFQUFFLENBQ1osSUFBSSxFQUFFLE1BQU0sS0FBSyxXQUFXO1lBQzVCLElBQUksRUFBRSxNQUFNLEtBQUssUUFBUSxFQUMzQixJQUFJLENBQUMsMkNBQTJDO1NBQ2pELENBQ007YUFDQSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUEsQ0FBQywyRUFBMkU7Z0JBQ2hILE9BQU07YUFDUDtZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDeEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFO2dCQUdsQyxJQUFJLENBQUMsc0NBQXNDLEdBQUcsS0FBSyxDQUFBO2dCQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFHLGtCQUFrQjtnQkFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUU7b0JBQ2xFLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFDO29CQUNqQyxVQUFVLEVBQUUscUJBQXFCO29CQUNqQyxTQUFTLEVBQUUsT0FBTztvQkFDbEIsU0FBUyxFQUFFLE1BQU07b0JBQ2pCLFlBQVksRUFBRSxJQUFJLENBQUMsK0NBQStDO2lCQUNuRSxDQUFDLENBQUM7Z0JBRUgsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDekMsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO3dCQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBRTlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO3dCQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUM7NEJBQzlJLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dDQUNaLG1CQUFtQjtnQ0FDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0NBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dDQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFBO2dDQUMxQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTs0QkFDakMsQ0FBQzs0QkFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQ0FDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7b0NBQzVDLFFBQVEsRUFBRSxJQUFJO29DQUNkLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lDQUMvQixDQUFDLENBQUM7Z0NBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtnQ0FDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0NBQ3BCLGtDQUFrQzs0QkFDcEMsQ0FBQzt5QkFDRixDQUFDLENBQUM7cUJBQ0o7eUJBQU0sSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFO3dCQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTt3QkFDcEIsa0NBQWtDO3dCQUNsQywrQkFBK0I7d0JBQy9CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO3dCQUVuQyw0RUFBNEU7d0JBQzVFLDJDQUEyQzt3QkFDM0MsTUFBTTt3QkFDTixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQzs0QkFDM0QsSUFBSSxFQUFFLGFBQWEsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLEVBQUUsYUFBYSxDQUFDO3dCQUNuRSxZQUFZLENBQUMsT0FBTyxDQUNsQixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUNuRCxDQUFDO3dCQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFOzRCQUNqQyxtQkFBbUIsRUFBRSxRQUFRO3lCQUM5QixDQUFDLENBQUM7d0JBQ0gsMkJBQTJCO3FCQUU1Qjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtxQkFDckI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFHSjtpQkFBTSxJQUFJLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO2dCQUN2QixJQUFJLENBQUMsc0NBQXNDLEdBQUcsSUFBSSxDQUFBO2dCQUNsRCxPQUFPO2FBQ1I7aUJBQ0ksSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLFdBQVcsRUFBRTtnQkFDckMsSUFBSSxDQUFDLHNDQUFzQyxHQUFHLEtBQUssQ0FBQTtnQkFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO2dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQztvQkFDM0QsSUFBSSxFQUFFLGFBQWEsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLEVBQUUsYUFBYSxDQUFDO2dCQUNuRSxZQUFZLENBQUMsT0FBTyxDQUNsQixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUNuRCxDQUFDO2dCQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUVuRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7b0JBQzFELFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUNqQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNLElBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLEtBQUssUUFBUSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtnQkFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBRyxrQkFBa0I7Z0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtvQkFDbEUsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQy9CLENBQUMsQ0FBQztnQkFDSCxPQUFPO2FBQ1Y7UUFFUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdEMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLDBEQUEwRDtRQUMxRCxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUU7WUFDbkIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLDBDQUEwQztTQUMzRDthQUFNLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUMzQixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsZ0RBQWdEO1NBQ2pFO2FBQU0sSUFBSSxVQUFVLElBQUksRUFBRSxFQUFFO1lBQzNCLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7U0FDckQ7YUFBTSxJQUFJLFVBQVUsSUFBSSxFQUFFLEVBQUU7WUFDM0IsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztTQUN4RDthQUFNLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUMzQixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsOENBQThDO1NBQy9EO2FBQU07WUFDTCxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsbUNBQW1DO1NBQ3BEO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksVUFBVSxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUUvQixnREFBZ0Q7UUFDaEQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUNwQiw0Q0FBNEM7WUFDNUMsVUFBVSxHQUFHLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNyQzthQUFNLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUMzQixnREFBZ0Q7WUFDaEQsVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNqRDthQUFNLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUMzQixtREFBbUQ7WUFDbkQsVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNqRDthQUFNLElBQUksVUFBVSxJQUFJLEdBQUcsRUFBRTtZQUM1QixrREFBa0Q7WUFDbEQsVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNqRDthQUFNO1lBQ0wsMkRBQTJEO1lBQzNELFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxzQkFBc0IsR0FBRyxtQ0FBbUMsQ0FBQztRQUVsRSxnREFBZ0Q7UUFDaEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSTtnQkFDRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFFN0MsK0JBQStCO2dCQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMseUJBQXlCLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNoRixJQUFJLENBQUMsYUFBYSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBRS9ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUVuRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7b0JBQzFELFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUNqQyxDQUFDLENBQUM7YUFDSjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7b0JBQ3hFLFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUMvQixDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsNEJBQTRCO1FBQzFCLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLG1DQUFtQyxFQUFFO1lBQ3ZFLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFHRCxVQUFVLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUVqRSxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRW5DLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1FBRTFFLGdDQUFnQztRQUNoQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBcUIsQ0FBQztZQUN2RSxJQUFJLEtBQUs7Z0JBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBR0Qsa0JBQWtCLENBQUMsYUFBc0IsRUFBRSxJQUFpQjtRQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO1lBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUN6RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksRUFBRSxnQkFBZ0IsQ0FBQTtZQUM3QyxxRkFBcUY7WUFDckYsSUFBSSxhQUFhLElBQUksYUFBYSxLQUFLLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDaEUsSUFBSSxFQUFFLEVBQUUsQ0FBQTtnQkFDUixPQUFNO2FBQ1A7WUFDRCxJQUFJLG9CQUFvQixHQUFHLEVBQUUsQ0FBQTtZQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxTQUFTLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7b0JBQzNILG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtpQkFDaEM7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsb0JBQW9CLENBQUE7WUFDeEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFBO1lBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsb0JBQW9CLENBQUM7WUFDekMsSUFBSSxFQUFFLEVBQUUsQ0FBQTtRQUNWLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFlO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFlO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUE7UUFDakMsSUFBSSxNQUFNLEVBQUU7WUFDVixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7b0JBQ3JHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtpQkFDOUY7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO2FBQU0sSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDckMsaUdBQWlHO1lBQ2pHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7U0FDdEM7SUFDSCxDQUFDO0lBU0QsZUFBZSxDQUFDLEtBQUssR0FBRyxLQUFLO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDOUIsT0FBTTtTQUNQO1FBQ0QsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ2pFLE9BQU07U0FDUDtRQUNELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQTtZQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFBO1NBQzlCO1FBQ0QsTUFBTSxTQUFTLEdBQUcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUE7UUFDNUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQTtRQUM3QixNQUFNLE9BQU8sR0FBRztZQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzlCLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMscUJBQXFCO1NBQ2xDLENBQUE7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsb0JBQW9CLEtBQUssVUFBVTtZQUN0RCxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDO1lBQ2pGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUM1RSxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ2hCLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNaLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtvQkFDMUMsT0FBTTtpQkFDUDtnQkFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO2dCQUM5QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFBO2dCQUN4RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsa0JBQWtCLENBQUE7Z0JBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFBO2dCQUNyQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEtBQUssSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFO3dCQUN0RSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtxQkFDL0I7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUE7Z0JBQ3hGLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFBO2dCQUNyQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLFVBQVUsRUFBRTtvQkFDckcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO3dCQUNuRSxRQUFRLEVBQUUsSUFBSTt3QkFDZCxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDL0IsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFBO29CQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUE7b0JBQ3RELFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7aUJBQzVGO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLG1CQUFtQixFQUFFO29CQUMxQyxPQUFNO2lCQUNQO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUE7WUFDaEMsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiw4QkFBOEI7UUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxDQUFBO1FBQ2xFLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7ZUFDdkMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEtBQUssVUFBVSxDQUFDLEVBQUU7WUFDeEUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQTtZQUNqQyxPQUFNO1NBQ1A7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEtBQUssVUFBVSxDQUFDO2VBQ3ZFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFVBQVUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2VBQzNGLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkgsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQzNELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSztRQUNkLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDL0MsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUMvQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDcEMsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7U0FDdEM7SUFFSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBSztRQUN4QixNQUFNLEtBQUssR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNuRixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBRTVDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNwRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtRQUM5RCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO1lBQzNGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1NBQ25GO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRy9GLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFBO1FBRWpFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUYsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGNBQWMsQ0FBQTtTQUM1QztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsY0FBYyxFQUFFLE9BQU8sQ0FBQTtRQUMvRSxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO1FBQzNGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO0lBQzdCLENBQUM7SUFFQSxrQkFBa0I7UUFFakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFFakQsQ0FBQztJQUVHLHlDQUF5QztRQUN2QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUE7UUFDekQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFBO1FBRTNELElBQUksQ0FBQyxhQUFhLENBQUMsd0NBQXdDLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNqRyxJQUFJLEVBQUUsQ0FBQyxvQkFBeUIsRUFBRSxFQUFFO2dCQUNsQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztxQkFDckYsR0FBRyxDQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztxQkFDMUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUVsQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtvQkFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7b0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7b0JBQzVCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO29CQUMvQixPQUFNO2lCQUNQO2dCQUVELFFBQVEsQ0FDTixjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3JELFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNuQix1RUFBdUU7b0JBQ3ZFLG1FQUFtRTtvQkFDbkUsaUNBQWlDO29CQUNqQyxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFO3dCQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLDREQUE0RCxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtxQkFDdkY7b0JBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2pCLENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FDRixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7b0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7b0JBQzVCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO2dCQUN6QyxDQUFDLENBQUMsQ0FBQTtZQUNNLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7b0JBQzVDLFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUMvQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7WUFDOUIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNmLENBQUM7K0dBaHZDVSw4QkFBOEI7bUdBQTlCLDhCQUE4QiwwZUNwQjNDLG1uWUErTk07OzRGRDNNTyw4QkFBOEI7a0JBTDFDLFNBQVM7K0JBQ0UsNkJBQTZCO2lRQUtLLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFakMsZUFBZTtzQkFBdkIsS0FBSztnQkErREksa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQVMyQyxnQkFBZ0I7c0JBQWpFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgaHRtbDJwZGYgZnJvbSAnaHRtbDJwZGYuanMnO1xuaW1wb3J0IHsgRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2RlbGV0ZS1yb2xlLW1hcHBpbmctcG9wdXAvZGVsZXRlLXJvbGUtbWFwcGluZy1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGludGVydmFsLCBvZiwgY29uY2F0LCBmb3JrSm9pbiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwLCB0YWtlV2hpbGUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvbGVNYXBwaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3JvbGUtbWFwcGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJvbGUtbWFwcGluZy1nZW5lcmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvbGUtbWFwcGluZy1nZW5lcmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSb2xlTWFwcGluZ0dlbmVyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgncGRmQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwZGZDb250ZW50ITogRWxlbWVudFJlZjtcbiAgXG4gIEBJbnB1dCgpIGxvZ2luU3RhdHVzRmxhZyA9IGZhbHNlXG4gIHRpdGxlID0gJ3N1bmJpcmQtY2Itc3RhdGljd2ViJztcbiAgaXNNYWludGVuYW5jZVBhZ2U6IGFueVxuICBzZWxlY3RlZFZhbHVlID0gJydcbiAgc2VhcmNoVGV4dCA9ICcnXG4gIGRhdGFTb3VyY2U6IGFueVxuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFsnUmVxdWVzdElkJywgJ3RpdGxlJywgJ3JlcXVlc3RvcicsICdyZXF1ZXN0VHlwZScsXG4gICAgJ3JlcXVlc3RTdGF0dXMnLCAnYXNzaWduZWUnLCAncmVxdWVzdGVkT24nLCAnaW50ZXJlc3RzJywgJ2FjdGlvbiddXG4gIHNlbGVjdGVkTWluaXN0cnlUeXBlOiBzdHJpbmcgPSAnbWluaXN0cnknO1xuICBtaW5pc3RyeURhdGE6IGFueSA9IFtdXG4gIG1pbmlzdHJ5RnVsbERhdGE6IGFueSA9IFtdXG4gIHJvbGVNYXBwaW5nRm9ybSE6IEZvcm1Hcm91cDtcbiAgZGlzYWJsZUJ0biA9IHRydWVcbiAgc2VjdG9yRGF0YSA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogJ1dvbWVuIGFuZCBjaGlsZCBkZXZlbG9wbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnUnVyYWwgZGV2ZWxvcG1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ1VyYmFuIGRldmVsb3BtZW50J1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdIZWFsdGhjYXJlJ1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdBZ3JpY3VsdHVyZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnT3RoZXJzJ1xuICAgIH1cblxuICBdXG4gIGRlcGFydG1lbnREYXRhOiBhbnlbXSA9IFtdXG4gIGxvYWRpbmcgPSBmYWxzZVxuICBtYXhGaWxlU2l6ZU1CID0gMjU7XG4gIGFsbG93ZWRUeXBlcyA9IFtcbiAgICAnYXBwbGljYXRpb24vcGRmJyxcbiAgICAnYXBwbGljYXRpb24vbXN3b3JkJyxcbiAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuICAgICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG4gICAgJ3RleHQvcGxhaW4nXG4gIF07XG4gIHVwbG9hZEVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgdXBsb2FkZWRGaWxlOiBGaWxlW10gfCBudWxsID0gbnVsbDtcbiAgbG9naW4gPSBmYWxzZVxuICBjYnBGaW5hbE9iajogYW55ID0ge31cbiAgc2VsZWN0ZWRNaW5pc3RyeUlkID0gJydcbiAgb3JpZ2luYWxGb3JtVmFsdWVzOiBhbnlcbiAgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBmdWxsSnNvbjogc3RyaW5nID0gJyc7XG4gIHBhcnNlZERhdGE6IGFueTtcbiAgY3VycmVudFByb2Nlc3NpbmdTdGFnZTogc3RyaW5nID0gJyc7XG4gIHByb2Nlc3NpbmdTdGFnZXMgPSBbXG4gICAgJ0luaXRpYWxpemluZyBDQlAgUGxhbiBnZW5lcmF0aW9uLi4uJyxcbiAgICAnQW5hbHl6aW5nIGRlcGFydG1lbnRhbCBjb21wZXRlbmN5IHJlcXVpcmVtZW50cy4uLicsXG4gICAgJ1Byb2Nlc3Npbmcgd29yayBvcmRlciBzcGVjaWZpY2F0aW9ucyBhbmQgcm9sZSBkZWZpbml0aW9ucy4uLicsXG4gICAgJ0dlbmVyYXRpbmcgZGV0YWlsZWQgcm9sZXMgJiByZXNwb3NpYmlsaXRpZXMuLi4nLFxuICAgICdHZW5lcmF0aW5nIGRldGFpbGVkIGNvbXBldGVuY2llcy4uLicsXG4gICAgJ1ZhbGlkYXRpbmcgcm9sZSBtYXBwaW5nICBhbmQgZmluYWxpemluZyB0aGUgQ0JQIFBsYW4nXG4gIF07XG4gIEBPdXRwdXQoKSBzdWNjZXNzUm9sZU1hcHBpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIGxvZ2luU3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIHNlbGVjdGVkTWluaXN0cnlPYmo6IGFueSA9ICcnXG4gIGxvZ2luVXNlck9yZ0lkcyA9IFtdXG4gIHBhbmVsT3BlbiA9IGZhbHNlO1xuICBkZXBhcnRtZW50UGFuZWxPcGVuID0gZmFsc2VcbiAgZmlsdGVyZWRMaXN0ID0gW107XG4gIGZpbHRlcmVkRGVwYXJ0bWVudExpc3Q6IGFueVtdID0gW107XG4gIHNlbGVjdGVkRGVwYXJ0bWVudE9iajogYW55ID0gbnVsbFxuICBwaW5uZWREZXBhcnRtZW50T3B0aW9uczogYW55W10gPSBbXVxuICBAVmlld0NoaWxkKCdkZXBhcnRtZW50U2VsZWN0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGRlcGFydG1lbnRTZWxlY3QhOiBNYXRTZWxlY3Q7XG4gIGRlcGFydG1lbnRQYWdlU2l6ZSA9IDUwXG4gIGRlcGFydG1lbnRPZmZzZXQgPSAwXG4gIGRlcGFydG1lbnRIYXNNb3JlID0gdHJ1ZVxuICBkZXBhcnRtZW50TG9hZGluZyA9IGZhbHNlXG4gIGRlcGFydG1lbnRTZWFyY2hRdWVyeSA9ICcnXG4gIGRlcGFydG1lbnRNaW5pc3RyeUlkID0gJydcbiAgcHJpdmF0ZSBkZXBhcnRtZW50U2VhcmNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKVxuICBwcml2YXRlIGRlcGFydG1lbnRSZXF1ZXN0SWQgPSAwXG4gIG9yaWdpbmFsTWluaXN0cnlEYXRhID0gW11cbiAgYXBpTG9hZGluZyA9IGZhbHNlXG4gIGZpcnN0QXBpUmVzcG9uc2U6IGFueSA9IG51bGxcbiAgZG9jdW1lbnRzID0gW11cbiAgZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICBkaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgd29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gIHNob3dXb3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gZmFsc2VcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgaW1tZWRpYXRlRmFpbHVyZUhhbmRsZWQgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldmVudFN2YzogRXZlbnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwdWJsaWMgcm9sZU1hcHBpbmdTZXJ2aWNlOiBSb2xlTWFwcGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55PihbXSlcbiAgICB0aGlzLmlzTWFpbnRlbmFuY2VQYWdlID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9tYWludGVuYW5jZScpXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuZGVwYXJ0bWVudFNlYXJjaFN1YmplY3QucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICkuc3Vic2NyaWJlKChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmRlcGFydG1lbnRTZWFyY2hRdWVyeSA9IHF1ZXJ5XG4gICAgICB0aGlzLmxvYWREZXBhcnRtZW50cyh0cnVlKVxuICAgIH0pXG5cbiAgICB0aGlzLmxvZ2luID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrSWZMb2dpbigpXG5cbiAgICB0aGlzLmNicEZpbmFsT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKVxuICAgIGlmICh0aGlzLmNicEZpbmFsT2JqICYmIHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5ICYmIHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUpIHtcblxuXG4gICAgICB0aGlzLmVkaXRNaW5pc3RyeUZvcm0oKVxuICAgICAgLy8gdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5sb2dpbikge1xuICAgICAgICB0aGlzLmdldE1pbmlzdHJ5RGF0YSgpXG4gICAgICB9XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBtaW5pc3RyeVR5cGU6IFsnbWluaXN0cnknLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgbWluaXN0cnk6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgc2VjdG9yczogW1tdXSxcbiAgICAgICAgZGVwYXJ0bWVudHM6IFsnJ10sIC8vIHNob3duIG9ubHkgaWYgbWluaXN0cnlUeXBlID09ICdzdGF0ZSdcbiAgICAgICAgYWRkaXRpb25hbERldGFpbHM6IFsnJ10sXG4gICAgICAgIGFkZGl0aW9uYWxfZG9jdW1lbnQ6IFtdXG4gICAgICB9KTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCh7XG4gICAgICAgICAgbWluaXN0cnlUeXBlOiB0eXBlLCAvLyBLZWVwIHRoZSBjaGFuZ2VkIHZhbHVlXG4gICAgICAgICAgbWluaXN0cnk6IG51bGwsXG4gICAgICAgICAgc2VjdG9yczogW10sXG4gICAgICAgICAgZGVwYXJ0bWVudHM6IFtdLFxuICAgICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzOiAnJyxcbiAgICAgICAgICBhZGRpdGlvbmFsX2RvY3VtZW50OiBbXVxuICAgICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7IC8vIGF2b2lkIHJlLWVtaXR0aW5nIG1pbmlzdHJ5VHlwZSdzIG93biB2YWx1ZUNoYW5nZXMgYW5kIHJlY3Vyc2luZyBpbmZpbml0ZWx5XG4gICAgaWYgKHR5cGUgPT09ICdzdGF0ZScpIHtcbiAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG59IGVsc2Uge1xuICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG59XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoc3RhdHVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGhhc1VwbG9hZERvY3VtZW50cyA9IGZhbHNlXG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGhhc1VwbG9hZERvY3VtZW50cyA9XG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJy91cGxvYWQtZG9jdW1lbnRzJyk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzVXBsb2FkRG9jdW1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrUm9sZU1hcHBpbmdGb3JtVmFsaWRhdGlvbi5uZXh0KHN0YXR1cyk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdWQUxJRCcpIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSB0cnVlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICB9XG5cblxuXG5cblxuXG4gIH1cblxuICBnZXRVcGxvYWRlZERvY3VtZW50cygpIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlO1xuICAgIHRoaXMuYXBpTG9hZGluZyA9IHRydWVcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIHN0YXRlX2NlbnRlcl9pZDogZm9ybURhdGEubWluaXN0cnksXG4gICAgICBpbmNsdWRlX3N1bW1hcnk6IHRydWUsXG4gICAgICBza2lwOiAwLFxuICAgICAgbGltaXQ6IDIwMFxuICAgIH1cbiAgICBpZiAodHlwZW9mIGZvcm1EYXRhPy5kZXBhcnRtZW50cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlcUJvZHlbJ2RlcGFydG1lbnRfaWQnXSA9IGZvcm1EYXRhPy5kZXBhcnRtZW50c1xuICAgIH1cbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0VXBsb2FkZWREb2N1bWVudHMocmVxQm9keSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgcmVzPy5pdGVtcyAmJiByZXM/Lml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgbGV0IHdBT0NvdW50ID0gMFxuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRvY3VtZW50cyA9IHJlcz8uaXRlbXNcblxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5kb2N1bWVudHMnLCB0aGlzLmRvY3VtZW50cylcbiAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gZmFsc2VcbiAgICAgICAgdGhpcy5kb2N1bWVudHMuZm9yRWFjaCgoaXRlbSk9PntcbiAgICAgICAgICBpZihpdGVtPy5kb2N1bWVudF90eXBlID09PSAnV29yayBBbGxvY2F0aW9uIE9yZGVyJykge1xuICAgICAgICAgICAgd0FPQ291bnQgPXdBT0NvdW50KzFcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYod0FPQ291bnQgPCAxKSB7XG4gICAgICAgICAgdGhpcy53b3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmRvY3VtZW50cy0tJywgdGhpcy5kb2N1bWVudHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRvY3VtZW50cyA9IFtdXG4gICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGVkaXRNaW5pc3RyeUZvcm0oKSB7XG4gICAgaWYgKHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5LnNiT3JnVHlwZVxuICAgICAgYXdhaXQgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgICAgaWYgKHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUpIHtcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50TWluaXN0cnlJZCA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyXG4gICAgICAgIHRoaXMubG9hZERlcGFydG1lbnRzKHRydWUpXG4gICAgICB9XG5cbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG1pbmlzdHJ5VHlwZTogW3RoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBtaW5pc3RyeTogW3RoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgc2VjdG9yczogW1tdXSxcbiAgICAgICAgZGVwYXJ0bWVudHM6IFt0aGlzLmNicEZpbmFsT2JqPy5kZXBhcnRtZW50c10sIC8vIHNob3duIG9ubHkgaWYgbWluaXN0cnlUeXBlID09ICdzdGF0ZSdcbiAgICAgICAgYWRkaXRpb25hbERldGFpbHM6IFsnJ11cbiAgICAgIH0pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHN0YXR1czogYW55KSA9PiB7XG4gICAgICAgIGxldCBoYXNVcGxvYWREb2N1bWVudHMgPSBmYWxzZVxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBoYXNVcGxvYWREb2N1bWVudHMgPVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcvdXBsb2FkLWRvY3VtZW50cycpO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc1VwbG9hZERvY3VtZW50cykge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jaGVja1JvbGVNYXBwaW5nRm9ybVZhbGlkYXRpb24ubmV4dChzdGF0dXMpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgfSk7XG5cbiAgICAgIC8vIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICAvLyB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgLy8gICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCh7XG4gICAgICAvLyAgICAgbWluaXN0cnlUeXBlOiB0eXBlLCAvLyBLZWVwIHRoZSBjaGFuZ2VkIHZhbHVlXG4gICAgICAvLyAgICAgbWluaXN0cnk6IG51bGwsXG4gICAgICAvLyAgICAgc2VjdG9yczogW10sXG4gICAgICAvLyAgICAgZGVwYXJ0bWVudHM6IFtdLFxuICAgICAgLy8gICAgIGFkZGl0aW9uYWxEZXRhaWxzOiAnJ1xuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgaWYgKHR5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgLy8gfSk7XG5cbiAgICAgIGlmICh0aGlzLm1pbmlzdHJ5RGF0YSAmJiB0aGlzLm1pbmlzdHJ5RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5SWQgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllclxuICAgICAgfVxuXG4gICAgICAvL3RoaXMub25HZW5lcmF0ZVJvbGVNYXBwaW5nKClcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlXG4gICAgICBhd2FpdCB0aGlzLmdldE1pbmlzdHJ5RGF0YSgpXG4gICAgICB0aGlzLmRlcGFydG1lbnRNaW5pc3RyeUlkID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXJcbiAgICAgIHRoaXMubG9hZERlcGFydG1lbnRzKHRydWUpXG4gICAgICBpZiAodGhpcy5taW5pc3RyeURhdGEgJiYgdGhpcy5taW5pc3RyeURhdGEubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeUlkID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXJcbiAgICAgIH1cbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG1pbmlzdHJ5VHlwZTogW3RoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBtaW5pc3RyeTogW3RoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgc2VjdG9yczogW1tdXSxcbiAgICAgICAgZGVwYXJ0bWVudHM6IFt0aGlzLmNicEZpbmFsT2JqPy5kZXBhcnRtZW50c10sIC8vIHNob3duIG9ubHkgaWYgbWluaXN0cnlUeXBlID09ICdzdGF0ZSdcbiAgICAgICAgYWRkaXRpb25hbERldGFpbHM6IFt0aGlzLmNicEZpbmFsT2JqPy5hZGRpdGlvbmFsRGV0YWlsc11cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoc3RhdHVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGhhc1VwbG9hZERvY3VtZW50cyA9IGZhbHNlXG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGhhc1VwbG9hZERvY3VtZW50cyA9XG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJy91cGxvYWQtZG9jdW1lbnRzJyk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzVXBsb2FkRG9jdW1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrUm9sZU1hcHBpbmdGb3JtVmFsaWRhdGlvbi5uZXh0KHN0YXR1cyk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdWQUxJRCcpIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSB0cnVlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuICAgICAgLy8gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdzZWN0b3JzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIC8vIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodHlwZSA9PiB7XG4gICAgICAvLyAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnJlc2V0KHtcbiAgICAgIC8vICAgICBtaW5pc3RyeVR5cGU6IHR5cGUsIC8vIEtlZXAgdGhlIGNoYW5nZWQgdmFsdWVcbiAgICAgIC8vICAgICBtaW5pc3RyeTogbnVsbCxcbiAgICAgIC8vICAgICBzZWN0b3JzOiBbXSxcbiAgICAgIC8vICAgICBkZXBhcnRtZW50czogW10sXG4gICAgICAvLyAgICAgYWRkaXRpb25hbERldGFpbHM6ICcnXG4gICAgICAvLyAgIH0pO1xuICAgICAgLy8gICBpZiAodHlwZSA9PT0gJ3N0YXRlJykge1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAvLyB9KTtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLm1pbmlzdHJ5RGF0YScsIHRoaXMubWluaXN0cnlEYXRhKVxuICAgICAgaWYgKHRoaXMubWluaXN0cnlEYXRhICYmIHRoaXMubWluaXN0cnlEYXRhLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlJZCA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3JpZ2luYWxGb3JtVmFsdWVzID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICB0aGlzLmdldFVwbG9hZGVkRG9jdW1lbnRzKClcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMubG9naW4gPSB0aGlzLmxvZ2luU3RhdHVzRmxhZ1xuXG4gIH1cblxuICBnZXRDaGFuZ2VkRmllbGRzKG9yaWdpbmFsOiBhbnksIGN1cnJlbnQ6IGFueSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjaGFuZ2VkS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIG9yaWdpbmFsKSB7XG4gICAgICBpZiAoIW9yaWdpbmFsLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxba2V5XTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRba2V5XTtcblxuICAgICAgLy8gRm9yIGFycmF5cyBhbmQgb2JqZWN0cywgdXNlIEpTT04uc3RyaW5naWZ5IChvciBsb2Rhc2ggaXNFcXVhbCBmb3IgZGVlcCBjb21wYXJpc29uKVxuICAgICAgY29uc3QgaXNFcXVhbCA9XG4gICAgICAgIHR5cGVvZiBvcmlnaW5hbFZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxWYWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICA6IG9yaWdpbmFsVmFsdWUgPT09IGN1cnJlbnRWYWx1ZTtcblxuICAgICAgaWYgKCFpc0VxdWFsKSB7XG4gICAgICAgIGNoYW5nZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEtleXM7XG4gIH1cblxuICBvbkdlbmVyYXRlUm9sZU1hcHBpbmcoKTogYW55IHtcblxuICAgIGNvbnN0IGN1cnJlbnRGb3JtVmFsdWVzID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBmb3JtRGF0YTogYW55ID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ21pbmlzdHJ5VHlwZScsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5VHlwZSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdtaW5pc3RyeScsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5KTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3NlY3RvcnMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50Rm9ybVZhbHVlcy5zZWN0b3JzKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdkZXBhcnRtZW50cycsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdhZGRpdGlvbmFsRGV0YWlscycsIGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzIHx8ICcnKTtcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gdGhpcy51cGxvYWRlZEZpbGUgfHwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnZhbHVlO1xuICAgIGNvbnNvbGUubG9nKCdmaWxlJywgZmlsZSlcbiAgICBpZiAoZmlsZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZSk7XG4gICAgfVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSBjdXJyZW50Rm9ybVZhbHVlcz8uZGVwYXJ0bWVudHNcbiAgICBjb25zdCBkZXBhcnRtZW50TmFtZSA9IHRoaXMuZGVwYXJ0bWVudERhdGEuZmluZCh1ID0+IHUuaWRlbnRpZmllciA9PT0gY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpO1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gZGVwYXJ0bWVudE5hbWU/Lm9yZ05hbWVcbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5ID0gdGhpcy5taW5pc3RyeURhdGEuZmluZChpdGVtID0+XG4gICAgICBpdGVtLmlkZW50aWZpZXIgPT09IGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5XG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeU9iaiA9IHNlbGVjdGVkTWluaXN0cnk7XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnknXSA9IHNlbGVjdGVkTWluaXN0cnlcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgY29uc29sZS5sb2coJ3RoaXMucm9sZU1hcHBpbmdGb3JtJywgdGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgY29uc29sZS5sb2coJ2Zvcm1EYXRhLS0nLCBmb3JtRGF0YSlcbiAgICBmb3IgKGNvbnN0IHBhaXIgb2YgZm9ybURhdGEuZW50cmllcygpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgJHtwYWlyWzBdfTpgLCBwYWlyWzFdKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IGNoYW5nZWRGaWVsZHMgPSB0aGlzLmdldENoYW5nZWRGaWVsZHModGhpcy5vcmlnaW5hbEZvcm1WYWx1ZXMsIGN1cnJlbnRGb3JtVmFsdWVzKTtcblxuICAgIGlmIChjaGFuZ2VkRmllbGRzLmxlbmd0aCA+IDAgfHwgKGZpbGUgJiYgZmlsZS5zaXplID4gMCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdjaGFuZ2VkRmllbGRzJywgY2hhbmdlZEZpZWxkcylcbiAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VkIGZpZWxkczonLCBjaGFuZ2VkRmllbGRzKTtcbiAgICAgIGlmIChjaGFuZ2VkRmllbGRzLmluY2x1ZGVzKCdhZGRpdGlvbmFsRGV0YWlscycpICYmIHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLmFkZGl0aW9uYWxEZXRhaWxzPy50cmltKCkgfHwgKGZpbGUgJiYgZmlsZS5zaXplID4gMCkpIHtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgICAgZGF0YToge2RvY3VtZW50czogdGhpcy5kb2N1bWVudHN9LFxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgICAgICBtaW5IZWlnaHQ6ICczMDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgICAgIG1heEhlaWdodDogJzgwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5kZWxldGVSb2xlTWFwcGluZ0J5U3RhdGVBbmREZXBhcnRtZW50KHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLm1pbmlzdHJ5LCB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5kZXBhcnRtZW50cykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBbXVxuICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgIGNvbnNvbGUubG9nKCdObyBjaGFuZ2VzIGRldGVjdGVkLicpO1xuICAgIH1cblxuICB9XG5cblxuICBnZXRNaW5pc3RyeURhdGEoKSB7XG4gICAgdGhpcy5hcGlMb2FkaW5nID0gdHJ1ZVxuICAgIGNvbnN0IHJlcXVlc3RlZFR5cGUgPSB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0TWluaXN0cnlEYXRhKHJlcXVlc3RlZFR5cGUpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhLS0nLCBkYXRhKVxuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvLyBJZ25vcmUgc3RhbGUgcmVzcG9uc2VzIGZyb20gYSB0eXBlIHRoYXQgd2FzIGNoYW5nZWQgYWdhaW4gYmVmb3JlIHRoaXMgb25lIHJldHVybmVkXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRUeXBlICE9PSB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5taW5pc3RyeUZ1bGxEYXRhID0gZGF0YVxuICAgICAgICB0aGlzLm1pbmlzdHJ5RGF0YSA9IFtdXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRUeXBlID09PSAnbWluaXN0cnknKSB7XG4gICAgICAgICAgZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uc2JPcmdUeXBlID09PSAnbWluaXN0cnknKSB7XG4gICAgICAgICAgICAgIHRoaXMubWluaXN0cnlEYXRhLnB1c2goaXRlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHJlcXVlc3RlZFR5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5zYk9yZ1R5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5taW5pc3RyeURhdGEucHVzaChpdGVtKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldFVzZXJQcm9maWxlRGF0YShyZXF1ZXN0ZWRUeXBlLCByZXNvbHZlKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgb25NaW5pc3RyeVR5cGVDaGFuZ2UoZXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudClcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5VHlwZSddID0gZXZlbnQudmFsdWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID0gW11cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2Uucm9sZU1hcHBpbmdHZW5lcmF0aW9uRGF0YSA9IFtdXG4gICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9IGV2ZW50LnZhbHVlXG4gICAgdGhpcy5taW5pc3RyeURhdGEgPSBbXVxuXG4gICAgaWYgKHRoaXMubG9naW4pIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0TWluaXN0cnlEYXRhKClcbiAgICB9XG5cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgaWYgKGV2ZW50Py52YWx1ZSA9PT0gJ3N0YXRlJykge1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeScpPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50Py52YWx1ZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeScpPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICB9XG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydtaW5pc3RyeSddID0gJydcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50X25hbWUnXSA9ICcnXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudHMnXSA9ICcnXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgIC8vIHRoaXMucm9sZU1hcHBpbmdGb3JtLnJlc2V0KClcbiAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5KSB7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgLy8gIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICAgICAgICAvLyAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gICAgICB9LCA1MDAwKVxuICAgIH1cbiAgfVxuXG4gIG9uTWluaXN0cnlDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHNlbGVjdGVkTWluaXN0cnlJZCA9IGV2ZW50LnZhbHVlO1xuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBNaW5pc3RyeSBJRDonLCBzZWxlY3RlZE1pbmlzdHJ5SWQpO1xuICAgIHRoaXMuZGVwYXJ0bWVudERhdGEgPSBbXVxuICAgIC8vIFlvdSBjYW4gYWNjZXNzIHRoZSBzZWxlY3RlZCBvYmplY3QgaWYgbmVlZGVkXG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5pc3RyeSA9IHRoaXMubWluaXN0cnlEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkZW50aWZpZXIgPT09IHNlbGVjdGVkTWluaXN0cnlJZCk7XG4gICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5T2JqID0gc2VsZWN0ZWRNaW5pc3RyeVxuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBNaW5pc3RyeTonLCBzZWxlY3RlZE1pbmlzdHJ5KTsgYGBcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydtaW5pc3RyeSddID0gc2VsZWN0ZWRNaW5pc3RyeVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPSBbXVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5yb2xlTWFwcGluZ0dlbmVyYXRpb25EYXRhID0gW11cbiAgICAvLyBTZWxlY3RpbmcgYSBkaWZmZXJlbnQgbWluaXN0cnkvc3RhdGUgaW52YWxpZGF0ZXMgYW55IHByZXZpb3VzbHkgc2VsZWN0ZWQgZGVwYXJ0bWVudFxuICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZERlcGFydG1lbnRPYmogPSBudWxsXG4gICAgdGhpcy5waW5uZWREZXBhcnRtZW50T3B0aW9ucyA9IFtdXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSAnJ1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSAnJ1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKSlcbiAgICBpZiAoc2VsZWN0ZWRNaW5pc3RyeUlkICYmICh0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnc3RhdGUnIHx8IHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdtaW5pc3RyeScpKSB7XG4gICAgICB0aGlzLmRlcGFydG1lbnRNaW5pc3RyeUlkID0gc2VsZWN0ZWRNaW5pc3RyeUlkXG4gICAgICB0aGlzLmRlcGFydG1lbnRTZWFyY2hRdWVyeSA9ICcnXG4gICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSBbXVxuICAgICAgdGhpcy5sb2FkRGVwYXJ0bWVudHModHJ1ZSlcbiAgICB9XG5cbiAgICB0aGlzLmdldFVwbG9hZGVkRG9jdW1lbnRzKClcbiAgICBjb25zb2xlLmxvZygnR2VuZXJhdGUgQ0JQIHZhbGlkYXRpb246Jywge1xuICBmb3JtVmFsaWQ6IHRoaXMucm9sZU1hcHBpbmdGb3JtPy52YWxpZCxcbiAgZm9ybUludmFsaWQ6IHRoaXMucm9sZU1hcHBpbmdGb3JtPy5pbnZhbGlkLFxuICBsb2FkaW5nOiB0aGlzLmxvYWRpbmcsXG4gIGRvY3VtZW50czogdGhpcy5kb2N1bWVudHMsXG4gIGRvY3VtZW50c0xlbmd0aDogdGhpcy5kb2N1bWVudHM/Lmxlbmd0aCxcbiAgZGlzYWJsZWQ6XG4gICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0/LmludmFsaWQgfHxcbiAgICB0aGlzLmxvYWRpbmcgfHxcbiAgICB0aGlzLmRvY3VtZW50cz8ubGVuZ3RoIDwgMVxufSk7XG4gIH1cblxuICBzZWFyY2hEYXRhKCkge1xuXG4gIH1cblxuICBhcHBseUZpbHRlcigpIHtcblxuICB9XG5cbiAgZG93bmxvYWRQREYoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGRmQ29udGVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIG1hcmdpbjogMC41LFxuICAgICAgZmlsZW5hbWU6ICdDQlBfUGxhbi5wZGYnLFxuICAgICAgaW1hZ2U6IHsgdHlwZTogJ2pwZWcnLCBxdWFsaXR5OiAwLjk4IH0sXG4gICAgICBodG1sMmNhbnZhczoge1xuICAgICAgICBzY2FsZTogMixcbiAgICAgICAgdXNlQ09SUzogdHJ1ZSwgIC8vIEltcG9ydGFudCBmb3IgZXh0ZXJuYWwgaW1hZ2VzL2ljb25zXG4gICAgICB9LFxuICAgICAganNQREY6IHtcbiAgICAgICAgdW5pdDogJ2luJyxcbiAgICAgICAgZm9ybWF0OiAnYTQnLFxuICAgICAgICBvcmllbnRhdGlvbjogJ3BvcnRyYWl0J1xuICAgICAgfVxuICAgIH07XG5cbiAgICBodG1sMnBkZigpLmZyb20oZWxlbWVudCkuc2V0KG9wdGlvbnMpLnNhdmUoKTtcblxuICB9XG5cbiAgb25GaWxlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmaWxlczogRmlsZUxpc3QgPSBldmVudC50YXJnZXQuZmlsZXM7XG4gICAgY29uc3QgbWF4RmlsZXMgPSAzO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnKTtcblxuICAgIC8vIEFsd2F5cyBjbGVhciBjb250cm9sIGZpcnN0IChwcmV2ZW50cyBvbGQgdmFsaWQgdmFsdWUpXG4gICAgY29udHJvbD8ucmVzZXQoKTtcbiAgICBjb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgdGhpcy51cGxvYWRlZEZpbGUgPSBbXTtcbiAgICB0aGlzLnVwbG9hZEVycm9yID0gbnVsbDtcblxuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAvLyBMaW1pdCBjaGVja1xuICAgIGlmIChmaWxlcy5sZW5ndGggPiBtYXhGaWxlcykge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBZb3UgY2FuIHVwbG9hZCBhIG1heGltdW0gb2YgJHttYXhGaWxlc30gZmlsZXNgO1xuICAgICAgY29udHJvbD8uc2V0RXJyb3JzKHsgbWF4RmlsZXM6IHRydWUgfSk7XG4gICAgICBjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkRmlsZXM6IEZpbGVbXSA9IFtdO1xuICAgIGNvbnN0IGludmFsaWRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBtYXhCeXRlcyA9IHRoaXMubWF4RmlsZVNpemVNQiAqIDEwMjQgKiAxMDI0O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzW2ldO1xuXG4gICAgICAvLyBTaXplIGNoZWNrXG4gICAgICBpZiAoZmlsZS5zaXplID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgaW52YWxpZEZpbGVzLnB1c2goYCR7ZmlsZS5uYW1lfSAoZXhjZWVkcyAke3RoaXMubWF4RmlsZVNpemVNQn1NQilgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGUgY2hlY2tcbiAgICAgIGlmICghdGhpcy5hbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgICBpbnZhbGlkRmlsZXMucHVzaChgJHtmaWxlLm5hbWV9IChpbnZhbGlkIHR5cGUpYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YWxpZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgfVxuXG4gICAgLy8g4p2MIE5PIHZhbGlkIGZpbGVzIOKGkiBmb3JtIE1VU1QgQkUgaW52YWxpZFxuICAgIGlmICh2YWxpZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBJbnZhbGlkIGZpbGUocyk6ICR7aW52YWxpZEZpbGVzLmpvaW4oJywgJyl9YDtcblxuICAgICAgY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICBjb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkRmlsZXM6IHRydWUgfSk7XG4gICAgICBjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0sIDUwMDApXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDinJQgQXQgbGVhc3QgT05FIHZhbGlkIGZpbGUg4oaSIGZvcm0gc2hvdWxkIGJlIFZBTElEXG4gICAgdGhpcy51cGxvYWRlZEZpbGUgPSB2YWxpZEZpbGVzO1xuXG4gICAgaWYgKGludmFsaWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYFNvbWUgZmlsZXMgd2VyZSBza2lwcGVkOiAke2ludmFsaWRGaWxlcy5qb2luKCcsICcpfWA7XG4gICAgfVxuXG4gICAgY29udHJvbD8uc2V0VmFsdWUodmFsaWRGaWxlcyk7XG4gICAgY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgIGNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgIGNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICB9XG5cblxuXG5cblxuXG4gIGxvZ2luU3RhdHVzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmxvZ2luID0gdHJ1ZVxuICAgICAgdGhpcy5sb2dpblN1Y2Nlc3MuZW1pdCh0cnVlKVxuICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9ICdtaW5pc3RyeSdcblxuICAgICAgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2luID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKSB7XG4gICAgdGhpcy5hcGlMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmltbWVkaWF0ZUZhaWx1cmVIYW5kbGVkID0gZmFsc2VcblxuICAgIGlmICghdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Rm9ybVZhbHVlcyA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgbGV0IGZvcm1VcGxvYWREYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAvLyBNaW5pc3RyeSBzZWxlY3Rpb25cbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5ID0gdGhpcy5taW5pc3RyeURhdGEuZmluZChpdGVtID0+XG4gICAgICBpdGVtLmlkZW50aWZpZXIgPT09IGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5XG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeU9iaiA9IHNlbGVjdGVkTWluaXN0cnk7XG5cbiAgICAvLyBBcHBlbmQgYmFzZSBmaWVsZHNcbiAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9pZCcsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5IHx8ICcnKTtcbiAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9uYW1lJywgc2VsZWN0ZWRNaW5pc3RyeT8ub3JnTmFtZSB8fCAnJyk7XG5cbiAgICBpZiAoY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpIHtcbiAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnZGVwYXJ0bWVudF9pZCcsIGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzKTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEZvcm1WYWx1ZXMuYWRkaXRpb25hbERldGFpbHMpIHtcbiAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnaW5zdHJ1Y3Rpb24nLCBjdXJyZW50Rm9ybVZhbHVlcy5hZGRpdGlvbmFsRGV0YWlscyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHVwbG9hZGVkIGZpbGUocylcbiAgICBjb25zdCBmaWxlczogRmlsZSB8IEZpbGVbXSA9XG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZSB8fCB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnKT8udmFsdWU7XG5cbiAgICBjb25zb2xlLmxvZygnRmlsZXMgc2VsZWN0ZWQ6JywgZmlsZXMpO1xuXG4gICAgLy8gQXBwZW5kIHNpbmdsZSBvciBtdWx0aXBsZSBmaWxlc1xuICAgIGlmIChmaWxlcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGVzLCBmaWxlcy5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWJ1ZzogcHJpbnQgRm9ybURhdGFcbiAgICBjb25zb2xlLmxvZyhcIkZvcm1EYXRhIERlYnVnOlwiKTtcbiAgICBmb3JtVXBsb2FkRGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tleX06IEZJTEUgLT4gJHt2YWx1ZS5uYW1lfSAoJHt2YWx1ZS5zaXplfSBieXRlcylgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tleX06ICR7dmFsdWV9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cblxuICAgIC8vIEJ1aWxkIHJlcXVlc3QgYm9keSBmb3IgcG9sbGluZyBBUElcbiAgICBsZXQgcmVxOiBhbnkgPSB7XG4gICAgICBzdGF0ZV9jZW50ZXJfaWQ6IGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5LFxuICAgICAgaW5zdHJ1Y3Rpb246IGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzLFxuICAgICAgc3RhdGVfY2VudGVyX25hbWU6IHNlbGVjdGVkTWluaXN0cnk/Lm9yZ05hbWVcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdzdGF0ZScgfHwgY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpIHtcbiAgICAgIGNvbnN0IGRlcGFydG1lbnROYW1lID0gdGhpcy5kZXBhcnRtZW50RGF0YS5maW5kKFxuICAgICAgICBkID0+IGQuaWRlbnRpZmllciA9PT0gY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHNcbiAgICAgICk7XG5cbiAgICAgIHJlcS5kZXBhcnRtZW50X2lkID0gY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMgfHwgJyc7XG4gICAgICByZXEuZGVwYXJ0bWVudF9uYW1lID0gZGVwYXJ0bWVudE5hbWU/Lm9yZ05hbWUgfHwgJyc7XG4gICAgfVxuXG5cblxuICAgIC8vIFBvbGxpbmcgQVBJXG4gICAgY29uY2F0KFxuICAgICAgb2YobnVsbCksICAgICAgICAgICAgICAvLyDwn5SlIGltbWVkaWF0ZSBmaXJzdCBlbWlzc2lvblxuICAgICAgaW50ZXJ2YWwoNTAwMCkgICAgICAgICAvLyDij7Egc3Vic2VxdWVudCBwb2xsaW5nIGV2ZXJ5IDVzXG4gICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc2hhcmVkU2VydmljZS5nZW5lcmF0ZVJvbGVNYXBwaW5nKHJlcSwgZmlsZXMpKSxcbiAgICAgICAgdGFwKGRhdGEgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5maXJzdEFwaVJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBkYXRhOyAvLyDwn5GIIHN0b3JlIGZpcnN0IHJlc3BvbnNlXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRmlyc3QgQVBJIHJlc3BvbnNlOicsIHRoaXMuZmlyc3RBcGlSZXNwb25zZSk7XG4gICAgICAgICAgICBpZihkYXRhICYmIGRhdGE/LnN0YXR1cyA9PT0gJ0ZBSUxFRCcpIHtcbiAgICAgICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmltbWVkaWF0ZUZhaWx1cmVIYW5kbGVkID0gdHJ1ZSAvLyB0YWtlV2hpbGUgc3RpbGwgZm9yd2FyZHMgdGhpcyBzYW1lIHZhbHVlIHRvIHN1YnNjcmliZSgpOyB0ZWxsIGl0IHRvIHNraXBcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTsgICAvLyDwn5uRIHN0b3AgcG9sbGluZ1xuICAgICAgICAgICAgICAgIHRoaXMucmVnZW5lcmF0ZVJvbGVNYXBwaW5nQWZ0ZXJGYWlsZWRBbmREZWxldGUoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVdoaWxlKFxuICAoZGF0YTogYW55KSA9PlxuICAgIGRhdGE/LnN0YXR1cyAhPT0gJ0NPTVBMRVRFRCcgJiZcbiAgICBkYXRhPy5zdGF0dXMgIT09ICdGQUlMRUQnLFxuICB0cnVlIC8vIGVtaXQgdGhlIGZpbmFsIENPTVBMRVRFRC9GQUlMRUQgcmVzcG9uc2VcbilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmltbWVkaWF0ZUZhaWx1cmVIYW5kbGVkKSB7XG4gICAgICAgICAgdGhpcy5pbW1lZGlhdGVGYWlsdXJlSGFuZGxlZCA9IGZhbHNlIC8vIGFscmVhZHkgaGFuZGxlZCBpbiB0YXAoKSBhYm92ZTsgYXZvaWQgZG91YmxlLWhhbmRsaW5nIHRoaXMgc2FtZSBlbWlzc2lvblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdyb2xlIG1hcHBpbmcgZGF0YS0tJywgZGF0YSlcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RBcGlSZXNwb25zZT8uaXNfZXhpc3RpbmcpIHtcbiAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLnNob3dXb3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTsgICAvLyDwn5uRIHN0b3AgcG9sbGluZ1xuICAgICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERlbGV0ZVJvbGVNYXBwaW5nUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgICAgICAgZGF0YToge2RvY3VtZW50czogdGhpcy5kb2N1bWVudHN9LFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnMzAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgICAgICAgIG1heEhlaWdodDogJzgwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG5cbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZGVsZXRlUm9sZU1hcHBpbmdCeVN0YXRlQW5kRGVwYXJ0bWVudCh0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5taW5pc3RyeSwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWUuZGVwYXJ0bWVudHMpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBbXVxuICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBbXVxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgIC8vIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xuXG4gICAgICAgICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGN1cnJlbnRVcmwpO1xuICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsncm9sZV9tYXBwaW5nX2dlbmVyYXRpb24nXSA9XG4gICAgICAgICAgICAgICAgZGF0YT8ucm9sZV9tYXBwaW5ncztcbiAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJvbGVNYXBwaW5nR2VuZXJhdGlvbkRhdGEgPSBkYXRhPy5yb2xlX21hcHBpbmdzO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAgICAgICAnY2JwUGxhbkZpbmFsT2JqJyxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pO1xuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9haS9saXN0J10sIHtcbiAgICAgICAgICAgICAgICBvblNhbWVVcmxOYXZpZ2F0aW9uOiAncmVsb2FkJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICBcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcpIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IHRydWVcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YT8uc3RhdHVzID09PSAnQ09NUExFVEVEJykge1xuICAgICAgICAgIHRoaXMuc2hvd1dvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsncm9sZV9tYXBwaW5nX2dlbmVyYXRpb24nXSA9XG4gICAgICAgICAgICBkYXRhPy5yb2xlX21hcHBpbmdzO1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yb2xlTWFwcGluZ0dlbmVyYXRpb25EYXRhID0gZGF0YT8ucm9sZV9tYXBwaW5ncztcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAgICdjYnBQbGFuRmluYWxPYmonLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iailcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSk7XG5cbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NCUCBQbGFuIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJywgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9haS9saXN0J10pO1xuICAgICAgICB9IGVsc2UgaWYoZGF0YSAmJiBkYXRhPy5zdGF0dXMgPT09ICdGQUlMRUQnKSB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTsgICAvLyDwn5uRIHN0b3AgcG9sbGluZ1xuICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignR2VuZXJhdGlvbiBmYWlsZWQgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicsICdYJywge1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlUHJvY2Vzc2luZ1N0YWdlKCkge1xuICAgIGNvbnN0IGNodW5rQ291bnQgPSB0aGlzLmNodW5rcy5sZW5ndGg7XG4gICAgbGV0IHN0YWdlSW5kZXggPSAwO1xuXG4gICAgLy8gTXVjaCBzbG93ZXIgc3RhZ2UgcHJvZ3Jlc3Npb24gLSBzdGFnZXMgc3RheSBtdWNoIGxvbmdlclxuICAgIGlmIChjaHVua0NvdW50IDw9IDgpIHtcbiAgICAgIHN0YWdlSW5kZXggPSAwOyAvLyBJbml0aWFsaXppbmcgLSBzdGF5cyBmb3IgZmlyc3QgOCBjaHVua3NcbiAgICB9IGVsc2UgaWYgKGNodW5rQ291bnQgPD0gMjApIHtcbiAgICAgIHN0YWdlSW5kZXggPSAxOyAvLyBBbmFseXppbmcgY29tcGV0ZW5jeSByZXF1aXJlbWVudHMgLSAxMiBjaHVua3NcbiAgICB9IGVsc2UgaWYgKGNodW5rQ291bnQgPD0gMzUpIHtcbiAgICAgIHN0YWdlSW5kZXggPSAyOyAvLyBQcm9jZXNzaW5nIHdvcmsgb3JkZXIgLSAxNSBjaHVua3NcbiAgICB9IGVsc2UgaWYgKGNodW5rQ291bnQgPD0gNTUpIHtcbiAgICAgIHN0YWdlSW5kZXggPSAzOyAvLyBHZW5lcmF0aW5nIHJvbGUgbWFwcGluZ3MgLSAyMCBjaHVua3NcbiAgICB9IGVsc2UgaWYgKGNodW5rQ291bnQgPD0gNzUpIHtcbiAgICAgIHN0YWdlSW5kZXggPSA0OyAvLyBDb21wdXRpbmcgZmluYWwgcmVjb21tZW5kYXRpb25zIC0gMjAgY2h1bmtzXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YWdlSW5kZXggPSA1OyAvLyBGaW5hbGl6aW5nIENCUCBQbGFuIC0gNzUrIGNodW5rc1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9IHRoaXMucHJvY2Vzc2luZ1N0YWdlc1tzdGFnZUluZGV4XTtcbiAgfVxuXG4gIGdldFByb2dyZXNzUGVyY2VudGFnZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGNodW5rQ291bnQgPSB0aGlzLmNodW5rcy5sZW5ndGg7XG4gICAgaWYgKGNodW5rQ291bnQgPT09IDApIHJldHVybiAwO1xuXG4gICAgLy8gTXVjaCBzbG93ZXIgYW5kIHNtb290aGVyIHByb2dyZXNzIGNhbGN1bGF0aW9uXG4gICAgbGV0IHBlcmNlbnRhZ2UgPSAwO1xuXG4gICAgaWYgKGNodW5rQ291bnQgPD0gMTUpIHtcbiAgICAgIC8vIEZpcnN0IDE1IGNodW5rcyA9IDAtMjUlICh2ZXJ5IHNsb3cgc3RhcnQpXG4gICAgICBwZXJjZW50YWdlID0gKGNodW5rQ291bnQgLyAxNSkgKiAyNTtcbiAgICB9IGVsc2UgaWYgKGNodW5rQ291bnQgPD0gMzUpIHtcbiAgICAgIC8vIE5leHQgMjAgY2h1bmtzID0gMjUtNTAlIChzbG93IGVhcmx5IHByb2dyZXNzKVxuICAgICAgcGVyY2VudGFnZSA9IDI1ICsgKChjaHVua0NvdW50IC0gMTUpIC8gMjApICogMjU7XG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDYwKSB7XG4gICAgICAvLyBOZXh0IDI1IGNodW5rcyA9IDUwLTc1JSAoc3RlYWR5IG1pZGRsZSBwcm9ncmVzcylcbiAgICAgIHBlcmNlbnRhZ2UgPSA1MCArICgoY2h1bmtDb3VudCAtIDM1KSAvIDI1KSAqIDI1O1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSAxMDApIHtcbiAgICAgIC8vIE5leHQgNDAgY2h1bmtzID0gNzUtOTAlIChzbG93ZXIgZmluYWwgYXBwcm9hY2gpXG4gICAgICBwZXJjZW50YWdlID0gNzUgKyAoKGNodW5rQ291bnQgLSA2MCkgLyA0MCkgKiAxNTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQmV5b25kIDEwMCBjaHVua3MgPSA5MC05NSUgKHZlcnkgc2xvdyBmaW5hbCBwcm9ncmVzc2lvbilcbiAgICAgIHBlcmNlbnRhZ2UgPSA5MCArIE1hdGgubWluKCgoY2h1bmtDb3VudCAtIDEwMCkgLyA1MCkgKiA1LCA1KTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZChwZXJjZW50YWdlKTtcbiAgfVxuXG4gIG9uU3RyZWFtRW5kKCkge1xuICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdDb21wbGV0aW5nIENCUCBQbGFuIGdlbmVyYXRpb24uLi4nO1xuXG4gICAgLy8gU2hvdyAxMDAlIGNvbXBsZXRpb24gYnJpZWZseSBiZWZvcmUgZmluaXNoaW5nXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZ1bGxKc29uID0gdGhpcy5jaHVua3Muam9pbignJyk7XG4gICAgICBjb25zdCBjbGVhbmVkID0gdGhpcy5mdWxsSnNvbi5yZXBsYWNlKC9eYGBganNvblxcbi8sICcnKS5yZXBsYWNlKC9gYGAkLywgJycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wYXJzZWREYXRhID0gSlNPTi5wYXJzZShjbGVhbmVkKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1BhcnNlZCBkYXRhOicsIHRoaXMucGFyc2VkRGF0YSk7XG5cbiAgICAgICAgLy8gSGFuZGxlIHN1Y2Nlc3NmdWwgY29tcGxldGlvblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsncm9sZV9tYXBwaW5nX2dlbmVyYXRpb24nXSA9IHRoaXMucGFyc2VkRGF0YTtcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJvbGVNYXBwaW5nR2VuZXJhdGlvbkRhdGEgPSB0aGlzLnBhcnNlZERhdGE7XG5cbiAgICAgICAgdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSk7XG5cbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDQlAgUGxhbiBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5IScsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdKU09OIHBhcnNlIGVycm9yOicsIGUpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQ0JQIFBsYW4uIFBsZWFzZSB0cnkgYWdhaW4uJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIDUwMCk7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCBwcm9ncmVzcyBwZXJjZW50YWdlIGluY2x1ZGluZyBjb21wbGV0aW9uIHN0YXRlXG4gIGdldERpc3BsYXlQcm9ncmVzc1BlcmNlbnRhZ2UoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID09PSAnQ29tcGxldGluZyBDQlAgUGxhbiBnZW5lcmF0aW9uLi4uJykge1xuICAgICAgcmV0dXJuIDEwMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvZ3Jlc3NQZXJjZW50YWdlKCk7XG4gIH1cblxuIFxuICByZW1vdmVGaWxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudXBsb2FkZWRGaWxlIHx8IHRoaXMudXBsb2FkZWRGaWxlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gUmVtb3ZlIG9uZSBmaWxlIGF0IHRoZSBnaXZlbiBpbmRleFxuICAgIHRoaXMudXBsb2FkZWRGaWxlLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAvLyBVcGRhdGUgZm9ybSBjb250cm9sIHZhbHVlXG4gICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnNldFZhbHVlKHRoaXMudXBsb2FkZWRGaWxlKTtcbiAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuXG4gICAgLy8gQ2xlYXIgZXJyb3JzIGlmIG5vIGZpbGVzIGxlZnRcbiAgICBpZiAodGhpcy51cGxvYWRlZEZpbGUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gJyc7XG4gICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWREb2MnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKGlucHV0KSBpbnB1dC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxuXG5cbiAgZ2V0VXNlclByb2ZpbGVEYXRhKHJlcXVlc3RlZFR5cGU/OiBzdHJpbmcsIGRvbmU/OiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFVzZXJQcm9maWxlKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnZGF0YS0tJywgZGF0YSlcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1c2VyUHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRhdGEpKVxuICAgICAgdGhpcy5sb2dpblVzZXJPcmdJZHMgPSBkYXRhPy5vcmdhbml6YXRpb25faWRzXG4gICAgICAvLyBJZ25vcmUgc3RhbGUgcmVzcG9uc2VzIGZyb20gYSB0eXBlIHRoYXQgd2FzIGNoYW5nZWQgYWdhaW4gYmVmb3JlIHRoaXMgb25lIHJldHVybmVkXG4gICAgICBpZiAocmVxdWVzdGVkVHlwZSAmJiByZXF1ZXN0ZWRUeXBlICE9PSB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlKSB7XG4gICAgICAgIGRvbmU/LigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbGV0IGZpbHRlcmVkTWluaXN0cnlEYXRhID0gW11cbiAgICAgIHRoaXMubWluaXN0cnlGdWxsRGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMubG9naW5Vc2VyT3JnSWRzLmluZGV4T2YoaXRlbT8uaWRlbnRpZmllcikgPiAtMSAmJiBpdGVtPy5zYk9yZ1R5cGUgPT09IChyZXF1ZXN0ZWRUeXBlIHx8IHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUpKSB7XG4gICAgICAgICAgZmlsdGVyZWRNaW5pc3RyeURhdGEucHVzaChpdGVtKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICB0aGlzLm1pbmlzdHJ5RGF0YSA9IGZpbHRlcmVkTWluaXN0cnlEYXRhXG4gICAgICB0aGlzLm9yaWdpbmFsTWluaXN0cnlEYXRhID0gZmlsdGVyZWRNaW5pc3RyeURhdGFcbiAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gZmlsdGVyZWRNaW5pc3RyeURhdGE7XG4gICAgICBkb25lPy4oKVxuICAgIH0pXG4gIH1cblxuICBvbk9wZW5lZChvcGVuZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnBhbmVsT3BlbiA9IG9wZW5lZDtcbiAgfVxuXG4gIG9uT3BlbmVkRGVwYXJ0bWVudChvcGVuZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRlcGFydG1lbnRQYW5lbE9wZW4gPSBvcGVuZWRcbiAgICBpZiAob3BlbmVkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGVwYXJ0bWVudFNlbGVjdCAmJiB0aGlzLmRlcGFydG1lbnRTZWxlY3QucGFuZWwgJiYgdGhpcy5kZXBhcnRtZW50U2VsZWN0LnBhbmVsLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLmRlcGFydG1lbnRTZWxlY3QucGFuZWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uRGVwYXJ0bWVudFNjcm9sbClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVwYXJ0bWVudFNlYXJjaFF1ZXJ5KSB7XG4gICAgICAvLyBwYW5lbCBjbG9zZWQgd2l0aCBhbiBhY3RpdmUgc2VhcmNoOiByZXNldCBzbyB0aGUgbGlzdCBtYXRjaGVzIHRoZSBjbGVhcmVkIHNlYXJjaCBib3ggb24gcmVvcGVuXG4gICAgICB0aGlzLmRlcGFydG1lbnRTZWFyY2hTdWJqZWN0Lm5leHQoJycpXG4gICAgfVxuICB9XG5cbiAgb25EZXBhcnRtZW50U2Nyb2xsID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBjb25zdCBwYW5lbCA9IGV2ZW50LnRhcmdldFxuICAgIGlmIChwYW5lbC5zY3JvbGxUb3AgKyBwYW5lbC5jbGllbnRIZWlnaHQgPj0gcGFuZWwuc2Nyb2xsSGVpZ2h0IC0gNjApIHtcbiAgICAgIHRoaXMubG9hZERlcGFydG1lbnRzKClcbiAgICB9XG4gIH1cblxuICBsb2FkRGVwYXJ0bWVudHMocmVzZXQgPSBmYWxzZSkge1xuICAgIGlmICghdGhpcy5kZXBhcnRtZW50TWluaXN0cnlJZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghcmVzZXQgJiYgKHRoaXMuZGVwYXJ0bWVudExvYWRpbmcgfHwgIXRoaXMuZGVwYXJ0bWVudEhhc01vcmUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHJlc2V0KSB7XG4gICAgICB0aGlzLmRlcGFydG1lbnRPZmZzZXQgPSAwXG4gICAgICB0aGlzLmRlcGFydG1lbnRIYXNNb3JlID0gdHJ1ZVxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMuZGVwYXJ0bWVudFJlcXVlc3RJZFxuICAgIHRoaXMuZGVwYXJ0bWVudExvYWRpbmcgPSB0cnVlXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGxpbWl0OiB0aGlzLmRlcGFydG1lbnRQYWdlU2l6ZSxcbiAgICAgIG9mZnNldDogdGhpcy5kZXBhcnRtZW50T2Zmc2V0LFxuICAgICAgcXVlcnk6IHRoaXMuZGVwYXJ0bWVudFNlYXJjaFF1ZXJ5XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknXG4gICAgICA/IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDZW50ZXJCYXNlZERlcGFydG1lbnQodGhpcy5kZXBhcnRtZW50TWluaXN0cnlJZCwgb3B0aW9ucylcbiAgICAgIDogdGhpcy5zaGFyZWRTZXJ2aWNlLmdldERlcGFydG1lbnRMaXN0KHRoaXMuZGVwYXJ0bWVudE1pbmlzdHJ5SWQsIG9wdGlvbnMpXG4gICAgcmVxdWVzdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdElkICE9PSB0aGlzLmRlcGFydG1lbnRSZXF1ZXN0SWQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlcGFydG1lbnRMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5pc0FycmF5KHJlcykgPyByZXMgOiAocmVzPy5pdGVtcyB8fCByZXM/LmRhdGEgfHwgW10pXG4gICAgICAgIHRoaXMuZGVwYXJ0bWVudEhhc01vcmUgPSBpdGVtcy5sZW5ndGggPT09IHRoaXMuZGVwYXJ0bWVudFBhZ2VTaXplXG4gICAgICAgIHRoaXMuZGVwYXJ0bWVudE9mZnNldCArPSBpdGVtcy5sZW5ndGhcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5kZXBhcnRtZW50RGF0YS5zb21lKGQgPT4gZD8uaWRlbnRpZmllciA9PT0gaXRlbT8uaWRlbnRpZmllcikpIHtcbiAgICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudERhdGEucHVzaChpdGVtKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5maWx0ZXJlZERlcGFydG1lbnRMaXN0ID0gcmVzZXQgPyBpdGVtcyA6IFsuLi50aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QsIC4uLml0ZW1zXVxuICAgICAgICB0aGlzLmVuc3VyZVNlbGVjdGVkRGVwYXJ0bWVudE9wdGlvbigpXG4gICAgICAgIGlmIChyZXNldCAmJiAhaXRlbXMubGVuZ3RoICYmICF0aGlzLmRlcGFydG1lbnRTZWFyY2hRdWVyeSAmJiB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdObyBEZXBhcnRtZW50IEZvdW5kIGZvciBTZWxlY3RlZCBNaW5pc3RyeScsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50X25hbWUnXSA9ICcnXG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudHMnXSA9ICcnXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3RJZCAhPT0gdGhpcy5kZXBhcnRtZW50UmVxdWVzdElkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXBhcnRtZW50TG9hZGluZyA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8vIG1hdC1zZWxlY3Qgb25seSBkaXNwbGF5cyBhIHNlbGVjdGlvbiB3aGlsZSBhIG1hdC1vcHRpb24gd2l0aCB0aGF0IHZhbHVlIGlzXG4gIC8vIHJlbmRlcmVkOyB3aGVuIHRoZSBjdXJyZW50IHNlYXJjaC9wYWdlIGZyb20gdGhlIHNlcnZlciBkb2VzIG5vdCBpbmNsdWRlIHRoZVxuICAvLyBzZWxlY3RlZCBkZXBhcnRtZW50LCBpdCBpcyByZW5kZXJlZCBhcyBhIGhpZGRlbiBvcHRpb24gaW5zdGVhZCBvZiBpbiB0aGUgbGlzdFxuICBlbnN1cmVTZWxlY3RlZERlcGFydG1lbnRPcHRpb24oKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHRoaXMucm9sZU1hcHBpbmdGb3JtPy5nZXQoJ2RlcGFydG1lbnRzJyk/LnZhbHVlXG4gICAgaWYgKCFzZWxlY3RlZElkIHx8IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRJZClcbiAgICAgIHx8IHRoaXMuZmlsdGVyZWREZXBhcnRtZW50TGlzdC5zb21lKGQgPT4gZD8uaWRlbnRpZmllciA9PT0gc2VsZWN0ZWRJZCkpIHtcbiAgICAgIHRoaXMucGlubmVkRGVwYXJ0bWVudE9wdGlvbnMgPSBbXVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5kZXBhcnRtZW50RGF0YS5maW5kKGQgPT4gZD8uaWRlbnRpZmllciA9PT0gc2VsZWN0ZWRJZClcbiAgICAgIHx8ICh0aGlzLnNlbGVjdGVkRGVwYXJ0bWVudE9iaj8uaWRlbnRpZmllciA9PT0gc2VsZWN0ZWRJZCA/IHRoaXMuc2VsZWN0ZWREZXBhcnRtZW50T2JqIDogbnVsbClcbiAgICAgIHx8ICh0aGlzLmNicEZpbmFsT2JqPy5kZXBhcnRtZW50X25hbWUgPyB7IGlkZW50aWZpZXI6IHNlbGVjdGVkSWQsIG9yZ05hbWU6IHRoaXMuY2JwRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lIH0gOiBudWxsKVxuICAgIHRoaXMucGlubmVkRGVwYXJ0bWVudE9wdGlvbnMgPSBzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXVxuICB9XG5cbiAgZmlsdGVyRGF0YShldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnZhbHVlKSB7XG4gICAgICBjb25zdCBzID0gZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5taW5pc3RyeURhdGEuZmlsdGVyKHggPT5cbiAgICAgICAgeC5vcmdOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocylcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5taW5pc3RyeURhdGFcbiAgICB9XG5cbiAgfVxuXG4gIGZpbHRlckRlcGFydG1lbnREYXRhKGV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudCAmJiBldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnZhbHVlID8gZXZlbnQudGFyZ2V0LnZhbHVlIDogJydcbiAgICB0aGlzLmRlcGFydG1lbnRTZWFyY2hTdWJqZWN0Lm5leHQodmFsdWUudHJpbSgpKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5SWQgPSAnJ1xuICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnJlc2V0KClcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKVxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKVxuICB9XG5cbiAgb25EZXBhcnRtZW50Q2hhbmdlKCkge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWU7XG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gZm9ybURhdGEuZGVwYXJ0bWVudHMgPyBmb3JtRGF0YS5kZXBhcnRtZW50cyA6ICcnXG4gICAgdGhpcy5jYnBGaW5hbE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDQlBQbGFuTG9jYWxTdG9yYWdlKClcbiAgICBpZiAodGhpcy5jYnBGaW5hbE9iaiAmJiB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeSAmJiB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlKSB7XG4gICAgICB0aGlzLmNicEZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gZm9ybURhdGEuZGVwYXJ0bWVudHMgPyBmb3JtRGF0YS5kZXBhcnRtZW50cyA6ICcnXG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5pc3RyeSA9IHRoaXMubWluaXN0cnlEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkZW50aWZpZXIgPT09IGZvcm1EYXRhLm1pbmlzdHJ5KTtcblxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnknXSA9IHNlbGVjdGVkTWluaXN0cnlcblxuICAgIGNvbnN0IGRlcGFydG1lbnROYW1lID0gdGhpcy5kZXBhcnRtZW50RGF0YS5maW5kKHUgPT4gdS5pZGVudGlmaWVyID09PSBmb3JtRGF0YS5kZXBhcnRtZW50cyk7XG4gICAgaWYgKGRlcGFydG1lbnROYW1lKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGVwYXJ0bWVudE9iaiA9IGRlcGFydG1lbnROYW1lXG4gICAgfVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gZGVwYXJ0bWVudE5hbWU/Lm9yZ05hbWVcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgdGhpcy5nZXRVcGxvYWRlZERvY3VtZW50cygpXG4gIH1cblxuICAgZ29Ub1VwbG9hZERvY3VtZW50KCkge1xuICAgXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWkvdXBsb2FkLWRvY3VtZW50cyddKTtcbiAgICBcbiAgfVxuXG4gICAgICByZWdlbmVyYXRlUm9sZU1hcHBpbmdBZnRlckZhaWxlZEFuZERlbGV0ZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVDZW50ZXJJZCA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLm1pbmlzdHJ5XG4gICAgICAgIGNvbnN0IGRlcGFydG1lbnRJZCA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLmRlcGFydG1lbnRzXG5cbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlckFuZERlcGFydG1lbnQoc3RhdGVDZW50ZXJJZCwgZGVwYXJ0bWVudElkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChleGlzdGluZ1JvbGVNYXBwaW5nczogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb2xlTWFwcGluZ0lkcyA9IChBcnJheS5pc0FycmF5KGV4aXN0aW5nUm9sZU1hcHBpbmdzKSA/IGV4aXN0aW5nUm9sZU1hcHBpbmdzIDogW10pXG4gICAgICAgICAgICAgIC5tYXAoKHJvbGVNYXBwaW5nOiBhbnkpID0+IHJvbGVNYXBwaW5nPy5pZClcbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuXG4gICAgICAgICAgICBpZiAoIXJvbGVNYXBwaW5nSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBudWxsXG4gICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcmtKb2luKFxuICAgICAgICAgICAgICByb2xlTWFwcGluZ0lkcy5tYXAoKGlkOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmRlbGV0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucyhpZCkucGlwZShcbiAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgNDA0IGp1c3QgbWVhbnMgdGhpcyBkZXNpZ25hdGlvbiBoYWQgbm8gY291cnNlIHJlY29tbWVuZGF0aW9ucyB5ZXQuXG4gICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB3YXksIG9uZSBkZXNpZ25hdGlvbidzIGRlbGV0ZSBmYWlsaW5nIHNob3VsZG4ndCBibG9jayB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSByZXRyeSBmb3IgdGhlIHJlc3QuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcj8uc3RhdHVzICE9PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgZm9yIHJvbGUgbWFwcGluZyAke2lkfWAsIGVycm9yKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBudWxsXG4gICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgfVxuXG5cblxufVxuXG5cblxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgIDwhLS0gPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkRvd25sb2FkIGFzIFBERlwiIChjbGljayk9XCJkb3dubG9hZFBERigpXCIgLz4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCIgKm5nSWY9XCJsb2dpblwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvbi1tZWRpdW1cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxoMiBjbGFzcz1cImhpZ2hsaWdodC1haVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPmlHT1QgQUkgRHJpdmVuIENCUDwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgPHA+QnVpbGQgWW91ciBDYXBhY2l0eSBXaXRoIEN1c3RvbWl6ZWQgUm9sZSBNYXBwaW5nPC9wPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1jYXJkICpuZ0lmPVwibG9naW4gJiYgcm9sZU1hcHBpbmdGb3JtXCIgY2xhc3M9XCJtdC0yXCIgW2Zvcm1Hcm91cF09XCJyb2xlTWFwcGluZ0Zvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlcGF0bWVudC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj4tLT5cbiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+LS0+XG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8cD5DaG9vc2UgWW91ciBEZXBhcnRtZW50PC9wPi0tPlxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cbiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICA8L2Rpdj4tLT5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWdyb3VwIG10LTRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGNsYXNzPVwicmFkaW8tYnRuLWdyb3VwXCIgZm9ybUNvbnRyb2xOYW1lPVwibWluaXN0cnlUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZVwiIChjaGFuZ2UpPVwib25NaW5pc3RyeVR5cGVDaGFuZ2UoJGV2ZW50KVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTGVmdCByYWRpbyBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwibWluaXN0cnlcIiBjbGFzcz1cInJhZGlvLWJ0biBsZWZ0LXJhZGlvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJhZGlvLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJyYWRpby1pY29uXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdjZW50ZXInPyAnY2hlY2tlZC1sYWJlbCc6JydcIj5kb21haW48L21hdC1pY29uPiAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdtaW5pc3RyeSc/ICdjaGVja2VkLWxhYmVsJzonJ1wiPkNlbnRyZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gUmlnaHQgcmFkaW8gYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiB2YWx1ZT1cInN0YXRlXCIgY2xhc3M9XCJyYWRpby1idG4gcmlnaHQtcmFkaW9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmFkaW8tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cInJhZGlvLWljb25cIiBbbmdDbGFzc109XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJz8gJ2NoZWNrZWQtbGFiZWwnOicnXCI+bG9jYXRpb25fb248L21hdC1pY29uPiAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdzdGF0ZSc/ICdjaGVja2VkLWxhYmVsJzonJ1wiPlN0YXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cblxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdtaW5pc3RyeSdcIj5NaW5pc3RyeTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJ1wiPlN0YXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VhcmNoLWJveC13aXRoLXNlbGVjdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiAyNXB4OyBwYWRkaW5nOiAwIDEycHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7d2lkdGg6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwYW5lbENsYXNzPVwic2VsZWN0LXdpdGgtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdtaW5pc3RyeScgPyAnU2VsZWN0IE1pbmlzdHJ5LyBEZXBhcnRtZW50JzonU2VsZWN0IFN0YXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk1pbmlzdHJ5Q2hhbmdlKCRldmVudClcIiBmb3JtQ29udHJvbE5hbWU9XCJtaW5pc3RyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAyNXB4OyBiYWNrZ3JvdW5kOiB3aGl0ZTsgd2lkdGg6MTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW5lZENoYW5nZSk9XCJvbk9wZW5lZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgKm5nSWY9XCJwYW5lbE9wZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiAoaW5wdXQpPVwiZmlsdGVyRGF0YSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gW3NlbGVjdGVkXT1cInNlbGVjdGVkTWluaXN0cnlJZCA9PT0gaXRlbT8uaWRlbnRpZmllclwiIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtPy5pZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRMaXN0XCI+e3tpdGVtPy5vcmdOYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCIgKm5nSWY9XCJkZXBhcnRtZW50RGF0YT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIj5EZXBhcnRtZW50PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogMjVweDsgcGFkZGluZzogMCAxMnB4O2JvcmRlcjogMXB4IHNvbGlkICNjY2M7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAjZGVwYXJ0bWVudFNlbGVjdCBwYW5lbENsYXNzPVwic2VsZWN0LXdpdGgtc2VhcmNoXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgRGVwYXJ0bWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVwYXJ0bWVudHNcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJhY2tncm91bmQ6IHdoaXRlO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkRlcGFydG1lbnRDaGFuZ2UoKVwiIChvcGVuZWRDaGFuZ2UpPVwib25PcGVuZWREZXBhcnRtZW50KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIiAqbmdJZj1cImRlcGFydG1lbnRQYW5lbE9wZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiAoaW5wdXQpPVwiZmlsdGVyRGVwYXJ0bWVudERhdGEoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbT8uaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkRGVwYXJ0bWVudExpc3RcIj57e2l0ZW0/Lm9yZ05hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHNlbGVjdGVkIGRlcGFydG1lbnQgbm90IHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgc2VhcmNoL3BhZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXB0IHJlbmRlcmVkIChoaWRkZW4pIHNvIG1hdC1zZWxlY3QgZG9lcyBub3QgY2xlYXIgdGhlIHNlbGVjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbT8uaWRlbnRpZmllclwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBpbm5lZERlcGFydG1lbnRPcHRpb25zXCI+e3tpdGVtPy5vcmdOYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gZGlzYWJsZWQgKm5nSWY9XCJkZXBhcnRtZW50TG9hZGluZ1wiPkxvYWRpbmcuLi48L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGVwYXJ0bWVudExvYWRpbmcgJiYgIWZpbHRlcmVkRGVwYXJ0bWVudExpc3Q/Lmxlbmd0aFwiPk5vIGRlcGFydG1lbnQgZm91bmQ8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPlNlY3RvcjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIHN0eWxlPVwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDI1cHg7IHBhZGRpbmc6IDAgMTJweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU2VjdG9yXCIgbXVsdGlwbGUgZm9ybUNvbnRyb2xOYW1lPVwic2VjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJhY2tncm91bmQ6IHdoaXRlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW0/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWN0b3JEYXRhXCI+e3tpdGVtPy52YWx1ZX19PC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPCEtLSAqbmdJZj1cInJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJ1wiIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCI1XCIgcGxhY2Vob2xkZXI9XCJBZGRpdGlvbmFsIGRldGFpbHNcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRpdGlvbmFsRGV0YWlsc1wiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cImRpc2FibGVVcGxvYWREb2N1bWVudCA/ICdidG4tYWN0aXZlLXByaW1hcnktZGlzYWJsZSc6J2J0bi1hY3RpdmUtcHJpbWFyeSdcIiBjbGFzcz1cIlwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlVXBsb2FkRG9jdW1lbnRcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZ29Ub1VwbG9hZERvY3VtZW50KClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnVwbG9hZDwvbWF0LWljb24+IE1hbmFnZSBEb2N1bWVudHNcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSAqbmdJZj1cInJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJ1wiIC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtNCBzZWN0aW9uXCIgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5VcGxvYWQgRG9jdW1lbnQgKFBERik8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtdXBsb2FkLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInVwbG9hZERvY1wiIGNsYXNzPVwiZmlsZS11cGxvYWQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS11cGxvYWQtaWNvblwiPvCfk448L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF1cGxvYWRlZEZpbGUgfHwgdXBsb2FkZWRGaWxlLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgdXAgdG8gMyBmaWxlcyAoUERGL1RYVClcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGxvYWRlZEZpbGU/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImZpbGUtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHVwbG9hZGVkRmlsZTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiZmlsZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZW1vdmUtZmlsZS1pY29uXCIgKGNsaWNrKT1cInJlbW92ZUZpbGUoaSk7JGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInVwbG9hZERvY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICAgICAgICAgICAgICAvPiAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmaWxlLXVwbG9hZC1oaW50XCI+TWF4IGZpbGUgc2l6ZToge3ttYXhGaWxlU2l6ZU1CfX1NQjwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwidXBsb2FkRG9jXCIgbXVsdGlwbGUgdHlwZT1cImZpbGVcIiAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmRvYywuZG9jeCwueGxzLC54bHN4LC50eHRcIiBjbGFzcz1cImZpbGUtdXBsb2FkLWlucHV0XCIgLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkRXJyb3JcIiBjbGFzcz1cImVycm9yXCI+e3sgdXBsb2FkRXJyb3IgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwhLS0gKm5nSWY9XCJyb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWUgPT09ICdzdGF0ZSdcIiAtLT5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXNjbGFpbWVyLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+RGlzY2xhaW1lcjogUGxlYXNlIGRvIG5vdCB1cGxvYWQgYW55IGNvbmZpZGVudGlhbCBkb2N1bWVudHMuIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJkb2N1bWVudHM/Lmxlbmd0aCA8IDEgJiYgIShyb2xlTWFwcGluZ0Zvcm0/LmludmFsaWQpICB8fCBzaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZ1wiPlxuICAgICAgICAgICAgICAgIDxwPjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAuODc1cmVtO2ZvbnQtd2VpZ2h0OiBib2xkO1wiPk5vdGU6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiPlBsZWFzZSB1cGxvYWQgdGhlIFdvcmsgQWxsb2NhdGlvbiBPcmRlciBkb2N1bWVudCB0byBnZW5lcmF0ZSB0aGUgQ2FwYWNpdHkgQnVpbGRpbmcgUGxhbiAoQ0JQKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJkb2N1bWVudHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIndvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmdcIj48c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogLjg3NXJlbTtmb250LXdlaWdodDogYm9sZDtcIj5Ob3RlOlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIj5QbGVhc2UgdXBsb2FkIHRoZSBXb3JrIEFsbG9jYXRpb24gT3JkZXIgZG9jdW1lbnQgdG8gZ2VuZXJhdGUgdGhlIENhcGFjaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBQbGFuIChDQlApPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgPGlucHV0XG4gICAgW2Rpc2FibGVkXT1cInJvbGVNYXBwaW5nRm9ybT8uaW52YWxpZCB8fCBsb2FkaW5nIHx8IGRvY3VtZW50cz8ubGVuZ3RoIDwgMVwiXG4gICAgW25nQ2xhc3NdPVwiXG4gICAgICByb2xlTWFwcGluZ0Zvcm0/LmludmFsaWQgfHwgbG9hZGluZyB8fCBkb2N1bWVudHM/Lmxlbmd0aCA8IDFcbiAgICAgICAgPyAnYnRuLWRpc2FibGUnXG4gICAgICAgIDogJ2J0bi1hY3RpdmUnXG4gICAgXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBbdmFsdWVdPVwibG9hZGluZyA/ICdHZW5lcmF0aW5nIENCUC4uLicgOiAnR2VuZXJhdGUgQ0JQJ1wiXG4gICAgKGNsaWNrKT1cIm9uR2VuZXJhdGVSb2xlTWFwcGluZygpXCJcbiAgLz5cbjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L21hdC1jYXJkPlxuXG48L2Rpdj5cbjwhLS0gPGRpdiAqbmdJZj1cIiFsb2dpblwiPlxuICAgICAgICA8YXBwLWxvZ2luIChzdWNjZXNzKT1cImxvZ2luU3RhdHVzKCRldmVudClcIj48L2FwcC1sb2dpbj5cbiAgICA8L2Rpdj4gLS0+XG5cbjxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwiYXBpTG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250ZW50XCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctdGV4dCBtdC0zXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1haW4tbWVzc2FnZVwiPnt7IGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgfHwgJ1ByZXBhcmluZyBDQlAgUGxhbiBnZW5lcmF0aW9uLi4uJyB9fTwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWluZGljYXRvclwiICpuZ0lmPVwiY2h1bmtzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIiBbc3R5bGUud2lkdGguJV09XCJnZXREaXNwbGF5UHJvZ3Jlc3NQZXJjZW50YWdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicHJvZ3Jlc3MtdGV4dFwiPnt7IGdldERpc3BsYXlQcm9ncmVzc1BlcmNlbnRhZ2UoKSB9fSUgQ29tcGxldGU8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRpbWUtZXN0aW1hdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgUmVhbC10aW1lIHN0cmVhbWluZyBpbiBwcm9ncmVzcy4gVGhpcyBtYXkgdGFrZSAyLTMgbWludXRlcy5cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19