master-control 0.3.39 → 0.3.41

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.
@@ -19,6 +19,7 @@ export class MedialQuestionsComponent {
19
19
  ngZone;
20
20
  masterService;
21
21
  medialQuestionResponse = input();
22
+ personUWOpenQuoteResponse = input();
22
23
  personUwId = "";
23
24
  medicalSubQuestionsResponse = {};
24
25
  addressInput;
@@ -143,8 +144,8 @@ export class MedialQuestionsComponent {
143
144
  }
144
145
  ngOnInit() { }
145
146
  ngOnChanges(changes) {
146
- if (changes['medialQuestionResponse'] &&
147
- !this.checkIfValueIsEmpty(changes['medialQuestionResponse'].currentValue)) {
147
+ if (((changes['medialQuestionResponse']) && !this.checkIfValueIsEmpty(changes['medialQuestionResponse'].currentValue)) ||
148
+ ((changes['preparePersonUwQuestionsObj']) && !this.checkIfValueIsEmpty(changes['preparePersonUwQuestionsObj'].currentValue))) {
148
149
  if ('geolocation' in navigator) {
149
150
  navigator.geolocation.getCurrentPosition((position) => {
150
151
  this.latitude = position.coords.latitude;
@@ -637,6 +638,144 @@ export class MedialQuestionsComponent {
637
638
  this.personUwResponseObj = data['questionsResponse'];
638
639
  }
639
640
  }
641
+ if (!this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse())) {
642
+ let isSubQuestionExists = false;
643
+ this.personUWOpenQuoteResponse().forEach((singlePerson) => {
644
+ if (!this.checkIfValueIsEmpty(singlePerson['questionList']) && !this.checkIfValueIsEmpty(singlePerson['questionList'][0])) {
645
+ let arrayOfKeys = Object.keys(singlePerson['questionList'][0]['personUWdetailsList']);
646
+ if (arrayOfKeys.length > 0) {
647
+ arrayOfKeys.forEach((singleKey) => {
648
+ if (!this.checkIfValueIsEmpty(singlePerson['questionList'][0]['personUWdetailsList'][singleKey])) {
649
+ singlePerson['questionList'][0]['personUWdetailsList'][singleKey].forEach((answerObj) => {
650
+ // this.personUwAnswers[answerObj.questionId] = answerObj.answer // for answers other than checkbox
651
+ let filteredQuestion = this.medialQuestionResponse()['questionsResponse'][0]['questionList'].filter((singleQuestion) => singleQuestion['questionId'] === answerObj['questionId']);
652
+ if (!this.checkIfValueIsEmpty(filteredQuestion) && filteredQuestion[0]['questionType'] === 'CHECKBOX') {
653
+ this.personUwAnswers[answerObj.questionId] = [];
654
+ let listOfOptionsSelected = answerObj.answer.split(',');
655
+ listOfOptionsSelected.forEach((singleElement) => {
656
+ if (!this.checkIfValueIsEmpty(filteredQuestion) && !this.checkIfValueIsEmpty(filteredQuestion[0]) && !this.checkIfValueIsEmpty(filteredQuestion[0]['domainValues'])) {
657
+ let filteredDomainValueObj = filteredQuestion[0]['domainValues'].filter((singleObj) => singleObj['domainInternalValue'] === singleElement);
658
+ if (!this.checkIfValueIsEmpty(filteredDomainValueObj)) {
659
+ this.personUwAnswers[answerObj.questionId].push({
660
+ label: filteredDomainValueObj[0]['domainUiValue'],
661
+ value: filteredDomainValueObj[0]['domainInternalValue']
662
+ });
663
+ }
664
+ }
665
+ });
666
+ // this.personUwAnswers[answerObj.questionId] = answerObj.answer.split(',');
667
+ }
668
+ else {
669
+ this.personUwAnswers[answerObj.questionId] = answerObj.answer;
670
+ }
671
+ if (answerObj['cammundaQuestionCode'] === 'QHT') {
672
+ this.personUwAnswers['medicalQuestionsHeightInput'] = answerObj['answer'];
673
+ }
674
+ if (answerObj['cammundaQuestionCode'] === 'QHTF') {
675
+ let feetAnswer = answerObj['answer'].split('.');
676
+ if (!this.checkIfValueIsEmpty(answerObj['answer']) && answerObj['answer'].includes('.')) {
677
+ this.personUwAnswers['medicalQuestionFeetInput'] = feetAnswer[0];
678
+ this.personUwAnswers['medicalQuestionsInchesInput'] = feetAnswer[1];
679
+ }
680
+ else {
681
+ this.personUwAnswers['medicalQuestionFeetInput'] = feetAnswer[0];
682
+ this.personUwAnswers['medicalQuestionsInchesInput'] = '0';
683
+ }
684
+ }
685
+ // this.medialQuestionResponse()['questionsResponse'][0]['questionList'].forEach((singleQuestionResponse: any) => {
686
+ // if (singleQuestionResponse['questionId'] === answerObj['questionId'] && singleQuestionResponse['questionType'] === 'DECLARATION') {
687
+ // this.personUwAnswers[answerObj.questionId] = answerObj.answer;
688
+ // }
689
+ // });
690
+ // let laIndex: any = this.medialQuestionResponse()['questionsResponse'].findIndex((singlePersonObj: any) => singlePersonObj['role'] === singlePerson['role']);
691
+ // if (!this.checkIfValueIsEmpty(filteredQuestion) && filteredQuestion[0]['questionType'] === 'DECLARATION') {
692
+ // this.personUwAnswers[answerObj.questionId] = answerObj.answer;
693
+ // }
694
+ if (answerObj['cammundaQuestionCode'] === 'LifeMediCndtn' || answerObj['cammundaQuestionCode'] === 'MediCndtn') {
695
+ isSubQuestionExists = true;
696
+ // {
697
+ // "urlParamForDisease": "mdeicalHistory",
698
+ // "apiUrl": "https://preprod-directportallife.godigit.com/DirectPortalLife/life/fetchSubQuestions",
699
+ // "urlParamForPersonUwId": "personUWID",
700
+ // "tokenCookieParam": "v3Token",
701
+ // "isSendToken": false
702
+ // }
703
+ this.masterService.getSubQuestions(this.field()?.configData, answerObj['answer'], answerObj['personUWId']).subscribe((subQuestionResponse) => {
704
+ // this.loaderService.display(false);
705
+ let distinctSteps = [];
706
+ if (!this.checkIfValueIsEmpty(subQuestionResponse)) {
707
+ subQuestionResponse.forEach((subQuestion) => {
708
+ subQuestion['isMedicalSubQuestion'] = true;
709
+ subQuestion['isShowQuestionInUI'] = false;
710
+ if (!this.checkIfValueIsEmpty(subQuestion['questionRelation']) &&
711
+ !Array.isArray(subQuestion['questionRelation'])) {
712
+ subQuestion['questionRelation'] = [subQuestion['questionRelation']];
713
+ }
714
+ if (subQuestion['questionType'] === 'CHECKBOX' &&
715
+ !this.checkIfValueIsEmpty(subQuestion['questionRelation'])) {
716
+ subQuestion['questionRelation'].forEach((singleQuestionRelationObj) => {
717
+ let nextQuestionObject = subQuestionResponse.filter((object) => object['questionId'] === singleQuestionRelationObj['nextQuestionId']);
718
+ if (nextQuestionObject.length > 0) {
719
+ nextQuestionObject[0]['answeredValue'] = singleQuestionRelationObj['parentQuestionValue'];
720
+ }
721
+ });
722
+ }
723
+ subQuestion['domainValues'] = this.medialQuestionResponse()['domainValues'][subQuestion['domainName']];
724
+ // if (!this.checkIfValueIsEmpty(subQuestion['domainValues'])) {
725
+ // subQuestion['domainValues'].forEach((subDomain: any) => {
726
+ // this.subMedicalQuestionsDomainInternalValuesList.push(subDomain['domainInternalValue']);
727
+ // });
728
+ // }
729
+ if (!distinctSteps.includes(subQuestion['clusterId'])) {
730
+ distinctSteps.push(subQuestion['clusterId']);
731
+ }
732
+ });
733
+ subQuestionResponse.sort((a, b) => a['step'] - b['step'] || a['displayOrder'] - b['displayOrder']);
734
+ distinctSteps.forEach((steps, ind) => {
735
+ let filteredObj = subQuestionResponse.filter((singleQuestion) => singleQuestion['clusterId'] === steps);
736
+ let obj = {
737
+ step: 1000 + ind,
738
+ questions: !this.checkIfValueIsEmpty(filteredObj) ? filteredObj : [],
739
+ sectionName: !this.checkIfValueIsEmpty(filteredObj) ? filteredObj[0]['title'] : '',
740
+ isMedicalSubQuestion: true,
741
+ showSection: true,
742
+ personUWId: answerObj['personUWId'].toString(),
743
+ };
744
+ // let LaIndex: any = this.personUwMasterObj.findIndex(
745
+ // (single: any) => single['role'] === singlePerson['role']
746
+ // );
747
+ this.questionList.push(obj);
748
+ });
749
+ this.medicalSubQuestionsResponse = subQuestionResponse;
750
+ // let laIndex: any = this.personUwResponseObj['questionsResponse'].findIndex((singlePersonObj: any) => singlePersonObj['role'] === singlePerson['role']);
751
+ this.medialQuestionResponse()['questionsResponse'][0]['questionList'] = this.medialQuestionResponse()['questionsResponse'][0]['questionList'].concat(this.medicalSubQuestionsResponse);
752
+ }
753
+ this.removeSubQuestionValues();
754
+ // this.disableConfirmationButton = false;
755
+ }, (err) => {
756
+ // this.disableConfirmationButton = true;
757
+ // this.loaderService.display(false);
758
+ });
759
+ }
760
+ // else {
761
+ // this.loaderService.display(false);
762
+ // }
763
+ if (typeof answerObj.answer === 'string' && answerObj.answer !== 'Y' && answerObj.answer !== 'N') {
764
+ // if (answerObj.answer.includes(',')) {
765
+ // answerObj.answer.split(',').forEach((answer: any) => {
766
+ // this.personUwAnswers[answer] = true;
767
+ // });
768
+ // }
769
+ // this.personUwAnswers[answerObj.answer] = true;
770
+ }
771
+ this.updatePersonUwAnswers(answerObj, singlePerson['role']);
772
+ });
773
+ }
774
+ });
775
+ }
776
+ }
777
+ });
778
+ }
640
779
  }
641
780
  this.removeSubQuestionValues();
642
781
  this.medQuestionObj['heightObjectTypes'] = {
@@ -723,6 +862,43 @@ export class MedialQuestionsComponent {
723
862
  controlType: 'select',
724
863
  };
725
864
  }
865
+ updatePersonUwAnswers(answerObj, role) {
866
+ // Yes, I want a Hard Copy
867
+ // if (!this.checkIfValueIsEmpty(answerObj) && !this.checkIfValueIsEmpty(answerObj.cammundaQuestionCode) && answerObj.cammundaQuestionCode === 'recvSftCopy') {
868
+ // this.hardCopyRequired = answerObj.answer === 'Y' ? true : false;
869
+ // if (this.hardCopyRequired && !this.checkIfValueIsEmpty(this.openQuoteResponse) && !this.checkIfValueIsEmpty(this.openQuoteResponse.locationDetails)) {
870
+ // this.location = this.openQuoteResponse.locationDetails;
871
+ // }
872
+ // }
873
+ if (!this.checkIfValueIsEmpty(answerObj.personUWActivityResponseEntity)) {
874
+ answerObj.personUWActivityResponseEntity.forEach((subquestion) => {
875
+ let filteredQuestion = this.medialQuestionResponse()['questionsResponse'][0]['questionList'].filter((singleQuestion) => singleQuestion['questionId'] === subquestion['questionId']);
876
+ if (!this.checkIfValueIsEmpty(filteredQuestion) && !this.checkIfValueIsEmpty(filteredQuestion[0])) {
877
+ if (filteredQuestion[0]['questionType'] === 'CHECKBOX') {
878
+ this.personUwAnswers[subquestion.questionId] = [];
879
+ let listOfOptionsSelected = !Array.isArray(subquestion.answer) ? subquestion.answer.split(',') : subquestion.answer;
880
+ listOfOptionsSelected.forEach((singleElement) => {
881
+ if (!this.checkIfValueIsEmpty(filteredQuestion[0]['domainValues'])) {
882
+ let filteredDomainValueObj = filteredQuestion[0]['domainValues'].filter((singleObj) => singleObj['domainInternalValue'] === singleElement);
883
+ if (!this.checkIfValueIsEmpty(filteredDomainValueObj)) {
884
+ this.personUwAnswers[subquestion.questionId].push({
885
+ label: filteredDomainValueObj[0]['domainUiValue'],
886
+ value: filteredDomainValueObj[0]['domainInternalValue']
887
+ });
888
+ }
889
+ }
890
+ });
891
+ }
892
+ else {
893
+ this.personUwAnswers[subquestion.questionId] = subquestion.answer;
894
+ }
895
+ }
896
+ if (!this.checkIfValueIsEmpty(subquestion)) {
897
+ this.updatePersonUwAnswers(subquestion, role);
898
+ }
899
+ });
900
+ }
901
+ }
726
902
  checkIfValueIsEmpty(value) {
727
903
  if (typeof value === 'string') {
728
904
  value = value.trim();
@@ -871,6 +1047,7 @@ export class MedialQuestionsComponent {
871
1047
  pattern,
872
1048
  patternMessage,
873
1049
  },
1050
+ cssClass: "",
874
1051
  isVisible: true,
875
1052
  options: optionsObj,
876
1053
  isShowLabel: true,
@@ -986,7 +1163,7 @@ export class MedialQuestionsComponent {
986
1163
  .split('!')[1]) ||
987
1164
  (singleQuestion['questionType'] === 'CHECKBOX' &&
988
1165
  !this.checkIfValueIsEmpty(this.personUwAnswers[singleQuestion['questionId']]) &&
989
- this.personUwAnswers[singleQuestion['questionId']].filter((singleObj) => singleObj['value'] ===
1166
+ this.personUwAnswers[singleQuestion['questionId']]?.filter((singleObj) => singleObj['value'] ===
990
1167
  singleSubQuestion['parentQuestionValue']).length > 0)) {
991
1168
  showQuestion = true;
992
1169
  }
@@ -1936,12 +2113,12 @@ export class MedialQuestionsComponent {
1936
2113
  // remove medical sub questions from questions response list
1937
2114
  // if (
1938
2115
  // currentSectionIndex !== this.numberConstant.numberminus1 &&
1939
- // !this.sharedService.checkIfValueIsEmpty(
2116
+ // !this.sharedcheckIfValueIsEmpty(
1940
2117
  // this.sharedService.personUwResponseObj['questionsResponse'][
1941
2118
  // currentSectionIndex
1942
2119
  // ]
1943
2120
  // ) &&
1944
- // !this.sharedService.checkIfValueIsEmpty(
2121
+ // !this.sharedcheckIfValueIsEmpty(
1945
2122
  // this.sharedService.personUwResponseObj['questionsResponse'][
1946
2123
  // currentSectionIndex
1947
2124
  // ]['questionList']
@@ -1953,10 +2130,10 @@ export class MedialQuestionsComponent {
1953
2130
  // 'questionsResponse'
1954
2131
  // ][currentSectionIndex]['questionList'].filter(
1955
2132
  // (singleListItem: any) =>
1956
- // this.sharedService.checkIfValueIsEmpty(
2133
+ // this.sharedcheckIfValueIsEmpty(
1957
2134
  // singleListItem['isMedicalSubQuestion']
1958
2135
  // ) ||
1959
- // (!this.sharedService.checkIfValueIsEmpty(
2136
+ // (!this.sharedcheckIfValueIsEmpty(
1960
2137
  // singleListItem['isMedicalSubQuestion']
1961
2138
  // ) &&
1962
2139
  // !singleListItem['isMedicalSubQuestion'])
@@ -2061,7 +2238,7 @@ export class MedialQuestionsComponent {
2061
2238
  this.removeSubQuestionValues();
2062
2239
  }
2063
2240
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MedialQuestionsComponent, deps: [{ token: i0.NgZone }, { token: i1.MasterService }], target: i0.ɵɵFactoryTarget.Component });
2064
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: MedialQuestionsComponent, isStandalone: true, selector: "lib-medial-questions", inputs: { medialQuestionResponse: { classPropertyName: "medialQuestionResponse", publicName: "medialQuestionResponse", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "addressInput", first: true, predicate: ["addressInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\r\n<div *ngFor=\"let section of questionList\">\r\n <div\r\n *ngIf=\"\r\n !checkIfValueIsEmpty(section['questions']) &&\r\n section['showSection']\r\n \"\r\n class=\"card p-3 mb-4\"\r\n id=\"personUwMedicalQuestions\"\r\n >\r\n <h6 class=\"page-title bold-label\">\r\n {{ getTitleCase(section[\"sectionName\"]) }}\r\n </h6>\r\n <lib-hr-line [field]=\"horizontalLineObj\" />\r\n <div *ngFor=\"let questions of section['questions']\">\r\n <!-- <div *ngIf=\"questions['questionType'] === 'IMAGE TEXT'\">\r\n <img [src]=\"questions['sampleS3Link']\" class=\"d-block mx-auto\" [alt]=\"questions['title']\">\r\n <h3 [innerHTML]=\"questions['questionText']\"></h3>\r\n </div> -->\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'FREE TEXT' &&\r\n questions['cammundaQuestionCode'] !== 'QHT' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <!-- <label class=\"field-lable d-block\"\r\n >{{ questions[\"questionText\"] }}\r\n <span\r\n *ngIf=\"\r\n questions.optionalQuestion === 'N'\r\n \"\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label> -->\r\n <div class=\"col-12 px-0 my-1\">\r\n <lib-textbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (blur)=\"removeSubQuestionValues()\" />\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <label class=\"card-topic d-block field-lable\"\r\n >Height\r\n <span\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label>\r\n <div\r\n class=\"col-auto px-0 my-0 py-0 heightinput\"\r\n\r\n >\r\n <div class=\"row col-12 my-1\" *ngIf=\"personUwAnswers['medicalQuestionsHeightUnit'] === 'CM'\">\r\n <div class=\"col-7 py-0 heightInputs\">\r\n <lib-textbox [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHT']['field']\" />\r\n </div>\r\n <div class=\"col-5\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n </div>\r\n <div\r\n class=\"row\"\r\n *ngIf=\"\r\n personUwAnswers[\r\n 'medicalQuestionsHeightUnit'\r\n ] === 'FEET'\r\n \"\r\n >\r\n <div class=\"col-4 py-0 my-1\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionFeetInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTF']['field']\" />\r\n </div>\r\n <div class=\"col-4 py-0 my-1\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsInchesInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTI']['field']\" />\r\n </div>\r\n <div\r\n class=\"col-4 py-0 my-1\"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"row mt-0 pt-0\"\r\n *ngIf=\"\r\n questions['questionType'] === 'MAP' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n\r\n\r\n <div class=\"map-container\">\r\n <div class=\"address-search-container mb-3\">\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-6\">\r\n <label class=\"form-label card-topic\">Longitude</label>\r\n <input\r\n type=\"number\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"longitude\"\r\n placeholder=\"Enter longitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n <div class=\"col-6\">\r\n <label class=\"form-label card-topic\">Latitude</label>\r\n <input\r\n type=\"number\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"latitude\"\r\n placeholder=\"Enter latitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n </div>\r\n\r\n <input\r\n #addressInput\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Search for address\"\r\n (keyup)=\"onAddressInputKeyup($event)\"\r\n (focus)=\"showDropdown = true\"\r\n (blur)=\"onInputBlur()\"\r\n autocomplete=\"off\"\r\n >\r\n <div\r\n *ngIf=\"showDropdown && addressSuggestions.length > 0\"\r\n class=\"autocomplete-dropdown position-absolute w-100 mt-1\"\r\n style=\"z-index: 1000; max-height: 200px; overflow-y: auto; background: white; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\"\r\n >\r\n <div\r\n *ngFor=\"let suggestion of addressSuggestions; let i = index\"\r\n class=\"dropdown-item p-2\"\r\n style=\"cursor: pointer; border-bottom: 1px solid #eee;\"\r\n (mousedown)=\"selectAddress(suggestion)\"\r\n (mouseenter)=\"hoveredIndex = i\"\r\n [class.bg-light]=\"hoveredIndex === i\"\r\n >\r\n <div class=\"fw-bold\">{{ suggestion.main_text }}</div>\r\n <small class=\"text-muted\">{{ suggestion.secondary_text }}</small>\r\n </div>\r\n </div>\r\n <small class=\"text-muted\">Start typing to search for addresses</small>\r\n </div>\r\n <google-map [center]=\"center\" [zoom]=\"zoom\">\r\n <map-marker [position]=\"currentCoordinates\"></map-marker>\r\n </google-map>\r\n </div>\r\n </div>\r\n\r\n\r\n <div\r\n class=\"medicalQues my-1\"\r\n *ngIf=\"\r\n (questions['questionType'] === 'RADIO BUTTON' ||\r\n questions['questionType'] === 'ADDMORE') &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-radio [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CHECKBOX' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-multiple-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"valueChangeForMultiselect(questions)\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DECLARATION' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-checkbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DROPDOWN' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CALENDAR' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-dob [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\r\n </div>\r\n\r\n <!-- <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n </div> -->\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DOCUPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-upload [field]=\"questions['field']\" />\r\n </div>\r\n\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'PASSPORT_UPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <!-- pending -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n", styles: [".map-container{width:100%;position:relative}.address-search-container{position:relative}.address-search-container input{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}.address-search-container input:focus{outline:none;border-color:#4285f4;box-shadow:0 0 0 2px #4285f433}.pac-container{z-index:10000!important;border-radius:4px;border:1px solid #ddd;box-shadow:0 2px 6px #0000004d}.pac-item{padding:10px;border-bottom:1px solid #eee;cursor:pointer}.pac-item:hover{background-color:#f5f5f5}.selected-address{padding:8px;background-color:#f8f9fa;border-radius:4px;border-left:3px solid #28a745}.map-container ::ng-deep google-map>div{height:400px!important;width:auto!important}.medicalQues{font-size:12px;font-style:normal;font-weight:400;line-height:normal}.heightinput{border:2px solid #fb0;padding:10px;border-radius:4px;width:fit-content}.heightInputs{display:flex;align-items:center;gap:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TextboxComponent, selector: "lib-textbox", inputs: ["field", "reactiveFormControlobject"], outputs: ["blur"] }, { kind: "component", type: RadioComponent, selector: "lib-radio", inputs: ["reactiveFormControlobject", "field"], outputs: ["change"] }, { kind: "component", type: CheckboxComponent, selector: "lib-checkbox", inputs: ["field", "reactiveFormControlobject"], outputs: ["change"] }, { kind: "component", type: SelectComponent, selector: "lib-select", inputs: ["field", "reactiveFormControlobject"], outputs: ["selectionChange"] }, { kind: "component", type: DobComponent, selector: "lib-dob", inputs: ["field", "reactiveFormControlobject"], outputs: ["blur", "valueChange", "dateSelected", "invalidDate"] }, { kind: "component", type: UploadComponent, selector: "lib-upload", inputs: ["field", "reactiveFormControlobject"], outputs: ["filesChanged", "fileRemoved"] }, { kind: "component", type: MultipleSelectComponent, selector: "lib-multiple-select", inputs: ["field", "reactiveFormControlobject"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: GoogleMapsModule }, { kind: "component", type: i4.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "directive", type: i4.MapMarker, selector: "map-marker", inputs: ["title", "position", "label", "clickable", "options", "icon", "visible"], outputs: ["animationChanged", "mapClick", "clickableChanged", "cursorChanged", "mapDblclick", "mapDrag", "mapDragend", "draggableChanged", "mapDragstart", "flatChanged", "iconChanged", "mapMousedown", "mapMouseout", "mapMouseover", "mapMouseup", "positionChanged", "mapRightclick", "shapeChanged", "titleChanged", "visibleChanged", "zindexChanged", "markerInitialized"], exportAs: ["mapMarker"] }, { kind: "component", type: HrLineComponent, selector: "lib-hr-line", inputs: ["field"] }] });
2241
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: MedialQuestionsComponent, isStandalone: true, selector: "lib-medial-questions", inputs: { medialQuestionResponse: { classPropertyName: "medialQuestionResponse", publicName: "medialQuestionResponse", isSignal: true, isRequired: false, transformFunction: null }, personUWOpenQuoteResponse: { classPropertyName: "personUWOpenQuoteResponse", publicName: "personUWOpenQuoteResponse", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "addressInput", first: true, predicate: ["addressInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\r\n<div *ngFor=\"let section of questionList\">\r\n <div\r\n *ngIf=\"\r\n !checkIfValueIsEmpty(section['questions']) &&\r\n section['showSection']\r\n \"\r\n class=\"card p-3 mb-4\"\r\n id=\"personUwMedicalQuestions\"\r\n >\r\n <h6 class=\"page-title bold-label\">\r\n {{ getTitleCase(section[\"sectionName\"]) }}\r\n </h6>\r\n <lib-hr-line [field]=\"horizontalLineObj\" />\r\n <div *ngFor=\"let questions of section['questions']\">\r\n <!-- <div *ngIf=\"questions['questionType'] === 'IMAGE TEXT'\">\r\n <img [src]=\"questions['sampleS3Link']\" class=\"d-block mx-auto\" [alt]=\"questions['title']\">\r\n <h3 [innerHTML]=\"questions['questionText']\"></h3>\r\n </div> -->\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'FREE TEXT' &&\r\n questions['cammundaQuestionCode'] !== 'QHT' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <!-- <label class=\"field-lable d-block\"\r\n >{{ questions[\"questionText\"] }}\r\n <span\r\n *ngIf=\"\r\n questions.optionalQuestion === 'N'\r\n \"\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label> -->\r\n <div class=\"col-12 px-0 my-1\">\r\n <lib-textbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (blur)=\"removeSubQuestionValues()\" />\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <label class=\"card-topic d-block field-lable\"\r\n >Height\r\n <span\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label>\r\n <div\r\n class=\"col-auto px-0 my-0 py-0 heightinput\"\r\n\r\n >\r\n <div class=\"row col-12 my-1\" *ngIf=\"personUwAnswers['medicalQuestionsHeightUnit'] === 'CM'\">\r\n <div class=\"col-7 py-0 heightInputs\">\r\n <lib-textbox [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHT']['field']\" />\r\n </div>\r\n <div class=\"col-5\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n </div>\r\n <div\r\n class=\"row\"\r\n *ngIf=\"\r\n personUwAnswers[\r\n 'medicalQuestionsHeightUnit'\r\n ] === 'FEET'\r\n \"\r\n >\r\n <div class=\"col-4 py-0 my-1\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionFeetInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTF']['field']\" />\r\n </div>\r\n <div class=\"col-4 py-0 my-1\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsInchesInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTI']['field']\" />\r\n </div>\r\n <div\r\n class=\"col-4 py-0 my-1\"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"row mt-0 pt-0\"\r\n *ngIf=\"\r\n questions['questionType'] === 'MAP' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n\r\n\r\n <div class=\"map-container\">\r\n <div class=\"address-search-container mb-3\">\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-6\">\r\n <label class=\"form-label card-topic\">Longitude</label>\r\n <input\r\n type=\"number\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"longitude\"\r\n placeholder=\"Enter longitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n <div class=\"col-6\">\r\n <label class=\"form-label card-topic\">Latitude</label>\r\n <input\r\n type=\"number\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"latitude\"\r\n placeholder=\"Enter latitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n </div>\r\n\r\n <input\r\n #addressInput\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Search for address\"\r\n (keyup)=\"onAddressInputKeyup($event)\"\r\n (focus)=\"showDropdown = true\"\r\n (blur)=\"onInputBlur()\"\r\n autocomplete=\"off\"\r\n >\r\n <div\r\n *ngIf=\"showDropdown && addressSuggestions.length > 0\"\r\n class=\"autocomplete-dropdown position-absolute w-100 mt-1\"\r\n style=\"z-index: 1000; max-height: 200px; overflow-y: auto; background: white; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\"\r\n >\r\n <div\r\n *ngFor=\"let suggestion of addressSuggestions; let i = index\"\r\n class=\"dropdown-item p-2\"\r\n style=\"cursor: pointer; border-bottom: 1px solid #eee;\"\r\n (mousedown)=\"selectAddress(suggestion)\"\r\n (mouseenter)=\"hoveredIndex = i\"\r\n [class.bg-light]=\"hoveredIndex === i\"\r\n >\r\n <div class=\"fw-bold\">{{ suggestion.main_text }}</div>\r\n <small class=\"text-muted\">{{ suggestion.secondary_text }}</small>\r\n </div>\r\n </div>\r\n <small class=\"text-muted\">Start typing to search for addresses</small>\r\n </div>\r\n <google-map [center]=\"center\" [zoom]=\"zoom\">\r\n <map-marker [position]=\"currentCoordinates\"></map-marker>\r\n </google-map>\r\n </div>\r\n </div>\r\n\r\n\r\n <div\r\n *ngIf=\"\r\n (questions['questionType'] === 'RADIO BUTTON' ||\r\n questions['questionType'] === 'ADDMORE') &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-radio [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CHECKBOX' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-multiple-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"valueChangeForMultiselect(questions)\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DECLARATION' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-checkbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DROPDOWN' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CALENDAR' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-dob [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\r\n </div>\r\n\r\n <!-- <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n </div> -->\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DOCUPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-upload [field]=\"questions['field']\" />\r\n </div>\r\n\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'PASSPORT_UPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <!-- pending -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n", styles: [".map-container{width:100%;position:relative}.address-search-container{position:relative}.address-search-container input{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}.address-search-container input:focus{outline:none;border-color:#4285f4;box-shadow:0 0 0 2px #4285f433}.pac-container{z-index:10000!important;border-radius:4px;border:1px solid #ddd;box-shadow:0 2px 6px #0000004d}.pac-item{padding:10px;border-bottom:1px solid #eee;cursor:pointer}.pac-item:hover{background-color:#f5f5f5}.selected-address{padding:8px;background-color:#f8f9fa;border-radius:4px;border-left:3px solid #28a745}.map-container ::ng-deep google-map>div{height:400px!important;width:auto!important}.medicalQues{font-size:12px;font-style:normal;font-weight:400;line-height:normal}.heightinput{border:2px solid #fb0;padding:10px;border-radius:4px;width:fit-content}.heightInputs{display:flex;align-items:center;gap:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TextboxComponent, selector: "lib-textbox", inputs: ["field", "reactiveFormControlobject"], outputs: ["blur"] }, { kind: "component", type: RadioComponent, selector: "lib-radio", inputs: ["reactiveFormControlobject", "field"], outputs: ["change"] }, { kind: "component", type: CheckboxComponent, selector: "lib-checkbox", inputs: ["field", "reactiveFormControlobject"], outputs: ["change"] }, { kind: "component", type: SelectComponent, selector: "lib-select", inputs: ["field", "reactiveFormControlobject"], outputs: ["selectionChange"] }, { kind: "component", type: DobComponent, selector: "lib-dob", inputs: ["field", "reactiveFormControlobject"], outputs: ["blur", "valueChange", "dateSelected", "invalidDate"] }, { kind: "component", type: UploadComponent, selector: "lib-upload", inputs: ["field", "reactiveFormControlobject"], outputs: ["filesChanged", "fileRemoved"] }, { kind: "component", type: MultipleSelectComponent, selector: "lib-multiple-select", inputs: ["field", "reactiveFormControlobject"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: GoogleMapsModule }, { kind: "component", type: i4.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "directive", type: i4.MapMarker, selector: "map-marker", inputs: ["title", "position", "label", "clickable", "options", "icon", "visible"], outputs: ["animationChanged", "mapClick", "clickableChanged", "cursorChanged", "mapDblclick", "mapDrag", "mapDragend", "draggableChanged", "mapDragstart", "flatChanged", "iconChanged", "mapMousedown", "mapMouseout", "mapMouseover", "mapMouseup", "positionChanged", "mapRightclick", "shapeChanged", "titleChanged", "visibleChanged", "zindexChanged", "markerInitialized"], exportAs: ["mapMarker"] }, { kind: "component", type: HrLineComponent, selector: "lib-hr-line", inputs: ["field"] }] });
2065
2242
  }
2066
2243
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MedialQuestionsComponent, decorators: [{
2067
2244
  type: Component,
@@ -2078,9 +2255,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2078
2255
  MultipleSelectComponent,
2079
2256
  GoogleMapsModule,
2080
2257
  HrLineComponent
2081
- ], template: "\r\n<div *ngFor=\"let section of questionList\">\r\n <div\r\n *ngIf=\"\r\n !checkIfValueIsEmpty(section['questions']) &&\r\n section['showSection']\r\n \"\r\n class=\"card p-3 mb-4\"\r\n id=\"personUwMedicalQuestions\"\r\n >\r\n <h6 class=\"page-title bold-label\">\r\n {{ getTitleCase(section[\"sectionName\"]) }}\r\n </h6>\r\n <lib-hr-line [field]=\"horizontalLineObj\" />\r\n <div *ngFor=\"let questions of section['questions']\">\r\n <!-- <div *ngIf=\"questions['questionType'] === 'IMAGE TEXT'\">\r\n <img [src]=\"questions['sampleS3Link']\" class=\"d-block mx-auto\" [alt]=\"questions['title']\">\r\n <h3 [innerHTML]=\"questions['questionText']\"></h3>\r\n </div> -->\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'FREE TEXT' &&\r\n questions['cammundaQuestionCode'] !== 'QHT' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <!-- <label class=\"field-lable d-block\"\r\n >{{ questions[\"questionText\"] }}\r\n <span\r\n *ngIf=\"\r\n questions.optionalQuestion === 'N'\r\n \"\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label> -->\r\n <div class=\"col-12 px-0 my-1\">\r\n <lib-textbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (blur)=\"removeSubQuestionValues()\" />\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <label class=\"card-topic d-block field-lable\"\r\n >Height\r\n <span\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label>\r\n <div\r\n class=\"col-auto px-0 my-0 py-0 heightinput\"\r\n\r\n >\r\n <div class=\"row col-12 my-1\" *ngIf=\"personUwAnswers['medicalQuestionsHeightUnit'] === 'CM'\">\r\n <div class=\"col-7 py-0 heightInputs\">\r\n <lib-textbox [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHT']['field']\" />\r\n </div>\r\n <div class=\"col-5\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n </div>\r\n <div\r\n class=\"row\"\r\n *ngIf=\"\r\n personUwAnswers[\r\n 'medicalQuestionsHeightUnit'\r\n ] === 'FEET'\r\n \"\r\n >\r\n <div class=\"col-4 py-0 my-1\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionFeetInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTF']['field']\" />\r\n </div>\r\n <div class=\"col-4 py-0 my-1\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsInchesInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTI']['field']\" />\r\n </div>\r\n <div\r\n class=\"col-4 py-0 my-1\"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"row mt-0 pt-0\"\r\n *ngIf=\"\r\n questions['questionType'] === 'MAP' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n\r\n\r\n <div class=\"map-container\">\r\n <div class=\"address-search-container mb-3\">\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-6\">\r\n <label class=\"form-label card-topic\">Longitude</label>\r\n <input\r\n type=\"number\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"longitude\"\r\n placeholder=\"Enter longitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n <div class=\"col-6\">\r\n <label class=\"form-label card-topic\">Latitude</label>\r\n <input\r\n type=\"number\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"latitude\"\r\n placeholder=\"Enter latitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n </div>\r\n\r\n <input\r\n #addressInput\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Search for address\"\r\n (keyup)=\"onAddressInputKeyup($event)\"\r\n (focus)=\"showDropdown = true\"\r\n (blur)=\"onInputBlur()\"\r\n autocomplete=\"off\"\r\n >\r\n <div\r\n *ngIf=\"showDropdown && addressSuggestions.length > 0\"\r\n class=\"autocomplete-dropdown position-absolute w-100 mt-1\"\r\n style=\"z-index: 1000; max-height: 200px; overflow-y: auto; background: white; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\"\r\n >\r\n <div\r\n *ngFor=\"let suggestion of addressSuggestions; let i = index\"\r\n class=\"dropdown-item p-2\"\r\n style=\"cursor: pointer; border-bottom: 1px solid #eee;\"\r\n (mousedown)=\"selectAddress(suggestion)\"\r\n (mouseenter)=\"hoveredIndex = i\"\r\n [class.bg-light]=\"hoveredIndex === i\"\r\n >\r\n <div class=\"fw-bold\">{{ suggestion.main_text }}</div>\r\n <small class=\"text-muted\">{{ suggestion.secondary_text }}</small>\r\n </div>\r\n </div>\r\n <small class=\"text-muted\">Start typing to search for addresses</small>\r\n </div>\r\n <google-map [center]=\"center\" [zoom]=\"zoom\">\r\n <map-marker [position]=\"currentCoordinates\"></map-marker>\r\n </google-map>\r\n </div>\r\n </div>\r\n\r\n\r\n <div\r\n class=\"medicalQues my-1\"\r\n *ngIf=\"\r\n (questions['questionType'] === 'RADIO BUTTON' ||\r\n questions['questionType'] === 'ADDMORE') &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-radio [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CHECKBOX' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-multiple-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"valueChangeForMultiselect(questions)\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DECLARATION' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-checkbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DROPDOWN' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CALENDAR' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-dob [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\r\n </div>\r\n\r\n <!-- <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n </div> -->\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DOCUPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-upload [field]=\"questions['field']\" />\r\n </div>\r\n\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'PASSPORT_UPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <!-- pending -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n", styles: [".map-container{width:100%;position:relative}.address-search-container{position:relative}.address-search-container input{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}.address-search-container input:focus{outline:none;border-color:#4285f4;box-shadow:0 0 0 2px #4285f433}.pac-container{z-index:10000!important;border-radius:4px;border:1px solid #ddd;box-shadow:0 2px 6px #0000004d}.pac-item{padding:10px;border-bottom:1px solid #eee;cursor:pointer}.pac-item:hover{background-color:#f5f5f5}.selected-address{padding:8px;background-color:#f8f9fa;border-radius:4px;border-left:3px solid #28a745}.map-container ::ng-deep google-map>div{height:400px!important;width:auto!important}.medicalQues{font-size:12px;font-style:normal;font-weight:400;line-height:normal}.heightinput{border:2px solid #fb0;padding:10px;border-radius:4px;width:fit-content}.heightInputs{display:flex;align-items:center;gap:10px}\n"] }]
2258
+ ], template: "\r\n<div *ngFor=\"let section of questionList\">\r\n <div\r\n *ngIf=\"\r\n !checkIfValueIsEmpty(section['questions']) &&\r\n section['showSection']\r\n \"\r\n class=\"card p-3 mb-4\"\r\n id=\"personUwMedicalQuestions\"\r\n >\r\n <h6 class=\"page-title bold-label\">\r\n {{ getTitleCase(section[\"sectionName\"]) }}\r\n </h6>\r\n <lib-hr-line [field]=\"horizontalLineObj\" />\r\n <div *ngFor=\"let questions of section['questions']\">\r\n <!-- <div *ngIf=\"questions['questionType'] === 'IMAGE TEXT'\">\r\n <img [src]=\"questions['sampleS3Link']\" class=\"d-block mx-auto\" [alt]=\"questions['title']\">\r\n <h3 [innerHTML]=\"questions['questionText']\"></h3>\r\n </div> -->\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'FREE TEXT' &&\r\n questions['cammundaQuestionCode'] !== 'QHT' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <!-- <label class=\"field-lable d-block\"\r\n >{{ questions[\"questionText\"] }}\r\n <span\r\n *ngIf=\"\r\n questions.optionalQuestion === 'N'\r\n \"\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label> -->\r\n <div class=\"col-12 px-0 my-1\">\r\n <lib-textbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (blur)=\"removeSubQuestionValues()\" />\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <label class=\"card-topic d-block field-lable\"\r\n >Height\r\n <span\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label>\r\n <div\r\n class=\"col-auto px-0 my-0 py-0 heightinput\"\r\n\r\n >\r\n <div class=\"row col-12 my-1\" *ngIf=\"personUwAnswers['medicalQuestionsHeightUnit'] === 'CM'\">\r\n <div class=\"col-7 py-0 heightInputs\">\r\n <lib-textbox [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHT']['field']\" />\r\n </div>\r\n <div class=\"col-5\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n </div>\r\n <div\r\n class=\"row\"\r\n *ngIf=\"\r\n personUwAnswers[\r\n 'medicalQuestionsHeightUnit'\r\n ] === 'FEET'\r\n \"\r\n >\r\n <div class=\"col-4 py-0 my-1\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionFeetInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTF']['field']\" />\r\n </div>\r\n <div class=\"col-4 py-0 my-1\">\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsInchesInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTI']['field']\" />\r\n </div>\r\n <div\r\n class=\"col-4 py-0 my-1\"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"row mt-0 pt-0\"\r\n *ngIf=\"\r\n questions['questionType'] === 'MAP' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n\r\n\r\n <div class=\"map-container\">\r\n <div class=\"address-search-container mb-3\">\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-6\">\r\n <label class=\"form-label card-topic\">Longitude</label>\r\n <input\r\n type=\"number\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"longitude\"\r\n placeholder=\"Enter longitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n <div class=\"col-6\">\r\n <label class=\"form-label card-topic\">Latitude</label>\r\n <input\r\n type=\"number\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"latitude\"\r\n placeholder=\"Enter latitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n </div>\r\n\r\n <input\r\n #addressInput\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Search for address\"\r\n (keyup)=\"onAddressInputKeyup($event)\"\r\n (focus)=\"showDropdown = true\"\r\n (blur)=\"onInputBlur()\"\r\n autocomplete=\"off\"\r\n >\r\n <div\r\n *ngIf=\"showDropdown && addressSuggestions.length > 0\"\r\n class=\"autocomplete-dropdown position-absolute w-100 mt-1\"\r\n style=\"z-index: 1000; max-height: 200px; overflow-y: auto; background: white; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\"\r\n >\r\n <div\r\n *ngFor=\"let suggestion of addressSuggestions; let i = index\"\r\n class=\"dropdown-item p-2\"\r\n style=\"cursor: pointer; border-bottom: 1px solid #eee;\"\r\n (mousedown)=\"selectAddress(suggestion)\"\r\n (mouseenter)=\"hoveredIndex = i\"\r\n [class.bg-light]=\"hoveredIndex === i\"\r\n >\r\n <div class=\"fw-bold\">{{ suggestion.main_text }}</div>\r\n <small class=\"text-muted\">{{ suggestion.secondary_text }}</small>\r\n </div>\r\n </div>\r\n <small class=\"text-muted\">Start typing to search for addresses</small>\r\n </div>\r\n <google-map [center]=\"center\" [zoom]=\"zoom\">\r\n <map-marker [position]=\"currentCoordinates\"></map-marker>\r\n </google-map>\r\n </div>\r\n </div>\r\n\r\n\r\n <div\r\n *ngIf=\"\r\n (questions['questionType'] === 'RADIO BUTTON' ||\r\n questions['questionType'] === 'ADDMORE') &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-radio [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CHECKBOX' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-multiple-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"valueChangeForMultiselect(questions)\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DECLARATION' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-checkbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DROPDOWN' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\r\n </div>\r\n\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CALENDAR' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-dob [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\r\n </div>\r\n\r\n <!-- <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n </div> -->\r\n <div\r\n class=\"my-1\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DOCUPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-upload [field]=\"questions['field']\" />\r\n </div>\r\n\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'PASSPORT_UPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <!-- pending -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n", styles: [".map-container{width:100%;position:relative}.address-search-container{position:relative}.address-search-container input{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}.address-search-container input:focus{outline:none;border-color:#4285f4;box-shadow:0 0 0 2px #4285f433}.pac-container{z-index:10000!important;border-radius:4px;border:1px solid #ddd;box-shadow:0 2px 6px #0000004d}.pac-item{padding:10px;border-bottom:1px solid #eee;cursor:pointer}.pac-item:hover{background-color:#f5f5f5}.selected-address{padding:8px;background-color:#f8f9fa;border-radius:4px;border-left:3px solid #28a745}.map-container ::ng-deep google-map>div{height:400px!important;width:auto!important}.medicalQues{font-size:12px;font-style:normal;font-weight:400;line-height:normal}.heightinput{border:2px solid #fb0;padding:10px;border-radius:4px;width:fit-content}.heightInputs{display:flex;align-items:center;gap:10px}\n"] }]
2082
2259
  }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.MasterService }], propDecorators: { addressInput: [{
2083
2260
  type: ViewChild,
2084
2261
  args: ['addressInput']
2085
2262
  }] } });
2086
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUE2QixTQUFTLEVBQXlCLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7QUF3Qi9ELE1BQU0sT0FBTyx3QkFBd0I7SUEwSGhCO0lBQXVCO0lBekgx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QyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO29CQUNySSxDQUFDO29CQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUNqQyxDQUFDLEVBQ0QsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDWCw4QkFBOEI7Z0JBQ2hDLENBQUMsQ0FDRixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO3dHQXY1RVUsd0JBQXdCOzRGQUF4Qix3QkFBd0IsaWdCQ3BDckMsdWpTQXdQQSxpK0JEcE9JLFlBQVksK1BBQ1osV0FBVyxneEJBQ1gsbUJBQW1CLCtCQUNuQixnQkFBZ0IsMkhBQ2hCLGNBQWMsMkhBQ2QsaUJBQWlCLDhIQUNqQixlQUFlLHFJQUNmLFlBQVkscUtBQ1osZUFBZSxpSkFDZix1QkFBdUIsNklBQ3ZCLGdCQUFnQiwraUNBQ2hCLGVBQWU7OzRGQUtOLHdCQUF3QjtrQkFwQnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsZUFBZTtxQkFDaEI7dUdBUTBCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdvb2dsZU1hcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBOZ1pvbmUsIEFmdGVyVmlld0luaXQsIGlucHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBxdWVzdGlvbnNSZXNwb25zZSBmcm9tICcuL3F1ZXN0aW9ucy5qc29uJ1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4uL3JhZGlvL3JhZGlvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEb2JDb21wb25lbnQgfSBmcm9tICcuLi9kb2IvZG9iLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZC91cGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTXVsdGlwbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aXBsZS1zZWxlY3QvbXVsdGlwbGUtc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEhyTGluZUNvbXBvbmVudCB9IGZyb20gJy4uL2hyLWxpbmUvaHItbGluZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXN0ZXJDb250cm9sU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci1jb250cm9sLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItbWVkaWFsLXF1ZXN0aW9ucycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgUmFkaW9Db21wb25lbnQsXHJcbiAgICBDaGVja2JveENvbXBvbmVudCxcclxuICAgIFNlbGVjdENvbXBvbmVudCxcclxuICAgIERvYkNvbXBvbmVudCxcclxuICAgIFVwbG9hZENvbXBvbmVudCxcclxuICAgIE11bHRpcGxlU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgR29vZ2xlTWFwc01vZHVsZSxcclxuICAgIEhyTGluZUNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lZGlhbC1xdWVzdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVkaWFsUXVlc3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBtZWRpYWxRdWVzdGlvblJlc3BvbnNlID0gaW5wdXQ8YW55PigpO1xyXG4gIHBlcnNvblV3SWQgOiBhbnkgPSBcIlwiO1xyXG4gIG1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA6IGFueSA9IHt9O1xyXG4gIEBWaWV3Q2hpbGQoJ2FkZHJlc3NJbnB1dCcpIGFkZHJlc3NJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgcHJpdmF0ZSBhdXRvY29tcGxldGUhOiBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlO1xyXG4gIHNhdmVRdWVzdGlvblJlcXVlc3RMYTogYW55ID0gW107XHJcbiAgc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoOiBhbnkgPSBbXTtcclxuICBmaWVsZDogYW55ID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xyXG4gIHF1ZXN0aW9uTGlzdDogYW55ID0gW107XHJcbiAgY3VycmVudENvb3JkaW5hdGVzOiBhbnkgPSB7fTtcclxuICBwZXJzb25Vd1Jlc3BvbnNlT2JqOiBhbnkgPSBbXTtcclxuICBjZW50ZXI6IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWwgPSB7IGxhdDogNDAuNzMwNjEsIGxuZzogLTczLjkzNTI0MiB9O1xyXG4gIGxhdGl0dWRlOiBhbnk7XHJcbiAgbG9uZ2l0dWRlOiBhbnk7XHJcbiAgem9vbTogYW55O1xyXG4gIG1hcmtlcjogYW55ID0ge307XHJcblxyXG5cclxuICBwZXJzb25Vd0Fuc3dlcnM6IGFueSA9IHtcclxuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0OiAnRkVFVCcsXHJcbiAgICBtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQ6IDAsXHJcbiAgICBtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQ6IDAsXHJcbiAgICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQ6IDAsXHJcbiAgfTtcclxuICBtZWRRdWVzdGlvbk9iajogYW55ID0ge307XHJcbiAgbGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3g6IGFueSA9IFtdO1xyXG4gIG1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdDogYW55ID0gW107XHJcbiAgbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3Q6IGFueSA9IFtdO1xyXG4gIHF1ZXN0aW9uSGVhZGVyOiBhbnkgPSBbJ2VpYSBkZXRhaWxzJywgJ2FiaGEgZGV0YWlscycsICdwZXAgZGV0YWlscyddO1xyXG4gIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0VHlwZXM6IGFueSA9IFtcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdDbScsXHJcbiAgICAgIHZhbHVlOiAnQ00nLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdGZWV0JyxcclxuICAgICAgdmFsdWU6ICdGRUVUJyxcclxuICAgIH0sXHJcbiAgXTtcclxuICBzaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICBhZGRyZXNzU3VnZ2VzdGlvbnM6IGFueVtdID0gW107XHJcbiAgaG92ZXJlZEluZGV4ID0gLTE7XHJcbiAgc2VhcmNoVGltZW91dDogYW55O1xyXG4gIGhvcml6b250YWxMaW5lT2JqIDogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFN0eWxlXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9sVHlwZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlckNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyV2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJib3JkZXJSYWRpdXNcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRXZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250RmFtaWx5XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2FyZXRDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm51ZGdlRGlzcGxheUltYWdlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJXaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JhY2tncm91bmRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0NvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1c1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlcldpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGVDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGVCYWNrZ3JvdW5kXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyV2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlYXRlZERhdGVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYWRkaW5nXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWFyZ2luXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDc3NcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9sTWV0YUlkXCI6IFwiTElfQ09NX0dFTl9DVFJMX2hyTGluZV9ockxpbmVfVjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJib3JkZXJTdHlsZVwiOiBcInNvbGlkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluSGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhXaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZmllbGROYW1lXCI6IFwiaHJMaW5lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBcInNvbGlkIGxpbmVcIixcclxuICAgICAgICAgICAgICAgICAgICBcInBsYWNlSG9sZGVyXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJtZXRhSWRcIjogXCJMSV9DT01fR0VOX0NUUkxfaHJMaW5lX2hyTGluZV9WMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaXNWaXNpYmxlXCI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJpc0Rpc2FibGVcIjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0VmFsdWVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRvcnNcIjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVxdWlyZWRNZXNzYWdlXCI6IFwiVGhpcyBmaWVsZCBjYW5ub3QgYmUgZW1wdHlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5MZW5ndGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5MZW5ndGhNZXNzYWdlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4TGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhdHRlcm5cIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXR0ZXJuTWVzc2FnZVwiOiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBcIm9wdGlvbnNcIjogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjc3NDbGFzc1wiOiBcImNvbC0xMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJpbWFnZVVybFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY29uZmlnRGF0YVwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaHJUZXh0XCI6IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFwibWV0YURhdGFPYmpcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImlzU2hvd0xhYmVsXCI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJpc01hc3RlckNvbnRyb2xcIjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb250cm9sVHlwZVwiOiBcImhyTGluZVwiXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmdab25lOiBOZ1pvbmUsIHB1YmxpYyBtYXN0ZXJTZXJ2aWNlIDogTWFzdGVyU2VydmljZSkge1xyXG4gICAgY29uc29sZS5sb2coJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2VlZWVlZScsIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKFxyXG4gICAgICBjaGFuZ2VzWydtZWRpYWxRdWVzdGlvblJlc3BvbnNlJ10gJiZcclxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjaGFuZ2VzWydtZWRpYWxRdWVzdGlvblJlc3BvbnNlJ10uY3VycmVudFZhbHVlKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICgnZ2VvbG9jYXRpb24nIGluIG5hdmlnYXRvcikge1xyXG4gICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHBvc2l0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlO1xyXG4gICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlO1xyXG4gICAgICAgICAgdGhpcy56b29tID0gMTU7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHtcclxuICAgICAgICAgICAgbGF0OiB0aGlzLmxhdGl0dWRlLFxyXG4gICAgICAgICAgICBsbmc6IHRoaXMubG9uZ2l0dWRlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuY2VudGVyID0geyAuLi50aGlzLmN1cnJlbnRDb29yZGluYXRlcyB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVBdXRvY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZUhlaWdodFF1ZXN0aW9uSWRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gMDtcclxuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IDA7XHJcbiAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSAwO1xyXG5cclxuICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBpZiAoc2VjdGlvbi5xdWVzdGlvbnMgJiYgQXJyYXkuaXNBcnJheShzZWN0aW9uLnF1ZXN0aW9ucykpIHtcclxuICAgICAgICBzZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHF1ZXN0aW9uLmNhbW11bmRhUXVlc3Rpb25Db2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ1FIVCc6XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUUhURic6XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUUhUSSc6XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVBdXRvY29tcGxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlKFxyXG4gICAgICB0aGlzLmFkZHJlc3NJbnB1dD8ubmF0aXZlRWxlbWVudCxcclxuICAgICAge1xyXG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcclxuICAgICAgICBjb21wb25lbnRSZXN0cmljdGlvbnM6IHsgY291bnRyeTogJ0lOJyB9LFxyXG4gICAgICAgIGZpZWxkczogWydwbGFjZV9pZCcsICdnZW9tZXRyeScsICduYW1lJywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkTGlzdGVuZXIoJ3BsYWNlX2NoYW5nZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblBsYWNlU2VsZWN0ZWQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25QbGFjZVNlbGVjdGVkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGxhY2UgPSB0aGlzLmF1dG9jb21wbGV0ZS5nZXRQbGFjZSgpO1xyXG5cclxuICAgIGlmICghcGxhY2UuZ2VvbWV0cnkgfHwgIXBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdObyBkZXRhaWxzIGF2YWlsYWJsZSBmb3IgaW5wdXQ6ICcsIHBsYWNlLm5hbWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbG9jYXRpb24gPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbjtcclxuICAgIHRoaXMuY2VudGVyID0ge1xyXG4gICAgICBsYXQ6IGxvY2F0aW9uLmxhdCgpLFxyXG4gICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XHJcblxyXG4gICAgaWYgKHBsYWNlLmdlb21ldHJ5LnZpZXdwb3J0KSB7XHJcbiAgICAgIHRoaXMuem9vbSA9IDE1O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy56b29tID0gMTM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHBsYWNlOicsIHtcclxuICAgICAgbmFtZTogcGxhY2UubmFtZSxcclxuICAgICAgYWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXHJcbiAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNlbnRlcixcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9yZVNlbGVjdGVkQWRkcmVzcyhwbGFjZTogZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlUmVzdWx0KTogdm9pZCB7XHJcbiAgICBjb25zdCBhZGRyZXNzRGF0YSA9IHtcclxuICAgICAgcGxhY2VJZDogcGxhY2UucGxhY2VfaWQsXHJcbiAgICAgIG5hbWU6IHBsYWNlLm5hbWUsXHJcbiAgICAgIGZvcm1hdHRlZEFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxyXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XHJcblxyXG4gICAgZ2VvY29kZXIuZ2VvY29kZSh7IGFkZHJlc3M6IGFkZHJlc3MgfSwgKHJlc3VsdHMsIHN0YXR1cykgPT4ge1xyXG4gICAgICBpZiAoc3RhdHVzID09PSAnT0snICYmIHJlc3VsdHMgJiYgcmVzdWx0c1swXSkge1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcmVzdWx0c1swXS5nZW9tZXRyeS5sb2NhdGlvbjtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSB7XHJcbiAgICAgICAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXHJcbiAgICAgICAgICAgIGxuZzogbG9jYXRpb24ubG5nKCksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcclxuICAgICAgICAgIHRoaXMuem9vbSA9IDE1O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgJ0dlb2NvZGUgd2FzIG5vdCBzdWNjZXNzZnVsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbjogJyArIHN0YXR1c1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25BZGRyZXNzSW5wdXRLZXl1cChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBxdWVyeSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuXHJcbiAgICAvLyBDbGVhciBwcmV2aW91cyB0aW1lb3V0XHJcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBhcnJvdyBrZXkgbmF2aWdhdGlvblxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1pbihcclxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCArIDEsXHJcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoIC0gMVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XHJcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5tYXgodGhpcy5ob3ZlcmVkSW5kZXggLSAxLCAtMSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCA+PSAwICYmXHJcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWRkcmVzcyh0aGlzLmFkZHJlc3NTdWdnZXN0aW9uc1t0aGlzLmhvdmVyZWRJbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXJ5Lmxlbmd0aCA8IDIpIHtcclxuICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNlYXJjaEFkZHJlc3NlcyhxdWVyeSk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5OiBzdHJpbmcpIHtcclxuICAgIC8vIFJlcGxhY2UgdGhpcyB3aXRoIHlvdXIgYWN0dWFsIGFkZHJlc3Mgc2VhcmNoIEFQSSBjYWxsXHJcbiAgICAvLyBGb3IgZXhhbXBsZSwgdXNpbmcgR29vZ2xlIFBsYWNlcyBBUEk6XHJcblxyXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlU2VydmljZSgpO1xyXG4gICAgc2VydmljZS5nZXRQbGFjZVByZWRpY3Rpb25zKFxyXG4gICAgICB7XHJcbiAgICAgICAgaW5wdXQ6IHF1ZXJ5LFxyXG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcclxuICAgICAgfSxcclxuICAgICAgKHByZWRpY3Rpb25zLCBzdGF0dXMpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmXHJcbiAgICAgICAgICBwcmVkaWN0aW9uc1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBwcmVkaWN0aW9ucy5tYXAoKHByZWRpY3Rpb24pID0+ICh7XHJcbiAgICAgICAgICAgIHBsYWNlX2lkOiBwcmVkaWN0aW9uLnBsYWNlX2lkLFxyXG4gICAgICAgICAgICBtYWluX3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLm1haW5fdGV4dCxcclxuICAgICAgICAgICAgc2Vjb25kYXJ5X3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLnNlY29uZGFyeV90ZXh0LFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJlZGljdGlvbi5kZXNjcmlwdGlvbixcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XHJcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XHJcbiAgICBjb25zdCBhZGRyZXNzSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAnI2FkZHJlc3NJbnB1dCdcclxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmIChhZGRyZXNzSW5wdXQpIHtcclxuICAgICAgYWRkcmVzc0lucHV0LnZhbHVlID0gc3VnZ2VzdGlvbi5kZXNjcmlwdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZXJ2aWNlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlKFxyXG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgKTtcclxuICAgIHNlcnZpY2UuZ2V0RGV0YWlscyhcclxuICAgICAge1xyXG4gICAgICAgIHBsYWNlSWQ6IHN1Z2dlc3Rpb24ucGxhY2VfaWQsXHJcbiAgICAgICAgZmllbGRzOiBbJ2dlb21ldHJ5JywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXHJcbiAgICAgIH0sXHJcbiAgICAgIChwbGFjZSwgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiYgcGxhY2UpIHtcclxuICAgICAgICAgIGNvbnN0IGxhdCA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubGF0KCk7XHJcbiAgICAgICAgICBjb25zdCBsbmcgPSBwbGFjZS5nZW9tZXRyeT8ubG9jYXRpb24/LmxuZygpO1xyXG5cclxuICAgICAgICAgIGlmIChsYXQgIT09IHVuZGVmaW5lZCAmJiBsbmcgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IGxuZztcclxuICAgICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IGxhdDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0geyBsYXQsIGxuZyB9O1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRCbHVyKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgcHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCkge1xyXG4gICAgdGhpcy5xdWVzdGlvbkxpc3QgPSBbXTtcclxuICAgIGxldCBkYXRhOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKTtcclxuICAgIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3ggPSBbXTtcclxuXHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xyXG4gICAgICBsZXQgcGVyc29uVXdJZEFycmF5OiBhbnkgPSBbXTtcclxuICAgICAgZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAgICAgcGVyc29uVXdJZEFycmF5LnB1c2goc2luZ2xlUXVlc3Rpb25PYmpbJ3BlcnNvblVXSWQnXSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YSkgJiZcclxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pXHJcbiAgICAgICkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xyXG4gICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xyXG4gICAgICAgICAgZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXS5mb3JFYWNoKChzaW5nbGVQZXJzb25PYmplY3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3SWQgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddKSkge1xyXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsndGl0bGUnXSA9PT0gJ01lZGljYWwgRGV0YWlscycpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UZXh0J10gPSBzaW5nbGVRdWVzdGlvbltcclxuICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvblRleHQnXHJcbiAgICAgICAgICAgICAgICAgICAgXS5yZXBsYWNlKC9cXFxcbi9nLCAnXFxuJyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID1cclxuICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzaW5nbGVRdWVzdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdQQU4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgJ3tcIlR5cGVcIjpcIkFscGhhTnVtZXJpY1wiLFwiTWluVmFsdWVcIjpcIjEwXCIsXCJNYXhWYWx1ZVwiOlwiMTBcIixcInJlZ2V4UGF0dGVyblwiOlwiL14oW2EtekEtWl0pezV9KFswLTldKXs0fShbYS16QS1aXSl7MX0/JC9cIn0nO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0Z0Y2FDbnRjRGV0bHMnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPSAne1wiY3VzdG9tVmFsaWRhdGlvblwiOlt7XCJjb3VudHJ5XCI6XCJJTlwiLFwiTWluVmFsdWVcIjpcIjEwXCIsXCJNYXhWYWx1ZVwiOlwiMTBcIixcInJlZ2V4UGF0dGVyblwiOlwiKCheWzYtOV0pezF9KFswLTldKXs5fSQpXCJ9LHtcImNvdW50cnlcIjpcIk9USEVSXCIsXCJNaW5WYWx1ZVwiOlwiNVwiLFwiTWF4VmFsdWVcIjpcIjE0XCJ9XX0nO1xyXG4gICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0WydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ10pICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ11cclxuICAgICAgICAgICAgICAgICAgICAgIF0uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzaW5nbGVRdWVzdGlvblsnc3RlcCddKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzaW5nbGVRdWVzdGlvblsnc3RlcCddKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHF1ZXN0aW9uW1xyXG4gICAgICAgICAgICAgICAgICAgICdxdWVzdGlvblRleHQnXHJcbiAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZUFsbCgnXFxcXG4nLCAnPGJyPicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0ZlZXRMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ10gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ10gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ0ZSRUVURVhUJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcclxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmVjdlNmdENvcHknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqZWN0Wydyb2xlJ11dW10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ04nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluSW50ZXJuYWxWYWx1ZTogcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICBkb21haW5VaVZhbHVlOiAnWScsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ2hhcmRDb3B5TGFuZycpIHtcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID0gJ0hBUkQgQ09QWSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uc29ydChcclxuICAgICAgICAgICAgICAgIChhOiBhbnksIGI6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgcXVlc3Rpb25zTGlzdEZvckxBOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnc3RlcCddID09PSBzdGVwc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgc3RlcDogc3RlcHMsXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVQZXJzb25PYmplY3RbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXHJcbiAgICAgICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcclxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxyXG4gICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikpIHtcclxuICAgICAgICAgICAgICAgIC8vIEhhcmQgQ29weSBhbmQgTWFwIHF1ZXN0aW9uXHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uOiBhbnkgPSBmaWx0ZXJlZE9iai5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmVjdlNmdENvcHknXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ01BUCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdZJyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBOUkkgdGhlbiBwYXNzcG9ydCB1cGxvYWQgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdOYXRpb25hbGl0eSdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnUGFzc3BvcnQgRGV0YWlscyAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIG9ialsncXVlc3Rpb25zJ10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnUGFzc3BvcnQgRGV0YWlscyAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uc0xpc3RGb3JMQS5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBsZXQgbGlmZUFzc3VyZWRPYmplY3RJbmRleEluTWFzdGVyOiBhbnkgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maW5kSW5kZXgoKHNpbmdsZU9iajogYW55KSA9PiBzaW5nbGVPYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqZWN0Wydyb2xlJ10pO1xyXG4gICAgICAgICAgICAvLyBpZiAobGlmZUFzc3VyZWRPYmplY3RJbmRleEluTWFzdGVyICE9PSB0aGlzLm51bWJlck1pbnVzT25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gcXVlc3Rpb25zTGlzdEZvckxBO1xyXG4gICAgICAgICAgICB0aGlzLnJlc29sdmVIZWlnaHRRdWVzdGlvbklkcygpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9iaiA9IGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG5cclxuICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ10gPSB7XHJcbiAgICAgIGNvbnRyb2xTdHlsZToge1xyXG4gICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcclxuICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxyXG4gICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxyXG4gICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcclxuICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcclxuICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICB3aWR0aDogbnVsbCxcclxuICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXHJcbiAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcclxuICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxyXG4gICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcclxuICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcclxuICAgICAgICBwYWRkaW5nOiBudWxsLFxyXG4gICAgICAgIG1hcmdpbjogbnVsbCxcclxuICAgICAgICBpc01hc3RlckNzczogbnVsbCxcclxuICAgICAgICBjb250cm9sTWV0YUlkOiAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXHJcbiAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXHJcbiAgICAgICAgaGVpZ2h0OiBudWxsLFxyXG4gICAgICAgIG1pbkhlaWdodDogbnVsbCxcclxuICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICAgICAgbWF4V2lkdGg6IG51bGwsXHJcbiAgICAgICAgY3NzQ2xhc3M6IG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpZWxkTmFtZTogbnVsbCxcclxuICAgICAgbGFiZWw6ICdmZWV0IC8gaW5jaGVzJyxcclxuICAgICAgcGxhY2VIb2xkZXI6ICcnLFxyXG4gICAgICBtZXRhSWQ6ICcnLFxyXG4gICAgICBpc1Zpc2libGU6IHRydWUsXHJcbiAgICAgIGlzRGlzYWJsZTogZmFsc2UsXHJcbiAgICAgIHZhbGlkYXRvcnM6IHtcclxuICAgICAgICBpc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICByZXF1aXJlZE1lc3NhZ2U6ICdUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eScsXHJcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxyXG4gICAgICAgIG1pbkxlbmd0aE1lc3NhZ2U6IG51bGwsXHJcbiAgICAgICAgbWF4TGVuZ3RoOiAxNTAsXHJcbiAgICAgICAgbWF4TGVuZ3RoTWVzc2FnZTogbnVsbCxcclxuICAgICAgICBwYXR0ZXJuOiBudWxsLFxyXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlOiAnJyxcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9uczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxhYmVsOiAnQ20nLFxyXG4gICAgICAgICAgdmFsdWU6ICdDTScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogJ0ZlZXQnLFxyXG4gICAgICAgICAgdmFsdWU6ICdGRUVUJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIHN0eWxlOiBudWxsLFxyXG4gICAgICBpbWFnZVVybDogbnVsbCxcclxuICAgICAgY29uZmlnRGF0YToge30sXHJcbiAgICAgIG1ldGFEYXRhT2JqOiBudWxsLFxyXG4gICAgICBpc1Nob3dMYWJlbDogZmFsc2UsXHJcbiAgICAgIGlzTWFzdGVyQ29udHJvbDogZmFsc2UsXHJcbiAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxyXG4gICAgICB2YWx1ZSA9PT0gJycgfHxcclxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB8fFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICd7fSdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUaXRsZUNhc2UoaGVhZGVyOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGhlYWRlcikge1xyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkhlYWRlci5pbmNsdWRlcyhoZWFkZXIudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHtcclxuICAgICAgICBsZXQgdmFsID0gaGVhZGVyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgcmV0dXJuIHZhbFswXS50b1VwcGVyQ2FzZSgpICsgJyAnICsgdGhpcy50b1RpdGxlQ2FzZSh2YWxbMV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChoZWFkZXIudG9VcHBlckNhc2UoKSA9PT0gJ0ZBVENBIERFVEFJTFMnKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGVhZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50b1RpdGxlQ2FzZShoZWFkZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b1RpdGxlQ2FzZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgIC9cXHdcXFMqL2csXHJcbiAgICAgICAgICAodHh0OiBhbnkpID0+IHR4dFswXS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZpZWxkKHF1ZXN0aW9uT2JqOiBhbnkpIHtcclxuICAgIGxldCBvcHRpb25zT2JqOiBhbnkgPSBbXTtcclxuICAgIGxldCBjb250cm9sU3R5bGUgOiBhbnkgPSB7fTtcclxuICAgIGlmIChxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pIHtcclxuICAgICAgcXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZU9wdGlvblZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICBvcHRpb25zT2JqLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5VaVZhbHVlJ10sXHJcbiAgICAgICAgICB2YWx1ZTogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBsZXQgbWluTGVuZ3RoOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IG1heExlbmd0aDogYW55ID0gMjAwO1xyXG4gICAgbGV0IHBhdHRlcm46IGFueSA9IG51bGw7XHJcbiAgICBsZXQgcGF0dGVybk1lc3NhZ2U6IGFueSA9IG51bGw7XHJcbiAgICBsZXQgY29uZmlnRGF0YTogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEpXHJcbiAgICAgID8gdGhpcy5maWVsZCgpPy5jb25maWdEYXRhXHJcbiAgICAgIDoge307XHJcblxyXG4gICAgaWYocXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAgJ1JBRElPIEJVVFRPTicgfHwgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRScpIHtcclxuICAgICAgY29udHJvbFN0eWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IFwicmFkaW9cIixcclxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcclxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJXaWR0aFwiOiBcIjFweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImJvcmRlclJhZGl1c1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IFwiMTJweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvbnRXZWlnaHRcIjogXCI0MDBcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb250RmFtaWx5XCI6IFwiTXVsaXNoXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjNDQ0NDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBcIiNGRkZGRkZcIixcclxuICAgICAgICAgICAgICAgICAgXCJjYXJldENvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlcldpZHRoXCI6IFwiMXB4XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBcIiNmZmJiMDBcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JhY2tncm91bmRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0NvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcclxuICAgICAgICAgICAgICAgICAgXCJob3ZlckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImRpc2FibGVDb2xvclwiOiBcIiNFQ0VDRUNcIixcclxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQmFja2dyb3VuZFwiOiBcIiNFQ0VDRUNcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcIm1hcmdpblwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29udHJvbE1ldGFJZFwiOiBcIkFMTF9DT01fR0VOX0NUUkxfcmFkaW9fbm9taW5lZUdlbmRlcl9WMVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWluSGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJtYXhXaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvbk9ialsndmFsaWRhdGlvbnMnXSkpIHtcclxuICAgICAgbGV0IHZhbGlkYXRpb25PYmo6IGFueSA9IEpTT04ucGFyc2UocXVlc3Rpb25PYmpbJ3ZhbGlkYXRpb25zJ10pO1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydNaW5WYWx1ZSddKSkge1xyXG4gICAgICAgIG1pbkxlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnTWF4VmFsdWUnXSkpIHtcclxuICAgICAgICBtYXhMZW5ndGggPSB2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ1R5cGUnXSkpIHtcclxuICAgICAgICBwYXR0ZXJuID0gdmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycgPyAnXlswLTldKyQnIDogbnVsbDtcclxuICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9XHJcbiAgICAgICAgICB2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJ1xyXG4gICAgICAgICAgICA/ICdPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQuJ1xyXG4gICAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICAgIGNvbmZpZ0RhdGFbJ2lucHV0VHlwZSddID0gdmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycgPyAnbnVtYmVyJyA6ICd0ZXh0JztcclxuICAgICAgICBpZiAodmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycpIHtcclxuICAgICAgICAgIG1heExlbmd0aCA9ICc5Jy5yZXBlYXQoTnVtYmVyKG1heExlbmd0aCkpO1xyXG4gICAgICAgICAgY29uZmlnRGF0YVsnbWF4VmFsdWUnXSA9IG1heExlbmd0aDtcclxuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21pblZhbHVlJ10gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbmZpZ0RhdGE6IGNvbmZpZ0RhdGEsXHJcbiAgICAgIGNvbnRyb2xTdHlsZTogY29udHJvbFN0eWxlLFxyXG4gICAgICBjb250cm9sVHlwZTpcclxuICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdGUkVFIFRFWFQnXHJcbiAgICAgICAgICA/ICd0ZXh0J1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdSQURJTyBCVVRUT04nIHx8XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0FERE1PUkUnXHJcbiAgICAgICAgICA/ICdyYWRpbydcclxuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnIHx8XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJ1xyXG4gICAgICAgICAgPyAnY2hlY2tib3gnXHJcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xyXG4gICAgICAgICAgPyAnZGF0ZSdcclxuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nXHJcbiAgICAgICAgICA/ICdzZWxlY3QnXHJcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RPQ1VQTE9BRCdcclxuICAgICAgICAgID8gJ2ZpbGUnXHJcbiAgICAgICAgICA6ICcnLFxyXG4gICAgICBmaWVsZE5hbWU6IHF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddLFxyXG4gICAgICBpc0Rpc2FibGU6IGZhbHNlLFxyXG4gICAgICBsYWJlbDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVGV4dCddLFxyXG4gICAgICBwbGFjZUhvbGRlcjogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVGV4dCddLFxyXG4gICAgICB2YWxpZGF0b3JzOiB7XHJcbiAgICAgICAgaXNSZXF1aXJlZDogcXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgIG1pbkxlbmd0aCxcclxuICAgICAgICBtYXhMZW5ndGgsXHJcbiAgICAgICAgcGF0dGVybixcclxuICAgICAgICBwYXR0ZXJuTWVzc2FnZSxcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgb3B0aW9uczogb3B0aW9uc09iaixcclxuICAgICAgaXNTaG93TGFiZWw6IHRydWUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMocXVlc3Rpb24/OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCdzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3MnLCB0aGlzLnF1ZXN0aW9uTGlzdClcclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucXVlc3Rpb25MaXN0KSkge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSkpIHtcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dRdWVzdGlvbihzaW5nbGVRdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBpc05vbmVJbkRvbWFpblZhbHVlczogYW55ID0gc2luZ2xlUXVlc3Rpb25bXHJcbiAgICAgICAgICAgICAgICAgICdkb21haW5WYWx1ZXMnXHJcbiAgICAgICAgICAgICAgICBdLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZU9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZU9ialsnZG9tYWluVWlWYWx1ZSddLnRvVXBwZXJDYXNlKCkgPT09ICdOT05FJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNOb25lSW5Eb21haW5WYWx1ZXMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBub25lIGlzIHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgYWxsIHNlbGVjdGVkIGNoZWNrYm94IHF1ZXN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmRvbWFpblVpVmFsdWUudG9VcHBlckNhc2UoKSAhPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOT05FJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWUuaXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGxldCBpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0OiBhbnkgPSB0aGlzLmlzQmxvY2tlZFF1ZXN0aW9uc0xpc3QuZmlsdGVyKChzaW5nbGVCbG9ja2VkT2JqOiBhbnkpID0+IHNpbmdsZUJsb2NrZWRPYmpbJ3NlY3Rpb25UaXRsZSddLnRyaW0oKSA9PT0gc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50cmltKCkpO1xyXG4gICAgICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0KSkge1xyXG4gICAgICAgIC8vICAgaWYgKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQ3VzdG9tZXJGbG93ICYmICF0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZEluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKTtcclxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcclxuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgaWYgKChpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0WzBdLmlzQmxvY2tlZEZvckFnZW50RmxvdyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QyMCcgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMDUnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA2JykgJiYgdGhpcy5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcclxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAvLyAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2ZpbHRlcmVkSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xyXG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ107XHJcbiAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgIC8vICAgICB9KTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgbGV0IGhpZGRlblF1ZXN0aW9uczogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25PYmo6IGFueSkgPT4gIXNpbmdsZVNlY3Rpb25PYmpbJ3Nob3dTZWN0aW9uJ11cclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGlkZGVuUXVlc3Rpb25zKSkge1xyXG4gICAgICAgICAgaGlkZGVuUXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5xdWVzdGlvbkxpc3Quc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBsaXN0JywgdGhpcy5xdWVzdGlvbkxpc3QpO1xyXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBhbnN3ZXJzJywgdGhpcy5wZXJzb25Vd0Fuc3dlcnMpO1xyXG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uRGV0YWlscygpO1xyXG4gIH1cclxuXHJcbiAgc2hvd1F1ZXN0aW9uKGN1cnJlbnRRdWVzdGlvbjogYW55KSB7XHJcbiAgICBsZXQgc2hvd1F1ZXN0aW9uOiBhbnkgPSBmYWxzZTtcclxuICAgIGxldCBzdWJRdWVzdGlvbnM6IGFueSA9IFtdO1xyXG4gICAgLy8gbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXg6IGFueSA9IHF1ZXN0aW9uc1Jlc3BvbnNlWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBwZXJzb25Sb2xlKVxyXG4gICAgLy8gbGV0IHJvbGUgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bY3VycmVudFNlY3Rpb25JbmRleF1bJ3JvbGUnXVxyXG5cclxuICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXS5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBsZXQgaXNTdWJRdWVzdGlvbk9iamVjdDogYW55ID0gW107XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pKSB7XHJcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdCA9IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZmlsdGVyKFxyXG4gICAgICAgICAgKHF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgcXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvbklkJ11cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc1N1YlF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBzdWJRdWVzdGlvbnMucHVzaChzaW5nbGVRdWVzdGlvbik7XHJcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdC5mb3JFYWNoKChzaW5nbGVTdWJRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddLnRvU3RyaW5nKClbMF0gIT09ICchJyAmJlxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID09PVxyXG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXSkgfHxcclxuICAgICAgICAgICAgKHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10udG9TdHJpbmcoKVswXSA9PT0gJyEnICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dICE9PVxyXG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJyEnKVsxXSkgfHxcclxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZU9ialsndmFsdWUnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxyXG4gICAgICAgICAgICAgICkubGVuZ3RoID4gMClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvbnMpICYmXHJcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSlcclxuICAgICkge1xyXG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKSAmJlxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cclxuICAgICAgKSAmJlxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxyXG4gICAgICAgIF1cclxuICAgICAgKSAmJlxyXG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXHJcbiAgICAgIF0gPT09IGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbkFuc3dlciddXHJcbiAgICApIHtcclxuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJykge1xyXG4gICAgICBzaG93UXVlc3Rpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBzaG93UXVlc3Rpb247XHJcbiAgfVxyXG5cclxuICBzYXZlUXVlc3Rpb25EZXRhaWxzKCkge1xyXG4gICAgLy8gcmVtb3ZlIGFsbCBjaGVja2JveCBxdWVzdGlvbnMgcHJlc2VudCBpbiB2YWx1ZXNcclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gpKSB7XHJcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZGtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddKTtcclxuICAgICAgLy8gbGV0IHBvbGljeUFzc3VyZWRLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ10pO1xyXG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRPbmVLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXSk7XHJcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZFR3b0tleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddKTtcclxuICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoaXNOYU4oTnVtYmVyKHNpbmdsZUtleSkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgLy8gcG9saWN5QXNzdXJlZEtleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIGxpZmVBc3N1cmVkT25lS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICAvLyBsaWZlQXNzdXJlZFR3b0tleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pKSB7XHJcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuICAgIC8vIGxldCBoZWlnaHRJbkluY2hlc09iajogYW55ID0gW107XHJcbiAgICAvLyBsZXQgaGVpZ2h0SW5GZWV0T2JqOiBhbnkgPSBbXTtcclxuICAgIC8vIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmo6IGFueSA9IFtdO1xyXG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XHJcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcclxuICAgIC8vICAgbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnKTtcclxuICAgIC8vICAgaWYgKGxhSW5kZXggIT09IC0xICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF0pKSB7XHJcbiAgICAvLyAgICAgaGVpZ2h0SW5JbmNoZXNPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xyXG4gICAgLy8gICAgIGhlaWdodEluRmVldE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyk7XHJcbiAgICAvLyAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBhbmQgbm9uIG1lZGljYWwgcXVlc3Rpb25zIDpcclxuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iaikgJiYgaXNWYWxpZCkge1xyXG4gICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmouZm9yRWFjaCgoc2luZ2xlUGVyc29uT2JqOiBhbnksIHNpbmdsZVBlcnNvbkluZGV4OiBhbnkpID0+IHtcclxuICAgIC8vICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSAmJiBpc1ZhbGlkKSB7XHJcbiAgICAvLyAgICAgICBsZXQgcm9sZTogYW55ID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZCcgPyBcImxpZmUgYXNzdXJlZFwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdwb2xpY3lIb2xkZXInID8gXCJwb2xpY3kgaG9sZGVyXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkT25lJyA/IFwiSm9pbnQgTGlmZSAxXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkVHdvJyA/IFwiSm9pbnQgTGlmZSAyXCIgOiBcIlwiO1xyXG4gICAgLy8gICAgICAgc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcclxuICAgIC8vICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJiAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnVEVMTF9VU19NT1JFJyB8fCBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09ICdCQVNJQ19ERVRBSUxTJykgJiYgaXNWYWxpZCkge1xyXG5cclxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcclxuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKTtcclxuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSkpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXHJcbiAgICAvLyAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmIGlzVmFsaWQpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gQ00gJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBDTSAnICsgcm9sZSwgJ0Nsb3NlJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcclxuICAgIC8vICAgICAgICAgICAgIGlmIChcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQoc2luZ2xlUXVlc3Rpb25PYmosIHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSkpICYmIGlzVmFsaWRcclxuICAgIC8vICAgICAgICAgICAgICkge1xyXG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICByZWRpcmVjdFxyXG4gICAgLy8gICAgICAgICAgICAgKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iaikpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQoYCR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncXVlc3Rpb25UeXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsndHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3BlcnNvblR5cGUnXX1gKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXHJcbiAgICAvLyAgICAgICAgICAgICApIHtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXHJcbiAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICBpZiAoXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICApIHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gfVxyXG4gICAgLy8gICAgICAgICAgIH0pO1xyXG5cclxuICAgIC8vICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxyXG4gICAgLy8gICAgICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xyXG4gICAgLy8gICAgICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICApe1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcclxuICAgIC8vICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vIH0pO1xyXG4gICAgLy8gICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKChpc1ZhbGlkIHx8IHNhdmVkcmFmdCkgfHwgdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xyXG4gICAgLy8gaWYgKGlzVmFsaWQpIHtcclxuICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KHRydWUpO1xyXG4gICAgICAvLyBsZXQgcmVxdWVzdDogYW55ID0gW107XHJcbiAgICAgIGxldCBtYWluUmVxT2JqOiBhbnkgPSBbXTtcclxuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnM6IGFueSA9IFtdO1xyXG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JMYTogYW55ID0gW107XHJcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvclBoOiBhbnkgPSBbXTtcclxuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXSkpIHtcclxuICAgICAgICAvLyBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGlmIChcclxuICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcclxuICAgICAgICAvLyAgIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XHJcbiAgICAgICAgLy8gICAgICdURUxMX1VTX01PUkUnIHx8XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cclxuICAgICAgICAvLyAgICAgICAnQkFTSUNfREVUQUlMUycpXHJcbiAgICAgICAgLy8gKSB7XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cclxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHBhc3MgaGVpZ2h0IGluIGNtIG9ialxyXG4gICAgICAgICAgICBsZXQgY21PYmpJbkFuc3dlcnNpbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbY21PYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgIHBhcnNlSW50KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhlaWdodCBpbiBpbmNoZXNcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPSAoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddICogMC4zOTM3MDFcclxuICAgICAgICAgICAgKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0OiBhbnkgPVxyXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSkgPiAxMlxyXG4gICAgICAgICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxyXG4gICAgICAgICAgICAgICAgOiAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGluY2hlc29iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaGVpZ2h0IGluIGZlZXRcclxuXHJcbiAgICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZlZXRPYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5GZWV0KS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikpIHtcclxuICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgKlxyXG4gICAgICAgICAgICAgICAgICAxMiArXHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSk7XHJcbiAgICAgICAgICAgICAgbGV0IGhlaWdodEluQ206IGFueSA9IChcclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDFcclxuICAgICAgICAgICAgICApLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoZmVldE9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcclxuICAgICAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXHJcbiAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcclxuICAgICAgICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsZXQgaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkNtKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5DbUFuc3dlck9iamVjdDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DbUFuc3dlck9iamVjdCkgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DbUFuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3Q6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0KSAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddXSA9XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3Q6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3QpICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbjogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHNpbmdsZURhdGE6IGFueSkgPT4gc2luZ2xlRGF0YVsncXVlc3Rpb25UeXBlJ10gPT09ICdOT0RJU1BMQVknXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIDogW107XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gfHxcclxuICAgICAgICAgICAgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbi5sZW5ndGggPiAwKSAmJlxyXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xyXG4gICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gJ0VuZ2xpc2gnO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FycjogYW55ID0gW107XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoZWNrZWRPcHRpb25zQXJyKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAvLyBmb3IgY2hlY2tib3ggcXVlc3Rpb25cclxuXHJcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcclxuICAgICAgICAgICAgICAgICAgJ2Fuc3dlcidcclxuICAgICAgICAgICAgICAgIF0gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIC8vIG5vbiBjaGVja2JveCBxdWVzdGlvblxyXG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjpcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcclxuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bXHJcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXHJcbiAgICAgICAgICAgICAgICBdID1cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXHJcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZihzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHtcclxuICAgICAgICAgICAgLy8gICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgOiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleCgoc2luZ2xlQW5zd2VyT2JqIDogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gICYmIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10pKVxyXG4gICAgICAgICAgICAvLyAgIGlmKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAvLyAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAvLyAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICAgIGFuc3dlcjogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obmV3IERhdGUodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pLCAneXl5eS1NTS1kZCcpIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXHJcbiAgICAgICAgICAgIC8vICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgIC8vICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgLy8gICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICB9O1xyXG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XHJcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgLy8gb2JqZWN0IGFscmVhZHkgdGhlcmUgc28gb3ZlciByaWRlIHRoZSBuZXcgYW5zd2VyXHJcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XHJcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVsnYW5zd2VyJ10gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gICB9XHJcblxyXG4gICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZXRGaW5hbmNFbGdibCcpIHtcclxuICAgICAgICAgICAgLy8gICBsZXQgZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iajogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXHJcbiAgICAgICAgICAgIC8vICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAvLyAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgLy8gICAgIGFuc3dlcjogdGhpcy5zaGFyZWRTZXJ2aWNlLmZpbmFuY2lhbEVsaWdpYmlsaXR5LFxyXG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgLy8gICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgLy8gICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAvLyAgIH07XHJcbiAgICAgICAgICAgIC8vICAgaWYgKGZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4XVsnYW5zd2VyJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuZmluYW5jaWFsRWxpZ2liaWxpdHk7XHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9KTtcclxuICAgICAgbGV0IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdDogYW55ID0gW1xyXG4gICAgICAgIC4uLm5ldyBTZXQoXHJcbiAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLm1hcCgoaXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICBpdGVtLnBlcnNvblVXSWQudG9TdHJpbmcoKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICksXHJcbiAgICAgIF07XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdCkpIHtcclxuICAgICAgICBtYWluUmVxdWVzdEZvckxhID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAoc2luZ2xlQW5zd2VyOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHNpbmdsZUFuc3dlclsncGVyc29uVVdJZCddID09PSBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3RbMF1cclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3QubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICBtYWluUmVxdWVzdEZvclBoID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChzaW5nbGVBbnN3ZXI6IGFueSkgPT5cclxuICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJbJ3BlcnNvblVXSWQnXSA9PT0gZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0WzFdXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgc2F2ZVJlcXVlc3RzQXJyYXk6IGFueSA9IFtdO1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdExhID0gbWFpblJlcXVlc3RGb3JMYTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RMYScsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcclxuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgPyB0cnVlIDogIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvclBoKSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoID0gbWFpblJlcXVlc3RGb3JQaDtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RQaCcsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvclBoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XHJcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb29raWVWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XHJcbiAgICBsZXQgdG9rZW5OYW1lID0gJyc7XHJcbiAgICBsZXQgdG9rZW5WYWx1ZSA9ICcnO1xyXG4gICAgY29uc3QgaW5kZXgyID0gMjtcclxuICAgIGNvb2tpZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiYgISFkYXRhLnNwbGl0KCc9JylbMV0pIHtcclxuICAgICAgICB0b2tlbk5hbWUgPSBkYXRhLnNwbGl0KCc9JylbMF0udHJpbSgpO1xyXG4gICAgICAgIHRva2VuVmFsdWUgPSBkYXRhLnNwbGl0KCc9JylbMV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIG5hbWUgPT09ICdsaW5rJyAmJlxyXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVswXS5pbmNsdWRlcyhuYW1lKSAmJlxyXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdICE9PSBudWxsICYmXHJcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICB0b2tlblZhbHVlID0gdG9rZW5WYWx1ZSArICc9JyArIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0b2tlblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCkge1xyXG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XHJcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmXHJcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxyXG4gICAgICAgICAgICAnVEVMTF9VU19NT1JFJyB8fFxyXG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XHJcbiAgICAgICAgICAgICAgJ0JBU0lDX0RFVEFJTFMnKSAmJlxyXG4gICAgICAgICAgaXNWYWxpZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxyXG4gICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cclxuICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxyXG4gICAgICAgICAgICAgICAgKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAgIC8vICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlXHJcbiAgICAgICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG5cclxuICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgIC8vIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxyXG4gICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXHJcbiAgICAgICAgICAgIGlzVmFsaWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAvLyAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAvLyAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxyXG4gICAgICAgICAgICAvLyAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKVxyXG4gICAgICAgICAgICBpc1ZhbGlkXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGlmIChcclxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxyXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgJiZcclxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAvLyApIHtcclxuICAgICAgICAgIC8vICAgbGV0IGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmo6IGFueSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucXVlc3Rpb25zUGFzc3BvcnRVcGxvYWRPYmouZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gKHNpbmdsZU9ialsncGVyc29uVHlwZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlT2JqWydkbXNJZCddKSkpO1xyXG4gICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqKSkge1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xyXG4gICAgICAgICAgLy8gICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIC8vICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZVxyXG4gICAgICAgICAgLy8gICAgICAgfSk7XHJcbiAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgICAgICAgLy8gICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgICAgICAgLy8gICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XHJcbiAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAvLyAgIH1cclxuXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBkZWNsYXJhdGlvbiBxdWVzdGlvbnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIChpc1ZhbGlkICYmXHJcbiAgICAgICAgICAgICAgICAvLyAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcclxuICAgICAgICAgICAgICAgIC8vICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gPT09XHJcbiAgICAgICAgICAgICAgICAgICdOJykgfHxcclxuICAgICAgICAgICAgICAhdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gfHxcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAvLyApXHJcbiAgICAgICAgICAgICAgLy8gfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXHJcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICBpZiAoXHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcclxuICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXHJcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcclxuICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcclxuICAgICAgICAgIC8vICAgICApIHtcclxuICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxyXG4gICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxyXG4gICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xyXG4gICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xyXG4gICAgICAgIC8vICAgICApe1xyXG4gICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXHJcbiAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXHJcbiAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxyXG4gICAgICAgIC8vICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xyXG5cclxuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAvLyAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgICAgICAvLyAgICAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzTWVkaWNhbFF1ZXN0aW9uc1ZhbGlkJywgaXNWYWxpZCk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUNoYW5nZUZvck11bHRpc2VsZWN0KHF1ZXN0aW9uIDogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdMaWZlTWVkaUNuZHRuJyB8fCBxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicgKSB7XHJcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmxlbmd0aCA+IDBcclxuXHJcbiAgICAgIC8vIGlmIG5vbmUgaXMgc2VsZWN0ZWQgdGhlbiByZW1vdmUgYWxsIGFuZCBjYWxsIEFQSVxyXG4gICAgICBsZXQgaXNOb25lU2VsZWN0ZWQgOiBhbnkgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5maW5kSW5kZXgoKHNpbmdsZU9iaiA6YW55KSA9PiBzaW5nbGVPYmpbJ3ZhbHVlJ10gPT09ICdOb01lZEhpc3RyeScpO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGlzTm9uZVNlbGVjdGVkICE9PSAgLTFcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmZpbHRlcigoc2luZ2xlT2JqIDogYW55KSA9PiBzaW5nbGVPYmpbJ3ZhbHVlJ10gPT09ICdOb01lZEhpc3RyeScpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBbXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdFxyXG4gICAgICAgICkpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbHRlcigoc2luZ2xlU2VjdGlvbjogYW55KSA9PiAoKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB8fCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSAmJiAhc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpICkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGxldCBjdXJyZW50U2VjdGlvbkluZGV4OiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoXHJcbiAgICAgIC8vICAgKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PlxyXG4gICAgICAvLyAgICAgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09XHJcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdWydyb2xlJ11cclxuICAgICAgLy8gKTtcclxuICAgICAgLy8gcmVtb3ZlIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyBmcm9tIHF1ZXN0aW9ucyByZXNwb25zZSBsaXN0XHJcbiAgICAgIC8vIGlmIChcclxuICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4ICE9PSB0aGlzLm51bWJlckNvbnN0YW50Lm51bWJlcm1pbnVzMSAmJlxyXG4gICAgICAvLyAgICF0aGlzLnNoYXJlZFNlcnZpY2UuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xyXG4gICAgICAvLyAgICAgICBjdXJyZW50U2VjdGlvbkluZGV4XHJcbiAgICAgIC8vICAgICBdXHJcbiAgICAgIC8vICAgKSAmJlxyXG4gICAgICAvLyAgICF0aGlzLnNoYXJlZFNlcnZpY2UuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xyXG4gICAgICAvLyAgICAgICBjdXJyZW50U2VjdGlvbkluZGV4XHJcbiAgICAgIC8vICAgICBdWydxdWVzdGlvbkxpc3QnXVxyXG4gICAgICAvLyAgIClcclxuICAgICAgLy8gKSB7XHJcbiAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXHJcbiAgICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4XHJcbiAgICAgICAgLy8gXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialtcclxuICAgICAgICAvLyAgICdxdWVzdGlvbnNSZXNwb25zZSdcclxuICAgICAgICAvLyBdW2N1cnJlbnRTZWN0aW9uSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoXHJcbiAgICAgICAgLy8gICAoc2luZ2xlTGlzdEl0ZW06IGFueSkgPT5cclxuICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cclxuICAgICAgICAvLyAgICAgKSB8fFxyXG4gICAgICAgIC8vICAgICAoIXRoaXMuc2hhcmVkU2VydmljZS5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgIC8vICAgICAgIHNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddXHJcbiAgICAgICAgLy8gICAgICkgJiZcclxuICAgICAgICAvLyAgICAgICAhc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pXHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgLy8gfVxyXG4gICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcclxuICAgICAgLy8gICAncXVlc3Rpb25MaXN0J1xyXG4gICAgICAvLyBdLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHtcclxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddWzBdW1xyXG4gICAgICAvLyAgICAgICAncXVlc3Rpb25MaXN0J1xyXG4gICAgICAvLyAgICAgXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAvLyB0aGlzLnF1ZXN0aW9uTGlzdCA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbHRlcigoc2luZ2xlU2VjdGlvbiA6IGFueSkgPT4gKCFzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSkpO1xyXG4gICAgICAvLyB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVNYXN0ZXJPYmo6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIC8vICAgaWYgKHNpbmdsZU1hc3Rlck9ialsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkge1xyXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVtcclxuICAgICAgLy8gICAgICAgJ3F1ZXN0aW9uTGlzdCdcclxuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9ucyddID0gW107XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheSh0cnVlKTtcclxuXHJcbiAgICAgIGxldCBzZWxlY3RlZERpc2Vhc2VzIDogYW55ID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0ubWFwKChzaW5nbGVEaXNlYXNlT2JqIDogYW55KSA9PiBzaW5nbGVEaXNlYXNlT2JqWyd2YWx1ZSddKS50b1N0cmluZygpO1xyXG4gICAgICAvLyBsZXQgcmVxdWVzdDogYW55ID0gSlNPTi5wYXJzZShcclxuICAgICAgLy8gICBKU09OLnN0cmluZ2lmeShcclxuICAgICAgLy8gICAgIHRoaXMuZmV0Y2hTdWJRdWVzdGlvbnNMaXN0W1xyXG4gICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdWydyb2xlJ11cclxuICAgICAgLy8gICAgIF0udG9TdHJpbmcoKVxyXG4gICAgICAvLyAgIClcclxuICAgICAgLy8gKTtcclxuICAgICAgaWYocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgnYXBpVXJsJykgJiYgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgndXJsUGFyYW1Gb3JEaXNlYXNlJykgJiYgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgndXJsUGFyYW1Gb3JQZXJzb25Vd0lkJykgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWydhcGlVcmwnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWyd1cmxQYXJhbUZvckRpc2Vhc2UnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWyd1cmxQYXJhbUZvclBlcnNvblV3SWQnXSkpIHtcclxuICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2UuZ2V0U3ViUXVlc3Rpb25zKHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10sIHNlbGVjdGVkRGlzZWFzZXMsIHRoaXMucGVyc29uVXdJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRlci5kaXNwbGF5KGZhbHNlKTtcclxuICAgICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhKSkge1xyXG4gICAgICAgICAgICAgIGRhdGEuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bXHJcbiAgICAgICAgICAgICAgICAgICdkb21haW5WYWx1ZXMnXHJcbiAgICAgICAgICAgICAgICBdID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xyXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluTmFtZSddXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxyXG4gICAgICAgICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSA9IFtcclxuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXHJcbiAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBkYXRhLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAoXHJcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddXHJcbiAgICAgICAgICAgICAgICAvLyAgIClcclxuICAgICAgICAgICAgICAgIC8vICkge1xyXG4gICAgICAgICAgICAgICAgLy8gICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc3ViRG9tYWluOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc3ViTWVkaWNhbFF1ZXN0aW9uc0RvbWFpbkludGVybmFsVmFsdWVzTGlzdC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgc3ViRG9tYWluWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgIC8vICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBkYXRhLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnksIGluZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IGRhdGEuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxyXG4gICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpcclxuICAgICAgICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE9ialxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxyXG4gICAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHRoaXMucGVyc29uVXdJZCxcclxuICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gZGF0YTtcclxuICAgICAgICAgICAgICAvLyBtZXJnZSBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgaW50byBwZXJzb24gdXcgbWFpbiBxdWVzdGlvbnMgcmVzcG9uc2UgKHJlcXVpcmVkIGZvciBzaG93IHF1ZXN0aW9uIGZ1bmN0aW9uIHRvIHdvcmspXHJcbiAgICAgICAgICAgICAgLy8gY2xlYXJpbmcgb24gdG9wIGJlZm9yZSBhcGkgY2FsbFxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF1bJ3F1ZXN0aW9uTGlzdCddLmNvbmNhdCh0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRlci5kaXNwbGF5KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcclxuICB9XHJcbn1cclxuIiwiXHJcbjxkaXYgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgcXVlc3Rpb25MaXN0XCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgIWNoZWNrSWZWYWx1ZUlzRW1wdHkoc2VjdGlvblsncXVlc3Rpb25zJ10pICYmXHJcbiAgICAgICAgc2VjdGlvblsnc2hvd1NlY3Rpb24nXVxyXG4gICAgICBcIlxyXG4gICAgICBjbGFzcz1cImNhcmQgcC0zIG1iLTRcIlxyXG4gICAgICBpZD1cInBlcnNvblV3TWVkaWNhbFF1ZXN0aW9uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxoNiBjbGFzcz1cInBhZ2UtdGl0bGUgYm9sZC1sYWJlbFwiPlxyXG4gICAgICAgIHt7IGdldFRpdGxlQ2FzZShzZWN0aW9uW1wic2VjdGlvbk5hbWVcIl0pIH19XHJcbiAgICAgIDwvaDY+XHJcbiAgICAgIDxsaWItaHItbGluZSBbZmllbGRdPVwiaG9yaXpvbnRhbExpbmVPYmpcIiAvPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbnMgb2Ygc2VjdGlvblsncXVlc3Rpb25zJ11cIj5cclxuICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSU1BR0UgVEVYVCdcIj5cclxuICAgICAgICAgIDxpbWcgW3NyY109XCJxdWVzdGlvbnNbJ3NhbXBsZVMzTGluayddXCIgY2xhc3M9XCJkLWJsb2NrIG14LWF1dG9cIiBbYWx0XT1cInF1ZXN0aW9uc1sndGl0bGUnXVwiPlxyXG4gICAgICAgICAgPGgzIFtpbm5lckhUTUxdPVwicXVlc3Rpb25zWydxdWVzdGlvblRleHQnXVwiPjwvaDM+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIlwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJsZSBkLWJsb2NrXCJcclxuICAgICAgICAgICAgPnt7IHF1ZXN0aW9uc1tcInF1ZXN0aW9uVGV4dFwiXSB9fVxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMub3B0aW9uYWxRdWVzdGlvbiA9PT0gJ04nXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjZWUwMDAwXCJcclxuICAgICAgICAgICAgICA+JiM0Mjs8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9sYWJlbD4gLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbXktMVwiPlxyXG4gICAgICAgICAgICA8bGliLXRleHRib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChibHVyKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjYXJkLXRvcGljIGQtYmxvY2sgZmllbGQtbGFibGVcIlxyXG4gICAgICAgICAgICA+SGVpZ2h0XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogI2VlMDAwMFwiXHJcbiAgICAgICAgICAgICAgPiYjNDI7PC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY29sLWF1dG8gcHgtMCBteS0wIHB5LTAgaGVpZ2h0aW5wdXRcIlxyXG5cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb2wtMTIgbXktMVwiICpuZ0lmPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IHB5LTAgaGVpZ2h0SW5wdXRzXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXRleHRib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11cIiAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBwZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcclxuICAgICAgICAgICAgICAgIF0gPT09ICdGRUVUJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInJvdyBtdC0wIHB0LTBcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ01BUCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcblxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLXNlYXJjaC1jb250YWluZXIgbWItM1wiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5Mb25naXR1ZGU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvbmdpdHVkZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGxvbmdpdHVkZVwiXHJcbiAgICAgICAgICBzdGVwPVwiYW55XCJcclxuICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TGF0aXR1ZGU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGF0aXR1ZGVcIlxyXG4gICAgICAgICAgc3RlcD1cImFueVwiXHJcbiAgICAgICAgICByZWFkb25seVxyXG4gICAgICAgID5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgICNhZGRyZXNzSW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBhZGRyZXNzXCJcclxuICAgICAgICAoa2V5dXApPVwib25BZGRyZXNzSW5wdXRLZXl1cCgkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXMpPVwic2hvd0Ryb3Bkb3duID0gdHJ1ZVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25JbnB1dEJsdXIoKVwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dEcm9wZG93biAmJiBhZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiXHJcbiAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1kcm9wZG93biBwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMCBtdC0xXCJcclxuICAgIHN0eWxlPVwiei1pbmRleDogMTAwMDsgbWF4LWhlaWdodDogMjAwcHg7IG92ZXJmbG93LXk6IGF1dG87IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBib3JkZXItcmFkaXVzOiA0cHg7IGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsMCwwLDAuMSk7XCJcclxuICA+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIGFkZHJlc3NTdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwLTJcIlxyXG4gICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XCJcclxuICAgICAgKG1vdXNlZG93bik9XCJzZWxlY3RBZGRyZXNzKHN1Z2dlc3Rpb24pXCJcclxuICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEluZGV4ID0gaVwiXHJcbiAgICAgIFtjbGFzcy5iZy1saWdodF09XCJob3ZlcmVkSW5kZXggPT09IGlcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPnt7IHN1Z2dlc3Rpb24ubWFpbl90ZXh0IH19PC9kaXY+XHJcbiAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj57eyBzdWdnZXN0aW9uLnNlY29uZGFyeV90ZXh0IH19PC9zbWFsbD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+U3RhcnQgdHlwaW5nIHRvIHNlYXJjaCBmb3IgYWRkcmVzc2VzPC9zbWFsbD5cclxuICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8Z29vZ2xlLW1hcCBbY2VudGVyXT1cImNlbnRlclwiIFt6b29tXT1cInpvb21cIj5cclxuICAgICAgICAgICAgICA8bWFwLW1hcmtlciBbcG9zaXRpb25dPVwiY3VycmVudENvb3JkaW5hdGVzXCI+PC9tYXAtbWFya2VyPlxyXG4gICAgICAgICAgICA8L2dvb2dsZS1tYXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibWVkaWNhbFF1ZXMgbXktMVwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAocXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcclxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRScpICYmXHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLXJhZGlvIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLW11bHRpcGxlLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiAobmdNb2RlbENoYW5nZSk9XCJ2YWx1ZUNoYW5nZUZvck11bHRpc2VsZWN0KHF1ZXN0aW9ucylcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLWNoZWNrYm94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdEUk9QRE9XTicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1kb2IgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRE9DVVBMT0FEJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItdXBsb2FkIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4iXX0=
2263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUE2QixTQUFTLEVBQXlCLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7QUF3Qi9ELE1BQU0sT0FBTyx3QkFBd0I7SUEySGhCO0lBQXVCO0lBMUgx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Q3JJLENBQUM7b0JBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ2pDLENBQUMsRUFDRCxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNYLDhCQUE4QjtnQkFDaEMsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO0lBQ2hDLENBQUM7d0dBN2xGVSx3QkFBd0I7NEZBQXhCLHdCQUF3QixxckJDcENyQywrZ1NBdVBBLGkrQkRuT0ksWUFBWSwrUEFDWixXQUFXLGd4QkFDWCxtQkFBbUIsK0JBQ25CLGdCQUFnQiwySEFDaEIsY0FBYywySEFDZCxpQkFBaUIsOEhBQ2pCLGVBQWUscUlBQ2YsWUFBWSxxS0FDWixlQUFlLGlKQUNmLHVCQUF1Qiw2SUFDdkIsZ0JBQWdCLCtpQ0FDaEIsZUFBZTs7NEZBS04sd0JBQXdCO2tCQXBCcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixlQUFlO3dCQUNmLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixlQUFlO3FCQUNoQjt1R0FTMEIsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR29vZ2xlTWFwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2dvb2dsZS1tYXBzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIE5nWm9uZSwgQWZ0ZXJWaWV3SW5pdCwgaW5wdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHF1ZXN0aW9uc1Jlc3BvbnNlIGZyb20gJy4vcXVlc3Rpb25zLmpzb24nXHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUZXh0Ym94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vcmFkaW8vcmFkaW8uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERvYkNvbXBvbmVudCB9IGZyb20gJy4uL2RvYi9kb2IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBsb2FkL3VwbG9hZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNdWx0aXBsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL211bHRpcGxlLXNlbGVjdC9tdWx0aXBsZS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHJMaW5lQ29tcG9uZW50IH0gZnJvbSAnLi4vaHItbGluZS9oci1saW5lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hc3RlckNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLWNvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc3RlclNlcnZpY2UgfSBmcm9tICcuLi9tYXN0ZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1tZWRpYWwtcXVlc3Rpb25zJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICBSYWRpb0NvbXBvbmVudCxcclxuICAgIENoZWNrYm94Q29tcG9uZW50LFxyXG4gICAgU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgRG9iQ29tcG9uZW50LFxyXG4gICAgVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgTXVsdGlwbGVTZWxlY3RDb21wb25lbnQsXHJcbiAgICBHb29nbGVNYXBzTW9kdWxlLFxyXG4gICAgSHJMaW5lQ29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL21lZGlhbC1xdWVzdGlvbnMuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZWRpYWxRdWVzdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIG1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UgPSBpbnB1dDxhbnk+KCk7XHJcbiAgcGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSA6IGFueSA9IGlucHV0PGFueT4oKTtcclxuICBwZXJzb25Vd0lkIDogYW55ID0gXCJcIjtcclxuICBtZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgOiBhbnkgPSB7fTtcclxuICBAVmlld0NoaWxkKCdhZGRyZXNzSW5wdXQnKSBhZGRyZXNzSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlITogZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZTtcclxuICBzYXZlUXVlc3Rpb25SZXF1ZXN0TGE6IGFueSA9IFtdO1xyXG4gIHNhdmVRdWVzdGlvblJlcXVlc3RQaDogYW55ID0gW107XHJcbiAgZmllbGQ6IGFueSA9IGlucHV0LnJlcXVpcmVkPGFueT4oKTtcclxuICBxdWVzdGlvbkxpc3Q6IGFueSA9IFtdO1xyXG4gIGN1cnJlbnRDb29yZGluYXRlczogYW55ID0ge307XHJcbiAgcGVyc29uVXdSZXNwb25zZU9iajogYW55ID0gW107XHJcbiAgY2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0geyBsYXQ6IDQwLjczMDYxLCBsbmc6IC03My45MzUyNDIgfTtcclxuICBsYXRpdHVkZTogYW55O1xyXG4gIGxvbmdpdHVkZTogYW55O1xyXG4gIHpvb206IGFueTtcclxuICBtYXJrZXI6IGFueSA9IHt9O1xyXG5cclxuXHJcbiAgcGVyc29uVXdBbnN3ZXJzOiBhbnkgPSB7XHJcbiAgICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdDogJ0ZFRVQnLFxyXG4gICAgbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0OiAwLFxyXG4gICAgbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0OiAwLFxyXG4gICAgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0OiAwLFxyXG4gIH07XHJcbiAgbWVkUXVlc3Rpb25PYmo6IGFueSA9IHt9O1xyXG4gIGxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94OiBhbnkgPSBbXTtcclxuICBtZWRpY2FsUXVlc3Rpb25zRmVldExpc3Q6IGFueSA9IFtdO1xyXG4gIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0OiBhbnkgPSBbXTtcclxuICBxdWVzdGlvbkhlYWRlcjogYW55ID0gWydlaWEgZGV0YWlscycsICdhYmhhIGRldGFpbHMnLCAncGVwIGRldGFpbHMnXTtcclxuICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdFR5cGVzOiBhbnkgPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnQ20nLFxyXG4gICAgICB2YWx1ZTogJ0NNJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnRmVldCcsXHJcbiAgICAgIHZhbHVlOiAnRkVFVCcsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgYWRkcmVzc1N1Z2dlc3Rpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGhvdmVyZWRJbmRleCA9IC0xO1xyXG4gIHNlYXJjaFRpbWVvdXQ6IGFueTtcclxuICBob3Jpem9udGFsTGluZU9iaiA6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xTdHlsZVwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJib3JkZXJDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlcldpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9udFNpemVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9udEZhbWlseVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJudWRnZURpc3BsYXlJbWFnZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlckNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlckNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJXaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQmFja2dyb3VuZFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlcldpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmdpblwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbE1ldGFJZFwiOiBcIkxJX0NPTV9HRU5fQ1RSTF9ockxpbmVfaHJMaW5lX1YxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyU3R5bGVcIjogXCJzb2xpZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbkhlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heEhlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4V2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjc3NDbGFzc1wiOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBcImZpZWxkTmFtZVwiOiBcImhyTGluZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJzb2xpZCBsaW5lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJwbGFjZUhvbGRlclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibWV0YUlkXCI6IFwiTElfQ09NX0dFTl9DVFJMX2hyTGluZV9ockxpbmVfVjFcIixcclxuICAgICAgICAgICAgICAgICAgICBcImlzVmlzaWJsZVwiOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaXNEaXNhYmxlXCI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdFZhbHVlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ2YWxpZGF0b3JzXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlcXVpcmVkTWVzc2FnZVwiOiBcIlRoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluTGVuZ3RoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluTGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heExlbmd0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heExlbmd0aE1lc3NhZ2VcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGF0dGVybk1lc3NhZ2VcIjogXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogXCJjb2wtMTJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaW1hZ2VVcmxcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImNvbmZpZ0RhdGFcIjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhyVGV4dFwiOiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBcIm1ldGFEYXRhT2JqXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJpc1Nob3dMYWJlbFwiOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDb250cm9sXCI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogXCJockxpbmVcIlxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIG5nWm9uZTogTmdab25lLCBwdWJsaWMgbWFzdGVyU2VydmljZSA6IE1hc3RlclNlcnZpY2UpIHtcclxuICAgIGNvbnNvbGUubG9nKCdtZWRpYWxRdWVzdGlvblJlc3BvbnNlZWVlZWUnLCB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChcclxuICAgICAgKChjaGFuZ2VzWydtZWRpYWxRdWVzdGlvblJlc3BvbnNlJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddLmN1cnJlbnRWYWx1ZSkpIHx8XHJcbiAgICAgICgoY2hhbmdlc1sncHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY2hhbmdlc1sncHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqJ10uY3VycmVudFZhbHVlKSlcclxuICAgICkge1xyXG4gICAgICBpZiAoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpIHtcclxuICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChwb3NpdGlvbikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZTtcclxuICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZTtcclxuICAgICAgICAgIHRoaXMuem9vbSA9IDE1O1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB7XHJcbiAgICAgICAgICAgIGxhdDogdGhpcy5sYXRpdHVkZSxcclxuICAgICAgICAgICAgbG5nOiB0aGlzLmxvbmdpdHVkZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgLi4udGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0aWFsaXplQXV0b2NvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVIZWlnaHRRdWVzdGlvbklkcygpOiB2b2lkIHtcclxuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IDA7XHJcbiAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSAwO1xyXG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gMDtcclxuXHJcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHNlY3Rpb24ucXVlc3Rpb25zICYmIEFycmF5LmlzQXJyYXkoc2VjdGlvbi5xdWVzdGlvbnMpKSB7XHJcbiAgICAgICAgc2VjdGlvbi5xdWVzdGlvbnMuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgc3dpdGNoIChxdWVzdGlvbi5jYW1tdW5kYVF1ZXN0aW9uQ29kZSkge1xyXG4gICAgICAgICAgICBjYXNlICdRSFQnOlxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1FIVEYnOlxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1FIVEknOlxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplQXV0b2NvbXBsZXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZShcclxuICAgICAgdGhpcy5hZGRyZXNzSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXHJcbiAgICAgICAgY29tcG9uZW50UmVzdHJpY3Rpb25zOiB7IGNvdW50cnk6ICdJTicgfSxcclxuICAgICAgICBmaWVsZHM6IFsncGxhY2VfaWQnLCAnZ2VvbWV0cnknLCAnbmFtZScsICdmb3JtYXR0ZWRfYWRkcmVzcyddLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZExpc3RlbmVyKCdwbGFjZV9jaGFuZ2VkJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25QbGFjZVNlbGVjdGVkKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUGxhY2VTZWxlY3RlZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBsYWNlID0gdGhpcy5hdXRvY29tcGxldGUuZ2V0UGxhY2UoKTtcclxuXHJcbiAgICBpZiAoIXBsYWNlLmdlb21ldHJ5IHx8ICFwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbikge1xyXG4gICAgICBjb25zb2xlLmxvZygnTm8gZGV0YWlscyBhdmFpbGFibGUgZm9yIGlucHV0OiAnLCBwbGFjZS5uYW1lKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxvY2F0aW9uID0gcGxhY2UuZ2VvbWV0cnkubG9jYXRpb247XHJcbiAgICB0aGlzLmNlbnRlciA9IHtcclxuICAgICAgbGF0OiBsb2NhdGlvbi5sYXQoKSxcclxuICAgICAgbG5nOiBsb2NhdGlvbi5sbmcoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xyXG5cclxuICAgIGlmIChwbGFjZS5nZW9tZXRyeS52aWV3cG9ydCkge1xyXG4gICAgICB0aGlzLnpvb20gPSAxNTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuem9vbSA9IDEzO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBwbGFjZTonLCB7XHJcbiAgICAgIG5hbWU6IHBsYWNlLm5hbWUsXHJcbiAgICAgIGFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxyXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0b3JlU2VsZWN0ZWRBZGRyZXNzKHBsYWNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCk6IHZvaWQge1xyXG4gICAgY29uc3QgYWRkcmVzc0RhdGEgPSB7XHJcbiAgICAgIHBsYWNlSWQ6IHBsYWNlLnBsYWNlX2lkLFxyXG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxyXG4gICAgICBmb3JtYXR0ZWRBZGRyZXNzOiBwbGFjZS5mb3JtYXR0ZWRfYWRkcmVzcyxcclxuICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY2VudGVyLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xyXG5cclxuICAgIGdlb2NvZGVyLmdlb2NvZGUoeyBhZGRyZXNzOiBhZGRyZXNzIH0sIChyZXN1bHRzLCBzdGF0dXMpID0+IHtcclxuICAgICAgaWYgKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzICYmIHJlc3VsdHNbMF0pIHtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb247XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2VudGVyID0ge1xyXG4gICAgICAgICAgICBsYXQ6IGxvY2F0aW9uLmxhdCgpLFxyXG4gICAgICAgICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XHJcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICdHZW9jb2RlIHdhcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb246ICcgKyBzdGF0dXNcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQWRkcmVzc0lucHV0S2V5dXAoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgcXVlcnkgPSBldmVudC50YXJnZXQudmFsdWU7XHJcblxyXG4gICAgLy8gQ2xlYXIgcHJldmlvdXMgdGltZW91dFxyXG4gICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIYW5kbGUgYXJyb3cga2V5IG5hdmlnYXRpb25cclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XHJcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5taW4oXHJcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggKyAxLFxyXG4gICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zLmxlbmd0aCAtIDFcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xyXG4gICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IE1hdGgubWF4KHRoaXMuaG92ZXJlZEluZGV4IC0gMSwgLTEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPj0gMCAmJlxyXG4gICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zW3RoaXMuaG92ZXJlZEluZGV4XVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFkZHJlc3ModGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChxdWVyeS5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XHJcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZWFyY2hBZGRyZXNzZXMocXVlcnkpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEFkZHJlc3NlcyhxdWVyeTogc3RyaW5nKSB7XHJcbiAgICAvLyBSZXBsYWNlIHRoaXMgd2l0aCB5b3VyIGFjdHVhbCBhZGRyZXNzIHNlYXJjaCBBUEkgY2FsbFxyXG4gICAgLy8gRm9yIGV4YW1wbGUsIHVzaW5nIEdvb2dsZSBQbGFjZXMgQVBJOlxyXG5cclxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZVNlcnZpY2UoKTtcclxuICAgIHNlcnZpY2UuZ2V0UGxhY2VQcmVkaWN0aW9ucyhcclxuICAgICAge1xyXG4gICAgICAgIGlucHV0OiBxdWVyeSxcclxuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXHJcbiAgICAgIH0sXHJcbiAgICAgIChwcmVkaWN0aW9ucywgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJlxyXG4gICAgICAgICAgcHJlZGljdGlvbnNcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gcHJlZGljdGlvbnMubWFwKChwcmVkaWN0aW9uKSA9PiAoe1xyXG4gICAgICAgICAgICBwbGFjZV9pZDogcHJlZGljdGlvbi5wbGFjZV9pZCxcclxuICAgICAgICAgICAgbWFpbl90ZXh0OiBwcmVkaWN0aW9uLnN0cnVjdHVyZWRfZm9ybWF0dGluZy5tYWluX3RleHQsXHJcbiAgICAgICAgICAgIHNlY29uZGFyeV90ZXh0OiBwcmVkaWN0aW9uLnN0cnVjdHVyZWRfZm9ybWF0dGluZy5zZWNvbmRhcnlfdGV4dCxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByZWRpY3Rpb24uZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBZGRyZXNzKHN1Z2dlc3Rpb246IGFueSkge1xyXG4gICAgY29uc3QgYWRkcmVzc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgJyNhZGRyZXNzSW5wdXQnXHJcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoYWRkcmVzc0lucHV0KSB7XHJcbiAgICAgIGFkZHJlc3NJbnB1dC52YWx1ZSA9IHN1Z2dlc3Rpb24uZGVzY3JpcHRpb247XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZShcclxuICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgICk7XHJcbiAgICBzZXJ2aWNlLmdldERldGFpbHMoXHJcbiAgICAgIHtcclxuICAgICAgICBwbGFjZUlkOiBzdWdnZXN0aW9uLnBsYWNlX2lkLFxyXG4gICAgICAgIGZpZWxkczogWydnZW9tZXRyeScsICdmb3JtYXR0ZWRfYWRkcmVzcyddLFxyXG4gICAgICB9LFxyXG4gICAgICAocGxhY2UsIHN0YXR1cykgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmIHBsYWNlKSB7XHJcbiAgICAgICAgICBjb25zdCBsYXQgPSBwbGFjZS5nZW9tZXRyeT8ubG9jYXRpb24/LmxhdCgpO1xyXG4gICAgICAgICAgY29uc3QgbG5nID0gcGxhY2UuZ2VvbWV0cnk/LmxvY2F0aW9uPy5sbmcoKTtcclxuXHJcbiAgICAgICAgICBpZiAobGF0ICE9PSB1bmRlZmluZWQgJiYgbG5nICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBsbmc7XHJcbiAgICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBsYXQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgbGF0LCBsbmcgfTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XHJcbiAgfVxyXG5cclxuICBvbklucHV0Qmx1cigpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpIHtcclxuICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gW107XHJcbiAgICBsZXQgZGF0YTogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKCk7XHJcbiAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94ID0gW107XHJcblxyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcclxuICAgICAgbGV0IHBlcnNvblV3SWRBcnJheTogYW55ID0gW107XHJcbiAgICAgIGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgIHBlcnNvblV3SWRBcnJheS5wdXNoKHNpbmdsZVF1ZXN0aW9uT2JqWydwZXJzb25VV0lkJ10pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGEpICYmXHJcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKVxyXG4gICAgICApIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcclxuICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcclxuICAgICAgICAgIGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZm9yRWFjaCgoc2luZ2xlUGVyc29uT2JqZWN0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0lkID0gc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXSkpIHtcclxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3RpdGxlJ10gPT09ICdNZWRpY2FsIERldGFpbHMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddID0gc2luZ2xlUXVlc3Rpb25bXHJcbiAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25UZXh0J1xyXG4gICAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZSgvXFxcXG4vZywgJ1xcbicpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV07XHJcblxyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc2luZ2xlUXVlc3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUEFOJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID1cclxuICAgICAgICAgICAgICAgICAgICAgICd7XCJUeXBlXCI6XCJBbHBoYU51bWVyaWNcIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIi9eKFthLXpBLVpdKXs1fShbMC05XSl7NH0oW2EtekEtWl0pezF9PyQvXCJ9JztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdGdGNhQ250Y0RldGxzJykge1xyXG4gICAgICAgICAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID0gJ3tcImN1c3RvbVZhbGlkYXRpb25cIjpbe1wiY291bnRyeVwiOlwiSU5cIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIigoXls2LTldKXsxfShbMC05XSl7OX0kKVwifSx7XCJjb3VudHJ5XCI6XCJPVEhFUlwiLFwiTWluVmFsdWVcIjpcIjVcIixcIk1heFZhbHVlXCI6XCIxNFwifV19JztcclxuICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gc2luZ2xlUGVyc29uT2JqZWN0W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbkxpc3QnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV1cclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICBdLmZvckVhY2goKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdJTUFHRSBURVhUJykge1xyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UZXh0J10gPSBxdWVzdGlvbltcclxuICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25UZXh0J1xyXG4gICAgICAgICAgICAgICAgICBdLnJlcGxhY2VBbGwoJ1xcXFxuJywgJzxicj4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcclxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcclxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdGUkVFVEVYVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcclxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddXVtdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluSW50ZXJuYWxWYWx1ZTogcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblVpVmFsdWU6ICdOJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbWFpbkludGVybmFsVmFsdWU6IHF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ1knLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdoYXJkQ29weUxhbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9ICdIQVJEIENPUFknO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHF1ZXN0aW9uc0xpc3RGb3JMQTogYW55ID0gW107XHJcbiAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSA9PT0gc3RlcHNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgIHN0ZXA6IHN0ZXBzLFxyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcclxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxyXG4gICAgICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXHJcbiAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBIYXJkIENvcHkgYW5kIE1hcCBxdWVzdGlvblxyXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbjogYW55ID0gZmlsdGVyZWRPYmouZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5J1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgb2JqWydxdWVzdGlvbnMnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdNQVAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnWScsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgTlJJIHRoZW4gcGFzc3BvcnQgdXBsb2FkIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uOiBhbnkgPSBmaWx0ZXJlZE9iai5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTmF0aW9uYWxpdHknXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ1BBU1NQT1JUX1VQTE9BRCcsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJ1Bhc3Nwb3J0IERldGFpbHMgJyxcclxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ1BBU1NQT1JUX1VQTE9BRCcsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJ1Bhc3Nwb3J0IERldGFpbHMgJyxcclxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBxdWVzdGlvbnNMaXN0Rm9yTEEucHVzaChvYmopO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlcjogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmluZEluZGV4KChzaW5nbGVPYmo6IGFueSkgPT4gc2luZ2xlT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddKTtcclxuICAgICAgICAgICAgLy8gaWYgKGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlciAhPT0gdGhpcy5udW1iZXJNaW51c09uZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHF1ZXN0aW9uc0xpc3RGb3JMQTtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmogPSBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpKSkge1xyXG4gICAgICAgICAgbGV0IGlzU3ViUXVlc3Rpb25FeGlzdHM6IGFueSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKCkuZm9yRWFjaCgoc2luZ2xlUGVyc29uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdKSkge1xyXG4gICAgICAgICAgICAgIGxldCBhcnJheU9mS2V5cyA9IE9iamVjdC5rZXlzKHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXSk7XHJcbiAgICAgICAgICAgICAgaWYgKGFycmF5T2ZLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGFycmF5T2ZLZXlzLmZvckVhY2goKHNpbmdsZUtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5mb3JFYWNoKChhbnN3ZXJPYmo6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXIgLy8gZm9yIGFuc3dlcnMgb3RoZXIgdGhhbiBjaGVja2JveFxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaXN0T2ZPcHRpb25zU2VsZWN0ZWQgOiBhbnkgPSBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RPZk9wdGlvbnNTZWxlY3RlZC5mb3JFYWNoKChzaW5nbGVFbGVtZW50IDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb25bMF0pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXVsnZG9tYWluVmFsdWVzJ10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWREb21haW5WYWx1ZU9iaiA6IGFueSA9IGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2RvbWFpblZhbHVlcyddLmZpbHRlcigoc2luZ2xlT2JqIDogYW55KSA9PiBzaW5nbGVPYmpbJ2RvbWFpbkludGVybmFsVmFsdWUnXSA9PT0gc2luZ2xlRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkRG9tYWluVmFsdWVPYmopKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpblVpVmFsdWUnXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gYW5zd2VyT2JqWydhbnN3ZXInXTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmVldEFuc3dlciA9IGFuc3dlck9ialsnYW5zd2VyJ10uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqWydhbnN3ZXInXSkgJiYgYW5zd2VyT2JqWydhbnN3ZXInXS5pbmNsdWRlcygnLicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSBmZWV0QW5zd2VyWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGlmIChzaW5nbGVRdWVzdGlvblJlc3BvbnNlWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddICYmIHNpbmdsZVF1ZXN0aW9uUmVzcG9uc2VbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdMaWZlTWVkaUNuZHRuJyB8fCBhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU3ViUXVlc3Rpb25FeGlzdHMgPSB0cnVlO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yRGlzZWFzZVwiOiBcIm1kZWljYWxIaXN0b3J5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgXCJhcGlVcmxcIjogXCJodHRwczovL3ByZXByb2QtZGlyZWN0cG9ydGFsbGlmZS5nb2RpZ2l0LmNvbS9EaXJlY3RQb3J0YWxMaWZlL2xpZmUvZmV0Y2hTdWJRdWVzdGlvbnNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yUGVyc29uVXdJZFwiOiBcInBlcnNvblVXSURcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBcInRva2VuQ29va2llUGFyYW1cIjogXCJ2M1Rva2VuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgXCJpc1NlbmRUb2tlblwiOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFzdGVyU2VydmljZS5nZXRTdWJRdWVzdGlvbnModGhpcy5maWVsZCgpPy5jb25maWdEYXRhLCBhbnN3ZXJPYmpbJ2Fuc3dlciddLCBhbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uUmVzcG9uc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSA9IFtzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+IG9iamVjdFsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID0gc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHN1YkRvbWFpbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuc3ViTWVkaWNhbFF1ZXN0aW9uc0RvbWFpbkludGVybmFsVmFsdWVzTGlzdC5wdXNoKHN1YkRvbWFpblsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnksIGluZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9iaiA6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ10gOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBhbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgKHNpbmdsZTogYW55KSA9PiBzaW5nbGVbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBzdWJRdWVzdGlvblJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNhYmxlQ29uZmlybWF0aW9uQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzYWJsZUNvbmZpcm1hdGlvbkJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFuc3dlck9iai5hbnN3ZXIgPT09ICdzdHJpbmcnICYmIGFuc3dlck9iai5hbnN3ZXIgIT09ICdZJyAmJiBhbnN3ZXJPYmouYW5zd2VyICE9PSAnTicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGFuc3dlck9iai5hbnN3ZXIuaW5jbHVkZXMoJywnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKS5mb3JFYWNoKChhbnN3ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLmFuc3dlcl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQZXJzb25Vd0Fuc3dlcnMoYW5zd2VyT2JqLCBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG5cclxuICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ10gPSB7XHJcbiAgICAgIGNvbnRyb2xTdHlsZToge1xyXG4gICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcclxuICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxyXG4gICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxyXG4gICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcclxuICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcclxuICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICB3aWR0aDogbnVsbCxcclxuICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXHJcbiAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcclxuICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxyXG4gICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcclxuICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcclxuICAgICAgICBwYWRkaW5nOiBudWxsLFxyXG4gICAgICAgIG1hcmdpbjogbnVsbCxcclxuICAgICAgICBpc01hc3RlckNzczogbnVsbCxcclxuICAgICAgICBjb250cm9sTWV0YUlkOiAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXHJcbiAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXHJcbiAgICAgICAgaGVpZ2h0OiBudWxsLFxyXG4gICAgICAgIG1pbkhlaWdodDogbnVsbCxcclxuICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICAgICAgbWF4V2lkdGg6IG51bGwsXHJcbiAgICAgICAgY3NzQ2xhc3M6IG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpZWxkTmFtZTogbnVsbCxcclxuICAgICAgbGFiZWw6ICdmZWV0IC8gaW5jaGVzJyxcclxuICAgICAgcGxhY2VIb2xkZXI6ICcnLFxyXG4gICAgICBtZXRhSWQ6ICcnLFxyXG4gICAgICBpc1Zpc2libGU6IHRydWUsXHJcbiAgICAgIGlzRGlzYWJsZTogZmFsc2UsXHJcbiAgICAgIHZhbGlkYXRvcnM6IHtcclxuICAgICAgICBpc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICByZXF1aXJlZE1lc3NhZ2U6ICdUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eScsXHJcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxyXG4gICAgICAgIG1pbkxlbmd0aE1lc3NhZ2U6IG51bGwsXHJcbiAgICAgICAgbWF4TGVuZ3RoOiAxNTAsXHJcbiAgICAgICAgbWF4TGVuZ3RoTWVzc2FnZTogbnVsbCxcclxuICAgICAgICBwYXR0ZXJuOiBudWxsLFxyXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlOiAnJyxcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9uczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxhYmVsOiAnQ20nLFxyXG4gICAgICAgICAgdmFsdWU6ICdDTScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogJ0ZlZXQnLFxyXG4gICAgICAgICAgdmFsdWU6ICdGRUVUJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIHN0eWxlOiBudWxsLFxyXG4gICAgICBpbWFnZVVybDogbnVsbCxcclxuICAgICAgY29uZmlnRGF0YToge30sXHJcbiAgICAgIG1ldGFEYXRhT2JqOiBudWxsLFxyXG4gICAgICBpc1Nob3dMYWJlbDogZmFsc2UsXHJcbiAgICAgIGlzTWFzdGVyQ29udHJvbDogZmFsc2UsXHJcbiAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAgIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmo6IGFueSwgcm9sZTogYW55KSB7XHJcbiAgICAvLyBZZXMsIEkgd2FudCBhIEhhcmQgQ29weVxyXG4gICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGFuc3dlck9iai5jYW1tdW5kYVF1ZXN0aW9uQ29kZSkgJiYgYW5zd2VyT2JqLmNhbW11bmRhUXVlc3Rpb25Db2RlID09PSAncmVjdlNmdENvcHknKSB7XHJcbiAgICAvLyAgIHRoaXMuaGFyZENvcHlSZXF1aXJlZCA9IGFuc3dlck9iai5hbnN3ZXIgPT09ICdZJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIC8vICAgaWYgKHRoaXMuaGFyZENvcHlSZXF1aXJlZCAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5vcGVuUXVvdGVSZXNwb25zZS5sb2NhdGlvbkRldGFpbHMpKSB7XHJcbiAgICAvLyAgICAgdGhpcy5sb2NhdGlvbiA9IHRoaXMub3BlblF1b3RlUmVzcG9uc2UubG9jYXRpb25EZXRhaWxzO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmoucGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5KSkge1xyXG4gICAgICBhbnN3ZXJPYmoucGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5LmZvckVhY2goKHN1YnF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc3VicXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb25bMF0pKSB7XHJcbiAgICAgICAgICBpZihmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzdWJxdWVzdGlvbi5xdWVzdGlvbklkXSA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgbGlzdE9mT3B0aW9uc1NlbGVjdGVkIDogYW55ID0gIUFycmF5LmlzQXJyYXkoc3VicXVlc3Rpb24uYW5zd2VyKSA/IHN1YnF1ZXN0aW9uLmFuc3dlci5zcGxpdCgnLCcpIDogc3VicXVlc3Rpb24uYW5zd2VyO1xyXG4gICAgICAgICAgICBsaXN0T2ZPcHRpb25zU2VsZWN0ZWQuZm9yRWFjaCgoc2luZ2xlRWxlbWVudCA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXVsnZG9tYWluVmFsdWVzJ10pKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWREb21haW5WYWx1ZU9iaiA6IGFueSA9IGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2RvbWFpblZhbHVlcyddLmZpbHRlcigoc2luZ2xlT2JqIDogYW55KSA9PiBzaW5nbGVPYmpbJ2RvbWFpbkludGVybmFsVmFsdWUnXSA9PT0gc2luZ2xlRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkRG9tYWluVmFsdWVPYmopKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3N1YnF1ZXN0aW9uLnF1ZXN0aW9uSWRdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsIDogZmlsdGVyZWREb21haW5WYWx1ZU9ialswXVsnZG9tYWluVWlWYWx1ZSddLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlIDogZmlsdGVyZWREb21haW5WYWx1ZU9ialswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc3VicXVlc3Rpb24ucXVlc3Rpb25JZF0gPSBzdWJxdWVzdGlvbi5hbnN3ZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YnF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVQZXJzb25Vd0Fuc3dlcnMoc3VicXVlc3Rpb24sIHJvbGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIHZhbHVlID09PSBudWxsIHx8XHJcbiAgICAgIHZhbHVlID09PSAnJyB8fFxyXG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8XHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlKSA9PT0gJ3t9J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFRpdGxlQ2FzZShoZWFkZXI6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoaGVhZGVyKSB7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSGVhZGVyLmluY2x1ZGVzKGhlYWRlci50b0xvY2FsZUxvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgIGxldCB2YWwgPSBoZWFkZXIuc3BsaXQoJyAnKTtcclxuICAgICAgICByZXR1cm4gdmFsWzBdLnRvVXBwZXJDYXNlKCkgKyAnICcgKyB0aGlzLnRvVGl0bGVDYXNlKHZhbFsxXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGhlYWRlci50b1VwcGVyQ2FzZSgpID09PSAnRkFUQ0EgREVUQUlMUycpIHtcclxuICAgICAgICAgIHJldHVybiBoZWFkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGhlYWRlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvVGl0bGVDYXNlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgL1xcd1xcUyovZyxcclxuICAgICAgICAgICh0eHQ6IGFueSkgPT4gdHh0WzBdLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGQocXVlc3Rpb25PYmo6IGFueSkge1xyXG4gICAgbGV0IG9wdGlvbnNPYmo6IGFueSA9IFtdO1xyXG4gICAgbGV0IGNvbnRyb2xTdHlsZSA6IGFueSA9IHt9O1xyXG4gICAgaWYgKHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkge1xyXG4gICAgICBxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlT3B0aW9uVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgIG9wdGlvbnNPYmoucHVzaCh7XHJcbiAgICAgICAgICBsYWJlbDogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpblVpVmFsdWUnXSxcclxuICAgICAgICAgIHZhbHVlOiBzaW5nbGVPcHRpb25WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGxldCBtaW5MZW5ndGg6IGFueSA9IG51bGw7XHJcbiAgICBsZXQgbWF4TGVuZ3RoOiBhbnkgPSAyMDA7XHJcbiAgICBsZXQgcGF0dGVybjogYW55ID0gbnVsbDtcclxuICAgIGxldCBwYXR0ZXJuTWVzc2FnZTogYW55ID0gbnVsbDtcclxuICAgIGxldCBjb25maWdEYXRhOiBhbnkgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YSlcclxuICAgICAgPyB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGFcclxuICAgICAgOiB7fTtcclxuXHJcbiAgICBpZihxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICAnUkFESU8gQlVUVE9OJyB8fCBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJykge1xyXG4gICAgICBjb250cm9sU3R5bGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogXCJyYWRpb1wiLFxyXG4gICAgICAgICAgICAgICAgICBcImJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImJvcmRlcldpZHRoXCI6IFwiMXB4XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCIxMnB4XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9udFdlaWdodFwiOiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogXCJNdWxpc2hcIixcclxuICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiM0NDQ0NDRcIixcclxuICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kXCI6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJudWRnZURpc3BsYXlJbWFnZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlckNvbG9yXCI6IFwiI2ZmYmIwMFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQmFja2dyb3VuZFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1c1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyQ29sb3JcIjogXCIjREFEQURBXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IFwiI0VDRUNFQ1wiLFxyXG4gICAgICAgICAgICAgICAgICBcImRpc2FibGVCYWNrZ3JvdW5kXCI6IFwiI0VDRUNFQ1wiLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyQ29sb3JcIjogXCIjREFEQURBXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY3JlYXRlZERhdGVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJwYWRkaW5nXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWFyZ2luXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDc3NcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJjb250cm9sTWV0YUlkXCI6IFwiQUxMX0NPTV9HRU5fQ1RSTF9yYWRpb19ub21pbmVlR2VuZGVyX1YxXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyU3R5bGVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJoZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJtYXhIZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJtaW5XaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogbnVsbFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uT2JqWyd2YWxpZGF0aW9ucyddKSkge1xyXG4gICAgICBsZXQgdmFsaWRhdGlvbk9iajogYW55ID0gSlNPTi5wYXJzZShxdWVzdGlvbk9ialsndmFsaWRhdGlvbnMnXSk7XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ10pKSB7XHJcbiAgICAgICAgbWluTGVuZ3RoID0gdmFsaWRhdGlvbk9ialsnTWluVmFsdWUnXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddKSkge1xyXG4gICAgICAgIG1heExlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01heFZhbHVlJ107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnVHlwZSddKSkge1xyXG4gICAgICAgIHBhdHRlcm4gPSB2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJyA/ICdeWzAtOV0rJCcgOiBudWxsO1xyXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlID1cclxuICAgICAgICAgIHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ051bWVyaWMnXHJcbiAgICAgICAgICAgID8gJ09ubHkgbnVtYmVycyBhcmUgYWxsb3dlZC4nXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuXHJcbiAgICAgICAgY29uZmlnRGF0YVsnaW5wdXRUeXBlJ10gPSB2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJyA/ICdudW1iZXInIDogJ3RleHQnO1xyXG4gICAgICAgIGlmICh2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJykge1xyXG4gICAgICAgICAgbWF4TGVuZ3RoID0gJzknLnJlcGVhdChOdW1iZXIobWF4TGVuZ3RoKSk7XHJcbiAgICAgICAgICBjb25maWdEYXRhWydtYXhWYWx1ZSddID0gbWF4TGVuZ3RoO1xyXG4gICAgICAgICAgY29uZmlnRGF0YVsnbWluVmFsdWUnXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29uZmlnRGF0YTogY29uZmlnRGF0YSxcclxuICAgICAgY29udHJvbFN0eWxlOiBjb250cm9sU3R5bGUsXHJcbiAgICAgIGNvbnRyb2xUeXBlOlxyXG4gICAgICAgIHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCdcclxuICAgICAgICAgID8gJ3RleHQnXHJcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcclxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRSdcclxuICAgICAgICAgID8gJ3JhZGlvJ1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgfHxcclxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nXHJcbiAgICAgICAgICA/ICdjaGVja2JveCdcclxuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXHJcbiAgICAgICAgICA/ICdkYXRlJ1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdEUk9QRE9XTidcclxuICAgICAgICAgID8gJ3NlbGVjdCdcclxuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRE9DVVBMT0FEJ1xyXG4gICAgICAgICAgPyAnZmlsZSdcclxuICAgICAgICAgIDogJycsXHJcbiAgICAgIGZpZWxkTmFtZTogcXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10sXHJcbiAgICAgIGlzRGlzYWJsZTogZmFsc2UsXHJcbiAgICAgIGxhYmVsOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXHJcbiAgICAgIHBsYWNlSG9sZGVyOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXHJcbiAgICAgIHZhbGlkYXRvcnM6IHtcclxuICAgICAgICBpc1JlcXVpcmVkOiBxdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgbWluTGVuZ3RoLFxyXG4gICAgICAgIG1heExlbmd0aCxcclxuICAgICAgICBwYXR0ZXJuLFxyXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlLFxyXG4gICAgICB9LFxyXG4gICAgICBjc3NDbGFzczogXCJcIixcclxuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxyXG4gICAgICBvcHRpb25zOiBvcHRpb25zT2JqLFxyXG4gICAgICBpc1Nob3dMYWJlbDogdHJ1ZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdWJRdWVzdGlvblZhbHVlcyhxdWVzdGlvbj86IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcycsIHRoaXMucXVlc3Rpb25MaXN0KVxyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5xdWVzdGlvbkxpc3QpKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSkge1xyXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1F1ZXN0aW9uKHNpbmdsZVF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGlzTm9uZUluRG9tYWluVmFsdWVzOiBhbnkgPSBzaW5nbGVRdWVzdGlvbltcclxuICAgICAgICAgICAgICAgICAgJ2RvbWFpblZhbHVlcydcclxuICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlT2JqWydkb21haW5VaVZhbHVlJ10udG9VcHBlckNhc2UoKSA9PT0gJ05PTkUnXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShpc05vbmVJbkRvbWFpblZhbHVlcykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9uZUluRG9tYWluVmFsdWVzWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9uZUluRG9tYWluVmFsdWVzWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbmUgaXMgc2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgc2VsZWN0ZWQgY2hlY2tib3ggcXVlc3Rpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWUuZG9tYWluVWlWYWx1ZS50b1VwcGVyQ2FzZSgpICE9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05PTkUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbGV0IGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3Q6IGFueSA9IHRoaXMuaXNCbG9ja2VkUXVlc3Rpb25zTGlzdC5maWx0ZXIoKHNpbmdsZUJsb2NrZWRPYmo6IGFueSkgPT4gc2luZ2xlQmxvY2tlZE9ialsnc2VjdGlvblRpdGxlJ10udHJpbSgpID09PSBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRyaW0oKSk7XHJcbiAgICAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3QpKSB7XHJcbiAgICAgICAgLy8gICBpZiAoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JDdXN0b21lckZsb3cgJiYgIXRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pO1xyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gICAgICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtmaWx0ZXJlZEluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcclxuICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xyXG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICBpZiAoKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQWdlbnRGbG93IHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDIwJyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QwNScgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMDYnKSAmJiB0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZEluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKTtcclxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcclxuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgaGlkZGVuUXVlc3Rpb25zOiBhbnkgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvbk9iajogYW55KSA9PiAhc2luZ2xlU2VjdGlvbk9ialsnc2hvd1NlY3Rpb24nXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoaWRkZW5RdWVzdGlvbnMpKSB7XHJcbiAgICAgICAgICBoaWRkZW5RdWVzdGlvbnMuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcclxuICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYVsnc3RlcCddIC0gYlsnc3RlcCddKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGxpc3QnLCB0aGlzLnF1ZXN0aW9uTGlzdCk7XHJcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGFuc3dlcnMnLCB0aGlzLnBlcnNvblV3QW5zd2Vycyk7XHJcbiAgICAgICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKCk7XHJcbiAgfVxyXG5cclxuICBzaG93UXVlc3Rpb24oY3VycmVudFF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIGxldCBzaG93UXVlc3Rpb246IGFueSA9IGZhbHNlO1xyXG4gICAgbGV0IHN1YlF1ZXN0aW9uczogYW55ID0gW107XHJcbiAgICAvLyBsZXQgY3VycmVudFNlY3Rpb25JbmRleDogYW55ID0gcXVlc3Rpb25zUmVzcG9uc2VbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHBlcnNvblJvbGUpXHJcbiAgICAvLyBsZXQgcm9sZSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtjdXJyZW50U2VjdGlvbkluZGV4XVsncm9sZSddXHJcblxyXG4gICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIGxldCBpc1N1YlF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBbXTtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSkpIHtcclxuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0ID0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5maWx0ZXIoXHJcbiAgICAgICAgICAocXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PlxyXG4gICAgICAgICAgICBxdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzU3ViUXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHN1YlF1ZXN0aW9ucy5wdXNoKHNpbmdsZVF1ZXN0aW9uKTtcclxuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0LmZvckVhY2goKHNpbmdsZVN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10udG9TdHJpbmcoKVswXSAhPT0gJyEnICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPT09XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddKSB8fFxyXG4gICAgICAgICAgICAoc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdID09PSAnIScgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gIT09XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnIScpWzFdKSB8fFxyXG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dPy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZU9ialsndmFsdWUnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxyXG4gICAgICAgICAgICAgICkubGVuZ3RoID4gMClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvbnMpICYmXHJcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSlcclxuICAgICkge1xyXG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKSAmJlxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cclxuICAgICAgKSAmJlxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxyXG4gICAgICAgIF1cclxuICAgICAgKSAmJlxyXG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXHJcbiAgICAgIF0gPT09IGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbkFuc3dlciddXHJcbiAgICApIHtcclxuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJykge1xyXG4gICAgICBzaG93UXVlc3Rpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBzaG93UXVlc3Rpb247XHJcbiAgfVxyXG5cclxuICBzYXZlUXVlc3Rpb25EZXRhaWxzKCkge1xyXG4gICAgLy8gcmVtb3ZlIGFsbCBjaGVja2JveCBxdWVzdGlvbnMgcHJlc2VudCBpbiB2YWx1ZXNcclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gpKSB7XHJcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZGtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddKTtcclxuICAgICAgLy8gbGV0IHBvbGljeUFzc3VyZWRLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ10pO1xyXG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRPbmVLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXSk7XHJcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZFR3b0tleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddKTtcclxuICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoaXNOYU4oTnVtYmVyKHNpbmdsZUtleSkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgLy8gcG9saWN5QXNzdXJlZEtleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIGxpZmVBc3N1cmVkT25lS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICAvLyBsaWZlQXNzdXJlZFR3b0tleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pKSB7XHJcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuICAgIC8vIGxldCBoZWlnaHRJbkluY2hlc09iajogYW55ID0gW107XHJcbiAgICAvLyBsZXQgaGVpZ2h0SW5GZWV0T2JqOiBhbnkgPSBbXTtcclxuICAgIC8vIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmo6IGFueSA9IFtdO1xyXG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XHJcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcclxuICAgIC8vICAgbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnKTtcclxuICAgIC8vICAgaWYgKGxhSW5kZXggIT09IC0xICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF0pKSB7XHJcbiAgICAvLyAgICAgaGVpZ2h0SW5JbmNoZXNPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xyXG4gICAgLy8gICAgIGhlaWdodEluRmVldE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyk7XHJcbiAgICAvLyAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBhbmQgbm9uIG1lZGljYWwgcXVlc3Rpb25zIDpcclxuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iaikgJiYgaXNWYWxpZCkge1xyXG4gICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmouZm9yRWFjaCgoc2luZ2xlUGVyc29uT2JqOiBhbnksIHNpbmdsZVBlcnNvbkluZGV4OiBhbnkpID0+IHtcclxuICAgIC8vICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSAmJiBpc1ZhbGlkKSB7XHJcbiAgICAvLyAgICAgICBsZXQgcm9sZTogYW55ID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZCcgPyBcImxpZmUgYXNzdXJlZFwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdwb2xpY3lIb2xkZXInID8gXCJwb2xpY3kgaG9sZGVyXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkT25lJyA/IFwiSm9pbnQgTGlmZSAxXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkVHdvJyA/IFwiSm9pbnQgTGlmZSAyXCIgOiBcIlwiO1xyXG4gICAgLy8gICAgICAgc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcclxuICAgIC8vICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJiAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnVEVMTF9VU19NT1JFJyB8fCBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09ICdCQVNJQ19ERVRBSUxTJykgJiYgaXNWYWxpZCkge1xyXG5cclxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcclxuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKTtcclxuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSkpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXHJcbiAgICAvLyAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmIGlzVmFsaWQpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gQ00gJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBDTSAnICsgcm9sZSwgJ0Nsb3NlJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcclxuICAgIC8vICAgICAgICAgICAgIGlmIChcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQoc2luZ2xlUXVlc3Rpb25PYmosIHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSkpICYmIGlzVmFsaWRcclxuICAgIC8vICAgICAgICAgICAgICkge1xyXG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICByZWRpcmVjdFxyXG4gICAgLy8gICAgICAgICAgICAgKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iaikpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQoYCR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncXVlc3Rpb25UeXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsndHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3BlcnNvblR5cGUnXX1gKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXHJcbiAgICAvLyAgICAgICAgICAgICApIHtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXHJcbiAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICBpZiAoXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICApIHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gfVxyXG4gICAgLy8gICAgICAgICAgIH0pO1xyXG5cclxuICAgIC8vICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxyXG4gICAgLy8gICAgICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xyXG4gICAgLy8gICAgICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICApe1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcclxuICAgIC8vICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vIH0pO1xyXG4gICAgLy8gICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKChpc1ZhbGlkIHx8IHNhdmVkcmFmdCkgfHwgdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xyXG4gICAgLy8gaWYgKGlzVmFsaWQpIHtcclxuICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KHRydWUpO1xyXG4gICAgICAvLyBsZXQgcmVxdWVzdDogYW55ID0gW107XHJcbiAgICAgIGxldCBtYWluUmVxT2JqOiBhbnkgPSBbXTtcclxuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnM6IGFueSA9IFtdO1xyXG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JMYTogYW55ID0gW107XHJcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvclBoOiBhbnkgPSBbXTtcclxuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXSkpIHtcclxuICAgICAgICAvLyBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGlmIChcclxuICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcclxuICAgICAgICAvLyAgIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XHJcbiAgICAgICAgLy8gICAgICdURUxMX1VTX01PUkUnIHx8XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cclxuICAgICAgICAvLyAgICAgICAnQkFTSUNfREVUQUlMUycpXHJcbiAgICAgICAgLy8gKSB7XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cclxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHBhc3MgaGVpZ2h0IGluIGNtIG9ialxyXG4gICAgICAgICAgICBsZXQgY21PYmpJbkFuc3dlcnNpbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbY21PYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgIHBhcnNlSW50KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhlaWdodCBpbiBpbmNoZXNcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPSAoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddICogMC4zOTM3MDFcclxuICAgICAgICAgICAgKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0OiBhbnkgPVxyXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSkgPiAxMlxyXG4gICAgICAgICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxyXG4gICAgICAgICAgICAgICAgOiAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGluY2hlc29iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaGVpZ2h0IGluIGZlZXRcclxuXHJcbiAgICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZlZXRPYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5GZWV0KS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikpIHtcclxuICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgKlxyXG4gICAgICAgICAgICAgICAgICAxMiArXHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSk7XHJcbiAgICAgICAgICAgICAgbGV0IGhlaWdodEluQ206IGFueSA9IChcclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDFcclxuICAgICAgICAgICAgICApLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoZmVldE9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcclxuICAgICAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXHJcbiAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcclxuICAgICAgICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsZXQgaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkNtKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5DbUFuc3dlck9iamVjdDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DbUFuc3dlck9iamVjdCkgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DbUFuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3Q6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0KSAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddXSA9XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3Q6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3QpICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbjogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHNpbmdsZURhdGE6IGFueSkgPT4gc2luZ2xlRGF0YVsncXVlc3Rpb25UeXBlJ10gPT09ICdOT0RJU1BMQVknXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIDogW107XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gfHxcclxuICAgICAgICAgICAgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbi5sZW5ndGggPiAwKSAmJlxyXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xyXG4gICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gJ0VuZ2xpc2gnO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FycjogYW55ID0gW107XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoZWNrZWRPcHRpb25zQXJyKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAvLyBmb3IgY2hlY2tib3ggcXVlc3Rpb25cclxuXHJcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcclxuICAgICAgICAgICAgICAgICAgJ2Fuc3dlcidcclxuICAgICAgICAgICAgICAgIF0gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIC8vIG5vbiBjaGVja2JveCBxdWVzdGlvblxyXG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjpcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcclxuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bXHJcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXHJcbiAgICAgICAgICAgICAgICBdID1cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXHJcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZihzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHtcclxuICAgICAgICAgICAgLy8gICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgOiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleCgoc2luZ2xlQW5zd2VyT2JqIDogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gICYmIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10pKVxyXG4gICAgICAgICAgICAvLyAgIGlmKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAvLyAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAvLyAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICAgIGFuc3dlcjogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obmV3IERhdGUodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pLCAneXl5eS1NTS1kZCcpIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXHJcbiAgICAgICAgICAgIC8vICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgIC8vICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgLy8gICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICB9O1xyXG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XHJcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgLy8gb2JqZWN0IGFscmVhZHkgdGhlcmUgc28gb3ZlciByaWRlIHRoZSBuZXcgYW5zd2VyXHJcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XHJcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVsnYW5zd2VyJ10gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gICB9XHJcblxyXG4gICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZXRGaW5hbmNFbGdibCcpIHtcclxuICAgICAgICAgICAgLy8gICBsZXQgZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iajogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXHJcbiAgICAgICAgICAgIC8vICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAvLyAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgLy8gICAgIGFuc3dlcjogdGhpcy5zaGFyZWRTZXJ2aWNlLmZpbmFuY2lhbEVsaWdpYmlsaXR5LFxyXG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgLy8gICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgLy8gICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAvLyAgIH07XHJcbiAgICAgICAgICAgIC8vICAgaWYgKGZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4XVsnYW5zd2VyJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuZmluYW5jaWFsRWxpZ2liaWxpdHk7XHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9KTtcclxuICAgICAgbGV0IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdDogYW55ID0gW1xyXG4gICAgICAgIC4uLm5ldyBTZXQoXHJcbiAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLm1hcCgoaXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICBpdGVtLnBlcnNvblVXSWQudG9TdHJpbmcoKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICksXHJcbiAgICAgIF07XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdCkpIHtcclxuICAgICAgICBtYWluUmVxdWVzdEZvckxhID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAoc2luZ2xlQW5zd2VyOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHNpbmdsZUFuc3dlclsncGVyc29uVVdJZCddID09PSBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3RbMF1cclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3QubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICBtYWluUmVxdWVzdEZvclBoID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChzaW5nbGVBbnN3ZXI6IGFueSkgPT5cclxuICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJbJ3BlcnNvblVXSWQnXSA9PT0gZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0WzFdXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgc2F2ZVJlcXVlc3RzQXJyYXk6IGFueSA9IFtdO1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdExhID0gbWFpblJlcXVlc3RGb3JMYTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RMYScsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcclxuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgPyB0cnVlIDogIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvclBoKSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoID0gbWFpblJlcXVlc3RGb3JQaDtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RQaCcsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvclBoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XHJcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb29raWVWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XHJcbiAgICBsZXQgdG9rZW5OYW1lID0gJyc7XHJcbiAgICBsZXQgdG9rZW5WYWx1ZSA9ICcnO1xyXG4gICAgY29uc3QgaW5kZXgyID0gMjtcclxuICAgIGNvb2tpZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiYgISFkYXRhLnNwbGl0KCc9JylbMV0pIHtcclxuICAgICAgICB0b2tlbk5hbWUgPSBkYXRhLnNwbGl0KCc9JylbMF0udHJpbSgpO1xyXG4gICAgICAgIHRva2VuVmFsdWUgPSBkYXRhLnNwbGl0KCc9JylbMV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIG5hbWUgPT09ICdsaW5rJyAmJlxyXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVswXS5pbmNsdWRlcyhuYW1lKSAmJlxyXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdICE9PSBudWxsICYmXHJcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICB0b2tlblZhbHVlID0gdG9rZW5WYWx1ZSArICc9JyArIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0b2tlblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCkge1xyXG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XHJcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmXHJcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxyXG4gICAgICAgICAgICAnVEVMTF9VU19NT1JFJyB8fFxyXG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XHJcbiAgICAgICAgICAgICAgJ0JBU0lDX0RFVEFJTFMnKSAmJlxyXG4gICAgICAgICAgaXNWYWxpZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxyXG4gICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cclxuICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxyXG4gICAgICAgICAgICAgICAgKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAgIC8vICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlXHJcbiAgICAgICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG5cclxuICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgIC8vIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxyXG4gICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXHJcbiAgICAgICAgICAgIGlzVmFsaWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAvLyAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAvLyAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxyXG4gICAgICAgICAgICAvLyAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKVxyXG4gICAgICAgICAgICBpc1ZhbGlkXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGlmIChcclxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxyXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgJiZcclxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAvLyApIHtcclxuICAgICAgICAgIC8vICAgbGV0IGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmo6IGFueSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucXVlc3Rpb25zUGFzc3BvcnRVcGxvYWRPYmouZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gKHNpbmdsZU9ialsncGVyc29uVHlwZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlT2JqWydkbXNJZCddKSkpO1xyXG4gICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqKSkge1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xyXG4gICAgICAgICAgLy8gICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIC8vICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZVxyXG4gICAgICAgICAgLy8gICAgICAgfSk7XHJcbiAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgICAgICAgLy8gICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgICAgICAgLy8gICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XHJcbiAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAvLyAgIH1cclxuXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBkZWNsYXJhdGlvbiBxdWVzdGlvbnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIChpc1ZhbGlkICYmXHJcbiAgICAgICAgICAgICAgICAvLyAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcclxuICAgICAgICAgICAgICAgIC8vICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gPT09XHJcbiAgICAgICAgICAgICAgICAgICdOJykgfHxcclxuICAgICAgICAgICAgICAhdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gfHxcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAvLyApXHJcbiAgICAgICAgICAgICAgLy8gfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXHJcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICBpZiAoXHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcclxuICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXHJcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcclxuICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcclxuICAgICAgICAgIC8vICAgICApIHtcclxuICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxyXG4gICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxyXG4gICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xyXG4gICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xyXG4gICAgICAgIC8vICAgICApe1xyXG4gICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXHJcbiAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXHJcbiAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxyXG4gICAgICAgIC8vICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xyXG5cclxuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAvLyAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgICAgICAvLyAgICAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzTWVkaWNhbFF1ZXN0aW9uc1ZhbGlkJywgaXNWYWxpZCk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUNoYW5nZUZvck11bHRpc2VsZWN0KHF1ZXN0aW9uIDogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdMaWZlTWVkaUNuZHRuJyB8fCBxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicgKSB7XHJcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmxlbmd0aCA+IDBcclxuXHJcbiAgICAgIC8vIGlmIG5vbmUgaXMgc2VsZWN0ZWQgdGhlbiByZW1vdmUgYWxsIGFuZCBjYWxsIEFQSVxyXG4gICAgICBsZXQgaXNOb25lU2VsZWN0ZWQgOiBhbnkgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5maW5kSW5kZXgoKHNpbmdsZU9iaiA6YW55KSA9PiBzaW5nbGVPYmpbJ3ZhbHVlJ10gPT09ICdOb01lZEhpc3RyeScpO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGlzTm9uZVNlbGVjdGVkICE9PSAgLTFcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmZpbHRlcigoc2luZ2xlT2JqIDogYW55KSA9PiBzaW5nbGVPYmpbJ3ZhbHVlJ10gPT09ICdOb01lZEhpc3RyeScpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBbXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdFxyXG4gICAgICAgICkpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbHRlcigoc2luZ2xlU2VjdGlvbjogYW55KSA9PiAoKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB8fCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSAmJiAhc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpICkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGxldCBjdXJyZW50U2VjdGlvbkluZGV4OiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoXHJcbiAgICAgIC8vICAgKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PlxyXG4gICAgICAvLyAgICAgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09XHJcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdWydyb2xlJ11cclxuICAgICAgLy8gKTtcclxuICAgICAgLy8gcmVtb3ZlIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyBmcm9tIHF1ZXN0aW9ucyByZXNwb25zZSBsaXN0XHJcbiAgICAgIC8vIGlmIChcclxuICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4ICE9PSB0aGlzLm51bWJlckNvbnN0YW50Lm51bWJlcm1pbnVzMSAmJlxyXG4gICAgICAvLyAgICF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtcclxuICAgICAgLy8gICAgICAgY3VycmVudFNlY3Rpb25JbmRleFxyXG4gICAgICAvLyAgICAgXVxyXG4gICAgICAvLyAgICkgJiZcclxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXHJcbiAgICAgIC8vICAgICAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcclxuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9uTGlzdCddXHJcbiAgICAgIC8vICAgKVxyXG4gICAgICAvLyApIHtcclxuICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtcclxuICAgICAgICAvLyAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcclxuICAgICAgICAvLyBdWydxdWVzdGlvbkxpc3QnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqW1xyXG4gICAgICAgIC8vICAgJ3F1ZXN0aW9uc1Jlc3BvbnNlJ1xyXG4gICAgICAgIC8vIF1bY3VycmVudFNlY3Rpb25JbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcclxuICAgICAgICAvLyAgIChzaW5nbGVMaXN0SXRlbTogYW55KSA9PlxyXG4gICAgICAgIC8vICAgICB0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cclxuICAgICAgICAvLyAgICAgKSB8fFxyXG4gICAgICAgIC8vICAgICAoIXRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAvLyAgICAgICBzaW5nbGVMaXN0SXRlbVsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXVxyXG4gICAgICAgIC8vICAgICApICYmXHJcbiAgICAgICAgLy8gICAgICAgIXNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddKVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXHJcbiAgICAgIC8vICAgJ3F1ZXN0aW9uTGlzdCdcclxuICAgICAgLy8gXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcclxuICAgICAgLy8gICAgICAgJ3F1ZXN0aW9uTGlzdCdcclxuICAgICAgLy8gICAgIF0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoKHNpbmdsZVNlY3Rpb24gOiBhbnkpID0+ICghc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpKTtcclxuICAgICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlTWFzdGVyT2JqOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAvLyAgIGlmIChzaW5nbGVNYXN0ZXJPYmpbJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHtcclxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bXHJcbiAgICAgIC8vICAgICAgICdxdWVzdGlvbkxpc3QnXHJcbiAgICAgIC8vICAgICBdWydxdWVzdGlvbnMnXSA9IFtdO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkodHJ1ZSk7XHJcblxyXG4gICAgICBsZXQgc2VsZWN0ZWREaXNlYXNlcyA6IGFueSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLm1hcCgoc2luZ2xlRGlzZWFzZU9iaiA6IGFueSkgPT4gc2luZ2xlRGlzZWFzZU9ialsndmFsdWUnXSkudG9TdHJpbmcoKTtcclxuICAgICAgLy8gbGV0IHJlcXVlc3Q6IGFueSA9IEpTT04ucGFyc2UoXHJcbiAgICAgIC8vICAgSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgIC8vICAgICB0aGlzLmZldGNoU3ViUXVlc3Rpb25zTGlzdFtcclxuICAgICAgLy8gICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVsncm9sZSddXHJcbiAgICAgIC8vICAgICBdLnRvU3RyaW5nKClcclxuICAgICAgLy8gICApXHJcbiAgICAgIC8vICk7XHJcbiAgICAgIGlmKHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10uaGFzT3duUHJvcGVydHkoJ2FwaVVybCcpICYmIHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10uaGFzT3duUHJvcGVydHkoJ3VybFBhcmFtRm9yRGlzZWFzZScpICYmIHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10uaGFzT3duUHJvcGVydHkoJ3VybFBhcmFtRm9yUGVyc29uVXdJZCcpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXVsnYXBpVXJsJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXVsndXJsUGFyYW1Gb3JEaXNlYXNlJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXVsndXJsUGFyYW1Gb3JQZXJzb25Vd0lkJ10pKSB7XHJcbiAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlLmdldFN1YlF1ZXN0aW9ucyhxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLCBzZWxlY3RlZERpc2Vhc2VzLCB0aGlzLnBlcnNvblV3SWQpLnN1YnNjcmliZShcclxuICAgICAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheShmYWxzZSk7XHJcbiAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YSkpIHtcclxuICAgICAgICAgICAgICBkYXRhLmZvckVhY2goKHN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uW1xyXG4gICAgICAgICAgICAgICAgICAnZG9tYWluVmFsdWVzJ1xyXG4gICAgICAgICAgICAgICAgXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydkb21haW5WYWx1ZXMnXVtcclxuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cclxuICAgICAgICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10gPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxyXG4gICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gZGF0YS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWYgKFxyXG4gICAgICAgICAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXVxyXG4gICAgICAgICAgICAgICAgLy8gICApXHJcbiAgICAgICAgICAgICAgICAvLyApIHtcclxuICAgICAgICAgICAgICAgIC8vICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHN1YkRvbWFpbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnN1Yk1lZGljYWxRdWVzdGlvbnNEb21haW5JbnRlcm5hbFZhbHVlc0xpc3QucHVzaChcclxuICAgICAgICAgICAgICAgIC8vICAgICAgIHN1YkRvbWFpblsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgKTtcclxuICAgICAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xyXG4gICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzdWJRdWVzdGlvbik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgZGF0YS5zb3J0KFxyXG4gICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBkYXRhLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSA9PT0gc3RlcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0ZXA6IDEwMDAgKyBpbmQsXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcclxuICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmpcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cclxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiB0aGlzLnBlcnNvblV3SWQsXHJcbiAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgLy8gbWVyZ2UgbWVkaWNhbCBzdWIgcXVlc3Rpb25zIGludG8gcGVyc29uIHV3IG1haW4gcXVlc3Rpb25zIHJlc3BvbnNlIChyZXF1aXJlZCBmb3Igc2hvdyBxdWVzdGlvbiBmdW5jdGlvbiB0byB3b3JrKVxyXG4gICAgICAgICAgICAgIC8vIGNsZWFyaW5nIG9uIHRvcCBiZWZvcmUgYXBpIGNhbGxcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF1bJ3F1ZXN0aW9uTGlzdCddID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdWydxdWVzdGlvbkxpc3QnXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheShmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXHJcbiAgfVxyXG59XHJcbiIsIlxyXG48ZGl2ICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHF1ZXN0aW9uTGlzdFwiPlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgICFjaGVja0lmVmFsdWVJc0VtcHR5KHNlY3Rpb25bJ3F1ZXN0aW9ucyddKSAmJlxyXG4gICAgICAgIHNlY3Rpb25bJ3Nob3dTZWN0aW9uJ11cclxuICAgICAgXCJcclxuICAgICAgY2xhc3M9XCJjYXJkIHAtMyBtYi00XCJcclxuICAgICAgaWQ9XCJwZXJzb25Vd01lZGljYWxRdWVzdGlvbnNcIlxyXG4gICAgPlxyXG4gICAgICA8aDYgY2xhc3M9XCJwYWdlLXRpdGxlIGJvbGQtbGFiZWxcIj5cclxuICAgICAgICB7eyBnZXRUaXRsZUNhc2Uoc2VjdGlvbltcInNlY3Rpb25OYW1lXCJdKSB9fVxyXG4gICAgICA8L2g2PlxyXG4gICAgICA8bGliLWhyLWxpbmUgW2ZpZWxkXT1cImhvcml6b250YWxMaW5lT2JqXCIgLz5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb25zIG9mIHNlY3Rpb25bJ3F1ZXN0aW9ucyddXCI+XHJcbiAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnXCI+XHJcbiAgICAgICAgICA8aW1nIFtzcmNdPVwicXVlc3Rpb25zWydzYW1wbGVTM0xpbmsnXVwiIGNsYXNzPVwiZC1ibG9jayBteC1hdXRvXCIgW2FsdF09XCJxdWVzdGlvbnNbJ3RpdGxlJ11cIj5cclxuICAgICAgICAgIDxoMyBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uc1sncXVlc3Rpb25UZXh0J11cIj48L2gzPlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFibGUgZC1ibG9ja1wiXHJcbiAgICAgICAgICAgID57eyBxdWVzdGlvbnNbXCJxdWVzdGlvblRleHRcIl0gfX1cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zLm9wdGlvbmFsUXVlc3Rpb24gPT09ICdOJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogI2VlMDAwMFwiXHJcbiAgICAgICAgICAgICAgPiYjNDI7PC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvbGFiZWw+IC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wIG15LTFcIj5cclxuICAgICAgICAgICAgPGxpYi10ZXh0Ym94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoYmx1cik9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIlwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSEVJR0hUSU5QVVQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2FyZC10b3BpYyBkLWJsb2NrIGZpZWxkLWxhYmxlXCJcclxuICAgICAgICAgICAgPkhlaWdodFxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxyXG4gICAgICAgICAgICAgID4mIzQyOzwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImNvbC1hdXRvIHB4LTAgbXktMCBweS0wIGhlaWdodGlucHV0XCJcclxuXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLTEyIG15LTFcIiAqbmdJZj1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBweS0wIGhlaWdodElucHV0c1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi10ZXh0Ym94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddXCIgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J11cIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ11cIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93XCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgcGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXHJcbiAgICAgICAgICAgICAgICBdID09PSAnRkVFVCdcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJyb3cgbXQtMCBwdC0wXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdNQVAnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkcmVzcy1zZWFyY2gtY29udGFpbmVyIG1iLTNcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TG9uZ2l0dWRlPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJsb25naXR1ZGVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBsb25naXR1ZGVcIlxyXG4gICAgICAgICAgc3RlcD1cImFueVwiXHJcbiAgICAgICAgICByZWFkb25seVxyXG4gICAgICAgID5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgY2FyZC10b3BpY1wiPkxhdGl0dWRlPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGxhdGl0dWRlXCJcclxuICAgICAgICAgIHN0ZXA9XCJhbnlcIlxyXG4gICAgICAgICAgcmVhZG9ubHlcclxuICAgICAgICA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICAjYWRkcmVzc0lucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBmb3IgYWRkcmVzc1wiXHJcbiAgICAgICAgKGtleXVwKT1cIm9uQWRkcmVzc0lucHV0S2V5dXAoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZvY3VzKT1cInNob3dEcm9wZG93biA9IHRydWVcIlxyXG4gICAgICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKClcIlxyXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgKm5nSWY9XCJzaG93RHJvcGRvd24gJiYgYWRkcmVzc1N1Z2dlc3Rpb25zLmxlbmd0aCA+IDBcIlxyXG4gICAgY2xhc3M9XCJhdXRvY29tcGxldGUtZHJvcGRvd24gcG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgbXQtMVwiXHJcbiAgICBzdHlsZT1cInotaW5kZXg6IDEwMDA7IG1heC1oZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdy15OiBhdXRvOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgYm9yZGVyLXJhZGl1czogNHB4OyBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLDAsMCwwLjEpO1wiXHJcbiAgPlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdGb3I9XCJsZXQgc3VnZ2VzdGlvbiBvZiBhZGRyZXNzU3VnZ2VzdGlvbnM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcC0yXCJcclxuICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1wiXHJcbiAgICAgIChtb3VzZWRvd24pPVwic2VsZWN0QWRkcmVzcyhzdWdnZXN0aW9uKVwiXHJcbiAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRJbmRleCA9IGlcIlxyXG4gICAgICBbY2xhc3MuYmctbGlnaHRdPVwiaG92ZXJlZEluZGV4ID09PSBpXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj57eyBzdWdnZXN0aW9uLm1haW5fdGV4dCB9fTwvZGl2PlxyXG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgc3VnZ2VzdGlvbi5zZWNvbmRhcnlfdGV4dCB9fTwvc21hbGw+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlN0YXJ0IHR5cGluZyB0byBzZWFyY2ggZm9yIGFkZHJlc3Nlczwvc21hbGw+XHJcbiAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGdvb2dsZS1tYXAgW2NlbnRlcl09XCJjZW50ZXJcIiBbem9vbV09XCJ6b29tXCI+XHJcbiAgICAgICAgICAgICAgPG1hcC1tYXJrZXIgW3Bvc2l0aW9uXT1cImN1cnJlbnRDb29yZGluYXRlc1wiPjwvbWFwLW1hcmtlcj5cclxuICAgICAgICAgICAgPC9nb29nbGUtbWFwPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAocXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcclxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRScpICYmXHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLXJhZGlvIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLW11bHRpcGxlLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiAobmdNb2RlbENoYW5nZSk9XCJ2YWx1ZUNoYW5nZUZvck11bHRpc2VsZWN0KHF1ZXN0aW9ucylcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLWNoZWNrYm94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdEUk9QRE9XTicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1kb2IgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRE9DVVBMT0FEJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItdXBsb2FkIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4iXX0=